使用合理的架构保障服务的韧性

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
可观测可视化 Grafana 版,10个用户账号 1个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【6月更文挑战第14天】 该文介绍了软件韧性的概念和目标,强调了主从模式在确保业务连续性中的作用。主从模式通过全同步、半同步和异步技术保证数据一致性和系统可用性。这种模式常用于读写分离,缓解数据库负载,是保障业务韧性的常见策略。

1 简介

韧性从多个维度诠释了软件持续提供业务服务的能力,核心目标是提升软件的平均无故障时间(Mean Time Between Failure,MTBF)。

treeoflife6.png

从架构设计上,韧性包括服务异步化能力、重试/限流/降级/熔断/反压、主从模式、集群模式、AZ内的高可用、单元化、跨region容灾、异地多活容灾等。

本文介绍保障业务韧性的一个经典方法,主从模式。并且详细阐述了三种数据同步方式的特点及适用场景,并讨论了MySQL主从复制的binlog模式(SQL语句、行基础和混合模式)及其同步过程。主从复制通过主库的binlog传递到从库,经由I/O线程和SQL线程处理,实现数据更新。

当业务上线后,最不能接受的就是业务不可用,让用户无法正常使用软件,影响体验和收入。

当软件所依赖的软硬件组件出现各种异常时,软件就需要表现出抵御能力,这些异常通常包括硬件故障、硬件资源瓶颈(如CPU/网卡带宽耗尽)、业务流量超出软件设计能力、影响机房工作的故障和灾难、软件bug、黑客攻击等对业务不可用带来致命影响的因素。

这时候主从模式的读写分离就可以保障一定的业务韧性了,先介绍其三个数据同步方式,然后介绍主从同步mysql的binlog记录的三个方式,最后介绍图形解读binlog的在内部的同步过程,并做小结。

1 全同步技术

  • 定义

用户请求更新数据时,主数据库必须要同步到备用数据库才可用返回给用户,如果主数据库没有同步到备数据库,用户的更新操作一直阻塞

  • 特点

保证了数据的强一致性,吸收了系统可用性

  • 场景

适用于分布式数据库主备场景或对数据一致性有严格要求的场合,比如金融,交易场景

2 半同步技术

  • 定义

数据更新时,主数据库执行写操作,并给备数据库发送同步请求,主数据库可用等等一部分从数据库响应,即返回给用户

  • 方案

多个备用数据库其中一个返回,超过一半结点包括主数据库回复成功后,即可返回给用户。

  • 场景

多数分布式系统都采用半同步,兼顾性能和数据保护

  • 框架

      MySQL,Zookeeper,Ercd,Oracle等        
    

    3 异步技术

  • 定义

数据更新时,主数据库处理完请求后直接给用户响应,不必等备数据库完成同步,备数据库将异步执行数据同步,用户更新操作不会因为备数据库未完成而阻塞

  • 特点

保证可用性,牺牲了一些数据一致性

  • 场景

适用于用户请求响应时延要求高的场景

4 主从复制的方式

主从复制使用binlog模式进行数据备份的三种binlog模式:

① 基于SQL语句的复制,

每一条更新的语句(insert、update、delete)都会记录在binlog中,进而同步到从库的relaylog中,被从库的SQL线程取出来,回放执行。

优点是:binlog的日志量可能会比较少,比如一个涉及行数为1000行的update语句:同步这一个语句,就同步了1000行的数据。

缺点是:同步的SQL语句里如果含有绑定本地变量的函数、关键字时,可能造成主从不一致的情况。比如SQL语句中有time函数,如果主从数据库的服务器时间不是精确相等,就会造成结果不一致。

② 基于行的复制,

不记录SQL语句,只记录了哪个记录更新前和更新后的数据,可以保证主从之间数据绝对相同。缺点是:1条SQL更新1000行的数据无法再偷懒,必须原原本本同步1000行的数据量。

③ 混合复制:

以上两种模式的混合,选取两者的优点。对于有绑定本地特性、评估可能造成主从不一致的SQL语句,则自动选用基于行的复制,其他的情况则选择基于SQL语句的复制。

5 主从复制的binlog数据同步过程

主从复制过程:从库发起同步请求,数据传导过程如下:

Master->存储引擎->binlog->dump线程(读取binlog) ->从库I/O线程(将接到的日志信息存放到relaylog)->relaylog(读取relay的日志信息)->SQL线程(将数据库事件在存储引擎执行)->存储引擎

从库请求主库同步过程如下:

1  从库连接主库请求同步
2 Dump线程读取binlog
3 发送binlog中的日志
4 将binlog日志存储到relay log
5 SQL线程读取relay log
6 在存储引擎执行数据更新事件

使用图形表示如下:

image.png

上图详细描述了Mysql的主从数据同步步骤。在主从(Master-Slave)模式,主组件接收客户端的服务请求,它将工作划分给从组件,然后合并、解释、总结或整理从组件的响应。

