一、浅谈分布式系统
1. 单机架构:只有一台服务器,这个服务器负责所有的工作。
如果遇到了服务器不够的场景怎么处理?
- 开源:增加更多的硬件资源
- 节流:软件上的优化,优化代码等…
- 一台服务器资源使用有限,就需要引更多的服务器,此时系统复杂度就会大大提高!
2. 应用服务和数据库服务分离
3. 引入更多的应用服务器节点
那上述中 负载均衡服务器 看起来承担了所有的服务请求,那么它顶得住吗?
负载均衡服务器,对于请求量的承担是远远超过应用服务器的。
这就好比:
● 负载均衡服务器是领导,负责分配任务
● 应用服务器是组员,复杂执行任务
就算请求量多到负载均衡服务器也承担不了,那就引入更多负载均衡服务器~(多个机房)
4. 数据库服务器怎么解决承担压力?
在上述中,应用服务器虽然分担了压力,但是数据库服务器仍然只有一个,那该怎么办呢?
主服务器一般是一个,从服务器可以有多个。(一主多从);同时从数据库中通过负载均衡的方式,让应用服务器进行访问。
5. 引入缓存
然而数据库有个天然的问题,响应速度是很慢的,因为是从硬盘中读取数据~
所以我们把数据区分为“冷热”,热点数据放到缓存中,访问的速度比数据库快很多!
6. 数据库如何承担更大的数据量?
上述是解决了请求量(并发量)的问题,但是数据库容量始终有限,如果出现一台服务器存不下数据该怎么办?
可以针对数据库进行分库分表的操作。引入多个数据库服务器,每个数据库服务器存储一个或者一部分数据库.
7. 微服务架构
之前的应用服务器,一个服务器程序做了很多事情,这可能会导致这个服务器代码越来越复杂~
为了更方便的维护,就可以把一个复杂的应用服务器拆分成更多的、更单一的服务器(微服务)
微服务本质上是解决了“人”的问题~
引入微服务出现的问题:
● 系统性能下降,拆出来更多的服务,多个功能之间更要依赖网络通信,网络通信的速度速度很可能比硬盘还慢!
● 系统复杂度提高,可用性受到影响,服务器,出现问题概率更高!
微服务的优势:
● 解决了“人”的问题
● 使用微服务,可以更方便于功能的复用
● 可以给不同的服务进行不同的部署
8. 总结
- 单机架构(应用程序+数据库服务器)
- 数据库和应用分离:应用程序和数据库服务器分别放到不同主机上部署
- 引入负载均衡:多个应用服务器之间通过负载均衡把请求比较均匀分发给集群中的每个服务器
- 引入读写分离,数据库主从结构:一个数据库作为主节点,其他数据库作为从节点。主节点负责 写数据,从节点负责 读数据。(主节点需要把修改过的数据同步给从节点)5
- 引入缓存:冷热数据分离结构,进一步提升服务器处理请求的能力 (数据库和缓存数据一致性问题)
- 数据库分库分表:数据库能够进一步扩展存储空间,根据具体业务
- 微服务架构:从业务上进一步拆分应用服务器,拆分成功能单一,更简单的服务器