天天看點

【原創】modb 開發之需求和總體設計

【需求】 

一句話需求:要求實作跨機房資料庫同步功能。 

心得:一句話需求往往是最複雜的需求。 

【可選方案】 

基于公司内部的 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 應用程式,需要支援的功能點包括但不限于: 

d. 支援 daemon 模式運作,支援指令行選項配置(可選)(至多一周)。 

最後,我做出了如下宣言:“按照上述的計算,在變更不大的情況下,基本上 12 月底提供可用的 modb 沒有太大問題。” 

......

      上面基本上可以概括出從今年 3 月份開始到現在本人都幹了哪些事情(當然還有很多不會拿到台面上說的事情,可以籠統的稱為“内功修煉”)。後續會有相關部落格文章,較長的描述每一個功能點我是怎樣思考和設計的,期間出現了哪些問題,以及我想到的解決辦法。 

最後附上一張最初畫出來的一張圖。 

【原創】modb 開發之需求和總體設計

另外添加兩張結構圖: 

【原創】modb 開發之需求和總體設計
【原創】modb 開發之需求和總體設計