中国移动苏州研发中心消息队列高可用设计之谈 | SOFAStack 用户说

keepalived的双机热备 2、修改主机名方便识别(主备机相同操作),第一个需要重启服务器,第二个只需要断开连接后重新连接生效。4、配置keepalived.conf文件(主机配置)5、配置keepalived.conf文件(备机配置)6、启动keepalived服务(主备机相同操作)1、下载rpm包并进行安装(主备机相同操作)3、配置hosts文件(主备机相同操作) 阅读详情

文章摘要:BC-MQ 是中国移动苏州研发中心结合自身在云计算产品和技术的较多积累、自主研发的大云消息队列中间件产品,本文详细解读了 SOFAJRaft 在其消息云服务中的最佳应用实践。

| 前言

高可用的定义,指的是“一个系统经过特有的设计与改造,减少因不确定故障停服的时间,从而对业务使用方来说可以保证其服务的高度可用性”。在生产环境中,往往会存在很多不可预知的故障因素,比如虚拟机宕机、磁盘损坏和网络故障等,因此系统自身的高可用是任何工业级产品所需重点考虑的因素。

对于消息队列服务来说,考虑到故障切换和业务感知等问题,传统的高可用方式(冷备或者热备)一般都不太适用。在经过多种技术方案对比后,我们发现采用基于 Raft 共识算法的多副本设计方案可以满足我们产品的要求,因此在鉴权认证组件和 API 计量服务组件中,我们集成了蚂蚁金服开源的 SOFAJRaft 库,实现这两个组件应对单点故障的高可用。

| 背景知识:Raft 共识性算法是什么?

Raft 是一种分布式系统中易于理解的共识算法,该协议本质上是 Paxos 算法的精简版,而不同的是依靠 Raft 模块化的拆分以及更加简化的设计,其实现起来更加容易和方便。[1]

模块化的拆分主要体现在 Raft 把一致性协议划分为如下几部分:

  • Leader 选举;

  • Membership 变更;

  • 日志复制;

  • Snapshot;

而更加简化的设计则体现在:Raft 不允许类似 Paxos 中的乱序提交、简化系统中的角色状态(算法定义 Leader、Follower 和 Candidate 三种角色)、限制仅 Leader 可写入、采用随机超时触发 Leader Election 机制来避免“瓜分选票”等等。[2]

1.1 Raft 算法的整体结构概览

640?wx_fmt=png

从上面的 Raft 算法整体结构图中可以看出,整个分布式系统中同一时刻有且仅有一个 Leader 角色的节点(如图最右边的服务器),只有 Leader 节点可以接受 Client 发送过来的请求。Leader 节点负责主动与所有 Follower 节点进行网络通信(如图左边两个服务器),负责将本地的日志发送给所有 Follower 节点,并收集分布式系统中多数派的 Follower 节点的响应。此外,Leader 节点,还需向所有 Follower 节点主动发送心跳维持领导地位(即:保持存在感)。

所以,只要各个节点上的日志保持内容和顺序是一致的,那么节点上的状态机就能以相同的顺序执行相同的命令,这样它们执行的结果也都是一样的。

1.2 Raft算法的三种角色及转换

  • Follower:完全被动,不能发送任何请求,只接受并响应来自 Leader 和 Candidate 的 Message,每个节点启动后的初始状态一般都是 Follower;

  • Leader:处理所有来自客户端的请求、复制 Log 到所有 Follower,并且与 Follower 保持心跳请求;

  • Candidate:节点竞选 Leader 时的状态。Follower 节点在参与选举之前,会将自己的状态转换为 Candidate;

640?wx_fmt=png

1.3 任期与逻辑时钟概念

640?wx_fmt=png

  • 时间被划分为多个任期 term(如同总统选举一样),term id 按时间轴单调递增;

  • 每一个任期开始后要做的第一件事都是选举 Leader 节点,选举成功之后,Leader 负责在该任期内管理整个分布式集群,“日志复制”、“通过心跳维护自己的角色”;

  • 每个任期至多只有一个 Leader 节点,也可能没有 Leader (由于“分票”导致);

