架构师训练营第四周作业
1.一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
<1>初始阶段架构
问题:网站运营初期,访问用户少,一台服务器就可以支撑。
技术方案和手段:应用程序、数据库、文件等所有的资源都在一台服务器上。
描述:通常服务器操作系统使用 linux,应用程序使用 PHP 开发,然后部署在 Apache 上,数据库使用 Mysql,通俗称为 LAMP。
<2>应用服务和数据服务分离
问题:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足,一台服务器已不足以支撑。
技术方案和手段:应用服务器、数据库服务器、文件服务器分别独立部署。
描述:不同服务器对性能要求各不相同:应用服务器要处理大量业务逻辑,需要更快更强大的 CPU;数据库服务器需要快速磁盘检索和数据缓存,需要更快的硬盘和更大的内存;文件服务器需要存储大量文件,因此需要更大容量的硬盘。
<3>使用缓存技术改善性能
问题:随着用户逐渐增多,数据库压力太大导致访问延迟。
技术方案和手段:由于网站访问遵循二八定律:80% 的业务访问集中在 20% 的数据上。将数据库中访问较集中的少部分数据缓存在内存中,可以减少数据库的访问次数,降低数据库的访问压力。
描述:缓存分为两种:应用服务器上的本地缓存和分布式缓存服务器上的远程缓存,本地缓存访问速度更快,但缓存数据量有限,同时存在与应用程序争用内存的情况。分布式缓存可以采用集群方式,理论上可以做到不受内存容量限制的缓存服务。
<4>使用服务器集群技术提高并发和可用性
问题:使用缓存后,数据库访问压力得到有效缓解。但是单一服务器能够处理的请求连接有限,在访问高峰期,成为瓶颈。若单一服务器宕机,则系统不再可以提供服务
技术方案和手段:服务器集群通过负载均衡技术同时向外部提供服务,解决单一服务器处理能力和存储空间不足的问题,提高了系统的可用性。
描述:使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,提升系统的并发处理能力,使得服务器的负载压力不再成为整个系统的瓶颈,同时也提高系统的可用性。
<5>数据库读写分离
问题:网站使用缓存后,使绝大部分读操作访问都可以不通过数据库就能完成,但是仍有部分读操作和全部的写操作需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。
技术方案和手段:主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站利用数据库的主从热备功能,实现数据库读写分离,从而改善数据库负载压力。
描述:应用服务器在写操作的时候,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库。这样当应用服务器在读操作的时候,访问从数据库获得数据。为了便于应用程序访问读写分离后的数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离的对应用透明。
<6>反向代理和 CDN 加速
问题:中国网络环境复杂,不同地区的用户访问网站时,速度差别极大。
技术方案和手段:采用 CDN 和反向代理加快系统的静态资源访问速度。
描述:CDN 和反向代理的基本原理都是缓存,区别在于 CDN 部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;而反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,可以将其直接返回给用户。
<7>分布式文件系统和分布式数据库
问题:随着大型网站业务持续增长,数据库经过读写分离,从一台服务器拆分为主从两台服务器,依然不能满足需求。
技术方案和手段: 数据库采用分布式数据库,文件系统采用分布式文件系统。
描述:分布式数据库是数据库拆分的最后方法,只有在单表数据规模非常庞大的时候才使用。更常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理服务器上。
<8>使用 NoSQL 和搜索引擎
问题:随着网站业务越来越复杂,对数据存储和检索的需求也越来越复杂。
技术方案和手段:系统引入 NoSQL 数据库及搜索引擎。
描述:NoSQL 数据库及搜索引擎对可伸缩的分布式特性具有更好的支持。应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。
<9>业务拆分
问题:大型网站的业务场景日益复杂,分为多个产品线。
技术方案和手段:采用分而治之的手段将整个网站业务分成不同的产品线。系统上按照业务进行拆分改造,应用服务器按照业务区分进行分别部署。
描述:应用之间可以通过超链接建立关系,也可以通过消息队列进行数据分发,当然更多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。
纵向拆分:将一个大应用拆分为多个小应用,如果新业务较为独立,就直接将其设计部署为一个独立的 web 应用系统。纵向拆分相对较为简单,通过梳理业务,将较少相关的业务剥离即可。
横向拆分:将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务横向拆分需要识别可复用的业务,设计服务接口,规范服务依赖关系。
<10>抽取公用业务提供分布式服务
问题:随着业务越拆越小,存储系统越来越庞大,应用系统整体复杂程度呈指数级上升,部署维护越来越困难。由于所有应用要和所有数据库系统连接,最终导致数据库连接资源不足,拒绝服务。
技术方案和手段:公共业务提取出来,独立部署。由这些可复用的业务连接数据库,通过分布式服务提供共用业务服务。
参考:
https://xie.infoq.cn/article/3d8c7d21413476f81e84540db
评论