所谓的一致性问题是指,在同时使用缓存和数据库的情况下,要确保数据在缓存与数据库中的更新操作保持同步。也就是当对数据进行修改时,无论是先修改缓存还是先修改数据库,最终都要保证两者的数据是一样的,不会出现数据不一样的问题。
1.一致性问题解决方案
缓存和数据库一致性的经典解决方案有以下两个:
- 使用延迟双删 + MQ 保证数据的一致性。
- 通过 Canal 监听 MySQL 的 Binlog 写入日志,之后将写入操作(增加、删除和修改)的信息发送至 Kafka,程序监听到 Kafka 的消息后更新 Redis,从而保证数据的最终一致性。
需要注意的是,无论使用的是延迟双删还是 Canal,都会出现短暂数据不一致性的问题,但可以保证最终的数据一致性。
然而,如果使用的是延迟双删 + MQ 的这种方式的时候,有一个棘手的问题很难处理,那就是如何设置延迟时间?
如果延迟时间设置的比较短,那么在并发场景下会出现数据不一致的问题;如果延迟时间设置的比较长,那么在比较长的这段时间内还会有数据不一致的问题。这个问题归根到底的原因是,并发线程的调度时间不能人为的控制(由操作系统统一调度)。
所以基于以上原因,使用 Canal 来保证数据一致性问题变成了一个比较不错的解决 Redis 和 MySQL 数据一致性的有效手段。
2.Canal执行流程
通过 Canal 保证数据一致性的实现流程如下图所示:
3.Canal操作流程
使用 Canal 读取 MySQL 的 Binlog 配置步骤如下:
- 开启并配置 MySQL 的 Binlog 设置。
- 重启 MySQL 服务。
- 给 MySQL 配置 canal/canal 用户用于后续 Canal 同步数据(此步骤非必须)。
- 安装并解压 Canal。
- 修改 canal.properties 配置文件,让其将数据同步到 Kafka,并配置 Kafka 服务器信息。
- 修改 example/instance.properties 配置文件,指定同步数据到 Kafka 某个主题。
- 拷贝 plugin 中的 jar 包到 lib 目录,让 Canal 支持将数据同步到 MQ。
- 启动 Canal 服务。
- 在代码中监听 Kafka 主题,并判断并更新 Redis 缓存。
Kafka 中存储的数据格式如下:
4.视频实战
在我的 AI Cloud 项目中,通过一个多小时的时间一步步的实现 Canal 搭建和数据一致性问题的处理,如下图所示:
大家如果需要,可以加我:vipStone 获取(备注:AICloud)。
5.什么是AI Cloud?
AI Cloud 一键式生成所有大模型结果的项目,支持近百种大模型调用,还有社区交流和讨论功能。
这个项目除了是热门的 AI 方向之外,他还使用了众多主流的 Java 技术,例如 Spring Cloud、并发编程、分布式锁、分库分表等。
AI Cloud 是 AI 方向的微服务项目,包含 24 个主流技术和 10 大项目亮点,主要解决的痛点是一键式生成 AI 大模型答案的工具,支持对话和画图功能,还有社区讨论,以及评论、点赞功能。
AI Cloud 项目包含以下主要功能:
- AI 工具:一键式提问生成所有大模型的答案,在没有 AI Cloud 之前,我们在查询一个复杂问题时,需要复制粘贴到每个大模型查询答案,根据这些答案才能汇总自己需要的信息;而有了这个系统之后,一键发送问题就能收获所有大模型的答案了,方便快捷。AI 工具目前提供的功能有:
- 对话功能
- 绘图功能
- 话题讨论功能:除了 AI 工具可以使用之外,还有话题讨论板块,可以分享 AI 技术和聊天吹水两不误,工具和娱乐都有了。
- 用户体系和历史记录:用户登录之后才可以使用大模型,这样也能更好的记录用户(使用 AI 工具的)历史信息。
- 用户使用次数限制:因为大模型接口的调用是付费的,所以需要限制每个用户的使用次数,每晚 00 点重置限制次数。
- 支持近百种 AI 模型:本项目支持的 AI 大模型有:ChatGPT、通义千问、讯飞星火、文心一言、豆包(字节旗下),还有自己本地部署的 AI 模型(近百种大模型的支持)。
6.使用技术
AI Cloud 中使用到的技术点有 24 个:
- Spring Boot
- Spring Cloud Alibaba
- MySQL
- Mybatis-Plus
- Redis
- Kafka
- Spring Cloud Alibaba Nacos
- Spring Cloud Alibaba Sentinel
- Spring Security
- Spring AI
- Spring Cloud Alibaba AI
- XXL-Job
- JWT
- MinIO
- 并发编程
- 分布式锁
- Sharding Sphere(分库分表)
- Canal
- Hutool
- Spring Validation
- Swagger
- Knife4j
- 自定义注解(实现幂等性判断)
- Leaf
7.技术亮点
- 使用并发编程技术保证项目的执行效率,使用线程编排保证了任务执行的正确性和完整性。
- 使用分布式锁保证大模型接口调用的安全性和稳定性,其中分布式锁实现了锁重入、锁(自动)续期、锁误删、单点分布锁故障等问题。
- 项目在关键操作上添加了幂等性判断(关键实现技术为:自定义注解 + Redis),保证系统的稳定性和安全性。
- 使用多种设计模式完成项目开发,例如,责任链设计模式保证项目的安全、使用工厂模式来提成程序执行效率、使用建造者模式实现创建并赋值对象、使用生产者和消费者模式实现异步通信和模块解耦、使用观察者模式保证了实时信息更改、使用懒汉模式实现资源的充分利用等。
- 使用 MQ 实现系统的削峰填谷,以及保证整个程序流程执行的完整性。
- 通过监控 MySQL 的 Binlog 和 Canal 解决数据库和 Redis 的数据一致性问题。
- 项目中使用了分库分表技术增加数据库的并发处理性能。
- 高并发场景稳定的稳定性设计,例如自定义拒绝策略保证任务不丢失和及时通知到负责人进行手工补偿处理。
- 支持云端大模型和本地大模型的调用,近百种大模型的支持和调用。
- 使用最新的 JDK 长期支持版和最新版的 Spring Boot 框架和组件完成程序的开发。
8.讲师介绍
AI Cloud 项目是我本人带着大家一行行代码实现的,我叫王磊,人称磊哥,14 年编程工作经验(其中包含 9 年面试官经验),4 年就业辅导经验。曾就职于 360,资深 Java 布道师。
曾担任某思教育和某谷电商的研发经理和技术负责人。
Java 技术传播者,B 站课堂特邀讲师、腾讯云年年度最佳作者、掘金社区优秀作者、拉勾专栏作者、慕课讲师、阿里云社区专家博主等。
9.限时优惠
AI Cloud 项目为小众精品项目(无需担心求职时撞车),项目收费是 399 元,不过这类给微信公众号的读者提供两个福利:
- 原价
399元的项目,通过以下微信号报名的同学优惠 100 元,299 元就可以全款拿下。 - 购买 AI Cloud 微服务项目,赠送一个技术博客的单体项目。
有需要的朋友,添加以下微信联系报名哦【备注:AICloud】: