微服务双活体系建设
2021/4/8 10:38:40
本文主要是介绍微服务双活体系建设,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
双机房部署
- 双活数据中心入口路由算法
- 静态路由算法:基于IP地址进行选择
- 动态路由算法:分析链路和数据中心的负载情况,响应时间,优先级等进行路由
- 系统网关控制:通过网关制定规则实现流量分发
- 双活数据中心需要注意的问题
- 脑裂现象:网络出现波动,通信终端,无法感知,各自为战,很难判断请求应该分发到哪个数据中心
- 运维相对复杂:数据同步问题,如何达到同步准实时
- 非零丢失:一个机房挂掉,另一个机房还没有及时同步最新数据的情况,只是非常少量的数据丢失,所以双活不能保证非零丢失
基于支付场景的双活体系建设
业务是否能够在一个机房完成整体业务的请求链条
如支付业务:入口网关-支付交易-支付服务-支付路由-支付渠道,这5个服务形成了一个完整链条,追龙需要部署在同一个机房内,如果不在同一个机房,每次请求跨级机房,就需要性能损耗,需要进行较大改造
应用程序双活
应用程序双活一般分为三种:1.主机房接收请求;2.双机房同时接收请求,由入口网关做请求路由;3.双机房同时接收请求,由Nginx+Lua做请求路由。
- 主机房接收请求
只是主机房接收请求,备机房只做备份使用,缺点是资源利用率低。
- 双机房同时接收请求,由入口网关做请求路由
最简单的方法是在支付请求的时候包含一个唯一标识,如订单号,通过对订单号进行Hash求值来判断当前请求属于哪个机房,Hash算法和路由分发由入口网关系统承担。
入口网关系统在支付业务中承担权限校验,限流,加密解密等作用,也可以进行请求分发,缺点是每次请求都要进入网关判断,对网关处理并发能力要求较高。
- 双机房同时接收请求,由Nginx+Lua做请求路由
所有请求在Nginx这一层由Lua语言根据标识做路由控制,不用再透传到入口网关进行系统判断。使用OpenRestry比较容易实现Nginx+Lua的整合。也可以参照分库分表使用一致性Hash算法,还可以提前按四个机房或留个机房来 Hash,通过路由分发等扩展方式。
常用第三方组件如何进行双活
zookeeper的数据同步
使用场景配置中心,分布式锁,命名服务(分布式ID),分布式协调/通知,集群服务,注册中心等。
常见数据同步方式有两种:
1.利用Zookeeper Curator的TreeCache来实现
这种方式优点是实现简单,缺点是可能会存在Watcher丢失的情况,通过TreeCacheListener对象可以实现对Zookeeper指定节点进行增加,删除,修改和更新事件的监听,当监听到相应时间后可以将获取的数据同步更新到另一个机房中。
修改Zookeeper源码伪装观察者
2.zookeeper有三种角色,Leader,Follower,Observer
- Leader:作为集群的主节点,负责相应所有对Zookeeper状态变更的请求。它会将每个状态更新请求进行排序和编号,保证整个集群内部消息处理的FIFO。
- Follower:相应服务器上的读请求,还要处理Leader的提议,并在Leader提交该提议时在本地也进行提交。
- Observer:大多数情况下与Followe完全一致,但是他们不参加选举和投票,仅仅接收选举和投票的结果。
Observer角色主要是为了提高负载能力,从而实现zookeeper读取的高吞吐,可以修改源码,伪装Observer角色从Leader上获取最新更新的数据,然后将数据同步到另一个机房的Zookeeper中就可以实现跨机房同步
Redis数据同步
1.主从机制进行数据同步
主机房的redis配置为主,备机房的redis配置为从。
目前官方还没有提供跨机房的主主同步机制。
2.利用数据库的binlog数据进行同步
应用正常写到Mysql数据库汇总
Mysql数据库产生binlog日志
同步组件读取binlog日志
同步组件解析binlog日志后将数据同步到redis中,并同步到另一个机房的redis中。
业务数据一致性
Mysql主主同步方案
使用Canal+Otter做数据同步方案
可以同步不同库之间的异构表
Canal+Otter可以实现一个表一线程,多个表多线程同步,速度更快,同时会压缩简化要传输的binlog,减少网络压力
双A机房同步,目前Myql的M-M部署结构不支持解决数据一致性问题,基于Otter的双向复制+一致性算法,可在一定程度上解决这个问题,实现双A机房。
这篇关于微服务双活体系建设的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27消息中间件底层原理资料详解
- 2024-11-27RocketMQ底层原理资料详解:新手入门教程
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器