这是 Martin Kleppmann 博士的《分布式系统》课程第一篇笔记。
分布式系统其实是一个比较简单的概念,没有那么玄乎。比如在日常工作中,大家使用微信等工具互相传递消息,从而共同完成某一件事情,那么这群人在某种意义上来说就是一个分布式系统了。由此可见一个分布式系统的核心特征在于
只要包括了这三点,就可以认为这个系统是一个分布式系统了。
那么为什么需要一个分布式系统呢?
对于很多情况而言,系统天然就是分布式的,比如朋友之间互相打电话,这种情况下就必须使用网络去传递消息了。
而某些系统即使使用一个机器也可以完成某个任务,也需要增加多台机器,以保证这个机器不会因为宕机等原因导致系统失效,从而让系统更加可靠。
除此以外,如果一个系统里有多台机器的话,面对多个请求,可以把请求分散到各个机器上,以减轻每个机器上的负担。并且再考虑到地理因素,我在广东省打电话的话,那么肯定是广东这边的运营商的机器会处理的更快一些,而不是转接到其它省市。
另外,如果我们需要处理的数据量过大的话,一个机器也不一定能够存储下所有数据。比如我们使用微信发的朋友圈信息,能想象到腾讯只使用一台机器就能存储下所有的人发的朋友圈信息吗?
当然分布式系统也不是能解决所有问题,它自身也面临着机器增多所带来的系统复杂性的成倍增长。比如当系统中的某一台机器突然失去了联系,该如何判断这台机器是因为断网失去联系,还是因为机器本身坏了导致的,亦或是当你准备把机器踢出系统时,你却突然发现这机器又恢复正常,刚好仅仅只是因为网络波动而已。遇到这些情况时,我们该如何处理,而这些事情的发生又是不确定性的,无法预料的。
更何况,如果仅仅因为系统内部发生的很小的问题,导致整个系统不可用,那和使用一台机器处理事情又有何区别呢?
因此对于一个分布式系统而言,单单是保证其系统的可靠性就面临着非常大的挑战。而经过这么多年的探索和实践,程序员们不知道少了多少根头发,提出了一系列算法和方案,终于让分布式系统可以稳定的运行,让使用者丝毫察觉不到系统内部发生的小小问题。
而这就是Martin Kleppmann 博士的《分布式系统》课程后面所要讨论的问题了。