ria的强力后盾:rest+海量存储
Post on 31-May-2015
1.628 Views
Preview:
DESCRIPTION
TRANSCRIPT
学佛越久 离佛越远
1999 html 2000 cgi 2001 asp 2002 xhtml 2003 flash 2004 ajax 2005 php perl java 2006~now RIA
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
"学了这么久 你有多远了? " "你还记得大明湖畔的 POST GET DELETE PUT吗? "
REST
Roy T. Fielding在他的博士学位论文中定义了术语REST http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htmhttp://www.redsaga.com/opendoc/REST_cn.pdf
"Roy是谁? " "Roy是 HTTP和 URIs的设计者,是许多基本Web协议的主要设计者。 "
什么是 REST
什么是 REST
网络上的所有事物都被抽象为资源( resource );
每个资源对应一个唯一的资源标识( resource identifier );
通过通用的连接器接口( generic connector interface )对资源进行操作;
对资源的各种操作不会改变资源标识; 所有的操作都是无状态的( stateless)。
什么是 REST
URI标识资源 幂等性保证了你可以简单地再发送一次请求解决问题
POST方法既不安全也不具有幂等性 所有资源使用了同样的接口
你可能认为你的应用包含了超出这些操作表达范围的逻辑。
请允许我花费一些时间来让你相信不存在这样的情况。
REST例子
http://example.com/customers/1234
http://example.com/orders/2007/10/776654
http://example.com/products/4554
http://example.com/processes/salaryincrease234
GET /customers/1234 HTTP/1.1 Host: example.com Accept: text/xvcard
违背 REST约束的原因可归咎于对其好处认知的缺乏
被遗忘的 PUT DELETE
"这些和我有什么关系呢?你太狂热了 " "当然有关系,当 Server只剩下 CURD时。。。 "
"这意味着什么? " "PHP JAVA...Bye"
未来的项目我们只需要做:
用 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 }
使用中的牛 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
openResty
最早, js+perl框架 提供: js库( ajax封装)和 perl的 REST服务端
现在: ngx_openresty
♡ We'd call this whole set of nginx modules ngx_openresty
and our work is heavily funded by Taobao.com.
Nginx conf REST
nginx.conf编程
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; }
如何增加后端的负载能力?
CLOUD
"DB压力太大,分库吧! " "听说 key value的系统不错 "
"那还在等什么? Do it!"
☺需求:高并发、高可用性、高扩展性、海量存储 .
前因后果
Dynamo Amazon的高效 KeyValue存储基础组件 ,用于其 S3服务,是我们要的东西
Cassandra Facebook 2008年开源,由 dynamo团队维护。 facebook、 twitter、 digg使用
Voldemort Linkedin 开源。 nuclear renren.com
一起进入分布式的世界
研究的重点: Key-value
我们将 key分布到从 0到 2的 64次方的圆环上
分区数量 >>机器数量数据分区可保障迁移时负载均衡
CAP原则
Consistency(一致性 ),数据一致性,简单的说,就是数据复制到了 N台机器,如果有更新,要 N机器的数据是一起更新的。
Availability(可用性 ),好的响应性能,此项意思主要就是速度。
Partition tolerance(分区容错性 ),这里是说好的分区方法,体现具体一点,简单地可理解为是节点的可扩展性。
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。
数据在网络中往往不止一份
NRW审视 CAP原则
在 Dynamo系统中,第一次提出来了 NRW的方法。N - 复制的次数R - 读数据的最小节点数W – 写成功的最小分区数
这三个数用来灵活地调整 Dynamo系统的可用性与一致性。
R=1:最少需要去一个节点读数据即可,读到即返回,可用性是很高的,但并不能保证数据的一致性
同时W=1:可用性更新是最高的一种情况,但这时完全不能保障数据的一致性,因为在可供复制的N个节点里,只需要写成功一次的话就返回了,也就意味着,有可能在读的这一次并没有真正读到需要的数据(一致性相当的不好)。
A 增大 C减小
W=R=N=3:写保证所有要复制的点都写成功,读的时候也是都读到,这样子一定读出来的数据是正确的,但是这中间的性能大打折扣,也就是说,数据的一致性非常的高,但系统的可用性却非常低了。
C 增大 A减小
数据分区让整个网络的可扩展性其实是一个固定值(你分了多少区,实际上网络里扩展节点的上限就是这个数),通过 NRW来达到另外两个方向上的调整。
这真的能实现吗?性能还有保障吗 ?
实现
Dynamo Amazon的高效 KeyValue存储基础组件 ,用于其 S3服务,是我们要的东西
Cassandra Facebook 2008年开源,由 dynamo团队维护。 facebook、 twitter、 digg使用
Voldemort Linkedin 开源。 nuclear renren.com
性能
提高引擎速度,提高 CLOUD速度 ...
The future
更强大的海量存储方案更多 Rest框架更炫的 RIA应用
RIA需要:
硬件加强,网速加快。信 X哥,你懂的。
top related