读书要思考和实践。
很早之前有一句话一直记在心中,敦使我开始阅读这本书:“系统并不是设计出来的,而是进化出来的”。
大型网站(系统)的特点:
大致浏览了一下,本书围绕着解决这些问题来书写
1、高并发、大流量;
2、高可用;
3、海量数据;
4、用户分布广泛,网络情况复杂;
5、安全环境恶劣;
6、需求快速变更,发布频繁;
7、渐进式发展:与传统软件产品或企业应用系统一开始就规划好全部的功能和非功能需求不同,几乎所有的大型互联网站都是从一个小网站开始,渐进地发展起来的。
演化发展历程:
1、初始阶段:一台服务器 到 三台服务器
一台服务器:应用程序、文件、数据库
why:随着访问量的增加,怎么做一些优化呢?
how:服务器分离
应用服务器:大量业务逻辑,需要强大的cpu;
文件服务器:存储大量数据,需要大容量硬盘;
数据库服务器:快速磁盘检索、数据缓存,需要高速硬盘和内存;
2、增加 分布式缓存 服务器
why:理论上 80% 的访问集中在 20% 的数据上(比如那些热门商品比不热门的访问量大)。
how:使用缓存提升访问性能。分为两种:
1)缓存在应用服务器上的本地缓存:速度快,容量小;
2)缓存在专门的分布式缓存服务器上的远程缓存:可使用集群,大容量;
3、增加 应用服务器集群,负载均衡服务器
why:进一步改善负载压力,实现系统可伸缩性。
how:应用服务器实现集群化是网站可伸缩集群架构设计中较为简单成熟的一种,多台应用服务器通过负载均衡调度服务器获取用户(浏览器)访问请求
增加应用服务器集群(图片来自《大型网站技术架构》)4、数据库读写分离,数据访问模块
why:在 “3” 中,使用缓存,但还是存在 “缓存访问不命中、缓存过期” 以及 “写数据” 需要访问数据库的情况。
how:一般主流数据库都有 “主从热备” 功能,使用此功能实现读写分离,当然还有其他方式。读写分离后,在应用服务器使用专门的数据访问模块,使得数据读写分离对应用透明。
5、增加 反向代理 和 CDN
why:用户规模扩大,地域分布不均,网站响应延迟和用户流失比率正相关。
how:两项服务的基本原理都是缓存,不同的是:
1)反向代理服务器:部署在网站中心机房;
2)CDN:部署在网络提供商机房,用户可以从离自己最近的提供商获取数据;
网站使用反向代理和CDN加速访问(图片来自《大型网站技术架构》)6、改造 文件系统 和 数据库系统 为分布式
why:单一服务器无法满足持续增长的业务需求,即使是诸如一台数据库服务主从分离为两台。
how:分布式数据库是网站数据库拆分的最后手段,只有在单表数据非常庞大时才使用。更常用的手段是 “业务分库”,将不同业务的数据库部署在不同的物理服务器上。
7、增加 NoSQL 和 搜索引擎 以及 统一的数据访问模块
why:非关系数据库 、 非数据库查询技术能优化对数据的存储和检索,其对可伸缩性的分布式特性具有更好的支持。
how:
1)增加搜索引擎服务器
2)增加NoSQL服务器
3)随着服务的增多,数据访问模块承担更多的功能,应用服务器通过统一数据访问模块访问各种数据(缓存、文件服务、数据库、搜索、NoSQL),减轻应用管理多数据源麻烦。
8、业务拆分 和 分布式服务
可以注意到,一步一步的演化下来,其实关键词都是“用户的增加”、“日益复杂的业务”,为了解决这些问题而增加和改进系统。
我们可以进一步将整个网站业务分成不同的产品线,具体到技术上,拆分成许多不同的应用,每个应用独立部署维护。
那么应用之间如何建立关系呢?可以通过:超链接(页面导航指向不同应用地址)、消息队列进行数据分发、访问同一个数据存储系统来构成一个关联的完整系统
。。。。。。
这样一来,又会出现 “业务拆分越来越小,存储系统越来越大” ,直接导致数据库连接资源不足的问题。
优化方式为:将 “共用业务” 提取出来,独立部署。应用系统只需要管理用户界面,通过分布式服务调用共用业务服务完成具体业务操作。
。。。。。。
对比一下,从业务拆分到增加分布式服务的的系统的不同:
应用拆分(图片来自《大型网站技术架构》) 分布式服务(图片来自《大型网站技术架构》)总结一下:到目前为止,我所理解的演化理由,就是规模的扩大;演化的目的,就是为了访问的快速和稳定;演化的目标(也可以是目的),就是为了可维护性。
演化的价值观:
作者认为~
演化不是革命:
从LAMP(Liunx + Apache + MySQL + PHP)或是更便宜和简单的其他技术搭建的小型网站开始,在漫长的演化过程中,不需要放弃什么,不需要推翻什么,不需要剧烈的革命,就那么润物细无声地把一个只有一台服务器的小网站,演化成几十万台服务器,数十亿用户的大网站。
技术和业务的关系和要避免的误区:
驱动技术发展的主要力量是网站的业务发展,业务成就了技术、事业成就了人而不是相反。
业务尚未理清楚的情况下盲目仿照成功互联网公司的平台,从外面挖来技术高手也使不上劲。
不要跟风大公司的解决方案;不要脱离业务发展,为了技术而技术;不要企图用技术解决所有问题,技术是用来解决业务问题的,而业务问题,也可以通过业务手段去解决。
网友评论