分布式系统理解

分布式系统以其纷繁复杂的概念,涉及到诸多技术、理论与协议,形成一个庞大的知识体系,困扰着各位初学者。如何窥斑见豹,从这些繁杂的信息中整理出脉络,是理解和学习分布式系统思想的关键。

在此按照理解复杂问题的抽象思考法则,剖析一下我对分布式系统的理解。

一、抽象剃刀思想

按照奥卡姆剃刀哲学,理解问题的方式,是需要用思维的剃刀,剖去所有与本质无关的信息,方能了解一件事物的本质。那么,如何辨别哪些是无关事物脉络信息呢?

关键在于看待事物的角度,从不同的角度,可以得到不一样的信息。但是之于信息量十分庞大的体系,换角度看无非等于万华镜般,无法触及根本思想。所以,我们需要的是抽象。

抽象,其实是站在更高维度的角度,看待问题。我们解决数学问题的基本思想,就是使用高维解法,解决低维运算量庞大的问题,抽象可以将事物立体化,在更高维度能把复杂的低维问题,信息量缩小一个维度,可以非常清晰地简化和把握事物本质。

所谓抽象剃刀,便是先对复杂问题抽象到更高层次进行观察理解,便可以更加接近事物的本质。

二、抽象理解分布式系统思想

分布式系统思想,涉及的非常多技术、理论,乍一看难以通过部分学习来理解全貌。但是我们抽象地理解,从全息地角度去思考分布式系统的意义。

分布式系统,本质上是为了解决扩展单个资源能力有限的困境,采用集群,扩展系统能力。

而集群,并不是简单的拼接资源就可以。分布式思想重点就在于,如何组织集群。

组织集群的目标在于使集群各部分真正的成为一个整体。真正成为整体有三个要素:

1.互通有无(信息交互、注册中心)

2.协调一致(分布式锁、分布式事务)

3.统一调度(实现分布式锁的注册中心)

这三个方面,就包含了分布式思想要解决的所有方面。

其一,互通有无。即各集群之间的通讯问题,这就涉及到使用消息中间件MQ(消息队列Message Queue)技术,消息中间件作为各部分的消息通道,保证了集群各部分信息交互,为形成整体以及之后的一致性提供保障。常见的消息队列技术有ActiveMQ、RabbitMQ、kafka等。

或者dubbo框架一样设置统一的rpc注册中心,通过生产者注册服务(register service),消费者订阅服务(subscribe service),来进行微服务集群各部分间交流。

其二、协调一致。指的是解决集群各部分,同时使用共享资源(shared resource)发生的多线程并发问题。即保证集群之间使用共享资源的行为具有事务的基本特性(原子性、一致性、隔离性及持久性),实现方式就是分布式锁和分布式事务等方案。

分布式锁主要有:基于数据库实现分布式锁;基于缓存(redis,memcached,tair)实现分布式锁;基于zookeeper实现分布式锁。

分布式事务主要实现方式是TCC事务(trying、confirm、cancel),或者使用消息队列技术避免分布式事务事务。  

其三、统一调度。即使用集群的时候,如何调度集群各部分,进行任务分配。这就需要实现分布式锁的注册中心,进行服务的subscribe以及register,现在流行的分布式锁实现有zookeeper。阿里开源的分布式框架dubbo就是使用zookeeper实现的注册中心

这样,就能大致理解各项技术,在分布式系统中所处地位。

猜你喜欢

转载自my.oschina.net/u/3487162/blog/1617076