当主组件没有对从组件分配工作时,从组件处于空闲(Idle)状态,并会在新的任务分配时被重新激活,
主从模式由主操作重配置状态图描述,其中包含两个正交的图,即主操作状态图和主从配置状态图,主操作状态图定义了主组件的操作状态,主从配置状态图描述了主组件如何安排重配置的过程。

6 小结

目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站利用数据库的这一功能,实现数据库读写分离,从而改善数据库负载
压力。

现在对数据库的直接操作一般是因为一部分对缓存的读操作比如缓存访问未命中,缓存过期和全部写操作都需要访问数据库,应用服务器再写数据库。应用写数据时,访问主数据库,主数据库通过主从复制机制将数据更新同步到从数据库,这样当应用服务器读数据的时候,就可以通过从数据库获得数据。

为了便于应用程序访问读写分离后的数据库,通常在应用服务器端使用专门的数据访问模块,使数据库读写分离对应用透明。主从模式通常为经典的业务韧性保障机制。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
10天前
|
消息中间件 API 开发者
深入理解微服务架构中的服务通信与数据一致性
【7月更文挑战第15天】在微服务架构中,各个独立部署的服务之间如何高效、可靠地通信以及保持数据一致性是设计时必须考虑的关键问题。本文将探讨微服务间的通信机制和数据一致性策略,包括同步与异步通信方式的比较、事件驱动架构的应用以及CAP定理对数据一致性的影响。文章旨在为后端开发者提供实现微服务间高效通信和数据一致性的实用指导。
|
9天前
|
消息中间件 负载均衡 网络协议
探索微服务架构中的服务通信模式
【7月更文挑战第16天】在微服务架构的海洋中,服务间的通信宛如细丝相连,维系着整个系统的协同与和谐。本文将深入探讨微服务之间如何通过同步与异步通信模式进行交互,并剖析这些模式背后的技术原理及其对系统性能和可扩展性的影响。我们将从理论到实践,一探究竟。
43 6
|
9天前
|
负载均衡 监控 Kubernetes
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
|
9天前
|
消息中间件 API 数据库
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
|
13天前
|
消息中间件 API 开发者
探索微服务架构中的服务通信模式
【7月更文挑战第11天】在微服务架构的世界中,服务的通信是构建高效、可维护系统的关键。本文将深入探讨微服务架构中常见的服务通信模式,包括同步通信与异步通信机制,并比较它们在不同场景下的适用性及优缺点。文章旨在为后端开发者提供一份实用的指南,帮助他们在选择适合自己项目需求的通信模式时做出明智的决策。
|
5天前
|
分布式计算 大数据 BI
MaxCompute产品使用合集之如何确定是否需要更改MC的Endpoint服务接入架构
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
12天前
|
运维 Kubernetes 监控
微服务架构中服务的编排
微服务架构中服务的编排
|
12天前
|
消息中间件 运维 数据处理
探索微服务架构中的服务通信模式
【7月更文挑战第12天】在微服务架构的海洋中,服务之间的通信犹如连接岛屿的桥梁,至关重要。本文将深入探讨微服务架构下的服务通信模式,从同步请求/响应到异步消息传递,再到事件驱动架构,我们将一探究竟,了解它们如何影响系统设计、性能和可维护性。通过比较不同模式的优劣,我们旨在为开发者提供一盏明灯,指引他们在构建高效、可靠且易于扩展的微服务系统时做出明智的选择。
|
16天前
|
消息中间件 安全 NoSQL
「架构」SOA(面向服务的架构)
**SOA**是构建灵活企业IT系统的架构模式,基于服务组件进行设计。它强调服务的自包含、模块化,通过服务识别、抽象、组合和交互实现业务流程。特点包括松耦合、重用性、互操作性和标准化。优点是灵活性、可维护性、可扩展性和成本效益,但也有复杂性、性能和治理问题。设计策略涉及业务能力识别、服务契约定义和服务目录建立。技术栈涵盖Java EE、.NET、SOAP、REST、服务治理工具和各种数据库、消息队列及安全标准。SOA旨在适应变化,但也需妥善管理和规划。
22 0
|
16天前
|
Kubernetes API 微服务
「架构风格」SOA(面向服务)和微服务
**SOA与微服务对比摘要**: - **SOA**:企业级,服务粒度大,重用性强,常通过ESB通信,服务部署集中,技术栈统一。 - **微服务**:服务粒度小,单一职责,轻量级协议如REST,独立部署,技术多样性,去中心化治理。 - **区别**:服务大小、独立性、通信协议、部署方式和技术栈不同,微服务更强调敏捷和独立性。 - **示例**:Python Flask简单示例展示了服务创建,SOA服务间通过HTTP请求通信,微服务每个服务独立运行。 - **权衡**:涉及服务发现、负载均衡、容错和安全,常用技术如Docker、Kubernetes和API网关。
49 0