2015年6月24日 星期三

Hadoop vs small size files

HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)

http://www.open-open.com/lib/view/1330605869374

一、概述
手机图片或者像淘宝这样的网站中的产品图片特点:
(1)、大量手机用户同时在线,执行上传、下载、read等图片操作
(2)、文件数量较大,大小一般为几K到几十K左右

HDFS存储特点:
(1)      流式读取方式,主要是针对一次写入,多次读出的使用模式。写入的过程使用的是append的方式。
(2)      设计目的是为了存储超大文件,主要是针对几百MB,GB,甚至TB的文件
(3)      该分布式系统构建在普通PC机组成的集群上,大大降低了构建成本,并屏蔽了系统故障,使得用户可以专注于自身的操作运算。

HDFS与小图片存储的共通点和相悖之处:
(1)      都建立在分布式存储的基本理念之上
(2)      均要降低成本,利用普通的PC机构建系统集群

(1)      HDFS不适合大量小文件的存储,因namenode将文件系统的元数据存放在内存中,因此存储的文件数目受限于 namenode的内存大小。HDFS中每个文件、目录、数据块占用150Bytes。如果存放1million的文件至少消耗300MB内存,如果要存 放1billion的文件数目的话会超出硬件能力
(2)      HDFS适用于高吞吐量,而不适合低时间延迟的访问。如果同时存入1million的files,那么HDFS 将花费几个小时的时间。
(3)      流式读取的方式,不适合多用户写入,以及任意位置写入。如果访问小文件,则必须从一个datanode跳转到另外一个datanode,这样大大降低了读取性能。

二、HDFS文件操作流程
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
reading:
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
writing:
 HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
三、HDFS自带的小文件存储解决方案
对于小文件问题,hadoop自身提供了三种解决方案:Hadoop Archive、 Sequence File 和 CombineFileInputFormat
(1)      Hadoop Archive
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
    归档为bar.har文件,该文件的内部结构为:
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)

创建存档文件的问题:
1、存档文件的源文件目录以及源文件都不会自动删除需要手动删除
2、存档的过程实际是一个mapreduce过程,所以需要需要hadoop的mapreduce的支持
3、存档文件本身不支持压缩
4、存档文件一旦创建便不可修改,要想从中删除或者增加文件,必须重新建立存档文件
5、创建存档文件会创建原始文件的副本,所以至少需要有与存档文件容量相同的磁盘空间
(2)      Sequence File
sequence file由一系列的二进制的对组成,其中key为小文件的名字,value的file content。
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
创建sequence file的过程可以使用mapreduce工作方式完成
对于index,需要改进查找算法
对小文件的存取都比较自由,也不限制用户和文件的多少,但是该方法不能使用append方法,所以适合一次性写入大量小文件的场景
(3)      CombineFileInputFormat
CombineFileInputFormat是一种新的inputformat,用于将多个文件合并成一个单独的split,另外,它会考虑数据的存储位置。
该方案版本比较老,网上资料甚少,从资料来看应该没有第二种方案好。

四、WebGIS解决方案概述
在地理信息系统中,为了方便传输通常将数据切分为KB大小的文件存储在分布式文件系统中,论文结合WebGIS数据的相关特征,将相邻地理位置的小 文件合并成一个大的文件,并为这些文件构建索引。论文中将小于16MB的文件当做小文件进行合并处理,将其合并成64MB的block并构建索引。
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
从以上索引结构和文件存储方式可以看出,index是一般的定长hash索引,并且采用的是存储全局index文件的方式
read的过程是将小文件append到下文件后边,然后更新索引的过程
delete文件的过程采用lazy模式,更改的是FVFlag,在空间重新分配的过程中,才会根据该flag删除文件。

五、BlueSky解决方案概述
BlueSky是中国电子教学共享系统,主要存放的教学所用的ppt文件和视频文件,存放的载体为HDFS分布式存储系统。在用户上传PPT文件的 同时,系统还会存储一些文件的快照,作为用户请求ppt时可以先看到这些快照,以决定是否继续浏览,用户对文件的请求具有很强的关联性,当用户浏览ppt 时,其他相关的ppt和文件也会在短时间内被访问,因而文件的访问具有相关性和本地性。
paper主要提出了两个基本观点:
(1)      将属于同一课件的小文件合并成一个大文件,从而减轻namenode的压力,提高小文件的存储效率
(2)      提出了一种两级预取机制以提高小文件的读取效率,(索引文件预取和数据文件预取)索引文件预取是指当用户访问某个文件时,该文件 所在的block对应的索引文件被加载到内存中,这样,用户访问这些文件时不必再与namenode交互了。数据文件预取是指用户访问某个文件时,将该文 件所在课件中的所有文件加载到内存中,这样,如果用户继续访问其他文件,速度会明显提高。
BlueSky上传文件的过程:
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
BlueSky阅览文件的过程:
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
文件合并:
文件合并过程如果合并之后文件的大小小于block64MB的大小则直接存放到一个block中。(合并之后的文件包括local index文件)
如果合并之后的文件大小大于64MB有两种方式split这个大文件:
1、                 local index文件、ppt文件、standresolution picture series存放在一个block中,剩下的picture series存在在其他的block中。
2、                 在相邻block的连接处填充空白文件,具体过程:
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
文件映射:
文件的命名方式,分离的预取图片有其自身的命名方式,具体见paper。文件映射过程中,除了block中的局部索引文件之外,还有一个全局映像文 件。该文件存放的内容为
根据全局mapping table 就可以根据merged file name 和 block Id到namenode上得到datanode的信息,然后到根据到具体的机器上找到相应的block获取到localindex file,根据original file name从local index file中查到从而定位到data。根据预取策略,在此过程中也会预取到local index file 和相关的file

