qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          tt2mysql —— 一個異構數據庫同步方案

           大多數數據庫都自帶了同步方案,但通常是同步到同一類型的數據庫。在一些特定的情況下,我們可能希望把數據從一種數據庫,同步到另一種數據庫,以便進行數據分析、統計、挖掘等,或是完成實時監控、實時搜索等服務。

            本文介紹的就是這樣一個方案,把數據從NoSQL數據庫ttserver同步到MySQL上。

            數據的同步過程基本上可以分解成:獲取、解析、識別、處理。

            獲取同步(replicating)過程基本上就是處理高性能網絡交互、各層通信協議、基于安全考慮的身份驗證等問題的過程。解析(parsing)過程主要處理具體數據結構,由分派器(dispatcher)分派給具體的識別器(recognizer)進行識別。最終由處理器調用數據訪問層完成整個過程。基本過程可見下方草圖:

            以上只是一個簡化的草圖,實際完成的時候,還有很多細節需要處理,如,

            1)快照點的選擇,以及生成快照點的方案。不穩定的數據是沒用的;

            2)協議、數據結構的可配置化。不同的場景下只需要簡單配置,就能滿足具體業務;

            3)對前后端數據服務的抽象。只有抽象化,才能讓它成為一個有生命力的方案;

            4)高處理能力。異步、非阻塞、多worker、操作合并;

            5)考慮對協議升級的兼容方案;

            6)可支持前后端數據遷移、數據分片;

            7)前后端多實例同時使用;

            8)全局同步與增量同步方案同時支持,新同步點支持;

            9)各種可能的出錯:網絡、數據、服務等處理、監控、告警;

            10)穩定性、可用性;

            11)完備的統計數據。方案做得怎么樣,總要有數據才好說話吧:)

            順帶把部分初期概念設計圖放出來。后來已經有一些演變,但只是少數環節上。在大部分的環節上,基本思路沒有太大的變化。

            經過一段時間的奮戰把方案實現出來,功能驗證也比較順利通過了,實戰又將跑得怎么樣?具體業務及性能數字未經同意不準備在此公布,但可說側面說一下。目前,該方案上線應該已經將近一年,除了少數幾次前端遷移以外,未停過服。性能方面,一年后,在業務已經有量級發展的情況下,該方案仍能滿足需求。

            另外,雖然命名為tt2mysql,我從未把該方案當成是數據庫之前的同步方案。以前說過會把東西總結出來,一直太懶,翻到了就寫一下。

          posted on 2011-11-16 13:12 順其自然EVO 閱讀(361) 評論(0)  編輯  收藏 所屬分類: 數據庫

          <2011年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 临高县| 深泽县| 淮南市| 乌兰浩特市| 香港| 蒙山县| 和龙市| 镇原县| 定襄县| 通许县| 饶平县| 铜梁县| 班玛县| 营口市| 江源县| 乌拉特前旗| 辰溪县| 盐边县| 丰县| 彩票| 喀什市| 康马县| 武鸣县| 正镶白旗| 博野县| 轮台县| 淄博市| 三江| 化州市| 永泰县| 黎平县| 扎鲁特旗| 祥云县| 泰州市| 通许县| 邻水| 永胜县| 卢龙县| 鸡西市| 金溪县| 博兴县|