1.4 Raft 算法的实际应用实现

目前,Raft 算法已经成熟地应用于诸多知名的开源项目中。业界非常著名的 Etcd(Kubernetes 高可用强一致性的服务发现组件)和 TiKV (高性能开源 KV 存储)均是  Raft 算法的实现。

| BC-MQ 基于 Raft 的高可用设计

为满足企业上云和构建万物相连的物联网业务需求,中国移动苏州研发中心结合自身在云计算产品和技术的较多积累,研发了大云消息队列中间件产品 BC-MQ。该产品基于  Apache 开源社区的 RocketMQ 内核,同时结合云端 PAAS 产品架构和消息中间件的应用业务需求进行深度优化和定制化的研发,提供了一款可以满足于云端场景的高性能、高可靠、低延迟和高可用的工业级产品。

本节从解决原有高可用技术方案的问题视角出发,同时结合选型 SOFAJRaft 库的缘由,将详细阐述 BC-MQ 产品中的安全认证和 API 计量采集服务的高可用设计方案(注:这里不会涉及到安全认证和 API 计量采集组件本身的技术方案细节)。

2.1 GlusterFS+Keepalived 高可用方案与问题

1. GlusterFS+Keepalived 高可用设计方案

在 BC-MQ 原有的方案中,多组安全认证服务各自独立部署组建集群,各个安全认证服务相互独立,没有主从关联,服务本身无状态,可水平任意扩展。安全认证服务的高可用依赖于 RPC 通信的客户端保证,其主要通过负载均衡算法从安全认证服务集群选择一个节点发送 RPC 请求来实现租户级鉴权认证元数据的获取。在生产环境中,如果出现其中一个安全认证节点宕机不可用时,客户端的 RPC 通信层能够及时感知并从本地的 Node 列表中剔除不可用节点。

集群中有状态的租户级安全认证元数据的强一致性由 GlusterFS 分布式文件存储的同步机制来保证。安全认证服务组建高可用集群的具体设计方案图如下所示:

640?wx_fmt=jpeg

而 BC-MQ 中 API 计量采集服务组件的高可用性则是依靠 Keepalived 组件的冷备模式结合 GlusterFS 分布式文件存储的同步机制共同保证,从而在一定程度上解决了 API 计量采集服务的单点不可用问题。API 计量采集服务的具体高可用设计方案图如下所示:

640?wx_fmt=jpeg

2. GlusterFS+Keepalived 高可用方案遇到的问题

初步看上面的这种高可用技术方案挺完美的。但是经过验证和仔细推敲后就发现在生产环境中可能会存在如下几个问题:

  • 上面所述的高可用设计方案中引入了 GlusterFS 分布式文件存储系统和 Keepalived 组件,这增加了系统整体的运维复杂度,给运维人员带来很多人工介入排查和部署的工作负担;另一方面,GlusterFS 和 Keepalived 本身的可靠性、稳定性和性能指标等问题也需要软件研发人员重点关注,这增加了系统整体设计的复杂度;

  • 在实际的生产环境中,Keepalived 组件采用冷备方式作为高可用方案需要考虑主机故障宕机后切换到备机的时间成本消耗。在这段时间内,API 计量服务是短暂不可用的。因此,Keepalived 组件的主备切换会造成业务感知影响,导致一些业务的风险发生;

2.2 基于 SOFAJRaft 库的高可用设计方案

由于“GlusterFS+Keepalived”的高可用方案存在上一节阐述的两个问题,所以我们考虑是否可以采用其他的高可用方案来解决这两个问题?目标:即使生产环境出现部分节点故障后,安全认证和 API 计量组件依旧能够正常提供服务,做到业务无感知。

为了实现当分布式集群中的部分节点出现故障停服后,集群仍然能够自动选主继续正常对外提供服务,使得故障对外部业务不会产生任何影响,同时高可用方案又不能依赖外部系统,那我们也就想到了 Raft 算法。Raft 算法设计,简洁易懂,没有任何外部依赖,可以完成一个高可靠、高可用、强一致的数据复制系统,解决我们前面遇到的问题。

