1.序言
最近在看关于三高(高并发/高可用/高扩展)系统的文章,和解决的其中的数据一致性等问题。一直在用springcloud,却发现没有系统总结过为什么要用微服务。这篇作为一个序章,从总体来看分布式系统解决的问题,和产生的问题。
2.什么事分布式系统
分布式系统(distributed system)由多台计算机和通信的软件组件通过计算机网络连接(本地网络或广域网)组成。
3.特点
- 系统中涉及的各个节点并行地工作。
- 这些节点的宕机事件是独立的。
- 这些节点之间没有一个全局时钟,也就是说各个节点的本地物理时钟是有偏差的。
4.优点
-
可用性(容错性)
分布式计算系统中的一个重要的优点是可靠性。一台服务器的系统崩溃并不影响到其余的服务器,仍可以正常对外提供服务。 -
可扩展性
可以通过线性的增加机器资源,来应对不断增长的外部需求。 -
资源共享
共享数据是必不可少的应用,如银行,预订系统。 -
灵活性
由于该系统是非常灵活的,它很容易安装,实施和调试新的服务。 -
更快的速度
多地部署,将用户请求按地理路由到最近机房处理。拥有多台计算机的计算能力,使得它比其他系统有更快的处理速度。 -
开放系统
由于它是开放的系统,本地或者远程都可以访问到该服务。 -
更高的性能
相较于集中式计算机网络集群可以提供更高的性能(及更好的性价比)。
5.带来的挑战
分布式系统最大的问题是复杂性。
-
数据的一致性
考虑到大量的机器故障:宕机、重启、关机,数据可能丢失、陈旧、出错,如何让系统容纳这些问题,对外保证数据的正确性,需要相当复杂的设计。 -
网络和通信故障
网络的不可靠,消息可能丢失、早到、迟到、Hang住,这给机器间的协调带来了极大的复杂度。像TCP等网络基础协议,能解决部分问题,但更多的需要系统层面自己处理。更不用说,开放式网络上可能存在的消息伪造。 -
管理复杂度
机器数量到达一定数量级时,如何对他们进行有效监控、收集日志、负载均衡,都是很大挑战。 -
延迟
网络通信延迟要比机器内通信高出几个数量级,而组件越多、网络跳数越多,延迟便会更高,这些最终都会作用于系统对外服务质量上。
6.总结
分布式系统能够提高系统的可用性、系统间的隔离性、横向扩展性带来更高的性能。同时也带了一些挑战,如数据一致性问题、网路故障、时延问题。