03 架构的核心原理
21丨分布式架构:如何应对高并发的用户请求
- 高并发解决方案:
- 垂直伸缩: 提升单台服务器处理能力
- 水平伸缩: 使用多台服务器构成集群,对外统一提供服务
- 互联网分布式架构
- 除了高并发,还有这些挑战:
- 数据规模:UGC 和行为数据
- 大流量:要考虑大型文件或流数据对带宽的压力
- 高峰场景:无计划或有计划的访问量爆发(营销活动、热点事件)、DDoS,要求系统可伸缩
- 安全性:暴露在公网,安全通信和隐私保护问题不可避免
- 高可用:宕机意味着用户流失,复杂网络环境问题等外部因素也要考虑在内
- 快速变化:产品创新以吸引和留存用户,这需要可扩展的系统设计和高效敏捷的团队协作机制
22丨缓存架构:如何减少不必要的计算?
- 缓存:
- 通读(read-through)缓存: 应用程序访问通读缓存获取数据,如果缓存中存在数据则返回,不存在数据则由通读缓存访问数据源,获取数据后返回并缓存
- 旁路(cache-aside)缓存: 应用程序访问旁路缓存获取数据时,缓存中存在数据则返回,否则返回空(null),应用程序需要自行从数据源读取数据并写入旁路缓存中留待下次使用
- 通读(read-through)缓存: 应用程序访问通读缓存获取数据,如果缓存中存在数据则返回,不存在数据则由通读缓存访问数据源,获取数据后返回并缓存
- 通读缓存和旁路缓存的实现,基本上都是用Hash表实现
- 通读缓存主要应用:
- CDN(Content Delivery Network): 内容分发网络,部署在网络服务商机房中的缓存,距离用户非常近,只能缓存静态数据内容
- 反向代理: 用户请求到达反向代理缓存服务器,反向代理检查本地是否有需要的数据,如果有则直接返回,没有则请求应用服务器,得到需要的数据后缓存在本地并返回给用户
- CDN(Content Delivery Network): 内容分发网络,部署在网络服务商机房中的缓存,距离用户非常近,只能缓存静态数据内容
- 旁路缓存主要应用:
- 对象缓存:
- 本地缓存: 缓存和应用程序在同一个进程中启动,使用程序的堆空间存放缓存数据,响应速度快,但是可用的内存空间相对较小
- 分布式缓存: 将一组服务器构成一个缓存集群,共同对外提供缓存服务
Memcached缓存集群
- 对象缓存:
- 使用缓存的好处:
- 缓存数据通常存储在内存中,相比与从硬盘上获取,速度更快,响应时间更短,性能能更高
- 缓存数据通常是计算结果数据,可以减少CPU计算消耗,节省计算资源,加快处理速度
- 通过对象缓存获取数据,可以降低数据库负载压力,通过CDN、反向代理等通读缓存获取数据,可以降低服务器负载压力。释放出来的计算资源可以提供给其他更有需要的场景,间接提高整个系统的处理能力
- 使用缓存可能带来的问题:
- 数据脏读: 缓存的数据来自数据源,数据源的数据发生变更时,缓存中的数据则成为了脏数据
解决方案: 过期失效、失效通知
- 数据脏读: 缓存的数据来自数据源,数据源的数据发生变更时,缓存中的数据则成为了脏数据
23丨异步架构:如何避免互相依赖的系统间耦合?
- 同步架构