系统服务化构建-分布式基本特征

本文给出了分布式系统的初步概念模型,通过介绍分布式消息队列的几种分类以及Redis的分布式高可用哨兵模型,进而引出分布式系统的几个特征,副本,故障总会发生,消息的多样性,异常的分类。

一 分布式系统概念及协作技术

分布式并没有一个具体的概念

一种解释:分布式系统是一个硬件或软件组件分布在不同的网络计算机上,通过消息传递进行通信和协调的系统。另一种解释 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。

分布式系统上不同的计算机资源为了完成共同的任务,必然需要相互协作,而源于故障的无处不在,我们很难判断相互协作是否成功。那么我们可以理解为Zookeeper 是提供解决整个发呢不是系统内单点故障,维护系统内负载均衡和服务的自治系统的保障者

ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法:配置维护、组服务、分布式消息队列分布式通知/协调等。

什么是分布式系统中的单点故障:通常分布式系统采用主从模式,就是一个主控机连接多个处理节点。主节点负责分发任务,从节点负责处理任务,当我们的主节点发生故障时,那么整个系统就都瘫痪了,那么我们把这种故障叫作单点故障。

二 分布式消息队列

消息当做应用程序之间的一种通信方式,消息可以起到解耦的作用。

分布式消息的传输模式一般包括点对点消息传送(P2P)和订阅发布(Pub/Sub)两种模式

2.1 点对点消息推送


2.2 发布订阅方式


思考 1) 消息队列系统设计中如何处理数据持久化,

答案:持久化与高吞吐率保持平衡,需要顾及一端,不可能同时兼顾

2)高并发情况下,消息发送的顺序性很难保障

这个问题演变为以下问题

分布式消息系统中,如何避免消息重复?

造成消息重复的根本原因是:网络不可靠。只要通过网络交换数据,就无法避免这个问题。所以解决这个问题的办法就是绕过这个问题。那么问题就变成了:如果消费端收到两条一样的消息,应该怎样处理?

a. 消费端处理消息的业务逻辑保持幂等性;

b. 保证每条消息都有唯一编号且保证消息处理成功与去重表的日志同时出现。

通过幂等性,不管来多少条重复消息,可以实现处理的结果都一样。再利用一张日志表来记录已经处理成功的消息的ID,如果新到的消息ID已经在日志表中,那么就可以不再处理这条消息,避免消息的重复处理。

3分布式系统异常

分布式系统的核心就是处理各种各样的异常情况

3.1 网络异常中分布式系统的三态

分布式系统一般需要区别对待 RPC 的“成功”、“失败”、“超时”三种状态。当出现“超时”时可以通过发起读取数据的操作以验证。

RPC

是否成功(例如银行系统的做法)。另一种简单的做法是,设计分布式协议时将执行步骤设计为可重试的,即具有所谓的“幂等性”。失败的操作可以重试至成功。【有些执行步骤是可重试的,而有些是不能重试的。幂等性的重点是其任意多次执行所产生的影响均与一次执行的影响相同,在事务提交失败会重复提交达到最大重复次数时返回失败的 设计中 保持幂等性是尤为重要的】

3分布式Redis服务部署模型

本节点通过复制和哨兵的概念介绍分布式系统的另外一个特性,副本。

副本(Replica)是分布式系统最常见的概念之一,指分布式系统对数据和服务提供的一种冗余方式。在常见的分布式系统中,为了对外提供高可用的服务,我们往往会对数据和服务进行副本处理。有副本的概念,就会关联到副本数据一致性问题。

Redis在分布式服务方面相关的技术主要体现在持久化、复制、哨兵和集群四大部分,以下重点介绍复制和哨兵。

复制是高可用 Redis 的基础,哨兵和集群都是在复制基础上实现高可用的。

3.1 主从复制

主从复制属于redis使用方式的多副本模式

3.2 典型的哨兵系统组成

Redis Sentinel,即 Redis 哨兵,在 Redis 2.8 版本开始引入。哨兵的核心功能是主节点的自动故障转移。

哨兵系统由两部分组成,哨兵节点和数据节点:


哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的 Redis 节点,不存储数据。

数据节点:主节点和从节点都是数据节点。

以上的节点也是对分布式系统中 计算机节点概念的对应,各种计算资源统称为节点。

以下是主从同步Redis Server,单实例Sentinel


结合上面的架构图,有一个问题思考

我们平时在做应用开发时,使用的Redis连接驱动是直接连接的Redis server还是直接连接的redis哨兵?

下面是 Redis 官方文档对于哨兵功能的描述:

监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。

自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。

配置提供者(Configurationprovider):客户端在初始化时,通过连接哨兵来获得当前 Redis 服务的主节点地址。

通知(Notification):哨兵可以将故障转移的结果发送给客户端。

分布式系统设计到的内容很广泛,本文只是从几个简单的概念模型开始叙述,从消息,协作,异常,副本展开,欢迎期待后续讨论 数据分片,一致性,冗余等


参考资料

分布式协调技术

ZooKeeper 典型的应用场景

高可用 Redis 服务架构分析与搭建

-----------------------------------

文章已同步到公众号《图南日晟》欢迎关注


图南日晟

你可能感兴趣的:(系统服务化构建-分布式基本特征)