业界有一些 Raft 算法的实现,目前比较流行的主要有百度开源的 Braft 和蚂蚁金服开源的 SOFAJRaft。从官方 Github 上对两款开源 Raft 实现框架支持的功能和特性来看,基本相近,但 Braft 是 C/C++ 语言实现的,而 SOFAJRaft 是 JAVA 语言实现的,因此我们从技术栈、集成难易和运维成本等角度综合考虑,最终选择了 SOFAJRaft。

1. 为何技术选型 SOFAJRaft 库?

SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 JAVA 实现,支持 MULTI-RAFT-GROUP,适用于高负载低延迟的场景。使用 SOFAJRaft,使用者可以更加专注于自己的业务领域,由 SOFAJRaft 负责处理所有与 Raft 算法相关的技术难题,并且 SOFAJRaft 比较易于使用,用户可以通过 Github 上的几个示例在很短的时间内掌握并使用它。下面先简单介绍下 SOFAJRaft 的特性和增强功能点:

640?wx_fmt=png

其中:

  • Membership change 成员管理:集群内成员的加入和退出不会影响集群对外提供服务;

  • Transfer leader:除了集群根据算法自动选出 Leader 之外,还支持通过指令强制指定一个节点成为 Leader;

  • Fault tolerance 容错性:当集群内有节点因为各种原因不能正常运行时,不会影响整个集群的正常工作;

  • 多数派故障恢复:当集群内半数以上的节点都不能正常服务的时候,正常的做法是等待集群自动恢复,不过 SOFAJRaft 也提供了 Reset 的指令,可以让整个集群立即重建;

  • Metrics:SOFAJRaft 内置了基于 Metrics 类库的性能指标统计,具有丰富的性能统计指标,利用这些指标数据可以帮助用户更容易找出系统性能瓶颈;

640?wx_fmt=png

为了提供支持生产环境运行的高性能,SOFAJRaft 主要做了如下几部分的性能优化,其中:

  • 并行 append log:在 SOFAJRaft 中 Leader 本地持久化 Log 和向 Follower 发送 Log 是并行的;

  • 并发复制 Leader 向所有 Follwers 发送 Log 也是完全相互独立和并发的;

  • 异步化:SOFAJRaft 中整个链路几乎没有任何阻塞,完全异步的,是一个完全的  Callback 编程模型;

因此,综上所述我们最终选用 SOFAJRaft 的理由如下:

  • SOFAJRaft 基于 JAVA 实现,能够很方便的与 BC-MQ 中安全认证服务和 API 计量服务组件进行集成;

  • SOFAJRaft 作为一个实现 Raft 协议的框架,提供了易于实现的状态机接口,只需要实现它提供的接口即可完成高可用的改造;

  • 从实际的验证结果来说,SOFAJRaft 的性能和稳定性能够完全满足甚至超过我们的预期;

  • SOFAJRaft 的功能性能够解决上面篇幅中 BC-MQ 原有“GlusterFS+Keepalived”高可用方案中所遇到的问题;

2. BC-MQ 组件集成 SOFAJRaft 的优化设计

BC-MQ 在集成 SOFAJRaft 库后在部署架构、数据持久化和高可用模式上都进行了能力升级,较好地解决了“GlusterFS+Keepalived”中的问题。

1. 部署架构:集成 SOFAJRaft 库后,BC-MQ 的安全认证和 API 计量服务的高可用部署不再依赖“GlusterFS+Keepalived”这两个外部组件;安全认证和 API 计量服务组件按照配置文件独立部署组成相应的 RaftGroup 即可对外提供服务;

2. 数据持久化:数据的强一致性不再依赖“GlusterFS 分布式文件存储”。通过 SOFAJRaft 的日志复制和状态机,实现集群中 Leader 节点和 Follower 节点的数据同步保证主备节点的数据一致性;

