SOFAJRaft

如何设计一款“高可用高性能”的发号器?

空扰寡人 提交于 2020-08-16 06:49:55
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! ​ 背景 在分布式场景中,很多地方需要生成全局唯一的id,如数据库分库分表后需要用唯一id代替单机版本的自增id。发号器的基本要求是 全局唯一,无论如何都不能重复 某些场景下还要求单调递增,如排序需求等。 网上有很多介绍发号器的文章,比如美团的《Leaf——美团点评分布式ID生成系统》,有赞的《如何做一个靠谱的发号器》等。本文聚焦高可用,高性能 高可用:不会因为系统故障导致服务不可用或发号重复 高性能:发号器通常是一个非常高并发的系统,性能足够的同时也可以水平扩容 在基本的要求下,常见的解决方案有哪些?他们是否是高可用,高性能的呢? snowflake方案 snowflake 采用41位时间戳加10位机器id加12位序列号的方式生成,序列号在单一进程内可使用AtomicLong来生成,10位机器号可支持1024台机器 该算法优点是: 算法简单,易于实现,不依赖任何第三方系统,性能非常高; 集群无状态,可随意扩缩容,可认为是高可用系统。 缺点是: 高10位的时间戳和低位自增序列号可保证单调增,但机器号无法保证,如机器号为2在某一时刻先生成id,机器号为1在同一时刻后生成id,则不能保证单调性; 依赖时间戳,如果时钟回拨,可能会生成重复的id。综合来看

从一个例子开始体验 SOFAJRaft | SOFAChannel#8 直播整理

橙三吉。 提交于 2019-12-09 10:24:01
SOFA:Channel/ ,有趣实用的分布式架构频道。 本文根据 SOFAChannel#8 直播分享整理,主题:从一个例子开始体验 SOFAJRaft。 回顾视频以及 PPT 查看地址见文末。 欢迎加入直播互动钉钉群:23390449,不错过每场直播。 大家好,我是力鲲,来自蚂蚁金服, 现在是 SOFAJRaft 的开源负责人。今天分享主题是《从一个例子开始体验 SOFAJRaft》,其实从这个题目大家也能看出来,今天是要从一个用户而非 owner 的视角来了解 SOFAJRaft。这么设计题目的原因是 SOFAJRaft 作为一种共识算法的实现,涉及到了一些概念和术语,而这些内容更适合通过一系列文章进行阐述,而在直播中我们希望能够分享对用户更有用、更容易理解的信息——SOFAJRaft 是什么,以及我们怎么去用它。 首先介绍一下 SOFAJRaft 的背景知识,接下来说说这个例子源于什么需求,第三部分是架构的选型,第四部分来看看我们如何使用 SOFAJRaft,最后运行代码,看看 SOFAJRaft 是如何支撑业务运行的。 欢迎加入社区成为 Contributor, SOFAJRaft 。 Raft 共识算法 Raft 是一种共识算法,其特点是让多个参与者针对某一件事达成完全一致:一件事,一个结论。同时对已达成一致的结论,是不可推翻的。可以举一个银行账户的例子来解释共识算法

SOFAJRaft 线性一致读实现剖析 | SOFAJRaft 实现原理

狂风中的少年 提交于 2019-12-07 14:21:32
SOFA Stack S calable O pen F inancial A rchitecture Stack 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 本文为《剖析 | SOFAJRaft 实现原理》第三篇,本篇作者米麒麟,来自陆金所。《剖析 | SOFAJRaft 实现原理》系列由 SOFA 团队和源码爱好者们出品,项目代号: SOFA:JRaftLab/ ,目前领取已经完成,感谢大家的参与。 SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP,适用于高负载低延迟的场景。 SOFAJRaft : https://gitee.com/sofastack/sofa-jraft 前言 线性一致读是在分布式系统中实现 Java volatile 语义,当客户端向集群发起写操作的请求并且获得成功响应之后,该写操作的结果要对所有后来的读请求可见。实现线性一致读常规手段是走 Raft 协议,将读请求同样按照 Log 处理,通过日志复制和状态机执行获取读结果返回给客户端,SOFAJRaft 采用 ReadIndex 替代走 Raft 状态机的方案。本文将围绕 Raft Log Read,ReadIndex Read 以及 Lease Read

SOFAJRaft 选举机制剖析 | SOFAJRaft 实现原理

南笙酒味 提交于 2019-12-07 14:21:17
SOFA Stack S calable O pen F inancial A rchitecture Stack 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 本文为《剖析 | SOFAJRaft 实现原理》第四篇,本篇作者力鲲,来自蚂蚁金服《剖析 | SOFAJRaft 实现原理》系列由 SOFA 团队和源码爱好者们出品,项目代号: SOFA:JRaftLab/ ,目前领取已经完成,感谢大家的参与。 SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP,适用于高负载低延迟的场景。 SOFAJRaft : https://gitee.com/sofastack/sofa-jraft 前言 在 Raft 算法中, 选举 是很重要的一部分,所谓选举也就是在多个节点中选出一个 Leader 节点,由他来对外提供写服务 (以及默认情况下的读服务)。 在剖析源码时,对选举机制的理解经常会遇到两极分化的情况,对于了解 Raft 算法基本原理的同学,阅读源码就是品味实现之巧妙的过程,而对初体验的同学,却会陷入丈二和尚的窘境,仿佛坠入云里雾里。 为了提升文章的可读性,我还是希望花一部分篇幅讲清楚选举机制的基本原理,以便后面集中注意力于代码实现

蚂蚁金服生产级 Raft 算法库存储模块剖析 | SOFAJRaft 实现原理

