Java技术分享:大型应用程序架构思路

淘宝十年记录了,淘宝技术发展以来经历的技术提问,问题瓶颈,任何大型系统的架构都不是一朝一夕的出来的。全部都是从小型项目不断发展而来,遇到问题瓶颈,解决问题瓶颈,而目前最常见的大型项目架构思想如下所示

一个网站最初,所有的服务应用系统application,数据库服务系统database,文件系统filesystem都部署在一台服务器上面,及所谓的all in one

如上:随着业务的增长,并发访问量增加,服务器性能开销逐渐增大;进而无法跟随业务量,这是最简单的做饭就是将 三个服务,应用系统,数据库系统,文件系统,分别放在一台服务器上面

这时候服务器系统基本能够满足业务需求,但是随着并发访问的数量增加,数据库系统,就会成为该应用系统的瓶颈,数据库服务系统的压力会特别大,希望减少数据库服务器压力。此时提出了缓存,希望80% 的访问内容,都集中在20%访问的内容上面,而20%的数据都缓存起来

缓存在本机呢,数据库服务器系统的压力还是很大,系统此时及引入分布式缓存集群,同时数据库服务器也有本地缓存,从而来应对大批量的访问。让访问优先访问缓存,只有缓存不存在的情况下才访问数据库系统,这样提高用户访问速度,也解决数据库服务器的压力

随着更大业务量的增加,数据库,使用缓存集群,已经解决部分问题,但是业务量继续增加,应用系统的的服务器,已经不能支持更大的访问量,此时就出现了负载均衡技术,对更多的请求,横向的引入应用集群:如图

负载均衡就要考虑一些问题了,请求到底怎么分配到这些应用服务器,随机轮询,随机到那个应用服务器,就那个应用服务器处理?或者最小负载,权重,本地等等策略.这些都有优缺点,架构者可以根据自己的系统进行选择

特别注意的问题:负载均和策略如果选择不得当,用户登陆..一般我们把用户信息保存到session 中,如果应用集群,这是session是在不同的服务器上面,用户在此发送请求,有可能通过其他的服务器,那么会获得不到session ,导致登陆失败。所以通常也会决绝这个问题,那么,可以将session 存入到cookie中,或者session集群到其他的应用服务器中,这样每次验证,session 每个服务器也是存在session,或者同一session 的服务器。session都从该服务器中拿

这时候,session都保存在了一个服务器,保证session不会丢失,一致性等等,就非常重要了,也意味着session服务器也是非常重要,此时可以考虑主从备份,确保session服务器数据不会有问题

业务继续增加,数据库明显会有瓶颈,无法支持更大的业务数据,那么可以考虑数据库端的处理,主从备份;读写分离,如果是读取数据,就到读的数据库服务器中去拿数据,如果是写的话,就到写入的数据库中去拿数据,再利用数据库主从机制,进行数据备份,保证一致性。而这是需要重点关注的

数据库采用主从备份策略之后,又采用了CDN技术,保证了系统访问网络延时可靠性能及稳定性,反向代理实现用户数据缓存,在使用分布式文件系统代替普通的文件系统,拓展文件服务的各项性能

业务继续增加,数据库压力还是会继续增加,怎么办?此时可以对数据库继续优化,及分库分表,根据表对数据库进行分库,一张表的数据如果太大,也可以分成多个库,结果如下

由于分库分表,各表都是独立的,到用户查询数据的时候,由于表和表的关系,就会出现服务器额外的系统消耗,如果搜索数量一旦上来,这些问题是没法解决的,此时出现了索引和nosql等等

数据库分布式集群缓存分库分表,造成的问题,那么可以考虑,搜索作为一个主要的业务场景,引入NoSql服务器,;来降低查询数据时候的压力

作为大型项目架构,其实还有很多问题需要去关心,架构到目前为止已经是很大型的架构了,但是随着业务的发展,将来还会有更多的问题需要我们去解决,然后不论怎么发展,其实要决绝的问题还是一致的。始终是在解决各种性能问题。只要找到问题的关键,进而设计架构,发展技术,相信未来互联网将会越来越强大。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181211A0HKMO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券