六、facebookHayStack解决方案概述
 HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
haystack是一个不同于HDFS的分布式系统,如果想在HDFS的基础上构建小文件存储系统,个人认为可以参考借鉴其索引结构的设计。
1、  directory 中有logical volume  id<->physicalvolume id。根据可以通过directory拼出来http:////id>/ 。 因此在directory端存在着映射以及映射
2、  根据url到store端之后,可以根据logicalvolume id获得相应的physical volume的位置,然后physical中存在super block,根据映射可以得到photo数据
七、TFS解决方案概述
TFS(Taobao !FileSystem)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,它构筑在普通的Linux机器 集群上,可为外部提供高可靠和高并发的存储访问。TFS为淘宝提供海量小文件存储,通常文件大小不超过1M,满足了淘宝对小文件存储的需求,被广泛地应用 在淘宝各项应用中。它采用了HA架构和平滑扩容,保证了整个文件系统的可用性和扩展性。同时扁平化的数据组织结构,可将文件名映射到文件的物理地址,简化 了文件的访问流程,一定程度上为TFS提供了良好的读写性能。
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
TFS的块大小可以通过配置项来决定,通常使用的块大小为64M。TFS的设计目标是海量小文件的存储,所以每个块中会存储许多不同的小文 件。!DataServer进程会给Block中的每个文件分配一个ID(File ID,该ID在每个Block中唯一),并将每个文件在Block中的信息存放在和Block对应的Index文件中。这个Index文件一般都会全部 load在内存,除非出现!DataServer服务器内存和集群中所存放文件平均大小不匹配的情况。
TFS中之所以可以使用namenode存放元数据信息的一个原因在于不像HDFS的元数据需要存放,filename与block id的映射以及block id与datanode的映射。在TFS中没有file的概念,只有block 的映射信息。所有的小文件被拼接成block。所以namenode中只需要存放的映射以及的映射。这样一来元数据信息就会减少很多,从而解决HDFS的namenode的瓶颈问题。
在TFS中,将大量的小文件(实际用户文件)合并成为一个大文件,这个大文件称为块(Block)。TFS以Block的方式组织文件的存储。每一 个Block在整个集群内拥有唯一的编号,这个编号是由NameServer进行分配的,而DataServer上实际存储了该Block。 在!NameServer节点中存储了所有的Block的信息,一个Block存储于多个!DataServer中以保证数据的冗余。对于数据读写请求, 均先由!NameServer选择合适的!DataServer节点返回给客户端,再在对应的!DataServer节点上进行数据操 作。!NameServer需要维护Block信息列表,以及Block与!DataServer之间的映射关系,其存储的元数据结构如下:
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
八、一种提高云存储小文件效率的解决方案
(美国西北太平洋国家实验室2007年的一份研究报告表明,他们系统中有1 200万个文件,其中94%的文件小于64 MB,58%的小于64 kB。在一些具体的科研计算环境中,也存在大量的小文件,例如,在某些生物学计算中可能会产生3 000万个文件,而其平均大小只有190 kB。)
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
系统为每个用户建立了3种队列:
序列文件队列(SequenceFile queue,SFQ),
序列文件操作队列(SequenceFile operation queue,SFOQ),
备用队列(Backup queue,BQ)。
其中,SFQ用于小文件的合并,SFOQ用于对合并后小文件的操作,BQ用于操作的小文件数超过SFQ或SFOQ长度的情况。
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)







Hadoop小文件问题

http://www.gfzj.us/series/small-files/2015/01/06/hadoop-small-file.html
海量小文件对于Hadoop来说是一个灾难。如果不可避免的要使用Hadoop处理小文件,此处提供一些方案。

Problems with small files and HDFS

