ria的强力后盾:rest+海量存储

58
RIA 的强力后盾: REST+ 海量存储 54chen@QClub http://www.54chen.com 2010.7

Upload: zhen-chen

Post on 24-Jul-2015

925 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Ria的强力后盾:rest+海量存储

RIA的强力后盾: REST+海量存储54chen@QClub

http://www.54chen.com2010.7

Page 2: Ria的强力后盾:rest+海量存储

学佛越久 离佛越远

Page 3: Ria的强力后盾:rest+海量存储

1999 html 2000 cgi 2001 asp 2002 xhtml 2003 flash 2004 ajax 2005 php perl java 2006~now RIA

Page 4: Ria的强力后盾:rest+海量存储

FE html ajax flash flex air silverlight... BE cgi perl asp php asp.net java c c++ WEB server PWS IIS apache tomcat resin jboss oc4j 

lighttpd nginx

Page 5: Ria的强力后盾:rest+海量存储

"学了这么久 你有多远了? " "你还记得大明湖畔的 POST GET DELETE PUT吗? "

Page 6: Ria的强力后盾:rest+海量存储

REST

Page 7: Ria的强力后盾:rest+海量存储

Roy T. Fielding在他的博士学位论文中定义了术语REST http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htmhttp://www.redsaga.com/opendoc/REST_cn.pdf

Page 8: Ria的强力后盾:rest+海量存储

"Roy是谁? " "Roy是 HTTP和 URIs的设计者,是许多基本Web协议的主要设计者。 "

Page 9: Ria的强力后盾:rest+海量存储

什么是 REST

Page 10: Ria的强力后盾:rest+海量存储

什么是 REST

网络上的所有事物都被抽象为资源( resource );

每个资源对应一个唯一的资源标识( resource identifier );

通过通用的连接器接口( generic connector interface )对资源进行操作;

对资源的各种操作不会改变资源标识; 所有的操作都是无状态的( stateless)。

Page 11: Ria的强力后盾:rest+海量存储

什么是 REST

URI标识资源 幂等性保证了你可以简单地再发送一次请求解决问题

POST方法既不安全也不具有幂等性 所有资源使用了同样的接口

Page 12: Ria的强力后盾:rest+海量存储

你可能认为你的应用包含了超出这些操作表达范围的逻辑。

请允许我花费一些时间来让你相信不存在这样的情况。

Page 13: Ria的强力后盾:rest+海量存储

REST例子

http://example.com/customers/1234

http://example.com/orders/2007/10/776654

http://example.com/products/4554

http://example.com/processes/salary­increase­234  

Page 14: Ria的强力后盾:rest+海量存储

GET /customers/1234 HTTP/1.1 Host: example.com  Accept: text/x­vcard 

Page 15: Ria的强力后盾:rest+海量存储

违背 REST约束的原因可归咎于对其好处认知的缺乏

Page 16: Ria的强力后盾:rest+海量存储

被遗忘的 PUT DELETE

Page 17: Ria的强力后盾:rest+海量存储

"这些和我有什么关系呢?你太狂热了 " "当然有关系,当 Server只剩下 CURD时。。。 "

Page 18: Ria的强力后盾:rest+海量存储
Page 19: Ria的强力后盾:rest+海量存储

"这意味着什么? " "PHP JAVA...Bye"

Page 20: Ria的强力后盾:rest+海量存储

未来的项目我们只需要做:

用 RIA完成所有的调用与显示与逻辑

增加 后端 的 负载能力

Page 21: Ria的强力后盾:rest+海量存储

☺中间部分呢?☺中间部分是一个完全不关心业务逻辑的 REST框架

Page 22: Ria的强力后盾:rest+海量存储

