【原创】modb 开发之需求和总体设计

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

【需求】 
一句话需求:要求实现跨机房数据库同步功能。 
心得:一句话需求往往是最复杂的需求。 

【可选方案】 
  • 基于公司内部的 osp 公用库开发
  • 直接使用业界已有的开源解决方案
  • 利用业界已有的开源解决方案,通过二次开发实现相应功能
心得:基于公司公用库开发会被各种因素所束缚;业界已有的开源方案要么过于庞大复杂,不符合我的实现需要,要么功能上不满足要求;而基于开源方案做二次开发,需要付出相当大的学习成本,同时要求有相当的能力才能进行定制化改动。 
结论:有困难要上,没有困难创造困难也要上,必须第三种。 

【涉及到的相关开源项目】 
  • Lua(MySQL-Proxy 中用于做各种业务处理的地方,需要理解语法以及 Lua 与 C 的集成)
  • Glib(MySQL-Proxy 的底层依赖库)
  • JSON(modb 需要支持 json 数据解析)
  • libevent(rabbitmq-c 客户端库需要基于 libevent 做事件驱动改造)
  • RabbitMQ(需要理解 AMQP 协议和 RabbitMQ 的各种复杂应用方式才能做好 rabbitmq-c 客户端的改造)
  • MySQL(需要理解 MySQL 的各种知识,从基础配置到高可用架构,和各种常见错误处理)
  • MySQL Connector/C(需要理解 MySQL C API 的用法和常见错误)
  • MySQL Proxy(一个已经废弃的、经典的 MySQL 数据库代理软件)
  • Atlas(360 公司开源的、基于 MySQL-Proxy 改进的数据库代理软件)
  • Haproxy(RabbitMQ 做复杂应用时使用)
心得:当一个人不知道困难有多大时,才可能更猛的向前冲。 
结论:无知者无畏。 

【半年时间】 
  • 研究 AMQP 协议
  • 研究 rabbitmq-c 源码
  • 研究 libevent 源码
  • 完成基于 libevent 的 rabbitmq-c 的改造
  • 研究 RabbitMQ 官网上给出的各种用法以及《RabbitMQ in Action》整本书的内容
  • 研究 MySQL 协议、常规配置、集群方案、高可用等方面内容。
  • 研究 MySQL-Proxy 0.8.3 源码
  • 学习 Lua 语法以及和 C 的集成
  • 研究 Atlas 相对于 MySQL-Proxy 的改进,跟踪可能出现的问题
  • 研究 MySQL Connector/C 的用法,以及注意事项
结论:涉及到的东西非常多,各种信息如何整合到一起,并为我所用是难点。 

【MoDB 的工作内容和安排】  

在没有明确需求的情况下,经过大半年的各种研究后,最终在 11 月初制定出如下计划。 

基于 rabbitmq-c 改造后的 modb 应用程序,需要支持的功能点包括但不限于: 
a.  支持多消费者单生产者   (一周);  
b. 支持部分 My SQL 客户端协议[1][2][3](至少一周);  
c.  支持对 sql 语句的相关日志记录(常规操作),分析   (可能的冲突操作);可能需要支持对 Atlas 自带的 sql 日志的反查(一周)。  
d. 支持 daemon 模式运行,支持命令行选项配置(可选)(至多一周)。  

最后,我做出了如下宣言:“按照上述的计算,在变更不大的情况下,基本上 12 月底提供可用的 modb 没有太大问题。”  
......
......
      上面基本上可以概括出从今年 3 月份开始到现在本人都干了哪些事情(当然还有很多不会拿到台面上说的事情,可以笼统的称为“内功修炼”)。后续会有相关博客文章,详细描述每一个功能点我是怎样思考和设计的,期间出现了哪些问题,以及我想到的解决办法。 

最后附上一张最初画出来的一张图。 
 
另外添加两张结构图:  
 
 
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
Vue2.js:v-click-outside自定义指令和vue-click-outside监听鼠标点击元素外部区域事件
Vue2.js:v-click-outside自定义指令和vue-click-outside监听鼠标点击元素外部区域事件
902 0
Vue2.js:v-click-outside自定义指令和vue-click-outside监听鼠标点击元素外部区域事件
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
558 2
基于Android P,自定义Android开机动画的方法
|
Oracle 关系型数据库 MySQL
Mysql和Oracle数据库死锁查看以及解决
【8月更文挑战第11天】本文介绍了解决MySQL与Oracle数据库死锁的方法。MySQL可通过`SHOW ENGINE INNODB STATUS`查看死锁详情,并自动回滚一个事务解除死锁;也可手动KILL事务。Oracle则通过查询V$LOCK与V$SESSION视图定位死锁,并用`ALTER SYSTEM KILL SESSION`命令终止相关会话。预防措施包括遵循ACID原则、优化索引及拆分大型事务。
1044 3
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
304 5
|
人工智能 前端开发 测试技术
探索前端与 AI 的结合:如何用 GPT-4 助力开发效率
本文介绍了 GPT-4 如何成为前端开发者的“神队友”,让开发变得更加高效愉快。无论是需求到代码的自动生成、快速调试和性能优化,还是自动化测试和技术选型,GPT-4 都能提供极大的帮助。通过智能生成代码、捕捉 BUG、优化性能、自动化测试生成以及技术支持,GPT-4 成为开发者不可或缺的工具,帮助他们从繁重的手动任务中解脱出来,专注于创新和创意。GPT-4 正在彻底改变开发流程,让开发者从“辛苦码农”转变为“效率王者”。
428 0
探索前端与 AI 的结合:如何用 GPT-4 助力开发效率
|
机器学习/深度学习 人工智能 自动驾驶
5G NR:下一代移动通信的基石
5G NR:下一代移动通信的基石
1443 1
|
安全 网络协议 物联网
车联网的IP
车联网中的IP操作并不是一个可以直接用数量来界定的概念,因为它涉及到多个层面和复杂的网络通信过程。然而,可以从车联网的架构和网络通信的角度来探讨车联网中可能涉及的IP相关操作。车联网架构,车联网架构通常包含多层,从物理层、链路层、网络层、传输层到应用层。在每一层中,都可能涉及到IP相关的操作,但具体的操作方式会根据层级的不同而有所差异。
|
边缘计算 安全 物联网
边缘计算在物联网中的作用:技术深度解析
【7月更文挑战第28天】边缘计算在物联网中发挥着至关重要的作用。通过降低延迟、减少网络负载、提高隐私和安全性以及增强离线功能等优势,边缘计算为物联网带来了更加高效、智能和安全的解决方案。未来随着技术的不断进步和应用场景的拓展,边缘计算将在物联网领域发挥更加重要的作用
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的疫情防控自动售货机系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的疫情防控自动售货机系统附带文章源码部署视频讲解等
260 2
|
人工智能
AI歌手——超简单一键运用ACE Studio来训练模拟真人唱歌
AI歌手——超简单一键运用ACE Studio来训练模拟真人唱歌
1533 1