微服务 高并发 多数据源 读写分离 分库分表

sharding-jdbc 分库分表

SpringBoot+Mybatis-Plus整合Sharding-JDBC5.1.1实现分库分表

mybatis plus整合sharding-jdbc在基于spring boot的项目中的单库分表应用

springboot+mybatisplus,再加入shardingjdbc分表玩法

分库分表神器 Sharding-JDBC

Sharding-Jdbc集成mybatis-plus实现分库分表解决方案

Spring Boot 多数据源(读写分离)入门

Sharding-JDBC教程:Spring Boot整合Sharding-JDBC实现读写分离

Spring Boot 中分库分表 sharding-jdbc

一次完美的分库分表实践

ShardingSphere 国产开源分库分表中间件

SpringBoot 2 种方式快速实现分库分表

分库分表方案

数据库分库分表策略的具体实现方案

分库分表“实践”大全

“分库分表" ?选型和流程要慎重,否则会失控

关于分库分表,这有一套大而全的轻量级架构设计思路

大厂在用的分库分表方案

分库分表

数据库怎么分库分表,垂直?水平?

用单库自增键来生成id了,后期怎么分库?

简单实现分库分表

关于分库分表,这有一套大而全的轻量级架构设计思路

高并发场景下,百万级订单量系统的分库分表重构经历

分库分表方案

256变4096:分库分表扩容如何实现平滑数据迁移?

“分库分表”,还能这么玩

一文读懂分库分表的技术演进(最佳实践)

分区取模分库分表策略:多表事务分库内闭环解决方案

10亿级订单系统分库分表设计思路!

分库分表后非分片键如何查询?

分表方案

MySQL分表篇:该如何将月增上亿条数据的单表处理方案优雅落地

月增千万的数据,我用单体+单库扛下了所有

分库分表路由策略

分库分表后路由策略设计

结合业务特性,选取用户标识作为分片键,通过计算用户标识的哈希值再取模来得到用户订单数据的库表编号.
假设共有n个库,每个库有m张表,
则库表编号的计算方式为:

  • 库序号:Hash(userId) / m % n
  • 表序号:Hash(userId) % m

分库分表后怎么做 MySQL 到 ES 的数据同步

上面说到为了便于管理后台的查询,我们将订单数据冗余存储在Elasticsearch中,那么,如何在MySQL的订单数据变更后,同步到ES中呢?
这里要考虑的是数据同步的时效性和一致性、对业务代码侵入小、不影响服务本身的性能等。

MQ方案
ES更新服务作为消费者,接收订单变更MQ消息后对ES进行更新
在这里插入图片描述
Binlog方案
ES更新服务借助canal等开源项目,把自己伪装成MySQL的从节点,接收Binlog并解析得到实时的数据变更信息,然后根据这个变更信息去更新ES。
在这里插入图片描述
其中BinLog方案比较通用,但实现起来也较为复杂,我们最终选用的是MQ方案。
因为ES数据只在管理后台使用,对数据可靠性和同步实时性的要求不是特别高。
考虑到宕机和消息丢失等极端情况,在后台增加了按某些条件手动同步ES数据的功能来进行补偿。

分布式事务问题

电商的交易流程中,分布式事务是一个经典问题,比如:
用户支付成功后,需要通知发货系统给用户发货。
用户确认收货后,需要通知积分系统给用户发放购物奖励的积分。

我们是如何保证微服务架构下数据的一致性呢?
不同业务场景对数据一致性的要求不同,业界的主流方案中,用于解决强一致性的有两阶段提交(2PC)、三阶段提交(3PC),解决最终一致性的有TCC、本地消息、事务消息和最大努力通知等。
这里不对上述方案进行详细的描述,介绍一下我们正在使用的本地消息表方案:在本地事务中将要执行的异步操作记录在消息表中,如果执行失败,可以通过定时任务来补偿。
下图以订单完成后通知积分系统赠送积分为例。
在这里插入图片描述

系统安全和稳定性

网络隔离
只有极少数第三方接口可通过外网访问,且都会验证签名,内部系统交互使用内网域名和RPC接口。

并发锁
任何订单更新操作之前,会通过数据库行级锁加以限制,防止出现并发更新。

幂等性
所有接口均具备幂等性,不用担心对方网络超时重试所造成的影响。

熔断
使用Hystrix组件,对外部系统的实时调用添加熔断保护,防止某个系统故障的影响扩大到整个分布式系统中。

监控和告警
通过配置日志平台的错误日志报警、调用链的服务分析告警,再加上公司各中间件和基础组件的监控告警功能,让我们能够能够第一时间发现系统异常

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值