小文件是指那些文件大小比HDFS block size(默认64M)小很多的文件。每个小文件即使size很小,仍旧会占用一个block,不会多个小文件共用一个block。如果你在使用Hadoop时需要存储小文件,那么就意味着你可能有很多小文件,否则不会选择使用Hadoop。但是,问题就在于HDFS不能处理大量的文件。
HDFS中每一个文件、目录或是block在namenode的内存中都对应一个对象,每个对象占用150个字节,因此,一千万个小文件,每个占用一个block,那么namenode就要消耗大约2G的内存。如果有更多的小文件,意味着namenode需要消耗更多的内存,而现有的计算机硬件可能会难以满足相应需求,且会导致集群难以扩展。
另外,HDFS并不是为了有效地访问小文件而设计的:其初衷是为了流式访问大文件。如果访问大量小文件,需要执行大量的seeks操作,并需要不断地从一个datanode跳到另一个datanode,从而获取每个小文件,然而,上述每个操作都是低效的数据访问方式。

Problems with small files and MapReduce

Map tasks通常是以block为单位进行数据的处理。如果文件非常小且文件数量极大,那么每个map task处理的数据就非常少,且需要启动大量的map tasks,而记录每个map task信息(bookkeeping)也需要一定的开销。举个例子:一个是单独的1GB的文件,在HDFS中存储到16个64MB blocks;另一个是10000个100KB的小文件,大约共1GB。这10000个文件每个都用一个map task处理,那么处理这些文件所需的时间要比第一种情况慢上十倍甚至百倍。
Hadoop提供了一些方法用于减少bookkeeping带来的开销:设置mapred.job.reuse.jvm.num.tasks属性,允许一个JVM同时执行多个map tasks,以这种重用task JVM的方式减少启动多个JVM的开销;使用MultiFileInputSplit,每个map task可处理多个blocks数据。
PS: bookkeeping是指在一个job的初始化阶段记录每个task的状态和进度。

One Example

一个非常典型的小文件案例就是存储海量图片,每个图片是一个单独的小文件,这种情况就需要使用一个容器把图片进行分组打包存储。

HAR files

为了缓解大量小文件带给namenode内存的压力,Hadoop 0.18.0引入了Hadoop Archives(HAR files),其本质就是在HDFS之上构建一个分层文件系统。通过执行hadoop archive命令就可以创建一个HAR文件。在命令行下,用户可使用一个以har://开头的URL就可以访问HAR文件中的小文件。使用HAR files可以减少HDFS中的文件数量。
下图为HAR文件的文件结构,可以看出来访问一个指定的小文件需要访问两层索引文件才能获取小文件在HAR文件中的存储位置,因此,访问一个HAR文件的效率可能会比直接访问HDFS文件要低。对于一个MapReduce任务来说,如果使用HAR文件作为其输入,仍旧是其中每个小文件对应一个Map task,效率低下。所以,HAR files最好是用于文件归档。
HAR File Layout

Sequence Files

除了HAR files,另一种可选是SequenceFile,其核心是以文件名为key、文件内容为value组织小文件。回到之前提到的10000个100KB大小的文件,你可以编写程序将这些文件放到一个SequenceFile文件,然后就以数据流的方式处理这些文件,也可以使用MapReduce进行处理。一个SequenceFile是可分割的,所以MapReduce可将文件切分成块,每一块独立操作。不像HARs,SequenceFile支持压缩。在大多数情况下,以block为单位进行压缩是最好的选择,因为一个block包含多条记录,压缩作用在block之上,比Record压缩方式(一条一条记录进行压缩)的压缩比高。
把已有的数据转存为SequenceFile比较慢。比起先写小文件,再将小文件写入SequenceFile,一个更好的选择是直接将数据写入一个SequenceFile文件,省去小文件作为中间媒介。
下图为SequenceFile的文件结构。HAR files可以列出所有keys,但是SequenceFile是做不到的,因此,在访问时,只能从文件头顺序访问。
SequenceFile File Layout

HBase

HBase也可用于存储小文件,前提是文件真的很小。

个人总结

对于海量小文件,该如何处理:
  1. 如果文件大小能保证在一个较小的范围内,使用HBase
  2. 如果小文件的大小不能保证,考虑将文件直接写入HDFS,并在HBase中存储其实际地址
  3. 如果小文件是每天都产生,那么可以考虑使用HAR files或者SequenceFile(或基于其的方式,如MapFile),并将源文件删除,在HBase中存储实际地址。
如果用户需要通过HBase中的地址访问存储在HDFS中的小文件,那么就需要写相关服务来提供该功能了。



