引言
电子商务火热的背后是不堪重负的网站架构
如何打造一个高可用、高性能、易拓展、可伸缩且安全的网站?
即便是山寨他人的产品,也可以山寨的更高、更快、更强。
1.1大型网站软件系统的特点
高并发,大流量
高可用
海量数据
用户分布广泛,网络情况复杂
安全环境恶劣
需求快速变更,发布频繁
渐进式发展(好的产品是慢慢运营出来的)
1.2大型网站架构演化发展历程
大型网站架构主要就是解决庞大的用户,高并发的访问和海量的数据这一问题。
1.2.1 初始阶段的网站架构
linux操作系统、php开发应用程序、部署在Apache上、数据库用mysql、汇集各种开源软件加上一台廉价服务器,开始网站发展之路。
1.2.2 应用服务和数据服务分离
数据过多,导致存储空间不足。出现了将应用和数据分离,整个网站使用三台服务器,应用服务器、文件服务器和数据库服务器。
之后 数据库压力过大导致访问延迟,这时便需要对网站架构进一步优化。
1.2.3使用缓存改善网站性能
网站访问有一个现象,就是大部分的业务访问集中在一小部分的数据上。那么,将这一小部分数据缓存在内存中,就可以减少数据库访问的压力。
但是这样子做,受应用服务器内存限制,其缓存数据量有限。那么,数据访问压力得到有效缓解,但单一应用服务器能处理的请求链接有限,在网站访问高峰期,应用服务器成为整个网站的瓶颈。
1.2.4使用应用服务器集群改善网站的并发处理能力
当一台服务器的处理能力、存储空间不足时,不要直接去换更强大的服务器,而是选择增加一台服务器分担原有服务器的访问及存储压力。
应用服务器实现集群是网站可伸缩集群架构设计中较为简单成熟的一种
通过负载均衡调度服务器,将用户的访问请求分发到应用服务器集群中的任何一台服务器,用户越多,就在集群中加入更多的应用服务器。(这样应用服务器的负载压力不再成为网站的瓶颈)
1.2.5数据库读写分离
利用数据库的主从热备功能,配置两台数据库的主从关系,将一台数据库服务器的数据更新同步到另一台服务器上。网站利用这个,实现数据库读写分离。
写数据时,访问主数据库,主数据库同步数据到从数据库中,读数据时通过从数据库获得数据。
1.2.6 使用反向代理和cdn加速网站响应
不同地区的用户访问网站速度差别极大,为解决这一问题。
cdn: 部署在网络提供商的机房,用户请求时,从距离自己最近的网络提供商机房获取数据。
反向代理:部署在网站的中心机房,用户请求到达中心机房,首先访问反向代理服务器,反向代理服务器中缓存着用户请求的资源,直接返回给用户。
主要加快了用户访问速度、也减轻了后端服务器的负载压力。
1.2.7使用分布式文件系统和分布式数据库系统
读写分离后的数据库还是不能满足需求,这时就需要使用分布式数据库,文件系统同样。
分布式数据库是网站数据库拆分的最后手段,仅在单表数据规模非常庞大的时候才使用。(常用的是业务分库,不同业务的数据部署在不同的物理服务器上)
1.2.8使用NoSQL和搜索引擎
网站业务过于复杂,需要采用一些非关系数据库技术NoSQL非数据库查询技术”搜索引擎”
1.2.9业务拆分
分而治之,例如 首页 商铺 订单 卖家 卖家 拆分不同的产品线,归不同的业务团队负责
1.2.10分布式服务
业务拆分越来越小,存储系统越来越大,部署维护越来越难。(一个应用需要和所有数据库链接,数据库连接资源不足,拒绝服务)
这里就需要将一些公用的业务提取出来,独立部署。由可服用的业务链接数据库,提供公用服务,应用系统管理用户界面即可。
这就是分布式服务调用共用业务服务。
到这里为止,基本上大多数技术的问题就得以解决了。
思考:这些解决方案是否能应用到网站自身以外的业务上去呢? (计算是一种基础资源)
今日读至:0 – 1.3