微服务环境中的MySQL

微服务架构并不是一种新模式,但最近变得非常流行,主要原因有两个:云计算和容器。这一组合解决了每个基础设施的两个主要问题:成本降低和基础设施管理,从而帮助提高了采用率。

然而,所有这些美丽都隐藏着一个黑暗的事实:

微服务最难的部分是数据层

当涉及到像MySQL这样的经典关系数据库时,尤其如此。让我们找出原因。

MySQL和微服务

遵循微服务的两大支柱(云计算和容器),在MySQL范围内可以做什么?云计算和容器为数据表带来了什么?

云计算

云的神奇之处在于,它可以让您轻松地向上/向下扩展实例的大小,从而让您具有成本意识。不再浪费资金在大部分时间未充分利用的大型服务器上。有什么问题吗?它必须很快。快速扩展以准备处理流量,快速缩减以在流量较低时降低成本。

容器

容器的神奇之处在于可以根据资源需求分割硬件。这里的问题是容器传统上用于无状态应用程序。一次性容器。 一般来说,关系数据库,尤其是MySQL,扩展速度不快,而且是有状态的。然而,它可以适应云,并用于微服务的数据层。

缩放立方体

缩放立方体

Abott和Fisher的《可伸缩性的艺术》一书描述了一个非常有用的三维可伸缩性模型:Scale Cube。在此模型中,通过在负载平衡器后面运行克隆来扩展应用程序称为X轴扩展。其他两种缩放是Y轴缩放和Z轴缩放。微服务体系结构是Y轴伸缩的应用程序:它定义了一个体系结构,将应用程序构造为一组松散耦合的协作服务。

  • X轴:服务和数据的水平复制和克隆(READ REPLICAS)
  • Y轴:功能分解和分割– 多租户
  • Z轴:沿客户边界的服务和数据分区–(分片)

在微服务上,每个服务都有自己的数据库,以便与其他服务解耦。换句话说:服务的事务只涉及其数据库;数据是私有的,只能通过微服务API访问。

很自然,第一种划分数据的方法是使用多租户模式:

图片

实际上,在尝试多租户之前,可以使用每个服务都有一个表的模型,其中每个服务都拥有一组只能由该服务访问的表,但是因为是“软”划分,跳过API直接访问其他服务的表的诱惑是巨大的。

可以采用每个服务对应一个数据库模式(Schema per service),其中每个服务都有一个专用于该服务的数据库模式,这很有吸引力,因为它使所有权更加清晰。很容易为每个数据库创建一个用户,并使用特定的授权来限制数据库访问。

然而,这种“共享数据库”模式也有一些缺点,如:

  • 单一硬件:数据库故障会损害所有微服务
  • 与特定数据库相关的资源密集型任务将影响其他数据库(考虑DDL)
  • 共享资源:需要共享磁盘延迟、IOPS和带宽,以及CPU、网络带宽等其他资源。

另一种选择是“每个服务的对应一个数据库”

每个服务的数据库

这种策略不共享任何内容。更清晰的逻辑分隔。孤立问题。服务是松散耦合的。事实上,这为微服务打开了大门,使其能够使用最适合其需要的数据库,如图形数据库、面向文档的数据库等。 但与所有事情一样,这也有缺点:

  • 最明显的是:成本。要部署的更多实例
  • 最关键的:分布式事务。正如我们前面提到的,微服务之间是协作的,这意味着事务跨越多个服务。

最简单的方法是使用两阶段提交实现。但这种解决方案只是对大量锁定问题的公开邀请。它完全无法扩展。那么,有哪些替代方案呢?

  • 实现跨服务的事务:Saga模式
  • 实现跨服务的查询:API组合或命令查询职责分离(CQRS)

saga是一系列本地交易。每个本地事务都会更新数据库,并发布触发saga中下一个本地事务的消息或事件。如果本地交易因任何原因失败,那么该saga将执行一系列补偿交易,撤销之前交易所做的更改。此处是更多Saga 相关信息。

API组合只是一个组合器,它调用每个微服务上的查询,然后执行结果的内存连接:microservices.io/patterns/da…

CQRS保留一个或多个包含来自多个服务的数据的物化视图。这样就无需对查询大小进行连接:microservices.io/patterns/da…

