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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 【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
目录
相关文章
|
1天前
|
存储 前端开发 关系型数据库
在服务的数据驱动中使用三层架构
【6月更文挑战第17天】 三层架构是软件设计中的一种经典模式,将应用分为表示层(UI)、应用层(BLL)和数据层(DAL)。相比于双层架构,三层架构提供了更好的模块化和安全性。多层架构虽少见,但三层架构在现代云原生技术中依然重要,常与微服务结合使用。
15 2
在服务的数据驱动中使用三层架构
|
4天前
|
存储 数据处理 数据库
理解在服务架构中的事件驱动
【6月更文挑战第14天】网络架构和软件设计常基于ISO七层模型和三层应用架构,强调数据处理的重要性。事件驱动架构(EDA)以事件为中心,改变传统设计方式,解决系统问题。事件是触发通知或状态变化的操作,如用户下单。EDA适用于微服务通信、工作流程自动化、SaaS集成和基础设施自动化等场景,提高系统敏捷性和可扩展性。然而,EDA并非万能,需根据需求选择合适的设计方案。
60 1
理解在服务架构中的事件驱动
|
5天前
|
监控 安全 自动驾驶
基于java+单体服务 + 硬件(UWB定位基站、卡牌)技术架构开发的UWB室内定位系统源码 UWB定位技术 超宽带定位 高精度定位系统源码
基于java+单体服务 + 硬件(UWB定位基站、卡牌)技术架构开发的UWB室内定位系统源码 UWB定位技术 超宽带定位 高精度定位系统源码
17 3
|
6天前
|
消息中间件 运维 监控
微服务架构中的服务通信与数据一致性挑战
在微服务架构的海洋中,服务之间的通信和数据一致性问题犹如潜藏的暗礁和漩涡,随时可能威胁到整个应用的健康运行。本文将深入探讨微服务间通信机制的选择、数据一致性维护的策略,以及面对网络延迟和分区容忍性时如何保持系统的灵活性和健壮性。通过分析常见的模式和最佳实践,旨在为开发者提供一套应对这些挑战的航海图。
|
8天前
|
消息中间件 存储 监控
通过将大型应用拆分成一系列小型、独立的服务,微服务架构为后端开发带来了更高的灵活性、可扩展性和可维护性
【6月更文挑战第10天】本文探讨了构建高效微服务架构的后端开发最佳实践。微服务的核心原则是服务独立、去中心化、自治和轻量级通信,优势在于可扩展性、独立性、技术灵活性和团队协作。实践中,应注意服务的拆分粒度,选择合适的通信协议(如RESTful、RPC、消息队列),处理数据一致性与分布式事务,实施服务治理和监控,以及确保安全性与权限控制。未来,微服务将结合服务网格、容器化和云原生技术,持续发展和优化。
15 0
|
11天前
|
缓存 网络协议 算法
微服务架构之从类库到服务之服务发现
服务发现是分布式系统中的核心技术,其实现需要在可用性和一致性之间进行权衡。通过合理设计服务注册中心的架构,并采用有效的健康检查和缓存机制,可以提高系统的可靠性和可用性。不同的服务发现框架各有优缺点,选择适合的框架需要根据具体需求进行权衡和取舍。总之,服务发现的有效实现对于构建可靠的大型分布式系统至关重要。
10 3
|
26天前
|
UED
服务架构中的数据驱动设计
【5月更文挑战第13天】数据驱动设计是依据用户数据进行网页设计的方法,旨在通过测试了解用户需求并优化体验,从而增加流量和转化率。设计师应避免主观感受影响设计,因个人偏好可能与用户需求不符。数据驱动设计能减少偏见,提高转化率和销售额,是一个迭代过程,不断实验和优化。虽然有些人担忧可能限制创造力,但其实它仍需要创新和妥协。随着业务、用户和技术变化,数据驱动设计提供持续改进的解决方案。
47 0
服务架构中的数据驱动设计
|
1月前
|
JSON JavaScript 前端开发
KOI 后台新的架构下,webshop如何消费后台服务 - websocket 初始化
KOI 后台新的架构下,webshop如何消费后台服务 - websocket 初始化
20 0
|
5天前
|
监控 Cloud Native 开发者
云原生技术浪潮下的微服务架构实践
云原生技术正引领着现代软件开发的潮流,其中微服务架构作为其核心理念之一,为复杂应用提供了灵活、可扩展的解决方案。本文将探讨在云原生环境下实施微服务架构的策略和挑战,并结合实际案例分析微服务设计的最佳实践,旨在为开发者提供一套可行的微服务部署与管理指南。
|
5天前
|
消息中间件 监控 API
构建微服务架构:从理论到实践的全面指南
本文将深入探讨微服务架构的设计原则、实施步骤和面临的挑战。与传统的单体架构相比,微服务通过其独立性、可伸缩性和灵活性,为现代应用开发提供了新的视角。文章将介绍如何从零开始规划和部署一个微服务系统,包括选择合适的技术栈、处理数据一致性问题以及实现服务间通信。此外,我们还将讨论在迁移至微服务架构过程中可能遇到的技术和组织挑战,以及如何克服这些难题以实现顺利过渡。