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

从“两地三中心”到“分布式多活”—企业多数据中心架构演进 从“两地三中心”到“分布式多活”—企业多数据中心架构演进 数据大集中之后,企业的经营活动越来越依赖于数据中心与网络等IT基础设施,IT的7*24全天业务连续运营成为大型企业IT建设运营与企业经营追求的目标。如何实现减少甚至消除正常和非正常的停机对业务可用性造成的影响,不仅是IT建设与运维团队的目标,更成为企业决策层所关注的。 出于灾备(Disaster Recovery)的目的,企业一般都会建设两... 阅读详情

640?wx_fmt=png

什么是异地多活?

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

640?wx_fmt=png

640?wx_fmt=png

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

  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路由,大型网游可能按照服务区对用户处理流程限定在某个特定机房中。

---------------------------------------------------------

老钱点评:双机房就好比人的左右脑,机房之间的网络就是胼胝体。现在胼胝体坏了,还必须保证这个人能正常的生活,吃喝拉撒睡都还能干,这确实是一件非常不容易的事。

640?wx_fmt=png

码洞历史文章

5. LevelDB 数据文件 SSTable 的结构

4. LevelDB 的整体架构

3. LevelDB 代码撸起来

2. 全面了解 LevelDB 的功能特性

1. 既生 Redis 何生 LevelDB ?

《快学 Go 语言》第 16 课 —— 包管理 GOPATH 和 Vendor

《快学 Go 语言》第 15 课 —— 反射

《快学 Go 语言》第 14 课 —— 魔术变性指针

《快学 Go 语言》第 13 课 —— 并发与安全

《快学 Go 语言》第 12 课 —— 通道

《快学 Go 语言》第 11 课 —— 协程

《快学 Go 语言》第 10 课 —— 错误与异常

《快学 Go 语言》第 9 课 —— 接口

《快学 Go 语言》第 8 课 —— 结构体

《快学 Go 语言》第 7 课 —— 字符串

《快学 Go 语言》第 6 课 —— 字典

《快学 Go 语言》第 5 课 —— 神奇的切片

《快学 Go 语言》第 4 课 —— 低调的数组

《快学 Go 语言》第 3 课 —— 分支与循环

《快学 Go 语言》第 2 课 —— 变量基础

《快学 Go 语言》第 1 课 —— Hello World

Go  语言切片的三种特殊状态

不安分的 Go 语言开始入侵 Web 前端领域了

Go 语言之父 Rob Pike

短小精悍之 Redis 命令行工具有趣的罕见用法

欲求不满之 Redis Lua 脚本的执行原理

自己动手实现 Shell多进程套套符

我们天天都在使用的管道命令,Shell 在里面到底动了什么手脚?

见微知著 —— Redis 字符串内部结构源码分析

RPC 服务器之【多进程描述符传递】高阶模型

老板们都应该学一学 Redis,它能管理上亿对象,你们呢?

见缝插针 —— 深入 Redis HyperLogLog 内部数据结构分析

跋山涉水 —— 深入 Redis 字典遍历

《Redis深度历险》《深入理解RPC》答读者问

如履薄冰 —— Redis懒惰删除的巨大牺牲

通俗易懂的Redis数据结构基础教程

Redis作者Antirez经历的「性别歧视」风波

我为Redis找到了一个新家——VMWare

让我来告诉你为什么做女程序媛很好

【动画】当我们在读写Socket时,我们究竟在读写什么?

跟着动画学习TCP三次握手和四次挥手

求不更学不动之Redis5.0新特性Stream尝鲜

深入Python多进程编程基础——图文版

深入Python多进程通信原理与实战——图文

Python最广为使用的并发库futures使用入门与内部原理

巧用Google Fire简化Python命令行程序

Github上最受欢迎的Python框架Flask入门

看完Java的动态代理技术——Pythoner笑了

知道Python语言的Google Fire项目么,我将它移植到了Java上

蚂蚁金服RPC框架结构分析

为什么阿里的员工要带着工牌逛街?

全栈虚拟机GraalVM初体验

