典型的大型互联网应用系统的技术方案和手段
基于典型的互联网应用系统对高并发、高可用、高性能的需求,有以下常见的技术方案和手段,主要分为应用、数据存储、资源管理和其他四个部分。
I. 应用
1. 应用和数据分离
任何应用在最初阶段都需要将应用程序和数据存储两者分隔开,这也是之后技术演进和技术方案的基础。
2. 分布式
当应用程序进入快速发展阶段,在加入缓存也无法处理大量高并发业务请求时,就需要增加更多的服务器以部署应用程序来处理请求。同时为了保证服务高可用,我们就将这些服务器分布式部署到不同的机房/区域以实现分布式应用。
3. 业务拆分
当我们在实现分布式应用、存储以及缓存、CDN等其他手段后,希望进一步迭代我们的系统,就可以考虑将现有的业务拆分,让业务之间有更单一的职责,同时也降低了业务之间的耦合,更便于开发、部署、管理。
II. 数据存储
1. 缓存
在考虑分布式应用或存储之前,我们应该首先考虑引入缓存。大多数的应用都会有很高的读写比,缓存能够很好地缓解大量服务器请求的压力,在不增加服务器或引入分布式系统的前提下提高系统的性能。
2. 读写分离
当服务器都处理速度超过数据库都读写速度时,或者说数据库读写成为瓶颈时,我们应该首先考虑将数据库都读写分离。对于大多数都应用而言,都会有相对高都读写比,尤其对于这类应用而言,我们可以将单一的数据库拓展成主从型数据库,主机负责写和读,从机只负责读。这样能够有效地分担主数据库的读写压力,从而是数据库不再成为瓶颈。
3. 分布式数据库
读写分离能让数据库暂时摆脱“系统瓶颈”的帽子,但随着我们引入CDN、分布式应用,使得应用服务器的处理能力增强,即使是实现了读写分离,数据库将再次成为系统的瓶颈,简单的读写结构将无法再次处理大量来自应用程序的数据库读写请求,此时,需要实现分布式数据库并实现分库分表。
4. NoSQL
在不需要关系型数据结构的应用场景下,NoSQL数据库能够大大延迟数据库成为系统瓶颈的时间点,同样在发展后期有大量请求的情况下,比关系型数据库更容易拓展。
III. 资源管理
1. CDN
很多请求是针对静态资源的请求,这类情况下,引入CDN可以大大地提升资源的相应速度,同时也减少对应用程序的请求数,从而提高系统整体的性能。同时,CDN处理请求的成本也远低于应用服务的处理成本。
2. 反向代理
反向代理是加载在服务器前的一个中转站,所有到应用服务器都最终请求都将通过这个中转站,它常常也被用作负载均衡器,可以提高整个应用的性能。同时,反向代理也可以提供额外的安全防护。
IV. 其他
1. 搜索引擎
搜索是大型网站中常见的功能,也常常作为很多其他功能的入口,承载着大量的用户请求,因为搜索性能的好坏成为了用户体验中必不可少的一部分。最简单的搜索引擎可以直接用数据库自带的全文检索实现,但对于复杂的搜索系统,我们往往通过专业的搜索引擎应用来实现,如ElasticSearch等。
评论