http://blog.chinaunix.net/uid-20577907-id-3989644.html
一、概述
首先明确概念,这里的小文件是指小于HDFS系统Block大小的文件(默认64M),如果使用HDFS存储大量的小文件,将会是一场灾难,这取决于HDFS的实现机制和框架结构,每一个存储在HDFS中的文件、目录和块映射为一个对象存储在NameNode服务器内存中,通常占用150个字节。如果有1千万个文件,就需要消耗大约3G的内存空间。如果是10亿个文件呢,简直不可想象。这里需要特别说明的是,每一个小于Block大小的文件,存储是实际占用的存储空间仍然是实际的文件大小,而不是整个block大小
  为解决小文件的存储Hadoop自身提供了两种机制来解决相关的问题,包括HAR和SequeueFile,这两种方式在某些方面解决了本层面的问题,单仍然存在着各自的不足。下文讲详细说明。
二、Hadoop HAR
  Hadoop Archives (HAR files) ,这个特性从Hadoop 0.18.0版本就已经引入了,他可以将众多小文件打包成一个大文件进行存储,并且打包后原来的文件仍然可以通过Map-reduce进行操作,打包后的文件由索引和存储两大部分组成,索引部分记录了原有的目录结构和文件状态。其原理如下图所示:


  缺点:
  1. HAR 方式虽然能够实现NameNode内存空间的优化,但是他是一个人工干预的过程,同时他既不能够支持自动删除原小文件,也不支持追加操作,当有新文件进来以后,需要重新打包。
  2. HAR files一旦创建就不能修改,要做增加和修改文件必须重新打包。事实上,这对那些写后便不能改的文件来说不是问题,因为它们可以定期成批归档,比如每日或每周。
  3. HAR files目前还不支持文档压缩。
三、SequeuesFile
  Sequence file由一系列的二进制key/value组成,如果key为小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。Hadoop-0.21.0版本开始中提供了SequenceFile,包括Writer,Reader和SequenceFileSorter类进行写,读和排序操作。该方案对于小文件的存取都比较自由,不限制用户和文件的多少,支持Append追加写入,支持三级文档压缩(不压缩、文件级、块级别)。其存储结构如下图所示:
示例代码如下所示:
  private static void writeTest(FileSystem fs, int count, int seed, Path file,
                                CompressionType compressionType, CompressionCodec codec)
    throws IOException {
    fs.delete(file, true);
    LOG.info("creating " + count + " records with " + compressionType +
             " compression");
  //指明压缩方式
    SequenceFile.Writer writer =
      SequenceFile.createWriter(fs, conf, file,
                                RandomDatum.class, RandomDatum.class, compressionType, codec);
    RandomDatum.Generator generator = new RandomDatum.Generator(seed);
    for (int i = 0; i < count; i++) {
      generator.next();
  //keyh
      RandomDatum key = generator.getKey();
  //value
      RandomDatum value = generator.getValue();
  //追加写入
      writer.append(key, value);
    }
    writer.close();
  }
  缺点:
  目前为止只发现其Java版本API支持,未在其他开发接口中发现相关版本的实现,尤其是LibHDFS和thrift接口中,可能真是C++阵营狂热支持者的一个悲剧。
四、Hbase
  如果你需要处理大量的小文件,并且依赖于特定的访问模式,可以采用其他的方式,比如Hbase。Hbase以MapFiles存储文件,并支持Map/Reduce格式流数据分析。对于大量小文件的处理,也不失为一种好的选择。



Hadoop关于处理大量小文件的问题和解决方法

http://os.51cto.com/art/201310/413719.htm