基于Netty自己动手编写RPC框架

自己动手实现一个极简Web框架

核心技术靠化缘是要不来的——自己动手写ORM框架

200行Java代码实现依赖注入框架

一个Raft开源项目的结构分析

Raft协议精解

Raft只读操作实现要点

水塘抽样与阶层固化

深度解析某头条的一道面试题

基于Netty实现Redis协议的编码解码器

Shell文本处理编写单行指令的诀窍

天下无难试之Redis面试刁难大全

天下无难试之HTTP协议面试刁难大全

鲜为人知的HTTP协议头字段详解大全

HTTP协议冷知识大全

天下无难试之ArrayList面试刁难大全

天下无难试之HashMap面试刁难大全

人工稚能之sklearn线性回归

人工稚能之sklearn聚类

人工稚能之sklearn分类

人工稚能之sklearn数据降维

服务发现的基本原理

徒手教你使用zookeeper编写服务发现

以太坊合约分析之远程购买

以太坊合约分析之拍卖算法

面向程序猿的比特币教程之数据结构基础

深度学习Java之内存模型【译】

Java与CPU缓存的亲密接触之「伪共享」

你没读过的Jetty使用入门

Java高阶必备之Netty基础原理

轻量级框架Spark快速入门

Guice快速入门

如何解决Java线程池队列过饱问题

如何优雅的关闭Go Channel【译】

Channel最佳实践之基本规则【译】

依赖注入不是Java的专利,Golang也有

会玩Go!会玩Python!嘭!Go-Python!

GopherLua基础入门

有趣的Python开源库之Hashids

一种简单的Failover机制

Redis异地多活原理简介 一、异地多活需要了解的知识 什么是异地多活 简单来说,就是在不同地域建立数据中心,每个数据中心在日常使用中都需要正常接入业务流量,做业务支撑。 异地多活的优势 主要体现在以下几个方面。 单机房系统架构,一旦机房故障,线上业务中断将会带来不可估量的影响。但是对于异地多活架构的系统来说,如下图: 其中地域 1 机房故障,甚至地域 2 机房也故障,只要地域 3 的机房是可用的,流量都可以切到地域 3 机房,线上的业务也不会中断。 性能的提升 举个简单的例子:从北京到上海共 1468 公里,即使是 阅读详情

相关推荐

异地多活(Active-Active Geo-Redundancy)

异地多活是一种强大的架构设计,它通过在多个地理位置部署活跃的数据中心,来实现高可用性、高性能和容灾能力。尽管异地多活的设计和实现存在数据一致性、网络延迟、负载均衡等复杂的技术挑战,但它在应对大规模分布式系统需求方面具有重要的意义。随着云计算和分布式系统技术的发展,越来越多的企业正在采用异地多活架构来确保其关键业务的连续性和可靠性。

galoiszhou的博客 1955

分布式系统架构-----异地多活架构

分布式系统架构-----异地多活架构 背景 最近公司在搞异地多活,特来写篇文章来学习和回顾一下。 异地多活看字面意思 :不通的地方部署服务。前段时间发生的B站挂掉的事情,网上众说纷纭,有的说是有机房着火了,导致服务宕机。那对于这种突发的情况,我们应该如何应对呢?包括说有些地方地震了导致机房宕机等等。 这些自然灾害我们是不可避免的所以我们得从架构层面解决这种突发问题。 异地多活架构 1. 什么是异地多活架构? 异地:不同的地理位置,多活:不同的地理位置的服务都能独立提供服务。 异地多活的目的也就是容灾,容灾

weixin_40413961的博客 6479

架构——异地多活成熟的架构模式

摘要: 本文系统介绍了三种异地多活架构模式:业务定制型、业务通用型和存储通用型。业务定制型针对核心业务定制化设计,复杂度低但扩展性差;业务通用型通过统一配套服务(流量调度、配置中心等)实现多业务兼容,适合业务量大但一致性要求不高的场景;存储通用型依托分布式一致性数据库(如OceanBase、TiDB)天然支持强一致性,适合金融等高要求场景,但对部署距离和成本有较高限制。文章对比了各模式的优缺点及适用场景,为不同业务需求下的架构选型提供了实践指导。

