文档章节

分布式系统技术难题--异地多活

從此迷花粉
 從此迷花粉
发布于 02/28 10:13
字数 1560
阅读 54
收藏 2

什么是异地多活?

为了保证系统能够对机房级别的故障进行容错,不会使系统不可用,这就需要在机房级别对系统进行冗余处理。而这就需要在架构上进行良好的设计。来面对多机房场景下的技术挑战。事实上,异地多活最大的挑战在于机房之间的物理距离更远,数据传输的延迟已经不能忽略。在网络普遍延迟的情况下,如何根据业务特性设计高可用的性能达标的分布式系统,将是最大的挑战。

异地多活常见的解决方案有哪些?

  1. 请求如何路由,如何实现会话保持?

对于请求路由问题,其设计目标在于,让特定用户访问特定的机房,并且可以实现流量分发策略控制,根据IP会话保持。而在于特定业务中,可以根据制定更加复杂的路由规则,利用前端传递来的标签,做路由策略转发。让特定的一些用户在同一个机房中,例如饿了吗,基于附近地区的业务场景,用户,骑手,商家都是在同一个地区。我们通过区分哪些用户在同一个地区,机房按地区进行业务划分。这样商家,用户,骑手的整个核心业务流程会在一个机房中完成,避免了跨机房调用造成延迟,用户下单几分钟,商家才接到订单,骑手接单到派送时间被延长。所以实现一个机房外的路由组件是很有必要的,在机房级别添加一个路由网关。常见的做法就是基于用户ID进行HASH的方式将用户固定在一个机房处理该用户相关的所有业务逻辑。

2. 数据存储服务如何同步?

对于数据存储问题是网络延迟造成最大影响的地方。在常见的解决方案中有多机房单集群,和多机房多集群部署两种.数据的同步可以分为,数据库,缓存,消息队列,session等。在多机房单集群中如何部署? 及整个系统中存储服务是唯一的一个集群,只有一个master节点.做读写分离设计,所有机房上的服务只能向数据存储集群上的master节点提交写请求,而在读数据时向自己机房上的salve节点提交请求。数据的同步委托给基础组件完成,可以利用数据本身的数据同步方案,但通常无法结合业务特性进行优化提高性能,redis 本身的数据同步在master同步salve时会导致salve不可用,mysql自身的同步方案性能和稳定性都比较差。这时需要团队亲自制定化数据同步组件。来保证多个机房上的数据全量同步。还可以基于消息队列来实现数据同步,但这会导致额外的带宽占用,更可以搭建专用网络线路解决。无论任何的同步方式,在业务端需要对访问数据库的客户端进行重构使其能够支持读写分离。并且为了防止网络延迟,我们可以在客户端做很多事情,第一,双写:多个机房下允许出现多个Master,那么客户端进行封装在底层将写请求发送给多个Master上。第二:双读或回源读,当读取本机房数据没有读到时,去主机房读取或者根据用户请求解析出数据源在哪个机房然后去读取。

3. 是否可以跨机房服务调用?延迟提高,占据更多的网络带宽怎么办?

内部RPC等禁止跨主机调用,这样可以防止数据被依赖。避免对专用网络占用更多的带宽。并且当一个机房不可用后不会影响可用机房的业务运行。

4. 当某个机房不可用时,需将该机房的流量切入另一个机房,那么每个机房要预留多少存储与计算资源?

一般经过测试评估,每个机房预留S级服务承载的流量资源。

5. 一些devops组件如何支持跨机房部署环境?

监控系统,部署系统等如何汇总所有机房的数据,还是将其区分开? 一般来说,devops组件需要对多机房部署进行升级,增加机房选项。在多机房部署中,日志数据可汇总到统一的数据区处理,日志记录通常异步进行即可。

6. 对于强一致性业务如何保证?

对于强一致数据,应建立多机房单集群的部署模式,使用双读策略。多机房多集群模式,采用双写策略。

7. 如何拆分业务,保证最大限度的避免跨机房延迟

将业务按照,流量大的业务,核心业务,产生收入的业务进行拆分,优先保证核心业务的多机房部署。将这些业务的整体流程逻辑放在一个机房内处理。列如饿了吗按照 地域信息进行流量切分,将用户下单,卖家接单,骑手接单配送这个核心流程尽量放在一台服务器处理。阿里就按用户ID路由,大型网游可能按照服务区对用户处理流程限定在某个特定机房中。

本文转载自:https://mp.weixin.qq.com/s?__biz=MzI0MzQyMTYzOQ==&mid=2247484970&idx=1&sn=54b0338c30d4e45fd2efe20...

從此迷花粉

從此迷花粉

粉丝 7
博文 174
码字总数 63807
作品 0
海淀
程序员
私信 提问
从github超24小时的故障看异地多活全局设计的重要性

我们先来回顾一下github这次事故: 2018年10月21日,github 在更换网络设备时,引发了美国东海岸网络中心和东海岸数据中心的网络链接发生了40秒的中断,最终导致多个mysql的主集群由Orchest...

银河1号
2018/11/16
0
0
蚂蚁金服CTO程立:金融级分布式交易的技术路径

移动互联网、大数据与云计算作为新的基础设施,催生了新的互联网经济,也正在推动各行各业的升级。在过去十多年中,金融服务飞速发展,移动支付支撑了零售业线上线下的变革,基于大数据的信贷...

技术小能手
2018/05/09
0
0
阿里云数据库8月刊:国内首款Cloud Native自研数据库POLARDB精彩亮相VLDB!

重点事件 1、 HBaseCon亚洲2018峰会盛大开幕 阿里带你洞悉HBase大数据生态最新发展和行业实践 8月17日,HBaseCon亚洲2018峰会在北京歌华开元大酒店盛大开幕。 在本次HBaseCon亚洲峰会的主论坛...

桐碧2018
2018/09/10
0
0
构建云上企业数据库架构分为哪五步?

  阿里巴巴高级数据库架构师黄欢欢在2017云栖大会苏州峰会上与大家分享了云上企业数据库架构之路。主要分享了构建企业级数据库架构包括异地多活、数据库容器化、混合云架构、计算存储分离和...

大数据头条
2017/12/19
0
0
巨杉数据库王涛:区块链观点两极分化,程序员应关注其技术本质

区块链技术其实就是一个特殊的多活分布式数据库,既不是万能的也不是一无是处的,和所有技术一样都有特定的适用场景,大家也需要在技术角度客观的看待这个问题。 记者 | 鸽子 最近,随着区块...

雪花又一年
2018/04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Archiva 不小心删掉了管理员权限怎么办

Archiva 的界面和 UI 比较容易出问题。 在添加用户和为用户进行权限修改的时候,不小心连 admin 这个用户的权限都删掉了。 这个时候应该如何恢复 admin 这个用户的权限? 这个时候你可以尝试...

honeymoose
32分钟前
4
0
Java8新特性之空指针异常的克星Optional类

Java8新特性系列我们已经介绍了Stream、Lambda表达式、DateTime日期时间处理,最后以“NullPointerException” 的克星Optional类的讲解来收尾。 背景 作为开发人员每天与NullPointerExceptio...

程序新视界
44分钟前
4
0
OSChina 周四乱弹 —— 福布斯终身秃头奖

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享如是我闻的单曲《地藏经上卷》: 如是我闻#今日歌曲推荐# 《地藏经上卷》- 如是我闻 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
48分钟前
159
8
Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
6
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部