zoukankan      html  css  js  c++  java
  • 分布式系统理解

    2018/02/01 发布

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

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

    一、抽象剃刀思想

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

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

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

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

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

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

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

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

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

    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实现的注册中心

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

  • 相关阅读:
    101. Symmetric Tree(js)
    100. Same Tree(js)
    99. Recover Binary Search Tree(js)
    98. Validate Binary Search Tree(js)
    97. Interleaving String(js)
    96. Unique Binary Search Trees(js)
    95. Unique Binary Search Trees II(js)
    94. Binary Tree Inorder Traversal(js)
    93. Restore IP Addresses(js)
    92. Reverse Linked List II(js)
  • 原文地址:https://www.cnblogs.com/mithrandirw/p/8468938.html
Copyright © 2011-2022 走看看