大型网站架构发展
大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,任何简单的业务一旦需要处理以P计的数据和数亿的用户,就会变得很棘手,这也是大型网站架构需要解决的问题。
初始阶段的网站架构
由于用户量并不大,可以直接将应用程序、数据库、文件等所有资源放在一台服务器上。
应用服务和数据服务分离
需要将应用和数据分离,应用服务器需要处理大量的业务逻辑,需要强大的计算能力,数据库需要快速磁盘检索和数据缓存,所以需要更快的硬盘和更大的内存,文件服务器需要存储大量文件以及文件检索,需要更大的硬盘和内存。这样也方便扩展增加服务器。
使用缓存改善网站性能
80%的业务集中在20%的数据上,如果将热门的数据缓存在内存中,可以很大的改善网站的相应速度。缓存可以分为两种,本地缓存和专门的分布式缓存服务器,考虑到扩展性,一般使用远程分布式缓存,以集群的方式部署大内存的服务器作为专门的缓存服务器。
使用应用服务器集群改善网站的并发处理能力。
使用集群是完整解决高并发、海量数据的常用手段,也就是横向扩展(通过增加机器的方式扩展,与之相对的是纵向扩展,也就是通过增强一台机器的性能进行扩展)。对于大型网站而言,不管多强大的服务器,都无法满足持续增长的业务需求,这种情况下,更恰当的做法是增加一台服务器分担原有服务器的压力。
通过这种方式可以持续增加服务器不断改善系统性能,从而实现系统的可伸缩性。应用服务器实现集群也是网站可伸缩性集群架构设计中较简单成熟的一种。
数据库读写分离
网站使用缓存后,可以很大程度减轻数据库的压力,但随着用户的进一步增加,数据库仍会因为负载压力过高成为网站的瓶颈,需要数据库读写分离来减轻负载。
应用服务其在写数据时,访问主数据库,主数据库通过主从复制将数据同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据,
使用反向代理和CDN加速网站响应
CDN和反向代理的基本原理都是缓存,区别在于CDB部署在网络提供商的机房,反向代理则部署在网站的中心机房,当用户到达中心机房后,首先访问反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,就将其直接诶返回给用户。
一方面可以加快访问速度,也可以减轻后端服务器的压力。
使用分布式文件系统和分布式数据库系统
分布式数据库系统是网站数据库拆分的最后手段,只有在单表数据规模¥非常大是才使用。一般网站更常用的数据库拆分手段是业务分库,将不同业务的数据库部署到不同的数据库服务器上。
使用NoSQL和搜索引擎
随着网站业务越累越复杂,对数据存储和检索的需求也越来越复杂,网站需要使用一些非关系数据库技术如NoSQL和非数据库查询技术如搜索引擎。
NoSQL和搜索引擎都对可伸缩的分布式特性具有很好的支持。应用服务器则通过一个统一的数据访问模块访问各种数据,减轻应用程序管理多数据源的问题。
业务拆分
大型网站为了应对日益复杂的业务场景,通过分而治之的手段将整个网站业务分成不同的产品线,如首页,支付,订单,卖家,买家等,分到不同的业务团队负责。
具体到技术上,也会根据产品线划分,将一个网站拆分成许多不同的应用,每个应用独立部署,应用之间可以通过超链接建立关系,也可以通过消息队列进行数据分发,最常用的还是通过访问同一个存储系统来构成一个关联的完整系统。
分布式服务
随着业务拆分越累越小,存储系统越来越大,应用系统的整体复杂度呈指数增加,部署维护困难。由于所有的应用要和所有数据库系统连接,这些连接是服务器规模的平方,会导致数据库资源不够。
由于很多子应用系统都需要进行很多相同的业务操作,如用户管理,商品管理等,可以将这些公用的服务提取出来,独立部署,有这些可复用的业务连接数据库,并对外提供公共服务。应用系统只需要通过分布式服务调用公共业务服务完成具体业务操作。