从时间这个概念说起
最基本的问题往往是最难解的问题,比如时间。
我们每个人都知道时间,也都在使用时间。同事之间要聚会了,会互相通知今晚七点不见不散,过了两小时,吃饱喝足了,聚会也就散了。“今晚七点”和“过了两小时”代表着日常使用时间的两个方面,时刻和持续时间。
在传统的牛顿时空观里,“时间是存在于宇宙之中的绝对刻度”,无论在何处观察某一刻的时间,看到的时间都是一样的,不会发生任何改变。但是爱因斯坦的相对论则表示,某一时刻是没有任何意义的,除非是确定那一个位置观察到的时刻。也就是说:
由于光速不变,不同的观察者在相对运动时度量的是不同的时间。也因为光速是信息传输的速度上限,观测者间就绝对时钟达成一致变得几乎不可能。
牛顿和爱因斯坦的差异在计算机领域里也体现的淋漓尽致。在单机系统里,我们不会关心我们的代码里的时间概念,因为任何进程在本机里观察到的时间都是一样的,不会说在同一台机器里,A进程记录的时间是9点,B进程观察到的时间却是9点1分。如果把单机里的观念带进分布式系统里,认为任何服务器互相观察到或者是使用的时间是一致的,那就大错特错了。
正如分布式系统里常提到的那样八个错误:网络是可靠的、延迟为零、带宽是无限的、网络是安全的、拓扑是不变的、总有个管理员、传输开销为零、网络是同质的,程序员在刚开始接触分布式系统时,也会不自觉地认为每台服务器的时间是一致的,也就是时间是存在于每个服务器之中的绝对刻度。
现实是,因为网络延迟的存在,每个服务器从时间服务器接收到时间是不一致的,又因为一般服务器内使用的石英钟本身的缺陷,时间也不可能精准的一秒一秒的走下去,也就是说,如果没有一定的手段保证服务器之间的时间一致性,那么靠服务器自身是无法做到服务器之间的时间一致性的。
如果无法做到服务器之间的时间一致性,对于分布式系统来说,影响是致命的。计算机都起源于图灵机,而图灵机的核心之一是一系列有顺序的指令。如果分布式系统也能简化为“一系列有顺序的指令”,那么我们就可以把分布式系统当做一个单机系统看待了。
一个分布式系统可以描述为一个特殊的具有多个由网络互联的处理器的串行状态机。如果我们能对全部输入事件进行全排序,就能够实现任何由网络互联的处理器组成的状态机,也就可以实现任意的分布式系统。全序事件是分布式系统的圣杯。
现实世界里,有很多种方式去实现分布式系统里的全序,感兴趣的读者可以阅读下面的参考链接。
参考链接
- https://zhuanlan.zhihu.com/p/87649080
- https://zhuanlan.zhihu.com/p/183843997
- https://developer.51cto.com/art/202002/610742.htm
- https://www.6up7.com/time-in-distributed-system/
相关文章
- 金融服务领域的大数据:即时分析
- 影响大数据、机器学习和人工智能未来发展的8个因素
- 从0开始构建一个属于你自己的PHP框架
- 如何将Hadoop集成到工作流程中?这6个优秀实践必看
- SEO公司使用大数据优化其模型的5种方法
- 关于Web Workers你需要了解的七件事
- 深入理解HTTPS原理、过程与实践
- 增强分析:数据和分析的未来
- PHP协程实现过程详解
- AI专家:大数据知识图谱——实战经验总结
- 关于PHP的错误机制总结
- 利用数据分析量化协同过滤算法的两大常见难题
- 怎么做大数据工作流调度系统?大厂架构师一语点破!
- 2019大数据处理必备的十大工具,从Linux到架构师必修
- OpenCV中的KMeans算法介绍与应用
- 教大家如果搭建一套phpstorm+wamp+xdebug调试PHP的环境
- CentOS下三种PHP拓展安装方法
- Go语言HTTP Server源码分析
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十