1、大型网站及其架构演进过程什么是大型网站什么是大型网站什么是大型网站什么是大型网站什么是大型网站网站是用来访问的,访问量要大大型网站应该有海量的数据大型网站应该有复杂业务处理的能力大型网站的架构演进利用JAVA技术和单机来构建网站大型网站的架构演进利用JAVA技术和单机来构建网站JavaScriptHTMLCSSspringJAVA语言hibernateservletMybatisstrutsJSP计算存储利用JAVA技术和单机来构建网站一个单机的交易网站用户交易商品用户注册用户管理信息维护商品管理商品展示创建交易管理交易单机负载告警,数据库与应用分离大型网站的架构演进单机负载告警,数据库与应用
2、分离用户访问量增加网站数据量增加网站响应变慢系统宕机数据库与应用分离应用服务器负载告警,应用服务器走向集群大型网站的架构演进应用服务器负载告警,应用服务器走向集群用户访问量持续增加应用服务器达到性能瓶颈应用服务器走向集群?最终用户访问哪一台服务器?平衡算法应用服务器负载告警,应用服务器走向集群最终用户访问哪一台服务器引入负载均衡设备平衡算法设计的好坏直接决定了集群在负载均衡上的表现,设计不好的算法,会导致集群的负载失衡。一般的平衡算法主要任务是决定如何选择下一个集群节点,然后将新的服务请求转发给它。轮转法散列法最少连接法最低缺失法加权法最快响应法新的问题:session应用服务器负载告警,应用
3、服务器走向集群Session问题问题随即而来问题随即而来1.会话保存在单机上2.如果第一次请求访问左边服务器,如果不做处理,无法保障每次请求都落在同一服务器什么是什么是sessionhttp协议本身无状态,需要基于HTTP协议支持会话状态(session state)的机制,实现WEB服务器从多次单独的HTTP请求中看到“会话”,也就是知道请求来源于那个会话。实现方式:在会话开始时,分配一个唯一会话标识(sessionId),通过Cookie把这个标识告诉浏览器,以后每次请求时,浏览器会带上这个会话标识告诉Web服务器请求属于哪个会话,在Web服务器上,各个会话有独立的存储,保存不同会话的信息
4、。如果遇到禁用Cookie的情况,就把这个会话标识放到URL参数中。应用服务器负载告警,应用服务器走向集群Session问题Session Sticky保证同一会话的请求都在同一个Web服务器上处理依赖负载均衡器根据每次请求的会话标识来进行请求转发缺陷1.如果一台Web服务器宕机或重启,会话数据丢失;2.负载均衡器变成了一个有状态的节点,要讲会话保存到具体Web服务器的映射。和无状态节点相比,内存消耗会更大,容灾麻烦。应用服务器负载告警,应用服务器走向集群Session问题Session ReplicationWeb服务器之间增加会话数据的同步,保证Web服务器之间Session数据一致缺陷1
5、.同步Session数据造成了网络带宽的开销。2.每台Web服务器都保存所有的Session数据,如果整个集群的Session数很多的话,每台机器用于保存Session数据的内容占用会很严重应用服务器负载告警,应用服务器走向集群Session问题Session 数据集中存储把Session数据集中存储起来,不同Web服务器从同样地方获取Session缺陷1.读写Session数据引入了网络操作,故而造成延迟和不稳定性;2.如果集中存储Session的机器或者集群有问题,会影响应用应用服务器负载告警,应用服务器走向集群Session问题Cookie Based将Session数据放在Cookie
6、中,然后在Web服务器上从Cookie中生成对应的Session数据缺陷1.Cookie长度限制;2.安全性;3.带宽消耗;4.性能影响;数据读压力变大,读写分离吧大型网站的架构演进数据读压力变大,读写分离吧随着业务的发展,数据量和访问量持续增长对于大型网站来说,不少业务是读多写少的问题问题1.数据复制问题;2.短期的数据不一致问题;3.应用对于数据源的选择问题采用数据库作为读库数据读压力变大,读写分离吧搜索引擎可以看成是一个读库根据被搜索的数据来构建搜索索引随着被搜索数据的变化,索引也要进行改变引入搜索引擎作为读库数据读压力变大,读写分离吧数据缓存页面缓存加速数据读取的利器-缓存Static
7、 MapMemcachedEhCacheJCacheOsCache弥补关系型数据库的不足,引入分布式存储系统大型网站的架构演进弥补关系型数据库的不足,引入分布式存储系统分布式存储系统通过集群提供一个高容量,高并发访问,数据冗余容灾的支持。1.分布式文件系统,解决文件的存储问题;2.分布式key-value系统,提供高性能的半结构化的支持;3.分布式数据库,提供支持大数据、大并发的数据库系统读写分离后,数据库又遇到新的瓶颈大型网站的架构演进读写分离后,数据库又遇瓶颈专库专用,数据垂直拆分垂直拆分把数据库中不同的业务数据拆分到不同的数据库中。对数据进行垂直拆分后,解决了把所有业务数据放在一个数据库
8、中的压力问题,并且也可以根据不同业务的特点进行更多优化。读写分离后,数据库又遇瓶颈垂直拆分后的单机瓶颈,数据水平拆分水平拆分某个业务的数据表的数据量或者更新量达到了单个数据库的瓶颈,这时把同一个表的数据拆分到两个数据库中。一旦完成数据的水平拆分,将能够很好地应对数据量及写入量增长的情况。数据库问题解决后,应用面对的新挑战大型网站的架构演进数据库问题解决后,应用面对的新挑战拆分应用随着业务的发展,应用的功能会越来越多,应用也会越来越大。需要考虑如何不然应用持续变大,这就需要把应用拆开,从一个应用变为两个甚至多个应用。第一种方式:根据业务的特性将应用拆分第二种方式:按功能拆分走服务化的路大型网站的
9、架构演进走服务化的路1.业务功能之间的访问不仅是单机内部的方法调用,还引入远程的服务调用2.共享的代码不再散落在不同应用中,这些被放在了各个服务中心。3.数据库的连接也发生了一些变化,把与数据库的交互工作放到了服务中心,让前端的Web应用更加注重与浏览器交互的工作,而不必过多关注业务逻辑。4.通过服务化,无论前端Web应用还是服务中心,都可以由特定小团队维护。能更好保持稳定性,并能更好控制系统本身发展消息中间件大型网站的架构演进消息中间件消息中间件是面向消息的系统是在分布式系统中完成消息的发送和接收的基础软件好处是异步和解耦架构总结大型网站的架构演进架构总结我们的网站变成了什么样?谢谢!谢谢!