很多人会疑惑:为什么很多看起来不是很复杂的网站,比如Facebook、淘宝,都需要大量顶尖的高手来开发呢?
大型网站软件系统的特点:
- 高并发、大流量
- 高可用:系统24小时不间断服务,宕机事件会造成很大的影响
- 海量数据:设计存储和管理,需要使用大量服务器
- 用户分布广泛,网络情况复杂
- 安全环境恶劣
- 需求快速变更,发布频繁:产品快速适应市场,满足用户需求
- 渐进式发展:几乎所有大型互联网都是从一个小网站开始。(FackBook、Google、阿里巴巴)
好的设计绝对不是模仿,不是生搬硬套某个模式,而是在对问题深刻理解之上的创造与创新,即使是‘微创新’,也是让人耳目一新的似曾相识。山寨与创新的最大区别不在于是否抄袭、是否模仿,而在于对问题和需求是否真正理解与把握
网站架构的演化历程
一、初期阶段
访问量特别小,一台服务器足矣
二、应用服务和数据服务分离
之后业务的发展,网站的性能越来越差,这时就需要应用和数据分离。
应用和数据分离需要使用三台服务器:应用服务器
(处理大量业务逻辑,需要强大的CPU)、文件服务器
(存储用户上传文件,大的硬盘)、数据库服务器
(快速磁盘检索和数据缓存,需要更快的硬盘和更大的内存),网站的并发处理和数据存储得到很大改善
三、使用缓存改善网站性能
业务进一步发展,数据库压力大导致延迟,这时需要对网站架构进一步优化。使用缓存
改善网站性能。80%的业务访问集中在20%的数据上,把这部分数据缓存到内存中。网站使用的缓存:本地缓存(缓存在应用服务器上)和在远程缓存(缓存在专门的分布式缓存服务器上)
四、使用应用服务器集群改善网站的并发处理能力
上面的问题解决了,紧接着单一的应用服务器能够处理的请求有限,网站访问高峰期,应用服务器成为整个网站的瓶颈。使用集群
(增加服务器分担原有服务器的访问及存储压力)来解决高并发和海量数据问题,实现了系统的可伸缩性
五、数据库读写分离
虽然使用了缓存,大部分数据的读操作可以不访问数据库,但仍然有一部分读操作和全部的写操作需要访问数据库,这时用户达到一定规模,数据库因为负载压力过高成为网站瓶颈。目前大部分主流数据库都提供主从热备功能,通过配置两台数据库的主从关系,可以将一台数据库服务器的数据更新同步到另一台上。
六、使用CDN和反向代理加速网站响应
业务继续发展,不同地区的用户访问网站时,速度差别也极大。网站访问延迟和用户流失率正相关
加快网站访问速度,主要手段:CDN和反向代理(两者原理均为缓存)
区别在于:CDN部署在网络提供商的机房
反向代理部署在网站的机房。用户的请求首先到反向代理服务器
,然后若缓存着用户请求的资源,就直接返回给用户。
七、分布式文件系统和分布式数据库系统
分布式数据库是网站数据库拆分的最后手段(单表数据规模放大的时候使用)。
网站常用的数据库拆分手段是业务分库(不同业务的数据库部署在不同的物理服务器上)
八、使用NoSQL和搜索引擎
九、业务拆分
大型网站为应对日益复杂的业务场景,通过分治将网站分成不同产品线(首页、商铺、订单、买家、买家等)拆分成不同的产品线,分归不同的业务团队负责。应用之间的联系,通过 超链接(导航链接指向不同应用地址)、消息队列、访问同一个数据存储系统
十、分布式服务
业务拆分越来越小,存储系统越来越大,应用系统整体复杂度呈指数级增加,部署维护越来越困难。
将共用的业务提取出来,独立部署,通过分布式服务调用共用业务服务
大型网站架构技术的核心价值是伴随小型网站业务的逐步发展,慢慢地演化成一个大型网站,漫长的技术演化过程是润物细无声的,而不需要放弃什么、推翻什么以及剧烈的革命。驱动大型网站技术发展的主要力量是网站业务的发展