3. 高可用模式:从原有的“KeepaLived 冷备切换”转变为“Raft 自动 Leader 选举”,发生故障后,API 计量服务仍然能够对外正常提供服务,故障转移的过程无需运维人员介入;

组件服务端的状态机接口实现

针对具体的业务应用而言(对 BC-MQ 来说,就是 API 计量统计和安全认证鉴权),状态机(StateMachine)是业务逻辑实现的主要接口,状态机运行在每个 Raft 节点上,提交的 任务 Task 如果成功,最终都会复制应用到分布式集群中的每个节点的状态机上。

在 SOFAJRaft 中提供了一个已经具备绝大部分默认实现的抽象适配类— StateMachineAdapter,直接继承它可以使得业务应用避免实现所有的接口。我们根据  BC-MQ 组件改造的需求,对部分接口做了如下的实现:

1. void onApply(Iterator iter):

该方法是 SOFAJRaft 中最为核心的接口。在整个分布式集群环境中,待同步的数据会封装成 LogEntry 复制到其他节点。在数据同步完成之后,进程会提交到自身状态机的这个方法中执行。在 BC-MQ 中,API 计量采集服务在计量统计数据日志同步至 Follower 节点后,SOFAJRaft 在业务状态机的 onApply 方法中调用 API 计量采集服务组件的存储接口进行持久化;

2. void onLeaderStart(long term)/void onLeaderStop(Status status):

这个两个方法是在节点通过选举成为 Leader 和失去 Leader 资格时调用,BC-MQ 的安全认证和 API 计量服务组件本身也维护了 Raft 的角色状态(这里的角色状态与 SOFAJRaft 本身的是保持一致的)。在节点的角色发生转变的时候,需要调用这个方法,将组件的角色和状态转变一致。这样实现主要是与 BC-MQ 的业务场景相关,在集群中经过重新选举后节点角色转变时,只有 API 计量组件服务的 Leader 节点才能够执行消息队列的 API  计量采集相关的定时任务;

3. void onSnapshotSave(SnapshotWriter writer, Closure done)/boolean onSnapshotLoad(SnapshotReader reader):

这两个方法是 SOFAJRaft 快照相关的接口调用,快照本身的作用就是在有新的节点加入到 SOFAJRaft Group 时,不需要加载全部的 Log 日志数据,而只需要从最近的 index 开始加载,这可以节省从 Leader 节点同步大量日志信息所造成的网络通信开销。BC-MQ 的安全认证和 API 计量采集服务组件实现了这两个方法,用于实现快照的特性;

客户端请求重定向机制优化

SOFAJRaft 中默认只有 Leader 节点能够被客户端访问到,所有的日志提交都需要先提交到集群的 Leader 节点,然后由Leader节点同步到其他的 Follower 节点。BC-MQ 的安全认证服务和 API 计量服务组件通过 SOFAJRaft 改造后,在 BC-MQ 中原有的客户端 RPC 请求访问方式也需要经过一些优化设计,为了让客户端能够实时感知到分布式集群环境中当前的 Leader 节点,因此需要在客户端缓存一个集群的节点列表 NodeList  和 LeaderId。

仅仅在客户端维护一个本地缓存还不够,因为如果集群中的 Leader 节点出现了宕机的故障时,集群会发生重新选举,那么客户端缓存的 Leader 节点信息就会过期,这就需要客户端就能够感知到 Leader 节点的变化。为解决这个问题,我们采用了 RPC 请求重定向机制来保证,一旦 RPC 请求发送到了集群中的 Follower 节点,那么 Follower 会将该请求重定向到 Leader。以下为 BC-MQ 客户端通信重定向机制优化设计图:

640?wx_fmt=jpeg

| BC-MQ 的高可用与节点管理性验证

下面展示的是 BC-MQ 的安全认证服务和 API 计量服务组件的部分测试用例,从用例的实际执行情况来看,与我们的预期结果完全一致可以满足生产环境高可用的业务场景。

序号

具体业务场景

预期结果

实际结果

1