萝らか妹 提交于 2019-12-06 23:51:43
蚂蚁金服生产级 Raft 算法库存储模块剖析 | SOFAJRaft 实现原理 SOFA Stack S calable O pen F inancial A rchitecture Stack 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP,适用于高负载低延迟的场景。 本文为《剖析 | SOFAJRaft 实现原理》第一篇,本篇作者米麒麟,来自陆金所。《剖析 | SOFAJRaft 实现原理》系列由 SOFA 团队和源码爱好者们出品,项目代号: SOFA:JRaftLab/ ,文章尾部有参与方式,欢迎同样对源码热情的你加入。 SOFAJRaft : https://gitee.com/alipay/sofa-jraft 前言 SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP,适用于高负载低延迟的场景 。 SOFAJRaft 存储模块分为: Log 存储记录 Raft 配置变更和用户提交任务日志; Meta 存储即元信息存储记录 Raft 实现的内部状态; Snapshot 存储用于存放用户的状态机 Snapshot

SOFAJRaft-RheaKV MULTI-RAFT-GROUP 实现分析 | SOFAJRaft 实现原理

不打扰是莪最后的温柔 提交于 2019-12-06 23:51:20
SOFAStack S calable O pen F inancial A rchitecture Stack 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP,适用于高负载低延迟的场景。 本文为《剖析 | SOFAJRaft 实现原理》第五篇,本篇作者袖扣,来自蚂蚁金服。 《剖析 | SOFAJRaft 实现原理》系列由 SOFA 团队和源码爱好者们出品,项目代号: <SOFA:JRaftLab/> ,文章尾部有参与方式,欢迎同样对源码热情的你加入。 SOFAJRaft : https://gitee.com/sofastack/sofa-jraft 前言 RheaKV 是首个以 JRaft 为基础实现的一个原生支持分布式的嵌入式键值(key、value)数据库,现在本文将从 RheaKV 是如何利用 MULTI-RAFT-GROUP 的方式实现 RheaKV 的高性能及容量的可扩展性的,从而进行全面的源码、实例剖析。 MULTI-RAFT-GROUP 通过对 Raft 协议的描述我们知道:用户在对一组 Raft 系统进行更新操作时必须先经过 Leader,再由 Leader 同步给大多数

SOFAJRaft-RheaKV 是如何使用 Raft 的 | SOFAJRaft 实现原理

*爱你&永不变心* 提交于 2019-12-06 23:50:47
SOFA Stack S calable O pen F inancial A rchitecture Stack 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 本文为《剖析 | SOFAJRaft 实现原理》第二篇,本篇作者米麒麟,来自陆金所。《剖析 | SOFAJRaft 实现原理》系列由 SOFA 团队和源码爱好者们出品,项目代号: SOFA:JRaftLab/ ,目前领取已经完成,感谢大家的参与。 SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP,适用于高负载低延迟的场景。 SOFAJRaft : https://gitee.com/sofastack/sofa-jraft 前言 SOFAJRaft-RheaKV 是基于 SOFAJRaft 和 RocksDB 实现的嵌入式、分布式、高可用、强一致的 KV 存储类库,SOFAJRaft 是基于 Raft 一致性算法的生产级高性能 Java 实现,支持 Multi-Raft-Group。SOFAJRaft-RheaKV 集群主要包括三个核心组件:PD,Store 和 Region。本文将围绕 SOFAJRaft-RheaKV 架构设计,存储概览,核心模块,使用场景以及基于 Raft

SOFAJRaft-RheaKV 分布式锁实现剖析 | SOFAJRaft 实现原理

北战南征 提交于 2019-12-06 08:54:03
SOFAStack ( S calable O pen F inancial A rchitecture Stack)是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP,适用于高负载低延迟的场景。 本文为《剖析 | SOFAJRaft 实现原理》第七篇,本篇作者米麒麟,来自陆金所。《剖析 | SOFAJRaft 实现原理》系列由 SOFA 团队和源码爱好者们出品,项目代号: SOFA:JRaftLab/ ,文末包含往期系列文章。 SOFAJRaft : https://gitee.com/sofastack/sofa-jraft 前言 在分布式部署、高并发、多线程场景下,我们经常会遇到资源的互斥访问的问题,最有效、最普遍的方法是给共享资源或者对共享资源的操作加一把锁。在 JDK 中我们可以使用 ReentrantLock 重入锁或者 synchronized 关键字达成资源互斥访问目的,但是由于分布式系统的分布性(即多线程和多进程并且分布在不同机器中),使得两种锁失去原有锁的效果,需要用户自定义来实现分布式锁。 本文重点围绕分布式锁概览、实现方式以及基于 SOFAJRaft 实现等方面剖析

SOFAJRaft-RheaKV 分布式锁实现剖析 | SOFAJRaft 实现原理

末鹿安然 提交于 2019-11-29 23:54:22
SOFAStack ( S calable O pen F inancial A rchitecture Stack)是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP,适用于高负载低延迟的场景。 本文为《剖析 | SOFAJRaft 实现原理》第七篇,本篇作者米麒麟,来自陆金所。《剖析 | SOFAJRaft 实现原理》系列由 SOFA 团队和源码爱好者们出品,项目代号: SOFA:JRaftLab/ ,文末包含往期系列文章。 SOFAJRaft : https://gitee.com/sofastack/sofa-jraft 前言 在分布式部署、高并发、多线程场景下,我们经常会遇到资源的互斥访问的问题,最有效、最普遍的方法是给共享资源或者对共享资源的操作加一把锁。在 JDK 中我们可以使用 ReentrantLock 重入锁或者 synchronized 关键字达成资源互斥访问目的,但是由于分布式系统的分布性(即多线程和多进程并且分布在不同机器中),使得两种锁失去原有锁的效果,需要用户自定义来实现分布式锁。 本文重点围绕分布式锁概览、实现方式以及基于 SOFAJRaft 实现等方面剖析