小志的博客 7083

搞懂高可用:异地多活,看这篇文章就够了!

搞懂高可用:异地多活,看这篇文章就够了! Dong GuoChao石杉的架构笔记前天 长按扫描上方免费领取 来源:https://blog.dogchao.cn 有状态服务 后台服务可以划分为两类,有状态和无状态。高可用对于无状态的应用来说是比较简单的,无状态的应用,只需要通过F5或者任何代理的方式就可以很好的解决。后文描述的主要是针对有状态的服务进行分析。服务端进行状态维护主要是通过磁盘或内存进行保存,比如MySQL数据库,redis等内存数据库。除了这两种类型的维护方式,还有jv...

wzlsunice88的博客 345

java分布式系统架构问题解决与瓶颈突破

本书主要讲解了架构知识,不仅仅是架构知识,更多的是互联网场景下大型网站架构演变过程中核心技术难题的解决方案。

虚拟化Esxi 和 华为交换机--配置链路捆绑

在这种模式下,Eth-Trunk的建立和成员接口的加入都需要手工配置,没有LACP协议的参与。● 在没有配置802.3ad聚合时,启用基于IP哈希的路由将中断网络,因此必须先对虚拟交换机进行更改。再去修改交换机的链路聚合模式(交换机配置为手动模式的链路聚合)当服务器需要通过交换机从远端服务器获取配置文件后才可以启动链路聚合时,交换机的链路聚合口需要配置lacp force-forward。● 交换机必须设置手动模式的链路聚合,虚拟交换机的负载平衡方法必须设置为基于IP哈希的路由。

ling 2113

搞懂异地多活,看这篇就够了

阅读本文大约需要 20 分钟。在软件开发领域,「异地多活」是分布式系统架构设计的一座高峰,很多人经常听过它,但很少人理解其中的原理。异地多活到底是什么?为什么需要异地多活?它到底解决了什么...

Java知音 1564

3DMax高效建模与人工智能:一场颠覆传统创作的效率革命

AI与3DMax的结合,不仅是工具效率的升级,更是一场创作范式的革命。从“手动雕刻”到“智能共生”,设计师的角色正从执行者转向决策者。正如网友所言:“AI不是替代人类,而是赋予凡人以神笔。”在这场变革中,唯有拥抱技术、深耕创意,方能在数字艺术的浪潮中立于潮头。参考文献与工具推荐技术原理:火星时代资讯《人工智能和三维建模》工具实测:哔哩哔哩《tyDiffusion 3dsMax应用》9、Tripo AI官网教育案例:原创论文《人工智能技术介入三维动画课程建设》

m0_46478534的博客 3009

分布式数据库和多活数据库的区别

分布式数据库 分布式数据库每个节点上存的数据与其它节点都不同,业务的全部数据是分布式数据库各个节点数据的和。 多活数据库每个节点都是一套完整的业务数据,各个节点之间是相互备份的关系。

刘振锋的博客 5590

Vivado实战:UltraScale/UltraScale+器件eFUSE寄存器配置与安全编程全解析

本文详细解析了Xilinx UltraScale/UltraScale+器件中eFUSE寄存器的配置与安全编程方法。从芯片唯一身份标识到加密密钥烧录,再到用户寄存器的灵活应用和安全控制寄存器的配置技巧,全面介绍了如何利用eFUSE功能提升硬件安全性。文章还提供了JTAG接口安全管理和NKZ文件备份方案,帮助开发者避免常见陷阱,确保安全编程的可靠性。

weixin_42535703的博客 427

归因分析计算因子贡献度常见的方法

在归因分析中,我们一般都需要计算出每个因子的贡献度是多少,比如产品DAU上升,对年龄段维度进行拆解,看是不同年龄段的用户对DAU上升的贡献度是多少,一般根据指标的类型,计算贡献度的方法也不一样,下面就列出一些常见的归因分析贡献度的计算方法。

