淘宝网高性能可伸缩架构技术探秘.docx

淘宝网高性能可伸缩架构技术探秘.docx

ID:57896809

大小:22.12 KB

页数:6页

时间:2020-04-02

淘宝网高性能可伸缩架构技术探秘.docx_第1页
淘宝网高性能可伸缩架构技术探秘.docx_第2页
淘宝网高性能可伸缩架构技术探秘.docx_第3页
淘宝网高性能可伸缩架构技术探秘.docx_第4页
淘宝网高性能可伸缩架构技术探秘.docx_第5页
资源描述:

《淘宝网高性能可伸缩架构技术探秘.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、淘宝网高性能可伸缩架构技术探秘在《世界最大的PHP站点Facebook后台技术探秘》一文中介绍了一个大型SNS网站的技术组成。今天我们继续大型网站探秘,一起来探秘淘宝网的架构技术。作为国内最大的B2C网站,淘宝网的网站架构一直承载着数据量告诉增长压力,要保证良好的负载和流程的使用体验,一个可伸缩性的高性能网站架构必不可少。一、应用无状态一个系统的伸缩性的好坏取决于应用的状态如何管理。试想一下,假如我们在session中保存了大量与客户端的状态信息的话,那么当保存状态信息的server宕机的时候,我们怎么办?通常来说,我们都是通过集群来解决这个问题,而通常所说的集群,不仅有负载均衡,

2、更重要的是要有失效恢复failover,比如tomcat采用的集群节点广播复制,jboss采用的配对复制等session状态复制策略,但是集群中的状态恢复也有其缺点,那就是严重影响了系统的伸缩性,系统不能通过增加更多的机器来达到良好的水平伸缩,因为集群节点间session的通信会随着节点的增多而开销增大,因此要想做到应用本身的伸缩性,我们需要保证应用的无状态性,这样集群中的各个节点来说都是相同的,从而是的系统更好的水平伸缩。上面说了无状态的重要性,那么具体如何实现无状态呢?此时一个session框架就会发挥作用了。幸运的是公司已经具有了此类框架。公司的session框架采用的是cl

3、ientcookie实现,主要将状态保存到了cookie里面,这样就使得应用节点本身不需要保存任何状态信息,这样在系统用户变多的时候,就可以通过增加更多的应用节点来达到水平扩展的目的.但是采用客户端cookie的方式来保存状态也会遇到限制,比如每个cookie一般不能超过4K的大小,同时很多浏览器都限制一个站点最多保存20个cookie.公司cookie框架采用的是“多值cookie”,就是一个组合键对应多个cookie的值,这样不仅可以防止cookie数量超过20,同时还节省了cookie存储有效信息的空间,因为默认每个cookie都会有大约50个字节的元信息来描述cookie。

4、除了公司目前的session框架的实现方式以外,其实集中式session管理来完成,说具体点就是多个无状态的应用节点连接一个session服务器,session服务器将session保存到缓存中,session服务器后端再配有底层持久性数据源,比如数据库,文件系统等等。二、有效使用缓存做互联网应用的兄弟应该都清楚,缓存对于一个互联网应用是多么的重要,从浏览器缓存,反向代理缓存,页面缓存,局部页面缓存,对象缓存等等都是缓存应用的场景。一般来说缓存根据与应用程序的远近程度不同可以分为:localcache和remotecache。一般系统中要么采用localcache,要么采用remo

5、tecache,两者混合使用的话对于localcache和remotecache的数据一致性处理会变大比较麻烦.在大部分情况下,我们所说到的缓存都是读缓存,缓存还有另外一个类型:写缓存. 对于一些读写比不高,同时对数据安全性需求不高的数据,我们可以将其缓存起来从而减少对底层数据库的访问,比如统计商品的访问次数,统计API的调用量等等,可以采用先写内存缓存然后延迟持久化到数据库,这样可以大大减少对数据库的写压力。以店铺线的系统为例,在用户浏览店铺的时候,比如店铺介绍,店铺交流区页面,店铺服务条款页面,店铺试衣间页面,以及店铺内搜索界面这些界面更新不是非常频繁,因此适合放到缓存中,这样

6、可以大大减低DB的负载。另外宝贝详情页面相对也更新比较少,因此也适合放到缓存中来减低DB负载。三、应用拆分首先,在说明应用拆分之前,我们先来回顾一下一个系统从小变大的过程中遇到的一些问题,通过这些问题我们会发现拆分对于构建一个大型系统是如何的重要。系统刚上线初期,用户数并不多,所有的逻辑也许都是放在一个系统中的,所有逻辑跑到一个进程或者一个应用当中,这个时候因为比较用户少,系统访问量低,因此将全部的逻辑都放在一个应用未尝不可。但是,兄弟们都清楚,好景不长,随着系统用户的不断增加,系统的访问压力越来越多,同时随着系统发展,为了满足用户的需求,原有的系统需要增加新的功能进来,系统变得越

7、来越复杂的时候,我们会发现系统变得越来越难维护,难扩展,同时系统伸缩性和可用性也会受到影响。那么这个时候我们如何解决这些问题呢?明智的办法就是拆分(这也算是一种解耦),我们需要将原来的系统根据一定的标准,比如业务相关性等分为不同的子系统,不同的系统负责不同的功能,这样切分以后,我们可以对单独的子系统进行扩展和维护,从而提高系统的扩展性和可维护性,同时我们系统的水平伸缩性scaleout大大的提升了,因为我们可以有针对性的对压力大的子系统进行水平扩展而不会影响到其它的子

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。