安全认证组件 3 节点部署,Kill 掉其中 1 个节点,客户端持续发布/订阅带鉴权的消息

安全认证组件 Leader 角色转换,客户端发布/订阅带鉴权消息无任何影响

与预期一致

2

安全认证的 5 节点部署,Kill 掉其中 2 个节点,客户端持续发布/订阅带鉴权的消息

安全认证组件 Leader 角色转换,客户端发布/订阅带鉴权消息无任何影响

与预期一致

3

API 计量组件 3 节点部署,Kill 掉其 1 个节点,客户端持续;发布/订阅带鉴权的消息

API 计量组件 Leader 角色转换,输出的 API 计量文件正确

与预期一致

4

API 计量组件 5 节点部署,Kill 掉其 2 个节点,客户端持续发布/订阅带鉴权的消息

API 计量组件 Leader 角色转换,输出的 API 计量文件正确

与预期一致

5

在集群中模拟出现网络分区(对称/非对称)的场景,安全认证服务集群是否会出现脑裂现象,鉴权认证数据是否正确

网络分区(对称/非对称)场景下,集群不会出现脑裂,并且鉴权数据是正确的

与预期一致

6

在集群中模拟出现网络分区(对称/非对称)的场景,API 计量服务集群是否会出现脑裂现象,API 计量数据是否正确

网络分区(对称/非对称)场景下,集群不会出现脑裂,并且 API 计量数据是正确的

与预期一致

7

在 3 节点组成的安全认证服务集群的负载工作的场景下,向该 RaftGroup 添加 1/2 节点,客户端持续发布/订阅带鉴权的消息

客户端发布/订阅带鉴权消息无任何影响

与预期一致

8

在 5 节点组成的安全认证服务集群的负载工作的场景下,移除该 RaftGroup 中的 1/2 节点,客户端持续发布/订阅带鉴权的消息

客户端发布/订阅带鉴权消息无任何影响

与预期一致

| 总结

本文主要介绍了中国移动苏州研发中心自主研发的 BC-MQ 产品中两个重要组件—安全认证和 API 计量服务是如何通过集成开源的 SOFAJRaft 库解决原来“GlusterFS+Keepalived”高可用方案中遇到的问题,以实现大规模消息队列云服务集群的高可用部署优化方案。由于文章篇幅的原因,本文没有对 BC-MQ 本身多项重要的特性进行详细介绍,作者将在后续的文章中继续进行阐述。同时,限于笔者的才疏学浅,对本文内容可能还有理解不到位的地方,如有阐述不合理之处还望留言一起探讨。

| 参考文献

[1] Diego Ongaro and John Ousterhout. Raft Paper. 2013:https://ramcloud.stanford.edu/raft.pdf

[2] 详解蚂蚁金服 SOFAJRaft | 生产级高性能 Java 实现

作者介绍:胡宗棠,中国移动苏州研发中心云计算中间件团队负责人,Apache RocketMQ Committer,Linux OpenMessaging Advisory Borad Member,SOFAJRaft Contributor,熟悉分布式消息中间件的设计原理、架构以及各种应用场景。

640?wx_fmt=png

Tomcat 基于Keepalived主备配置.md 文档中详细记录了tomcat基于keepalived的主备部署的每一个步骤,包括配置文件,可以直接使用 主机tomcat挂掉后会自动切换到备机,如果主修复以后,会自动切回主机 立即下载

相关推荐

how2heap 深入学习(1)

how2heap glibc 2.23学习

CoLin的pwn小屋 3179

GFS分布式文件系统

目录 引言 一、文件系统的作用 1.1、文件系统的挂载使用 二、GlusterFS简介 三、GlusterFS特点 3.1、扩展性和高性能 3.2、高可用性 3.3、全局同一命名空间 3.4、弹性卷管理 3.5、基于标准协议 四、GlusterFS术语 五、GlusterFS构成 六、GlusterFS的工作流程 理解: 七、弹性HASH算法 弹性HASH算法优点 八、GFS支持七种卷 8.1、分布式卷(Distribute volume) 分布式卷具有以下特点 8.