Hubans的博客 4万+

mysql 多机房部署的那点事 pdf_分布式系统技术难题--多机房部署(异地多活)

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

weixin_33467061的博客 207

Gitee自动创建PR之——评审模式

一 创建PR的常规操作 本地更新主干(一般为master分支),基于主干新建一个分支并(如Dev分支)切换; 进行新的需求开发; 将这个分支推送到远端; 打开 Gitee ,进入创建 Pull Request 界面; 选定目标分支(及我们需要合并到主干分支的分支,一般即为我们的开发分支); 填写 Title 以及 Description; 点击提交 Pull Request。 二 更快的常见PR的方式— — 评审模式 现在 Gitee.

calm_encode的博客 2983

架构设计参考项目系列主题:异地多活IDC机房架构

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

Larry的博客 315

实战篇【2】-H3C防火墙开局基础配置

本篇文章为“H3C防火墙开局基础配置”,主要涵盖配置管理地址、聚合端口、安全区域、安全策略、静态路由、ACL,WEB和SSH远程管理、Console、SNMP、NTP时钟、日志主机等内容,对比交换机配置开局,增加两处配置,安全区域和安全策略。方便调试人员远程管理、调试。

weixin_47402139的博客 1万+

Blender SMPL-X 插件安装

Blender XMPL-X 插件安装

heleneveryday的专栏 5358

异地多活架构

在软件开发领域,「异地多活」是分布式系统架构设计的一座高峰,很多人经常听过它,但很少人理解其中的原理。 异地多活到底是什么?为什么需要异地多活?它到底解决了什么问题?究竟是怎么解决的? 这些疑问,想必是每个程序看到异地多活这个名词时,都想要搞明白的问题。 有幸,我曾经深度参与过一个中等互联网公司,建设异地多活系统的设计与实施过程。所以今天,我就来和你聊一聊异地多活背后的的实现原理。 认真读完这篇文章,我相信你会对异地多活架构,有更加深刻的理解。 这篇文章干货

一个天秤座的架构师 2万+

infercnv的实操

摘要: 博主在infercnv分析中遇到执行困难,外包服务不可靠(未按要求使用HMM方法)。通过优化策略(逐样本处理、精简细胞至1000个、固定随机种子)解决了运行问题,但HMM功能仍无法实现。最终参考Cell期刊标准设置阈值完成分析,后续将继续更新进展。该案例凸显了生物信息分析中自主优化的重要性。(150字)

xiaoyusang的博客 306

【分布式】异地多活

  异地多活作为一种分布式系统架构,核心目的是维护系统的的高可用性。提高容灾,那一定涉及到冗余。 两地三中心 两地:本地 + 异地 三中心:本地主数据中心 + 本地数据备份中心 + 异地数据备份中心 数据中心间三种备份方式,前两种统称为主备模式(Active-Standby): 热备:服务器A1作为主服务器承担业务,服务器A2作为备份服务器,实时从A1中获取数据保持数据一致。一旦A1熄火,A2立即接手保持服务正常不间断运行。由于时刻有一个A2空转作为备份,因此开销巨大。 冷备:依旧只有A1承担业务,只不过

Undefined ZONE 1070

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

详解 异地多活

在软件开发领域,「异地多活」是分布式系统架构设计的一座高峰,很多人经常听过它,但很少人理解其中的原理。 异地多活到底是什么?为什么需要异地多活?它到底解决了什么问题?究竟是怎么解决的? 这些疑问,想必是每个程序看到异地多活这个名词时,都想要搞明白的问题。 有幸,我曾经深度参与过一个中等互联网公司,建设异地多活系统的设计与实施过程。所以今天,我就来和你聊一聊异地多活背后的的实现原理。 认真读完这篇文章,我相信你会对异地多活架构,有更加深刻的理解。 这篇文章干货很多,希望你可以耐心读完。 01

JineD的博客 890

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: 深入 LevelDB 数据文件 SSTable 的结构
下一篇: 轻量级 Web 框架 Gin 结构分析
codehole_
博客等级 码龄7年 34粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值