• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            冰果

            技術群:26678700     
            交流QQ: 704839634
            合作: 1) 可兼職遠程辦公開發; 2) 有一套Go+Python開發的行業短信云平臺可合作;3)目前正在開發物聯網、大數據平臺。

            數據同步設計與實現之分析1

                   最近剛做完一個小項目,涉及到數據同步;現在正在進行另一個項目,也涉及到與合作公司系統的數據同步。
                   同一個領域,同一個命題,我們常常一遍又一遍換著方式重復著,是不可重復的特性讓我們不得不重復,還是我們能力的問題,沒有抓住共性來一勞永逸解決問題呢。我無法回答,無法清楚。
                   在軟件設計與實現上,正如藝術領域,你根本不知道什么是最優最好的,即不知道盡頭,何況自己技術水平一般。因而要問還有沒有更好的,別人是怎么做的,網上還有什么現成的解決方案,還有什么開源項目可用。
                  探討主要的目的,一個在于記錄和整理自己的解決思路,另一個在于有做過或見過數據同步的同行,能回復自己的實際可行的解決方案,以便互相學習,取長補短。 
                  
                  正式項目性的開發,一定有一個具體而特定的需求,我碰到的數據同步需求,一般有兩類:
                  1)公司自己系統之間的數據同步;
                  2)本公司系統與合作公司系統之間的數據同步。
                  
                  先分析第一類:公司自己系統之間的數據同步。這里也有幾種情況。、
                  1)數據庫的雙機熱備:
                     我接觸過政府、公安、國稅、移動電信,好大一部分的公司出的方案叫雙機備份,但是他們把一臺機器放到客戶機房或倉庫里,是關閉著的,常常叫冷備。這那里是備份方案,那一臺熱的跨掉了,你那臺冷的能立即使用嗎?即使軟件都是一樣的,但是數據是不一樣的,不懂技術的人都知道是賣硬件賺錢而已,做政府項目就這樣,大家心知肚明。
                     若真要在幾分鐘之內,服務能立即恢復,很多工作要做,其中之一就是要數據庫的雙機熱備,兩臺數據庫里的數據相差無幾。當然也有多數據庫節點提供服務的模式,也是一樣需要數據同步,更復雜。
                     有人提出云計算,我不討論這個新事物,至少我們做不了,我們做項目的,不可能拿錢給云服務提供商分一杯羔,自己也沒能力也沒必要去搞一個什么云計算。我相信很多很多國內公司也是一樣,等別人做的成熟了實施便宜了,中小公司才去做。
                     從實現上說,談到數據庫,一般它自己都提供復制的功能,常見的oracle、sqlserver、mysql等都有,但是也沒有那么容易,真的就很完美,我們不用花一分力氣就垂手可得了?
                     比如mysql,這個開源數據庫我們用最多,因為不用錢,做政府項目,他們不敢不用正版,但用了oracle、sqlserver正版,光數據庫費用就把項目錢占光了,公司喝西北風啊。
                     復制有兩種:1) 主備;2) 主主,即互為主備。
                     不管網上文章吹的天花亂墜,2)主主復制的方案,mysql是支持很弱的,至少我不敢直接使用它。
                     沒有真實項目實施經驗的人,可能直接考慮兩臺數據庫服務器在正常運行的情況下,主主復制難道有什么問題。沒有問題,我們只考慮這個就完了,我們要考慮一臺機器突然軟件運行異常、硬件故障、電源線被人扒掉、網線被人一腳不小心踩掉,在這些情況下,我們系統怎么辦,當機房管理員把網線插好了怎么辦,把壞內存條換好了重新開機,你的數據能一致嗎?
                     配置過mysql復制功能的人知道,它是依靠binlog來做同步的,有一個同步點,是需要你去設置的,也就是說,你需要機器修復之后開機能自動正常同步,你必須自己編寫同步控制程序,自然在unix/linux世界里,shell、perl、python等腳本語言能漂亮解決問題,用不著c/c++和java。
                    主備復制模式是不能解決問題的!
                    我們最終是要考慮給用戶提供連續不間斷的服務,如果是主備架構模式,那么數據的寫入,肯定在主數據庫服務器上操作,然后同步復制同步到備份服務器上去。那么,當主數據庫服務器發生故障,考慮軟件運行異常、硬件故障、電源線被人扒掉、網線被人一腳不小心踩掉,維護人員沒有處理或處理需要一定時間,不管他怎么處理,現在要立即提供服務,前端應用系統是連接不了主數據庫服務器,要提供服務,只有連接備份服務器了,只有往備份服務器寫數據了,自然,我們只有把備份服務器切換為主服務器角色了,等維護人員慢慢折騰把那臺原主服務器啟動起來,那么原主服務器就要有能力自己自動切換為備服務器,而不是維護人員手工去處理----這就是我常常采取的自動主備切換,是需要使用自己編寫腳本去控制的。
                    有人可能說為什么不叫維護人員手工處理下,畢竟人處理是最好的,可是我們一個項目,在十幾個物理機房部署了服務器,我們只有一兩個維護人員偶爾去一下省中心,有時候某個市級機房里服務器被人錯扒了網線或電源線,當我們手機接收到系統報警短信后,只能在家里電話叫客戶網管去插線,如果這時還要手工去切換主備,我們又進不了客戶的內網網絡,做過政府項目的人知道他們分內外網,那么我們系統不能自動切換主備,我們維護人員就慘了,需要自己親自進入客戶內網。當然,我們的硬盤壞了,我們必須去換硬盤,還要去具體市級機房,但是有了自動主備切換,維護人員就可以慢慢去,過完周末下周一再去上門。
                    這樣解決沒有缺陷嗎?有,同步復制總會在故障點丟失數據,但絕對不多,如果前端應用系統能處理這種數據差異,則總體上能解決問題。
                    總之,比那種需要立即手工處理好很多,比冷備好很多很多。
                    
             (待續.....)

            posted on 2012-07-14 15:19 冰果 閱讀(1467) 評論(0)  編輯 收藏 引用 所屬分類: 其它

                                                        
            欧美久久天天综合香蕉伊| 久久有码中文字幕| 少妇无套内谢久久久久| 亚洲AV无码一区东京热久久| 久久精品国产99国产精偷 | 成人国内精品久久久久影院VR| 91精品国产高清久久久久久91| 色婷婷综合久久久久中文字幕| 97精品伊人久久久大香线蕉 | 久久国产色av免费看| 久久91精品国产91久久户| 久久综合伊人77777| 国产精品久久久久影视不卡| 久久亚洲高清综合| 久久99国产精品一区二区| 国产精品久久久久a影院| 久久精品视频91| 国产美女久久久| 日韩欧美亚洲综合久久| 久久精品国产福利国产琪琪| 亚洲午夜久久久久妓女影院 | 久久综合狠狠综合久久激情 | 久久99热这里只频精品6| 精品久久人人做人人爽综合| 久久精品国产亚洲AV香蕉| 久久经典免费视频| 欧美久久亚洲精品| 日韩亚洲国产综合久久久| 国产高潮国产高潮久久久91| 国产精品久久免费| 国产精品久久99| 大香网伊人久久综合网2020| 久久99国产精品二区不卡| 97久久久久人妻精品专区| 久久久久久午夜成人影院 | 亚洲乱码精品久久久久..| 欧美国产成人久久精品| 亚洲精品乱码久久久久久不卡| 久久影院久久香蕉国产线看观看| 国产精久久一区二区三区| 久久伊人中文无码|