qq_57377057的博客 2383

泛微OA表单开发实战:如何用JavaScript动态控制明细表的必填与可编辑属性

本文详细介绍了如何在泛微OA系统中使用JavaScript动态控制明细表字段的必填与可编辑属性。通过主表字段变更事件监听和明细表字段属性批量修改,实现智能化的表单交互,提升用户体验和系统灵活性。文章深入解析了关键API的使用方法,并提供了实战代码示例和最佳实践。

weixin_30955617的博客 548

keepalived 搭建主备模式、双机热备模式

准备2台机器,ip 地址分别是 192.168.0.124,168.0.8.0.123,后面简称124和123目录1、主备模式1.1、安装 keepalived1.2、配置 keepalived 1.3、启动 keepalived1.4、配置备份节点1.5、测试主备模式2、双机热备模式2.1、配置 keepalived2.2、测试在 2 台机器上分别安装 keepalived 这里笔者将 124 作为主节点,123 作为备用节点安装完成后,进入keepalived 配置文件目录 编辑配置前,先查看1

悟世君子的博客 4274

STM32实战:5分钟搞定CanFestival协议栈下的CANopen心跳报文配置(附避坑指南)

本文详细介绍了如何在STM32平台上使用CanFestival协议栈快速配置CANopen心跳报文,包括硬件准备、协议栈移植、心跳报文配置及常见问题解决方案。通过实战步骤和避坑指南,帮助开发者高效实现节点状态监控,提升工业控制系统的可靠性。

win55的博客 745

APK静态分析(取证角度)——理论部分

APP是指应用程序(Application),是指能够在手机、平板电脑、电脑等移动设备上运行的软件。APP可以帮助用户进行各种功能操作,如社交媒体、游戏、购物、学习、工作等。用户可以通过应用商店或者在线下载安装APP,然后在设备上使用它们。APP的种类非常丰富,能够满足用户不同的需求和兴趣。

currify的博客 3207

keepalived双机热备

keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能——判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。...

大虾好吃吗 2888

Coze 上 OpenClaw 完整使用攻略(零代码 + 24 小时在线 + 飞书 / 微信接入)

Coze(扣子)是目前国内零门槛部署 OpenClaw 最友好的平台,无需服务器、不用命令行,5 分钟即可拥有可执行本地 / 云端任务的 AI 助手,还能一键发布到飞书、微信、钉钉等 IM。

hy行者勇哥的博客 2923

保证金服务数据一致性问题-大数据解决方案

无

qq275860560的专栏 912

反卷积通俗详细解析与nn.ConvTranspose2d重要参数解释

反卷积的作用 卷积中padding的几个概念 No Padding Half(Same) Padding Full Padding 反卷积 反卷积中的Padding参数 反卷积的stride参数 反卷积总结 参考资料

iioSnail的博客 2万+

VCS NLP 低功耗验证系列(六):功耗分析与优化——SAIF 报告与验证效率提升

本文是VCS NLP低功耗验证系列的第六篇,主要解决功耗数据采集和验证效率优化问题。文章首先介绍了SAIF(Switching Activity Interchange Format)文件在功耗分析中的作用,详细讲解了VCS的Region-Based SAIF功能,包括三个关键系统任务($saif_region_create、$saif_region_exclude、$saif_region_monitor)的使用方法和工程实践建议。接着从编译侧、运行侧和方法学侧三个维度提出了NLP验证效率优化策略,特别强

元直的博客 472

SOFAStack | SOFAMQ 消息队列介绍(持续更新)

产品介绍 基于 Apache RocketMQ 构建的分布式消息中间件,应用于分布式系统或组件之间的消息通讯,具备海量消息堆 积、低延迟、高吞吐、高可靠、事务强一致性等金融级特性,满足异步解耦、削峰填谷、顺序收发、分布式事务一 致性、日志同步、异地多活等场景需求。 产品核心功能 高可用架构 蚂蚁应用场景 ...

YvesHe的专栏 1万+

