浅谈一致性协议

简介: 浅谈一致性协议

分布式系统

分布式系统面临的挑战

  • 数据规模越来越大
  • 服务的可用性要求越来越高
  • 快速迭代的业务要求系统足够易用

理想中的分布式系统

  • 高性能:可拓展、低时延、高吞吐
  • 正确:一致性、易于理解
  • 可靠:容错、高可用

🎈从HDFS开始

分布式系统就是让终端用户把一组工作在一起的计算机当做一个单独的机器来使用

数据规模的不断增加,我们需要大规模分布式系统

分布式系统最大的好处就是能够让开发者横向地扩展系统。


一致性与共识算法

什么是一致性

一致性是一种模型(或语义)来约定一个分布式系统如何向外界 (应用)提供服务。

对于我们的KV像操作一台机器一样要读到最近写入的值。

KV中常见的一致性模型:

  • 最终一致性: 读取可能暂时读不到但是总会读到
  • 线性一致性:最严格,线性执行

复制协议

  1. 当主副本失效时,为了使得算法简单,我们人肉切换,只要足够快我们还是可以保证较高的可用性。
  2. 但是如何保证主副本是真的失效了呢?
  • 在切换的过程中,主副本又开始接收client端的请求
  • 两个主副本显然是不正确的,log 会被覆盖写掉
  • 我们希望算法能在这种场景下仍然保持正确
  1. 要是增加到三个节点呢?
  • 每次都等其他节点操落盘性能较差
  • falut-tolerance能允许少数节点挂了的情况下,仍然可以工作

共识算法

概念

协商一致问题需要多个进程(或代理)达成一致。一个单一的数据值。有些过程(代理)可能在其他方面失败或不可靠,因此,协商一致的协议必须具有容错性或弹性。

简而言之一个值一旦确定,所有人都认同,


  1. 共识协议不等于一致性
  • 应用层面不同的一致性,都可以用共识协议来实现
  • 简单的复制协议也可以提供线性一致性
  1. 一般讨论共识协议时提到的一致性,都指线性一致性
  • 因为弱一致性往往可以使用相对简单的复制算法实现

一致性往往指分布式系统中多个副本对外呈现的数据的状态。

共识则描述了分布式系统中多个节点之间,彼此对某个状态达成一致结果的过程。系统中多个节点最关键的是对多个事件的顺序进行共识(排序)。


一致性协议案例:Raft

Raft是一个分布式共识算法,分布式共识算法还有Paxos,不过Paxos很难理解。

Raft与2014年发表,以易于理解作为算法的设计目标,使用了

  • 使用了RSM、Log、RPC的概念
  • 直接使用RPC对算法进行了描述
  • Strong Leader-based
  • 使用了随机的方法减少约束

Raft角色

图片.png


Raft Term

  • 每个Leader服务于一个term
  • 每个term至多只有一个leader
  • 每个节点存储当前的term
  • 每个节点term从一开始,只增不减
  • 所有rpc的request reponse都携带term
  • 只commit本term内的log

Raft的安全性

  1. 对于Term内的安全性
  • 对于所有已经的commited的<term, index>位置上至多只有一条log(目标)
  1. 由于Raft的多数派选举,我们可以保证在一个term 中只有一个leader
  2. 对于跨Term的安全性:
  • 目标:如果一个log被标记commited,那这个log一定会在未来所有的leader中出现Leader completeness
目录
相关文章
|
Unix Shell Linux
Shell 内置命令:trap
Shell 内置命令:trap
546 1
|
存储 缓存 监控
一文读懂分布式架构知识体系(内含超全核心知识大图)
7月9日 19:00-21:30 阿里云开发者社区首场“Offer 5000”直播开启!15位团队技术大牛在线招人,更有《阿里云技术面试红宝书》助你拿下Offer!马上投递简历:https://developer.aliyun.com/special/offerday01
19919 0
|
Linux 网络安全 Android开发
向日葵 Windows 端无法连接 Linux 问题的解决方案
向日葵 Windows 端无法连接 Linux 问题的解决方案
5471 0
|
存储 安全 Java
SpringBoot实战(六)之使用LDAP验证用户
关于ubuntu16.04服务器安装配置LDAP参考链接为:https://www.howtoing.com/how-to-install-and-configure-openldap-and-phpldapadmin-on-ubuntu-16-04/ 本文主要讲LDAP相关的概念,普及相关知识和相关例子实战。
3838 0
SpringBoot实战(六)之使用LDAP验证用户
|
11月前
|
Web App开发 监控 网络协议
网络分析与监控:阿里云拨测方案解密
阿里云网络拨测业务提供了全球、多种协议、多种网络态势的用户网络性能和用户体验监控场景的全面可观测方案。该文章从拨测场景下,介绍了用户如何快速的构建一套全球用户视角的服务可用性大盘,为客户的业务保驾护航。
1416 166
|
消息中间件 存储 容灾
共识协议的技术变迁 -- 既要“高”容错,又要“易”定序,还要“好”理解
这篇文章与读者朋友们好好聊一聊共识这个技术领域,期望能够让大伙儿对共识协议的前世今生以及这些年的技术演进有个大体了解。
21332 53
|
消息中间件 存储 Java
吃透 RocketMQ 消息中间件,看这篇就够了!
本文详细介绍 RocketMQ 的五大要点、核心特性及应用场景,涵盖高并发业务场景下的消息中间件关键知识点。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
吃透 RocketMQ 消息中间件,看这篇就够了!
|
关系型数据库 MySQL 数据库
MySQL忘记密码的处理方法(MySQL重置密码)
本文主要讲解MySQL如何重置密码(MySQL密码重置方法)
91762 2
MySQL忘记密码的处理方法(MySQL重置密码)
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的大学生家教兼职管理系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的大学生家教兼职管理系统附带文章和源代码部署视频讲解等
281 1
|
存储 数据管理 数据库
现代数据库技术中的分布式一致性问题与解决方案探讨
分布式系统在现代数据库技术中扮演着重要角色,但分布式环境下的数据一致性问题始终是挑战之一。本文深入探讨了分布式一致性的核心概念、各种一致性模型的特点及其在实际应用中的优缺点,旨在为技术从业者提供全面的视角和实用的解决方案。