+++
pre = "<b>3.4. </b>"
title = "分布式治理"
weight = 4
chapter = true
+++

## 背景

随着数据规模的不断膨胀，使用多节点集群的分布式方式逐渐成为趋势。在这种情况下，如何高效、自动化管理集群节点，实现不同节点的协同工作，配置一致性，状态一致性，高可用性，可观测性等，就成为一个重要的挑战。

本部分包括三个模块：治理、可观测性、集群管理（计划中）。

## 挑战

分布式治理的挑战，主要在于集群管理的复杂性，以及如果以统一和标准的方式对接各种第三方集成组件。

集成管理的复杂性体现在，一方面我们需要把所有的节点，不管是底层数据库节点，还是中间件或者业务系统节点，它们的状态都统一管理起来，并且能够实时的探测到最新的变动情况，进一步为集群的控制和调度提供依据。这方面我们使用集群拓扑状态图来管理集群状态，同时使用心跳检测机制实现状态检测与更新。

另一方面，不同节点节点之间的统一协调，策略与规则的同步，也需要我们能够设计一套在分布式情况下，进行全局事件通知机制，以及独占性操作的分布式协调锁机制。这方面，我们使用 Zookeeper/Etcd 等实现配置的同步，状态变更的通知，以及分布式锁来控制排他性操作。

同时，由于治理功能本身可以采用合适的第三方组件作为基础服务，需要我们抽象统一的接口，统一各种不同的组件的标准调用API，对接到治理功能模块。

最后对于可管理性和可观测性的要求，我们需要完善通过UI查询、操作和控制系统的功能，进一步完善对于 tracing 和 APM 的支持。

## 目标

对于治理功能，目标如下：

- 实现配置中心：支持 Zookeeper/etcd/Apollo/Nacos，管理数据源、规则和策略的配置。
- 实现注册中心：支持 Zookeeper/etcd，管理各个 Proxy 示例的状态。

对于可观测性，目标如下：

- 支持 OpenTracing/Skywalking 集成，实现调用链的跟踪；