波浪能发电电能管理_电能管理_波浪发电_直驱式波浪能发电整流器控制

该matlab仿真为直驱式波浪能发电电能管理控制,最终输出稳定的直流电供电给电网

sofa常见问题汇总

sofa常见问题汇总

dmjxsy的博客 1449

AP6256驱动.7z

AP6256驱动,应用Linux系统

S7-300西门子PLC例程源码50例合集.zip

S7-300西门子PLC例程源码50例合集S7-300-400路由功能例程;S7-300 MPI 通讯程序.rarS7-300-400路由功能例程.zipS7-300400时钟读写例程及教程.zips7-300A2690-04.rarS7-300C 与MM440 串行口通讯.rars7-300PID称序.rarS7-300PLC在押出机上的应用例子.zipS7-300_CPU之间的PROFIBUS主从通讯配置.rarS7-300_S7-400时钟读写例程.zips7-300_step 7中的时间_日期_定时器.rarS7-300_STEP 7中的时间_日期读写例程.zipS7-300与其他设备通信.rars7-300之pid.rarS7-300例程,斗轮机.rarS7-300做的PID程式.rarS7-300加药及数据采集实例(1).rarS7-300加药及数据采集实例.rarS7-300在电厂风机上的应用.rars7-300工业过程控制程序案例.rarS7-300控制奔驰发动机程序.rarS7-300控制的挤出机之PLC程序.rarS7-300控制的挤出机之PLC程序1.rarS7-300控制频率程序简单处理模拟量输出的程序.rarS7-300步进炉的例子程序.rarS7-300步进炉的例子程序(钢厂程序).rarS7-300液压伺服程序例子.zips7-300的时间日期处理问题.zips7-300的网络,自己做的有程序.rars7-300经典应用实例.rars7-300编程控制变频器(多段速控制)程序.rars7-300编程控制变频器(多段速控制),.rarS7-300西门子PLC例程源码50例合集.zipS7-300触摸屏变频器现场总线综合应用实例.rarS7-300计数、频率测量和脉冲宽度调制.rars7-300运输带控制程序.rarS7-300饮料加工生产流水线线程序.rars7-300饮料灌装线示例项目.rarS7-400H 典型配置选型示例.rarS7-400程序例(pdf文档).rarS7-400编程实战案例(1).rarS7-400编程实战案例.rarS7-400编程实战案例,覆盖了多cpu通讯,pid调节,各种自定义功能块的开发等(1).rarS7-400编程实战案例,覆盖了多cpu通讯,pid调节,各种自定义功能块的开发等.rarS7300 MODBUS通讯例程(1).rarS7300 MODBUS通讯例程.rars7300400通过以太网和PROFIBUS_DP通讯的硬件组态.rars7300_400工程项目实例.rarS7300与wincc由普通网卡通讯实例.rarS7300与WINCC的功能与例子.rarS7300之间MPI的通讯.rarS7300之间通过SFC67_68实现MPI通讯.rars7300发动机控制.rarS7300软冗余实例及说明.zipS7400H与S7300通过DP Y-LINK通讯例子.rar

高可用实践—负载均衡与Keepalived+VIP

在互联网时代的早期,计算机普及程度较低,业务简单,并发量相对较小,单体应用常常足以支撑业务量。随着互联网红利来临,并发量的增大,也对单体服务提出了较大的挑战,常见的解决方式是**增加服务器性能**(磁盘、内存、CPU),**集群部署**等。但单机并不能无限制增加资源且利用率会大幅度下降,集群部署需要前置的网关进行路由,网关层仍旧需要处理高并发与单点问题。本文将就`Nginx`反向代理服务器讲解网关层(流量网关,非应用网关,如`springcloud gateway`等)的**负载均衡算法**与基于**Kee

weixin_46522694的博客 4650

8PSK.zip_8PSK 解调_8psk_8psk systemview_QPSK systemview_SYSTEMVIEW

8QPSK调制解调在 SystemView下的仿真

Keepalived双机热备详解攻略

