文章目录
一. 分布式架构要解决的问题
- 为了应对请求的高并发和业务的复杂性,需要对应用服务进行合理拆分,将其从原来的大而集中变成小而分散;
- 要想让这些分散的服务共同完成计算任务,就需要解决它们之间的通信与协同问题;
- 和服务一样,负责存储的数据库也会有分散的情况,因此需要考虑分散存储;
- 所有的服务、数据库都需要硬件资源作为支撑,所以需要对资源的管理和调度;
- 软件系统上线以后,还需要对关键指标进行监控。
二. 架构设计的演进过程
本章主要讨论:架构设计经历了哪些阶段,以及每个阶段分别解决了哪些问题,又引出了哪些新问题。
1. 应用与数据一体
应用与数据库都部署到一台机器上,比如网页浏览、OA 等,访问人数有限,单台服务器就能轻松应付,利用 LAMP(Linux、Apache、MySQL、PHP)技术就可以迅速搞定。
2. 应用与数据分离
随着业务的发展,用户数量和请求数量逐渐上升,服务器的性能便出现了问题。
- 应用服务器由于需要处理大量的业务请求,因此对 CPU 和内存有一定要求;
- 数据服务器因为需要对数据进行存储和索引等 IO 操作,所以更多地会考虑磁盘的转速和内存。 简单的做法就是应用和数据库部署在不同的机器上。
3. 添加缓存:突破数据库(IO)瓶颈
背景:数据库成为瓶颈,即使增加服务器的数量,也不能解决。数据增加对某些数据请求量特别大。获取这些信息的方式是依靠数据库,因此会受到数据库IO性能的影响,久而久之,数据库便成为了整个系统的瓶颈。
这时可以引入缓存技术:
- 加入缓存技术后,系统性能得到了提高。这是因为缓存位于内存中,而内存的读取速度要比磁盘快得多,能够很快响应用户请求。特别针对一些热点数据,优势尤为明显。
- 在可用性方面也有明显改善,即使数据服务器出现短时间的故障,在缓存服务器中保存的热点数据或者核心数据依然可以满足用户暂时的访问。
缓存技术分为:客户端浏览器缓存、应用服务器本地缓存和缓存服务器缓存
。
- 客户端浏览器缓存:
当用户通过浏览器请求应用服务器的时候,会发起 HTTP 请求。如果将每次 HTTP 请求都缓存下来(how),就可以极大地减小应用服务器的压力。- 应用服务器本地缓存:堆
这种缓存使用的是进程内缓存,又叫托管堆缓存。 由于它运行在内存中,对数据的响应速度很快,因此通常用于存放热点数据。当进程内缓存没有命中时,会到缓存服务器中获取信息,如果还是没有命中,才会去数据库中获取。- 缓存服务器缓存:例如redis
就