Function REST(uri, request) { if(request == get) data = getDataFrom(table); if(request == post) data = createDataFrom(table); if(request == put) data = updateDataFrom(table); if(request == delete) data = deleteDataFrom(table); Retrun dataParser(data); //json xml and so on }

Page 23: Ria的强力后盾:rest+海量存储

使用中的牛 X项目 :

OpenResty­­ Yahoo AgentZh Perl http://search.cpan.org/dist/OpenResty/

Nginx openresty plan ­­ TaoBao C/C++ http://www.pgsqldb.org/mwiki/index.php/Nginx_openresty_plan

http://fun.yahoo.cn/admin/login.html

Page 24: Ria的强力后盾:rest+海量存储

openResty

最早, js+perl框架 提供: js库( ajax封装)和 perl的 REST服务端

Page 25: Ria的强力后盾:rest+海量存储
Page 26: Ria的强力后盾:rest+海量存储

现在: ngx_openresty

♡ We'd call this whole set of nginx modules ngx_openresty

and our work is heavily funded by Taobao.com.

Page 27: Ria的强力后盾:rest+海量存储

Nginx conf REST

nginx.conf编程

Page 28: Ria的强力后盾:rest+海量存储

location ~ '^/cat/(\d+)' { set $id $1; set_form_input $name; set_quote_sql_str $quoted_name $name; postgres_query GET "select * from cats where id=$id"; postgres_query DELETE "delete from cats where id=$id"; postgres_query POST "insert into cats (id, name) values($id, $quoted_name)"; postgres_pass my_pg_backend; }

Page 29: Ria的强力后盾:rest+海量存储
Page 30: Ria的强力后盾:rest+海量存储

如何增加后端的负载能力?

Page 31: Ria的强力后盾:rest+海量存储

CLOUD

Page 32: Ria的强力后盾:rest+海量存储

"DB压力太大,分库吧! " "听说 key value的系统不错 "

"那还在等什么? Do it!"

Page 33: Ria的强力后盾:rest+海量存储

☺需求:高并发、高可用性、高扩展性、海量存储 .

Page 34: Ria的强力后盾:rest+海量存储

前因后果

Dynamo  Amazon的高效 Key­Value存储基础组件 ,用于其 S3服务,是我们要的东西

Cassandra Facebook 2008年开源,由 dynamo团队维护。 facebook、 twitter、 digg使用

Voldemort Linkedin 开源。  nuclear renren.com

Page 35: Ria的强力后盾:rest+海量存储

一起进入分布式的世界

Page 36: Ria的强力后盾:rest+海量存储

研究的重点: Key-value

Page 37: Ria的强力后盾:rest+海量存储

我们将 key分布到从 0到 2的 64次方的圆环上

Page 38: Ria的强力后盾:rest+海量存储
Page 39: Ria的强力后盾:rest+海量存储
Page 40: Ria的强力后盾:rest+海量存储

分区数量 >>机器数量数据分区可保障迁移时负载均衡

Page 41: Ria的强力后盾:rest+海量存储
Page 42: Ria的强力后盾:rest+海量存储

CAP原则

Consistency(一致性 ),数据一致性,简单的说,就是数据复制到了 N台机器,如果有更新,要 N机器的数据是一起更新的。

Availability(可用性 ),好的响应性能,此项意思主要就是速度。

Partition tolerance(分区容错性 ),这里是说好的分区方法,体现具体一点,简单地可理解为是节点的可扩展性。

定理:任何分布式系统只可同时满足二点,没法三者兼顾。

忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。

Page 43: Ria的强力后盾:rest+海量存储

数据在网络中往往不止一份

Page 44: Ria的强力后盾:rest+海量存储

NRW审视 CAP原则

Page 45: Ria的强力后盾:rest+海量存储

在 Dynamo系统中,第一次提出来了 NRW的方法。N - 复制的次数R - 读数据的最小节点数W – 写成功的最小分区数

这三个数用来灵活地调整 Dynamo系统的可用性与一致性。

Page 46: Ria的强力后盾:rest+海量存储

R=1:最少需要去一个节点读数据即可,读到即返回,可用性是很高的,但并不能保证数据的一致性

同时W=1:可用性更新是最高的一种情况,但这时完全不能保障数据的一致性,因为在可供复制的N个节点里,只需要写成功一次的话就返回了,也就意味着,有可能在读的这一次并没有真正读到需要的数据(一致性相当的不好)。

Page 47: Ria的强力后盾:rest+海量存储

A 增大 C减小

Page 48: Ria的强力后盾:rest+海量存储

W=R=N=3:写保证所有要复制的点都写成功,读的时候也是都读到,这样子一定读出来的数据是正确的,但是这中间的性能大打折扣,也就是说,数据的一致性非常的高,但系统的可用性却非常低了。

Page 49: Ria的强力后盾:rest+海量存储

C 增大 A减小

Page 50: Ria的强力后盾:rest+海量存储

数据分区让整个网络的可扩展性其实是一个固定值(你分了多少区,实际上网络里扩展节点的上限就是这个数),通过 NRW来达到另外两个方向上的调整。

Page 51: Ria的强力后盾:rest+海量存储

这真的能实现吗?性能还有保障吗 ?

Page 52: Ria的强力后盾:rest+海量存储

实现

Dynamo  Amazon的高效 Key­Value存储基础组件 ,用于其 S3服务,是我们要的东西

Cassandra Facebook 2008年开源,由 dynamo团队维护。 facebook、 twitter、 digg使用

Voldemort Linkedin 开源。  nuclear renren.com

Page 53: Ria的强力后盾:rest+海量存储

性能

提高引擎速度,提高 CLOUD速度 ...

Page 54: Ria的强力后盾:rest+海量存储

The future

Page 55: Ria的强力后盾:rest+海量存储
Page 56: Ria的强力后盾:rest+海量存储

更强大的海量存储方案更多 Rest框架更炫的 RIA应用

Page 57: Ria的强力后盾:rest+海量存储

RIA需要:

硬件加强,网速加快。信 X哥,你懂的。

Page 58: Ria的强力后盾:rest+海量存储

[email protected]

http://www.54chen.com