所有这些备选方案有什么共同点?都是API级别考虑解决方案:实现和维护它成为开发人员的责任。数据层保留的仍然是数据,而不是信息。

让它成为云

有一些方法可以让你的MySQL成为云原生的:容易快速地进行缩放;在容器中运行,许多容器;用Kubernetes编排;拥有Kubernetes的所有优点(健康检查等)。

基于Percona XtraDB集群的 MySQL Percona操作符

Kubernetes操作符是一种特殊类型的控制器,用于简化复杂的部署。运营商提供完整的应用程序生命周期自动化,并利用上面的Kubernetes原语来构建和管理应用程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
全套微服务架构,视频学习java微服务架构,包括如下 第1章 微服务简介 001构建单体应用 002微服务解决复杂问题 003微服务的优点 004微服务的缺点 第2章 Linux使用 005Linux 简介 006Linux 与 Windows 比较 007安装 Linux 008Linux 远程控制管理 009Linux 目录结构 010操作文件目录 011系统管理命令 012开关机命令 013压缩命令 014Linux 编辑器 015修改数据源 016常用 APT 命令 017Linux 用户和组管理 018查看目录和文件的权限 019更改操作权限 020安装 Java 021安装 Tomcat 022安装 MySQL 023部署项目 第3章 Docker实战开发 042设置镜像标签 024Docker 简介 025Docker 功能特点 026Docker 系统架构 027Docker 安装 028第一个 Docker 应用程序 029运行交互式的容器 030后台运行与停止容器 031Docker 客户端帮助命令 032运行 Web 容器 033指定 Web 容器映射端口 034查看容器进程 035查看容器状态 036批量移除容器 037Docker Hub 镜像仓库 038获取镜像 039查找镜像 040更新镜像 041创建和移除镜像 043安装 Tomcat 044安装 MySQL 045部署项目 046数据卷简介 047创建数据卷 048备份数据卷 049恢复数据卷 050Docker Compose-安装 051Docker Compose-使用 第4章 使用 GitLab 托管代码 055GitLab简介 056GitLab 安装 057GitLab 设置 058GitLab 账户管理 059GitLab 使用-HTTP 060GitLab 使用-SSH 第5章 Spring Boot 061Spring简史 062 Spring Boot 简介 063 第一个 Spring Boot 应用程序 064 Spring Boot 自定义 Banner 065 Spring Boot 配置 066 Spring Boot Starter POM 067 Spring Boot 日志配置 第6章 集成 MyBatis 068Thymeleaf简介 069 第一个 Thymeleaf 模板页 070 集成 Druid 数据源 071 集成 TkMyBatis 简化 MyBatis 操作 072 集成 PageHelper 分页插件 073 使用 MyBatis Maven Plugin 自动生成代码 074 集成 MyBatis-测试查询 第7章 项目实战 075项目简介 076 创建依赖管理项目 077 创建通用工具项目 078 创建数据库管理项目 079 创建领域模型项目 080 创建管理后台接口项目 081 创建管理后台实现项目 082 为什么要使用 Dubbo 083 再谈微服务-背景介绍 084 再谈微服务-面向服务架构微服务架构 085 再谈微服务-服务框架对比 1 085 再谈微服务-服务框架对比 2 086 再谈微服务-RPC 对比 REST 087 Dubbo 简介 088 Dubbo 服务治理 089 Dubbo 组件角色 090 Zookeeper 简介 091 Zookeeper 应用举例 092 Zookeeper 集群模式 093 Dubbo Admin 管理控制台 094 系统后台管理-修改所需依赖 095 服务提供者 096 服务消费者 097 测试 JRebel 热部署 098 登录页 099 首页1 099 首页2 100 使用 thymeleaf 模板 101 使用 iframe 展示功能页 102 频道管理功能-列表页布局 103 新增频道 104 频道列表 105 选择父级频道1 105 选择父级频道2 106 表单页的树控件 107 列表页的树表格 108 FastDFS 分布式文件系统简介 109 FastDFS 分布式文件系统安装 110 文章管理功能-改造树控件1 110文章管理功能-改造树控件2 111 文章管理功能-新增文章 112 文章管理功能-使用 PageHelper 进行分页查询 113 文章管理功能-前端 Datatable 控件分页处理1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值