如何系统性地学习分布式系统?(上)
极客时间编辑部
讲述:初明明大小:4.64M时长:05:04
你好,欢迎收听极客视点。
学习一个知识之前,比较好的方式是先理解它的来龙去脉,即这个知识产生的过程,它解决了什么问题,它是怎么样解决的,还有它引入了哪些新的问题(没有银弹),这样我们才能比较好地抓到它的脉络和关键点,不会一开始就迷失在细节中。
所以,在学习分布式系统之前,我们需要解决的第一个问题是:分布式系统解决了什么问题?
分布式系统解决了什么问题?
第一,是单机性能瓶颈导致的成本问题。由于摩尔定律失效,廉价 PC 机性能的瓶颈无法继续突破,小型机和大型机能提高更高的单机性能,但是成本太高,一般的公司很难承受。
第二,是用户量和数据量爆炸性的增长导致的成本问题。进入互联网时代,用户量爆炸性地增长,用户产生的数据量也在爆炸性增长,但是单个用户或者单条数据的价值其实比软件时代的价值只低不高,所以必须寻找更经济的方案。
第三,是业务高可用的要求。对于互联网的产品来说,都要求 7x24 小时提供服务,无法容忍停止服务等故障。而要提供高可用的服务,唯一的方式就是增加冗余来完成,这样就算单机系统可以支撑的服务,因为高可用的要求,也会变成一个分布式系统。
基于上面的三个原因可以看出,在互联网时代,单机系统是无法解决成本和高可用问题的,但是这两个问题几乎对所有的公司来说都是非常关键的。所以,从单机系统到分布式系统是无法避免的技术大潮流。
分布式系统是怎么解决问题的?
那么,分布式系统是怎么解决单机系统面临的成本和高可用问题呢?其实思路很简单,就是将一些廉价的 PC 机通过网络连接起来,共同完成工作,并且在系统中提供冗余来解决高可用的问题。
分布式系统引入了哪些新的问题?
分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。从分布式系统定义中,我们可以看出,它通过多工作节点来解决单机系统面临的成本和可用性问题,但是它引入了对分布式系统内部工作节点的协调问题。
我们经常说掌握一个知识需要理解它的前因后果,对于分布式系统来说,前因是“分布式系统解决了什么问题”,后果是“它是怎么做内部工作节点的协调”,所以我们要解决的第二个问题是:分布式系统是怎么做内部工作节点协调的?
分布式计算引入了哪些新的问题?
先从简单的情况入手,对于分布式计算(无状态)的情况,系统内部的协调需要做哪些工作。
1. 怎样找到服务?
在分布式系统内部,会有不同的服务,服务 A 怎么找到服务 B 是需要解决的问题。一般来说,服务注册与发现机制是常用的思路,所以可以了解一下服务注册发现机制实现原理,并且可以思考服务注册发现是选择做成 AP 还是 CP 系统更合理。
2. 怎样找到实例?
找到服务后,当前的请求应该选择发往服务的哪一个实例呢?一般来说,如果同一个服务的实例都是完全对等的(无状态),那么按负载均衡策略来处理就足够;如果同一个服务的实例不是对等的(有状态),那么需要通过路由服务先确定当前要访问的请求数据做哪一个实例上,然后再进行访问。
3. 怎样避免雪崩?
避免雪崩的总体策略比较简单,有两个思路。一是快速失败和降级机制(熔断、降级、限流等),通过快速减少系统负载来避免雪崩的发生;二是弹性扩容机制,通过快速增加系统的服务能力来避免雪崩的发生。根据不同的场景可以做不同的选择,或者两个策略都使用。
一般来说,快速失败会导致部分的请求失败,如果分布式系统内部对一致性要求很高的话,快速失败会带来系统数据不一致的问题,弹性扩容会是一个比较好的选择,但是弹性扩容的实现成本和响应时间比快速失败要大得多。
4. 怎样监控告警?
对于一个分布式系统,如果我们不能很清楚地了解内部的状态,那么高可用是没有办法完全保障的,所以对分布式系统的监控、分布式追踪、模拟故障的混沌工程以及相关的告警等机制是一定要完善的。
以上是分布式系统解决问题的原理以及分布式计算是如何进行内部协调的,受篇幅所限,下文继续分享如何从分布式存储进行系统内部协调,以及在进阶学习阶段,我们应该怎么做。欢迎持续关注。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(1)
- 最新
- 精选
- 小斧学习一个知识之前,比较好的方式是先理解它的来龙去脉,即这个知识产生的过程,它解决了什么问题,它是怎么样解决的,还有它引入了哪些新的问题(没有银弹),这样我们才能比较好地抓到它的脉络和关键点,不会一开始就迷失在细节中。1
收起评论