【实战总结】分库路由字段与业务字段绑定落库

2024-08-30 10:32

本文主要是介绍【实战总结】分库路由字段与业务字段绑定落库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

问题背景

常见的解决方案

方案1:Hbase+ES

方案2:MQ异步绑定


问题背景

我们一般分库分表的路由字段是用户的账户ID(userId),有些业务场景外部不以此做业务,而是以业务请求ID等进行业务交互

所以我们内部系统通过userId来串联业务关系,但是与外部交互要使用到bizId等这些代表业务唯一性的字段,这两个字段不同路由可能会打到不同的库是没办法做数据库事务处理的

出现这些场景时的一个需要解决的问题是,按照userId路由字段落库了,但是外部服务交互只有bizId没有userId,导致无法通过bizId反查userId路由到内部的业务数据。

 

常见的解决方案

方案1:Hbase+ES

查询数据中心的同步数据,只要字段做了ES索引配置,就是支持全量搜索的,这种方案最简单,但不是最优的,原因是数据中心数据都配置了TTL,有些不能支持永久查询,而且数据中心的查询性能不能满足生产级调用可能会产生性能瓶颈

方案2:MQ异步绑定

通过绑定分库分表路由字段与外部业务交互字段进行逻辑绑定,这样就可以在同外部业务交互时通过内部业务的分库分表的业务字段反查库表了

 

如图所示,

Step 1:业务请求发起时,按照路由字段(userId)落库,同时发出一条包含路由字段(userId)与业务字段(bizId)MQ消息,异步处理再按照业务字段(bizId)进行落库,一般这就是完整的处理流程了。

Step 2:99.9%的时间Step 1都是OK的,异常情况是MQ发不出去或者丢失或异常了,这时候可以增加Worker来扫描绑定状态进行补偿,异步落库的业务字段MQ是支持幂等重试的,是最终一致的

Step 3:由于上述绑定过程不是准实时的,99.9%的时间外部是感知不到是非同步业务的,外部调用失败可以重试处理

这篇关于【实战总结】分库路由字段与业务字段绑定落库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120569

相关文章

C# List.Sort四种重载总结

《C#List.Sort四种重载总结》本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录1. Sort方法的四种重载2. 具体使用- List.Sort();- IComparable

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

Java 队列Queue从原理到实战指南

《Java队列Queue从原理到实战指南》本文介绍了Java中队列(Queue)的底层实现、常见方法及其区别,通过LinkedList和ArrayDeque的实现,以及循环队列的概念,展示了如何高效... 目录一、队列的认识队列的底层与集合框架常见的队列方法插入元素方法对比(add和offer)移除元素方法

Spring Boot基于 JWT 优化 Spring Security 无状态登录实战指南

《SpringBoot基于JWT优化SpringSecurity无状态登录实战指南》本文介绍如何使用JWT优化SpringSecurity实现无状态登录,提高接口安全性,并通过实际操作步骤... 目录Spring Boot 实战:基于 JWT 优化 Spring Security 无状态登录一、先搞懂:为什

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

C++11中的包装器实战案例

《C++11中的包装器实战案例》本文给大家介绍C++11中的包装器实战案例,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录引言1.std::function1.1.什么是std::function1.2.核心用法1.2.1.包装普通函数1.2.

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

Spring IOC核心原理详解与运用实战教程

《SpringIOC核心原理详解与运用实战教程》本文详细解析了SpringIOC容器的核心原理,包括BeanFactory体系、依赖注入机制、循环依赖解决和三级缓存机制,同时,介绍了SpringBo... 目录1. Spring IOC核心原理深度解析1.1 BeanFactory体系与内部结构1.1.1

Redis 命令详解与实战案例

《Redis命令详解与实战案例》本文详细介绍了Redis的基础知识、核心数据结构与命令、高级功能与命令、最佳实践与性能优化,以及实战应用场景,通过实战案例,展示了如何使用Redis构建高性能应用系统... 目录Redis 命令详解与实战案例一、Redis 基础介绍二、Redis 核心数据结构与命令1. 字符

在SpringBoot+MyBatis项目中实现MySQL读写分离的实战指南

《在SpringBoot+MyBatis项目中实现MySQL读写分离的实战指南》在SpringBoot和MyBatis项目中实现MySQL读写分离,主要有两种思路:一种是在应用层通过代码和配置手动控制... 目录如何选择实现方案核心实现:应用层手动分离实施中的关键问题与解决方案总结在Spring Boot和