加强全民团结 促进经济繁荣 佐科威总统提醒部长们和地方政府 ......2020/09/15 · 91.4%,公司和商业激励各 落实53.5兆盾和61兆盾。依计划,政府将于明年
Ria的强力后盾:rest+海量存储
-
Upload
zhen-chen -
Category
Technology
-
view
1.628 -
download
2
description
Transcript of Ria的强力后盾:rest+海量存储
![Page 2: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/2.jpg)
学佛越久 离佛越远
![Page 3: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/3.jpg)
1999 html 2000 cgi 2001 asp 2002 xhtml 2003 flash 2004 ajax 2005 php perl java 2006~now RIA
![Page 4: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/4.jpg)
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+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/5.jpg)
"学了这么久 你有多远了? " "你还记得大明湖畔的 POST GET DELETE PUT吗? "
![Page 6: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/6.jpg)
REST
![Page 7: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/7.jpg)
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+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/8.jpg)
"Roy是谁? " "Roy是 HTTP和 URIs的设计者,是许多基本Web协议的主要设计者。 "
![Page 9: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/9.jpg)
什么是 REST
![Page 10: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/10.jpg)
什么是 REST
网络上的所有事物都被抽象为资源( resource );
每个资源对应一个唯一的资源标识( resource identifier );
通过通用的连接器接口( generic connector interface )对资源进行操作;
对资源的各种操作不会改变资源标识; 所有的操作都是无状态的( stateless)。
![Page 11: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/11.jpg)
什么是 REST
URI标识资源 幂等性保证了你可以简单地再发送一次请求解决问题
POST方法既不安全也不具有幂等性 所有资源使用了同样的接口
![Page 12: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/12.jpg)
你可能认为你的应用包含了超出这些操作表达范围的逻辑。
请允许我花费一些时间来让你相信不存在这样的情况。
![Page 13: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/13.jpg)
REST例子
http://example.com/customers/1234
http://example.com/orders/2007/10/776654
http://example.com/products/4554
http://example.com/processes/salaryincrease234
![Page 14: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/14.jpg)
GET /customers/1234 HTTP/1.1 Host: example.com Accept: text/xvcard
![Page 15: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/15.jpg)
违背 REST约束的原因可归咎于对其好处认知的缺乏
![Page 16: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/16.jpg)
被遗忘的 PUT DELETE
![Page 17: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/17.jpg)
"这些和我有什么关系呢?你太狂热了 " "当然有关系,当 Server只剩下 CURD时。。。 "
![Page 18: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/18.jpg)
![Page 19: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/19.jpg)
"这意味着什么? " "PHP JAVA...Bye"
![Page 20: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/20.jpg)
未来的项目我们只需要做:
用 RIA完成所有的调用与显示与逻辑
增加 后端 的 负载能力
![Page 21: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/21.jpg)
☺中间部分呢?☺中间部分是一个完全不关心业务逻辑的 REST框架
![Page 22: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/22.jpg)
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+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/23.jpg)
使用中的牛 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+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/24.jpg)
openResty
最早, js+perl框架 提供: js库( ajax封装)和 perl的 REST服务端
![Page 25: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/25.jpg)
![Page 26: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/26.jpg)
现在: 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+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/27.jpg)
Nginx conf REST
nginx.conf编程
![Page 28: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/28.jpg)
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+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/29.jpg)
![Page 30: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/30.jpg)
如何增加后端的负载能力?
![Page 31: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/31.jpg)
CLOUD
![Page 32: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/32.jpg)
"DB压力太大,分库吧! " "听说 key value的系统不错 "
"那还在等什么? Do it!"
![Page 33: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/33.jpg)
☺需求:高并发、高可用性、高扩展性、海量存储 .
![Page 34: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/34.jpg)
前因后果
Dynamo Amazon的高效 KeyValue存储基础组件 ,用于其 S3服务,是我们要的东西
Cassandra Facebook 2008年开源,由 dynamo团队维护。 facebook、 twitter、 digg使用
Voldemort Linkedin 开源。 nuclear renren.com
![Page 35: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/35.jpg)
一起进入分布式的世界
![Page 36: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/36.jpg)
研究的重点: Key-value
![Page 37: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/37.jpg)
我们将 key分布到从 0到 2的 64次方的圆环上
![Page 38: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/38.jpg)
![Page 39: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/39.jpg)
![Page 40: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/40.jpg)
分区数量 >>机器数量数据分区可保障迁移时负载均衡
![Page 41: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/41.jpg)
![Page 42: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/42.jpg)
CAP原则
Consistency(一致性 ),数据一致性,简单的说,就是数据复制到了 N台机器,如果有更新,要 N机器的数据是一起更新的。
Availability(可用性 ),好的响应性能,此项意思主要就是速度。
Partition tolerance(分区容错性 ),这里是说好的分区方法,体现具体一点,简单地可理解为是节点的可扩展性。
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。
![Page 43: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/43.jpg)
数据在网络中往往不止一份
![Page 44: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/44.jpg)
NRW审视 CAP原则
![Page 45: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/45.jpg)
在 Dynamo系统中,第一次提出来了 NRW的方法。N - 复制的次数R - 读数据的最小节点数W – 写成功的最小分区数
这三个数用来灵活地调整 Dynamo系统的可用性与一致性。
![Page 46: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/46.jpg)
R=1:最少需要去一个节点读数据即可,读到即返回,可用性是很高的,但并不能保证数据的一致性
同时W=1:可用性更新是最高的一种情况,但这时完全不能保障数据的一致性,因为在可供复制的N个节点里,只需要写成功一次的话就返回了,也就意味着,有可能在读的这一次并没有真正读到需要的数据(一致性相当的不好)。
![Page 47: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/47.jpg)
A 增大 C减小
![Page 48: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/48.jpg)
W=R=N=3:写保证所有要复制的点都写成功,读的时候也是都读到,这样子一定读出来的数据是正确的,但是这中间的性能大打折扣,也就是说,数据的一致性非常的高,但系统的可用性却非常低了。
![Page 49: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/49.jpg)
C 增大 A减小
![Page 50: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/50.jpg)
数据分区让整个网络的可扩展性其实是一个固定值(你分了多少区,实际上网络里扩展节点的上限就是这个数),通过 NRW来达到另外两个方向上的调整。
![Page 51: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/51.jpg)
这真的能实现吗?性能还有保障吗 ?
![Page 52: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/52.jpg)
实现
Dynamo Amazon的高效 KeyValue存储基础组件 ,用于其 S3服务,是我们要的东西
Cassandra Facebook 2008年开源,由 dynamo团队维护。 facebook、 twitter、 digg使用
Voldemort Linkedin 开源。 nuclear renren.com
![Page 53: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/53.jpg)
性能
提高引擎速度,提高 CLOUD速度 ...
![Page 54: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/54.jpg)
The future
![Page 55: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/55.jpg)
![Page 56: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/56.jpg)
更强大的海量存储方案更多 Rest框架更炫的 RIA应用
![Page 57: Ria的强力后盾:rest+海量存储](https://reader033.fdocuments.net/reader033/viewer/2022051400/556a1026d8b42af0198b4c0c/html5/thumbnails/57.jpg)
RIA需要:
硬件加强,网速加快。信 X哥,你懂的。