小文件指的是那些size比HDFS的block size(默认64M)小的多的文件。如果在HDFS中存储小文件,那么在HDFS中肯定会含有许许多多这样的小文件(不然就不会用hadoop了)。而HDFS的问题在于无法很有效的处理大量小文件。
小文件指的是那些size比HDFS的block size(默认64M)小的多的文件。如果在HDFS中存储小文件,那么在HDFS中肯定会含有许许多多这样的小文件(不然就不会用hadoop了)。而HDFS的问题在于无法很有效的处理大量小文件。
任何一个文件,目录和block,在HDFS中都会被表示为一个object存储在namenode的内存中,没一个object占用150 bytes的内存空间。所以,如果有10million个文件,没一个文件对应一个block,那么就将要消耗namenode 3G的内存来保存这些block的信息。如果规模再大一些,那么将会超出现阶段计算机硬件所能满足的极限。
不仅如此,HDFS并不是为了有效的处理大量小文件而存在的。它主要是为了流式的访问大文件而设计的。对小文件的读取通常会造成大量从datanode到datanode的seeks和hopping来retrieve文件,而这样是非常的低效的一种访问方式。
大量小文件在mapreduce中的问题
Map tasks通常是每次处理一个block的input(默认使用FileInputFormat)。如果文件非常的小,并且拥有大量的这种小文件,那么每一个map task都仅仅处理了非常小的input数据,并且会产生大量的map tasks,每一个map task都会消耗一定量的bookkeeping的资源。比较一个1GB的文件,默认block size为64M,和1Gb的文件,没一个文件100KB,那么后者没一个小文件使用一个map task,那么job的时间将会十倍甚至百倍慢于前者。
hadoop中有一些特性可以用来减轻这种问题:可以在一个JVM中允许task reuse,以支持在一个JVM中运行多个map task,以此来减少一些JVM的启动消耗(通过设置mapred.job.reuse.jvm.num.tasks属性,默认为1,-1为无限制)。另一种方法为使用MultiFileInputSplit,它可以使得一个map中能够处理多个split。
为什么会产生大量的小文件?
至少有两种情况下会产生大量的小文件
1.这些小文件都是一个大的逻辑文件的pieces。由于HDFS仅仅在不久前才刚刚支持对文件的append,因此以前用来向unbounde files(例如log文件)添加内容的方式都是通过将这些数据用许多chunks的方式写入HDFS中。
2.文件本身就是很小。例如许许多多的小图片文件。每一个图片都是一个独立的文件。并且没有一种很有效的方法来将这些文件合并为一个大的文件
这两种情况需要有不同的解决方式。对于第一种情况,文件是由许许多多的records组成的,那么可以通过件邪行的调用HDFS的sync()方法(和append方法结合使用)来解决。或者,可以通过些一个程序来专门合并这些小文件(see Nathan Marz’s post about a tool called the Consolidator which does exactly this)。
对于第二种情况,就需要某种形式的容器来通过某种方式来group这些file。hadoop提供了一些选择:
HAR files
Hadoop Archives (HAR files)是在0.18.0版本中引入的,它的出现就是为了缓解大量小文件消耗namenode内存的问题。HAR文件是通过在HDFS上构建一个层次化的文件系统来工作。一个HAR文件是通过hadoop的archive命令来创建,而这个命令实 际上也是运行了一个MapReduce任务来将小文件打包成HAR。对于client端来说,使用HAR文件没有任何影响。所有的原始文件都 visible && accessible(using har://URL)。但在HDFS端它内部的文件数减少了。
通过HAR来读取一个文件并不会比直接从HDFS中读取文件高效,而且实际上可能还会稍微低效一点,因为对每一个HAR文件的访问都需要完成两层index文件的读取和文件本身数据的读取(见上图)。并且尽管HAR文件可以被用来作为MapReduce job的input,但是并没有特殊的方法来使maps将HAR文件中打包的文件当作一个HDFS文件处理。可以考虑通过创建一种input format,利用HAR文件的优势来提高MapReduce的效率,但是目前还没有人作这种input format。需要注意的是:MultiFileInputSplit,即使在HADOOP-4565的改进(choose files in a split that are node local),但始终还是需要seek per small file。
Sequence Files
通常对于“the small files problem”的回应会是:使用SequenceFile。这种方法是说,使用filename作为key,并且file contents作为value。实践中这种方式非常管用。回到10000个100KB的文件,可以写一个程序来将这些小文件写入到一个单独的SequenceFile中去,然后就可以在一个streaming fashion(directly or using mapreduce)中来使用这个sequenceFile。不仅如此,SequenceFiles也是splittable的,所以mapreduce可以break them into chunks,并且分别的被独立的处理。和HAR不同的是,这种方式还支持压缩。block的压缩在许多情况下都是最好的选择,因为它将多个records压缩到一起,而不是一个record一个压缩。
将已有的许多小文件转换成一个SequenceFiles可能会比较慢。但是,完全有可能通过并行的方式来创建一个一系列的SequenceFiles。(Stuart Sierra has written a very useful post about converting a tar file into a SequenceFile—tools like this are very useful)。更进一步,如果有可能最好设计自己的数据pipeline来将数据直接写入一个SequenceFile。
【编辑推荐】

2014年5月20日 星期二

網路服務第三方認證

OAUTH (http://oauth.net/) - An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications.

Yahoo OAuth (https://developer.yahoo.com/oauth/guide/oauth-guide.html)

一步一步搭建OAuth認證伺服器 
-- http://fecbob.pixnet.net/blog/post/38124119-%5Bphp%5D-%E4%B8%80%E6%AD%A5%E4%B8%80%E6%AD%A5%E6%90%AD%E5%BB%BAoauth%E8%AA%8D%E8%AD%89%E4%BC%BA%E6%9C%8D%E5%99%A8

Authorization for Google Services
-https://developers.google.com/apps-script/guides/services/authorization

OAuth - Open Authorization 開放式授權協定

http://blog.masterstudio101.com/2013/04/24/OAuth%20-%20Open%20Authorization%20%E9%96%8B%E6%94%BE%E5%BC%8F%E6%8E%88%E6%AC%8A%E5%8D%94%E5%AE%9A


詳細RFC6749內容請參考 http://tools.ietf.org/html/rfc6749

下面列出知名網站的OAuth 2.0的網址(URLs)
Google
  https://accounts.google.com/o/oauth2/auth
  https://accounts.google.com/o/oauth2/token
  https://www.googleapis.com/oauth2/v1
Facebook
  https://www.facebook.com/dialog/oauth
  https://graph.facebook.com/oauth/access_token
  https://graph.facebook.com
StackExchange (https://api.stackexchange.com/docs/authentication)
  https://stackexchange.com/oauth
  https://stackexchange.com/oauth/access_token
  https://api.stackexchange.com/2.0
Github
  https://github.com/login/oauth/authorize
  https://github.com/login/oauth/access_token
  https://api.github.com


另外補充, OAuth與OpenID (Google, PayPal, VeriSign)最大不同在於, OAuth是進行資源的授權(Authorization), 而OpenID是進行身份的驗證(Authentication), 兩者並不衝突更可予以整合應用, 有關OpenID細節容study後再分享. 

Reference 參考資料:
OAuth協定與運作流程 http://cire.pixnet.net/blog/post/308107... 
OAuth和OpenID http://sinkwung.blogspot.tw/... 
OAuth 參數說明 http://www.dotblogs.com.tw/regionbbs/... 

Resources 資源:
OAuth 官方網站 http://oauth.net/ 
OAuth 2.0官方網站 http://oauth.net/2 
RFC6749 http://tools.ietf.org/html/rfc6749
Yahoo Developer Network http://developer.yahoo.com
StackExchange OAuth https://api.stackexchange.com/docs/authentication  
Using OAuth 2.0 to access Google APIhttps://developers.google.com/accounts/docs/OAuth2  
Facebook Authenticationhttps://developers.facebook.com/docs/authentication
Windows Live oAuth 2.0 http://msdn.microsoft.com/en-us/library/live/hh243647.aspx 
Wiki OAuth http://zh.wikipedia.org/wiki/OAuth 
  • 漫談OAuth認證協定與運作流程 
  • - http://cire.pixnet.net/blog/post/30810748-%E6%BC%AB%E8%AB%87oauth%E8%AA%8D%E8%AD%89%E5%8D%94%E5%AE%9A%E8%88%87%E9%81%8B%E4%BD%9C%E6%B5%81%E7%A8%8B

2014年5月5日 星期一

ubuntu如何備份和恢復

source: http://www.itkee.com/os/detail-1476.html

 在 使用Ubuntu之前,相信很多人都有過使用Windows系統的經歷。如果你備份過Windows系統,那麼你一定記憶猶新:首先需要找到一個備份工 具(通常都是私有軟件),然後重啓電腦進入備份工具提供的軟件環境,在這裏備份或者恢復Windows系統。Norton Ghost是備份Windows系統時經常使用的備份工具。
在備份Windows系統的時候你可能想過,我能不能把整個C盤都放到一個ZIP文件裏去呢。這在Windows下是不可能的,因爲在Windows中有很多文件在它們運行時是不允許拷貝或覆蓋的,因此你需要專門的備份工具對Windows系統進行特殊處理。
和 備份Windows系統不同,如果你要備份Ubuntu系統(或者其它任何Linux系統),你不再需要像Ghost這類備份工具。事實上,Ghost 這類備份工具對於Linux文件系統的支持很糟糕,例如一些Ghost版本只能完善地支持Ext2文件系統,如果你用它來備份Ext3文件系統,你可能會 丟失一些寶貴的數據。
1. 備份系統
我該如何備份我的Ubuntu系統呢?很簡單,就像你備份或壓縮其它東西一樣,使用TAR。和Windows不同,Linux不會限制root訪問任何東西,你可以把分區上的所有東西都扔到一個TAR文件裏去!
首先成爲root用戶:
$ sudo su
然後進入文件系統的根目錄(當然,如果你不想備份整個文件系統,你也可以進入你想要備份的目錄,包括遠程目錄或者移動硬盤上的目錄):
# cd /
下面是我用來備份系統的完整命令:
# tar cvpzf backup.tgz Cexclude=/proc Cexclude=/lost+found Cexclude=/backup.tgz Cexclude=/mnt Cexclude=/sys /
讓我們來簡單看一下這個命令:
“tar”當然就是我們備份系統所使用的程序了。
“cvpfz”是tar的選項,意思是“創建檔案文件”、“保持權限”(保留所有東西原來的權限)、“使用gzip來減小文件尺寸”。
“backup.gz”是我們將要得到的檔案文件的文件名。
“/”是我們要備份的目錄,在這裏是整個文件系統。
在 檔案文件名“backup.gz”和要備份的目錄名“/”之間給出了備份時必須排除在外的目錄。有些目錄是無用的,例如“/proc”、“/lost+ found”、“/sys”。當然,“backup.gz”這個檔案文件本身必須排除在外,否則你可能會得到一些超出常理的結果。如果不把“/mnt”排 除在外,那麼掛載在“/mnt”上的其它分區也會被備份。另外需要確認一下“/media”上沒有掛載任何東西(例如光盤、移動硬盤),如果有掛載東西, 必須把“/media”也排除在外。
有人可能會建議你把“/dev”目錄排除在外,但是我認爲這樣做很不妥,具體原因這裏就不討論了。
執行備份命令之前請再確認一下你所鍵入的命令是不是你想要的。執行備份命令可能需要一段不短的時間。
備份完成後,在文件系統的根目錄將生成一個名爲“backup.tgz”的文件,它的尺寸有可能非常大。現在你可以把它燒錄到DVD上或者放到你認爲安全的地方去。
在備份命令結束時你可能會看到這樣一個提示:’tar: Error exit delayed from previous errors’,多數情況下你可以忽略它。
你還可以用Bzip2來壓縮文件,Bzip2比gzip的壓縮率高,但是速度慢一些。如果壓縮率對你來說很重要,那麼你應該使用Bzip2,用“j”代替命令中的“z”,並且給檔案文件一個正確的擴展名“bz2”。完整的命令如下:
# tar cvpjf backup.tar.bz2 Cexclude=/proc Cexclude=/lost+found Cexclude=/backup.tar.bz2 Cexclude=/mnt Cexclude=/sys /
2. 恢復系統
在進行恢復系統的操作時一定要小心!如果你不清楚自己在做什麼,那麼你有可能把重要的數據弄丟,請務必小心!
接着上面的例子。切換到root用戶,並把文件“backup.tgz”拷貝到分區的根目錄下。
在 Linux中有一件很美妙的事情,就是你可以在一個運行的系統中恢復系統,而不需要用boot-cd來專門引導。當然,如果你的系統已經掛掉不能啓動了, 你可以用Live CD來啓動,效果是一樣的。你還可以用一個命令把Linux系統中的所有文件幹掉,當然在這裏我不打算給出這個命令!
使用下面的命令來恢復系統:
# tar xvpfz backup.tgz -C /
如果你的檔案文件是使用Bzip2壓縮的,應該用:
# tar xvpfj backup.tar.bz2 -C /
注意:上面的命令會用檔案文件中的文件覆蓋分區上的所有文件。
執行恢覆命令之前請再確認一下你所鍵入的命令是不是你想要的,執行恢覆命令可能需要一段不短的時間。
恢覆命令結束時,你的工作還沒完成,別忘了重新創建那些在備份時被排除在外的目錄:
# mkdir proc
# mkdir lost+found
# mkdir mnt
# mkdir sys
等等
當你重啓電腦,你會發現一切東西恢復到你創建備份時的樣子了!


http://blog.riaproject.com/server-setting/1305/%E7%B0%A1%E6%98%93%E5%82%99%E4%BB%BDubuntu%E7%B3%BB%E7%B5%B1%E7%9A%84%E6%96%B9%E6%B3%95.html

方法2: 用Sbackup軟體來做

用GUI介面是對指令模式非常排斥,或是懶人所設計的,
其實所做的工作跟方法1是相同的,
只是這次多了UI介面給你用,點一點按一按就可以了。
sbackup

2014年3月30日 星期日

防火牆技術

穿越防火牆技術

1. (穿越防火牆技術) http://www.cs.nccu.edu.tw/~lien/Writing/NGN/firewall.htm
2. Libnice (http://nice.freedesktop.org/wiki/)
3. PJNATH - Open Source ICE, STUN, and TURN Library (http://www.pjsip.org/pjnath/docs/html/index.htm)
4. The TCP/IP guide (http://www.tcpipguide.com/free/t_IPNetworkAddressTranslationNATProtocol.htm)
5.NAT Traversal and Peer to Peer (http://lab.howie.tw/2012/07/Peer-to-Peer-and-NAT-Traversal.html)
6.



Code Reference
1. Google libjingle (https://developers.google.com/talk/libjingle/?hl=zh-TW&csw=1)
2. STUNT (http://nutss.gforge.cis.cornell.edu/jstunt-examples.php)
3. PJNATH (http://www.pjsip.org/pjnath/docs/html/index.htm)

Difference Between NAT and Proxy

Source: http://www.differencebetween.com/difference-between-nat-and-vs-proxy/

NAT vs Proxy 
Network Address Translation (NAT) is the process that modifies the IP address in a header of an IP packet, while it is travelling through a routing device. NAT allows one set of IP addresses to be used for traffic within a LAN (Local Area Network) and another set of IP addresses for outside traffic. One to one transformation of IP addresses are provided by the simplest form of NAT. Proxy (proxy server) is a server that is located between a client (who is looking for a resource) and some other server and acts as a mediator. The client requesting the resource connects to the proxy server and the proxy evaluates the request based on its filtering rules.

What is NAT?
NAT modifies IP address in a header of an IP packet, while it is travelling through a routing device. NAT allows one set of IP addresses to be used for traffic within a LAN and another set of IP addresses for outside traffic. One to one transformation of IP addresses are provided by the simplest form of NAT. NAT has several advantages. It improves the security of a LAN since it provides the option to hide internal IP addresses. Furthermore, as the IP addresses are only used internally, it will not cause any conflicts with IP addresses used in other organizations. Also, using a single internet connection for all the computers in a LAN is made possible by NAT. NAT works with the use of a NAT box, which is situated in the interface where the LAN is connected to the internet. It contains a set of valid IP addresses and it is responsible for performing the IP address translations.

What is a Proxy?
Proxy is a server that is located between a client (that is looking for a resource) and some other server and acts as a mediator. The client requesting the resource connects to the proxy server and the proxy evaluates the request based on its filtering rules. If the request is validated, proxy connects to the server and provides the requested resource to the client. On the other hand, proxy may satisfy the client’s request without going to the specified server. For this, the proxy uses a cache and any of the subsequent requests for the same resource are satisfied without contacting the specified server. Due to this, proxies can improve the performance greatly. Furthermore, proxies can be used to filter requests and prevent accessing some web sites.

What is the difference between NAT and Proxy?
NAT modifies IP address in a header of an IP packet, while it is travelling through a routing device and allows to use a different set of IP addresses for traffic within a LAN than the set of IP addresses for outside traffic, while a proxy is a server that is located between a client and some other server and acts as a mediator. NAT does not need any special application software to operate, whereas applications behind a proxy server must support proxy services and should be configured to use the proxy server.


Read more: http://www.differencebetween.com/difference-between-nat-and-vs-proxy/#ixzz2xVQ3TG5i

2014年1月27日 星期一

Ubuntu 遠端桌面畫面問題

Source:http://blog.snowtec.org/2009/05/ubuntu-904-vnc-problem/

Ubuntu內建了遠端桌面功能 (也就是VNC Server),在「系統→偏好設定→遠端桌面」可以進行開啟與其他設定。
不過最近我遇到了一個相當奇怪的Bug…連線成功之後,系統卻不會將畫面更新,總是停留在第一個畫格。雖然動作事件都有送到被控端,但在看不到螢幕反應的情況下使用上實在是有點…不,是十分困難啊!遇到這種事情當然我們還是要求助於Google大神,然後很幸運的我得到了解答。
這個Bug的發生時機是,你使用nVidia的顯示卡,然後也啟用了Compiz (也就是桌面特效)。Xwindow有個功能叫XDamage,在做VNC連線時可以只傳送桌面上改變的部份的畫面 (例如,你移動的視窗),進而減少使用網路傳輸量。但不知為什麼,遇到受限制的nVidia驅動程式加上Compiz,這個功能就會壞掉,變成client一旦連上之後畫面就不會更新,永遠卡在第一個frame。
在 Launchpad 已經有網友提出這個bug,也已經有解決辦法了。
解決方案有:
  1. 不使用VNC。 (這…)
  2. 完全關閉桌面特效。
    ubuntu桌面特效
  3. 使用別的VNC軟體,例如:x11vnc:
    $ sudo apt-get install x11vnc
    $ x11vnc –noxdamage –passwd 密碼 -forever
  4. 安裝修正包:
    Launchpad上已經放出了修正過後的Vino (內建的VNC Server),到 這裡 可以下載更新過後的版本。
    安裝完畢之後,按「Alt+F2」執行「gconf-editor」,把鍵值
    「/desktop/gnome/remote_access/disable_xdamage」修改為true (勾起來的意思),再到選單中啟動遠端桌面。
    gconfeditor遠端連線修改
雖然說這樣會影響連線品質,不過目前似乎是沒有更好的解法,我也不敢保證我的是最好最恰當的解法,所以如果有什麼意見的話也歡迎留言跟我說。
到這裡你的VNC應該就可以順利、快樂、至少不會停格的連線了。

2014年1月5日 星期日

3C應用

1. 你的手機就是最高檔的行車記錄器

2. 只是手寫何必買 Wacom?手機免費變身無線手寫板!
3. 將#可穿戴設備#與汽車駕駛結合起來,現代汽車正開發一款#Google Glass#應用來操控汽車
4. HTC Mini+ – 超越配件等級的多功能智慧小手機
7. 輕便旅行隨身好物 i-FlashDrive雙頭龍Android特別版
8. Smart Sign Language Interpreter智慧型手語翻譯 聽障人士代言人
9. 2014 CES 大預測:別管 Google Glass 了,穿戴式科技大舉入侵健康照護和健身領域!
10. Google再次聚焦家庭能源使用的追踪,正在測試連接到網絡的智能恆溫器
11. 想讓傳統家電變智能?只需配一個智能插座就行!Plugaway 推智能插座及智能LED燈