架构师训练营第四周总结
1.互联网架构演化
大型的互联网系统通常由一个小的系统经过一系列的演化逐步变成一个大型的互联网系统。下面主要介绍了互联网演化的步骤。
1.1应用和数据分离
通常在业务初期,就一台物理服务器,部署了应用程序和数据库。随着用户的增长,原有一台服务器无法支撑用户的访问量,只好增加一台服务器,把应用程序和数据库分别部署在两台服务器上。这个阶段主要解决了用户增长过快,增加并发用户访问量,单台服务器性能瓶颈的问题。
1.2.缓存
随着用户的增长,大量的用户访问系统,通过数据库读取数据,造成数据库的负荷过高,通过分析发现大量的数据是读数据库操作,此时增加服务器,把一些热点数据放到缓存中,不需要一直访问数据库,降低了数据库的压力,改善了系统的性能。这个阶段主要解决大量数据读操作,降低数据库负荷,增加了一些并发用户。
1.3.服务器集群
随着用户的持续增长,原有的应用服务器无法处理用户的请求,这时需要增加应用服务器,处理更多的用户请求。为了并行的处理用户的请求,在应用服务器集群之前增加负载均衡器,由负载均衡器负责把用户的请求转发的每个应用服务器上。同理缓存服务器和文件服务器也可以使用多台服务器组成服务器集群,处理更多的用户请求。
1.4.数据库读写分离
用户继续增长,虽然使用了分布式缓存来处理用户的请求,但是由于缓存有失效期,大量用户请求还是穿透缓存到达数据库,导致数据库负荷不断升高, 有可能导致数据库的连接耗尽,造成系统的奔溃。为了解决这个问题可以实现数据库的读写分离(主从复制、一主多从,主主复制等),使写操作落到主数据库,读操作落到从数据库,从而减轻单一数据库系统的负载压力。
1.5.反向代理和CDN加速
用户持续增长,访问中有大量的静态数据,比如很多图片等,几乎所有的用户访问这些静态数据都一样,这些静态数据访问增加了网络流量,如果用户一直访问核心机房的数据,可能导致网络拥塞。这时引入CDN,建立多个CDN,户可以访问就近的CDN,不用访问核心机房的数据。
对于CDN没有的内容,用户的请求会到过反向代理,反向代理服务器会检查自身有没有请求的内容,如果有直接返回,如果没有,将用户的请求引入到负载均衡器,再由负载均衡器引入到核心机房。
1.6.分布式文件系统和分布式数据库
用户规模继续增长达到千万级的规模,原有的数据库主从复制已经满足不了要求,数据库负荷不断升高,必须将主从复制模式修改为分布式数据库,来处理大规模的用户请求。
系统累积的文件越来越多,原有的操作系统管理不这么多的文件,此时将文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间,这就是分布式文件系统。
1.7.使用NoSQL和搜索引擎
业务持续增加,数据海量增加,关系型数据库无法满足要求,引入NoSQL,NoSQL数据库适用于数据模型比较简单、高并发读写、海量数据的高效存储和访问等需求。尤其在大数据量下,表现非常优秀。
原来数据的搜索是通过数据库检索,现海量的数据库查询使得关系型数据库不堪负荷,引入搜索引擎,通过搜索引擎实现对海量数据的检索。
1.8. 业务拆分
用户继续增加,原有的业务代码混合在一起,业务不断增加,业务代码越来越庞大。业务间的依赖耦合度越来越大,小小的代码改动出现bug,可能导致整个业务的不可用,系统依赖包越来越大。系统的编译部署花费的时间越来越多,一个业务的改动,会导致这个系统重新部署,团队经常加班部署。这时,必须对业务解耦,业务拆分,把每个单独的业务拆分成一个子系统,业务间的调用通过URL或RPC等其它方式调用。
1.9.微服务和中台
业务不断的扩展,一些公共的组件通过jar或dll等其它的方式提供给业务代码,有的业务需要扩充公共组件的功能,有的业务不需要,导致公共组件的版本不可控。这时候就引入微服务,把公共服务的组件改造成微服务,通过微服务api 对外提供服务。一些业务平台也改造成微服务,开展一项新的业务就可以复用原有的微服务api接口,使新业务快速上线。
1.10.大数据和智能化
业务的发展累积了很多数据,到了这个时代,如何利用数据是业务发展的重点。利用大数据对不同来源数据的管理、处理、分析与优化,将结果反馈到上述应用中,将创造出巨大的经济和社会价值。
2. 互联网的架构模式
2.1分层
横向维度拆分,上层对下层进行依赖调用。
2.2分割
对不同的功能和业务进行拆分。
2.3分布式
不同的模块部署在不同的机器上,通过远程调用协同工作。
2.4集群
多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
2.5缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度。
2.6异步
就是将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。
2.7冗余
服务器多台冗余。
2.8自动化
在无人值守的情况下网站可以正常运行。
2.9安全
防止攻击 和黑客的多种破坏活动等。
3. 如何衡量一个互联网架构设计
高性能
高可用
可伸缩
可扩展
安全
4.总结
大型互联网应用系统的架构是随着业务的发展不断演化的,而不是人为设计的。
版权声明: 本文为 InfoQ 作者【涛】的原创文章。
原文链接:【http://xie.infoq.cn/article/e7a564dca27a2bc5f76f40f1c】。文章转载请联系作者。
评论