『大型网站技术架构:核心原理与案例分析』(一)


一、大型网站架构演化

1. 架构演化

  • 应用程序、数据库、文件服务器部署在同一台机器
  • 应用程序、数据库、文件服务器独立部署
  • 使用缓存,加速数据读取
  • 应用程序集群化,负载均衡
  • 数据库读写分离
  • CDN加速
  • 分布式文件系统、分布式数据库
  • NoSQL + 搜索引擎
  • 业务拆分,数据库共享
  • 服务化,业务分库

2. 演化价值观

  • 逐步发展、灵活应对
  • 业务驱动技术发展:业务成就技术、事业成就人

3. 误区

  • 追随大公司解决方案:”taobao/facebook就是这么搞的”
  • 为了技术而技术:一味追求新技术,误入崎岖道路
  • 企图用技术解决所有问题:考虑通过业务手段解决业务问题(12306排队机制、调整放票时段,不搞秒杀)

二、大型网站架构模式

面临高并发访问、海量数据处理、高可靠运行等挑战,总结出许多解决方案和可重复的模式,以实现高性能、高可用、易伸缩、可扩展、安全等各种技术架构目标。

1. 分层

定义:将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整系统。

举例: OSI 7层协议,计算机架构(硬件、OS、应用软件),网站系统(应用层、服务层、数据层), MVC。

注意事项:

  • 合理规划层次边界和接口
  • 避免跨层调用
  • 避免逆向调用

2. 分割

定义: 在纵向对软件进行切分。

举例:网站业务拆分(购物、论坛、搜索、广告等),购物业务拆分(酒店业务、3C业务、小商品业务等)

3. 分布式

目标: 分层和分割后的模块拥有更小的粒度,目的是分布式部署,便于使用更多资源(CPU、内存、存储等),提供更多服务。

注意事项:

  • 服务间调用通过网络,造成性能影响。
  • 服务器越多,宕机概率越大,服务可用性降低。
  • 数据一致性问题。
  • 依赖复杂。
  • 开发管理苦难。
  • 切莫为了分布式而分布式。

分布式方案:

  • 分布式应用和服务:分层和分割后的应用和服务模块分布式部署。
  • 分布式静态资源:静态资源(JS、CSS、图片等)分布式部署,动静分离。
  • 分布式数据和存储:海量数据存储,分布式NoSQL。
  • 分布式计算:实时计算,搜索引擎、MapReduce分布式计算框架。
  • 分布式配置:服务器配置实时更新。
  • 分布式锁:分布式环境下的并发和协同。
  • 分布式文件系统:云存储。

4. 集群

定义: 多台服务器部署相同应用或模块,通过负载均衡对外提供服务。提高并发性和可用性。

5. 缓存

定义:将数据存放在距离计算最近的位置以加快处理速度。

举例:

  • CDN: 缓存静态资源。
  • 反向代理:缓存静态资源。
  • 本地缓存: 数据缓存在本机内存,减少访问数据库。
  • 分布式缓存: 可以缓存更多地数据。

缓存使用前提:

  • 数据访问热点不均衡。
  • 数据有一段有效期,不会很快过期,否则很容易脏读。

6. 异步

目标:降低系统间耦合性。

类型:

  • 单一服务:多线程共享内存队列。
  • 分布式系统:分布式消息队列。

异步消息队列特性:

  • 提高系统可用性:消费者故障不影响生产者继续处理业务请求。
  • 加快网站响应速度: 生产者处理业务请求后将数据写入队列,无需等待消费者处理完毕,减少响应延迟。
  • 消除并发访问高峰:突发事件、促销活动、热点事件。

7. 冗余

目标:数据冗余备份,当某台服务器宕机,可以将其上的服务和数据访问转移到其他机器,提高服务可用性。

类型:

  • 冷备份: 定期备份,存档保存。
  • 热备份: 主从分离,主从同步。
  • 灾备数据中心:实时同步网站程序和数据到多个数据中心,抵抗地震、海啸等不可抗力因素。

8. 自动化

目标:一切自动化。

类型:

  • 自动化代码管理:针对开发,代码版本控制、代码分支创建合并自动化。
  • 自动化测试:自动部署到测试环境,运行测试用例,发送测试报告,反馈测试结果。
  • 自动化安全检查:代码静态安全扫描,安全攻击测试。
  • 自动化部署:自动化部署到生产环境。
  • 自动化监控
  • 自动化报警
  • 自动化失效转移:将失效服务器从集群中隔离。
  • 自动化失效恢复:故障消除后重启服务,同步数据。
  • 自动化降级:遇到访问高峰时拒绝部分请求及关闭部分不重要服务,将系统负载降至安全水平。
  • 自动化分配资源:将空闲资源分配给重要服务,扩大其部署规模。

9. 安全

安全手段:

  • 用密码和手机校验码进行身份认证。
  • 加密通信。
  • 验证码机制防止机器人。
  • 进行编码转换等防止XSS、SQL注入。
  • 垃圾信息、敏感信息过滤。
  • 交易信息进行风险控制。

三、大型网站架构要素

架构:最高层次的规划,难以改变的决定。

1. 性能

手段

  • 浏览器端: 浏览器缓存、页面压缩、页面布局、减少Cookie传输、CDN等;
  • 应用服务器端:本地缓存、分布式缓存、消息队列、集群,多线程、改善内存管理;
  • 数据库服务器端:索引、缓存、SQL优化,NoSQL(优化数据模型、存储结构、伸缩性);

指标

  • 响应时间
  • TPS
  • 系统性能计数器

2. 可用性

手段:冗余

  • 应用服务器: 负载均衡 + 流量切换;
  • 存储服务器: 实时备份 + 访问转移 + 数据恢复

3. 伸缩性

定义: 通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。

  • 应用服务器: 无状态;
  • 缓存服务器: 改进缓存路由算法。注意严重依赖缓存场景下,缓存失效导致整个网站崩溃;
  • 关系数据库: 需在数据库外实现伸缩性,通过路由分区等手段将多个数据库组成集群;
  • NoSQL:先天为海量数据而生,线性伸缩。

4. 扩展性

标准:

  • 网站快速发展,功能不断扩展,系统架构能够使其快速响应需求变化;
  • 新增业务,对现有产品透明无影响;
  • 产品间很少耦合。

手段:

  • 事件驱动架构:通过消息队列实现,用户请求和其他业务事件是生产者,消息处理者是消费者,可以透明增加新的消息生产者任务或者消费者任务;
  • 分布式服务:将业务和可复用服务分离开来,通过分布式服务框架调用。新增产品可以通过调用可复用的服务实现自身业务逻辑。可复用服务升级变更时,通过多版本方式对应用实现透明升级。

5. 安全性

标准: 针对现存和潜在的攻击和窃密手段,是否有可靠的应对策略。


你可能感兴趣的:(『大型网站技术架构:核心原理与案例分析』(一))