ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

微服务双活体系建设

2021-04-08 10:31:26  阅读:167  来源: 互联网

标签:体系 网关 同步 服务 请求 机房 双活 路由


双机房部署

  • 双活数据中心入口路由算法
  1. 静态路由算法:基于IP地址进行选择
  2. 动态路由算法:分析链路和数据中心的负载情况,响应时间,优先级等进行路由
  3. 系统网关控制:通过网关制定规则实现流量分发
  • 双活数据中心需要注意的问题
  1. 脑裂现象:网络出现波动,通信终端,无法感知,各自为战,很难判断请求应该分发到哪个数据中心
  2. 运维相对复杂:数据同步问题,如何达到同步准实时
  3. 非零丢失:一个机房挂掉,另一个机房还没有及时同步最新数据的情况,只是非常少量的数据丢失,所以双活不能保证非零丢失

基于支付场景的双活体系建设

业务是否能够在一个机房完成整体业务的请求链条

如支付业务:入口网关-支付交易-支付服务-支付路由-支付渠道,这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机房。

 

 

标签:体系,网关,同步,服务,请求,机房,双活,路由
来源: https://blog.csdn.net/liu1390910/article/details/115503659

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有