1.实验规划  构建前提 先构建 LVS-DR 模式的负载均衡集群,可参照上文进行构建 2.构建代码 负载调度器-1 yum -y install kernel-devel openssl-devel popt-devel gcc* # 安装相关 keepalived 依赖 tar -zxf keepalived… # 源码安装 Keepalived 软件 cd keep… ./configure --prefix=/ --with-kernel-dir=/usr

weixin_45537987的博客 579

Keepalived 配置详解与主备模式

keepalived 的几个进程 生产环境使用Keepalived正常运行,共启动3个进程,一个是父进程,负责监控其子进程,一个是VRRP子进程,另外一个是Checkers子进程。 两个子进程都被系统Watchlog看管,两个子进程各自负责自己的事,Healthcheck子进程检查各自服务器的健康状况,如果Healthcheck进程检查到Master上服务不可用了,就会通知本机上的VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态。 [root@localhost ~]# ps

小楼一夜听春雨,深巷明朝卖杏花 3899

linux keepalived 脚本,使用Keepalived+shell脚本线上系统热备一例

因为线上业务比较特殊,因为针对系统进行扩展时,需要从全局的角度来进行规划与部署高可用。以最小的改动,让线上系统使用上高可用。具体环境介绍:服务器A : 线上系统Java应用。服务器B : 线上系统服务器A的冷备. 因为业务逻辑相对复杂,有些东西在代码层面写死了,因此成了现在这个情况。在服务器A出现故障时,运维人员需要手工进行启动服务器B,有些参数有可能需要调整,原计划是使用负载均衡,奈何两台服务器...

weixin_35599378的博客 527

RabbitMQ相关简介

一、简介

luoyuan的博客 255

SOFA Weekly | MOSN 支持 Istio、SOFAJRaft 发布、本周日您有一条待办日程

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)...

金融级分布式架构 360

蚂蚁金服消息队列 SOFAMQ 加入 OpenMessaging 开源标准社区

近日,蚂蚁金服消息队列 SOFAMQ 宣布加入 Linux 基金会旗下 OpenMessaging 开源社区,将与阿里巴巴、Yahoo、滴滴、微众银行等社区成员一起,持续推进消息开放标准...

金融级分布式架构 7201

Braft编译与使用

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录引言example:block 引言 这篇文章的目的在于记录Braft使用中一些API的具体含义,虽然有官方文档,但是还是感觉有点简略。运行并学习了代码以后和当时仅仅查看文档完全是两个不同的感受,遂简单记录下用到的一些接口。并引入一个官网的例子来了解Braft的实际执行过程。 文章首先描述一个使用Braft的样例,然后总结重要的API以

李兆龙的博客 3158

braft源码学习笔记,api介绍

ballot.h ============== configuration.h 变量名 类型 说明 GroupId typedefstd::string raft组名 VersionedGroupId typedefstd::string GroupId加个版本号 {group_id}_{index} =======structPeerId:======= butil::End...

Aiky哇 3267

raft-java中文API_用户指南 - JRaft 用户指南 - 《SOFAJRaft 1.2.4 文档手册》 - 书栈网 · BookStack...

JRaft 用户指南 & API 详解0. 基本概念说明log index 提交到 raft group 中的任务都将序列化为一条日志存储下来,每条日志一个编号,在整个 raft group 内单调递增并复制到每个 raft 节点。term 在整个 raft group 中单调递增的一个 long 数字,可以简单地认为表示一轮投票的编号,成功选举出来的 leader 对应的 term 称为...

weixin_39857899的博客 1111

使用ShardingJdbc应对大数据量的案例(一)

作者简介:胡宗棠,中移(苏州)软件技术有限公司,云计算软件高级研发工程师,从事公有云产品平台研发、架构设计;目前专注于大型分布式系统的高并发、高可用设计。曾就职于蚂蚁金服...

程序猿DD 3742
上一篇: SOFA Weekly | 每周精选【8/5 - 8/9】
下一篇: 分布式事务 Seata Saga 模式首秀以及三种模式详解 | Meetup#3 回顾
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值