Porter是一款數(shù)據(jù)同步中間件,主要用于解決同構/異構數(shù)據(jù)庫之間的表級別數(shù)據(jù)同步問題。
成都創(chuàng)新互聯(lián)公司專業(yè)網(wǎng)站設計、網(wǎng)站制作,集網(wǎng)站策劃、網(wǎng)站設計、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文發(fā)布平臺等專業(yè)人才根據(jù)搜索規(guī)律編程設計,讓網(wǎng)站在運行后,在搜索中有好的表現(xiàn),專業(yè)設計制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設為您創(chuàng)造效益。在微服務架構模式下深刻的影響了應用和數(shù)據(jù)庫之間的關系,不像傳統(tǒng)多個服務共享一個數(shù)據(jù)庫,微服務架構下每個服務都要有自己的數(shù)據(jù)庫。如果你想獲得微服務帶來的好處,每個服務獨有一個數(shù)據(jù)庫是必須的,因為微服務強調的就是松耦合。我們希望數(shù)據(jù)庫就和服務一樣,要有充分的獨立性、可以和服務一起部署、一起擴展、一起重構。同時,還需要兼顧數(shù)據(jù)中心的數(shù)據(jù)聚合、DBA的多種數(shù)據(jù)庫備份、報表中心的業(yè)務報表等等矛盾問題。因此便產(chǎn)生了「Porter」項目。
微服務改造過程中,無法避免的一個坎,那就是垂直拆庫,根據(jù)不同的子服務,把過去的「一庫多服」拆分成「一庫一服」。
不管是否是微服務架構,應用的各個模塊之間都需要頻繁的通信、協(xié)作、共享數(shù)據(jù),實現(xiàn)系統(tǒng)的整體價值。區(qū)別點在于單體應用是通過本地方法調用來完成;在微服務中是通過遠程API調用完成。
而共享數(shù)據(jù)最賤的方式就是采用共享數(shù)據(jù)庫模式,也就是單體應用中最常用的方式,一般只有一個數(shù)據(jù)庫,如圖一庫多服和一庫一服的方式:
一庫多服的架構模式通常會被認為是微服務架構下的反范式,它的問題在于:
穩(wěn)定性:單點故障,一個數(shù)據(jù)庫掛掉,整批服務全部停止。服務獨立性被扼殺?
耦合性:數(shù)據(jù)在一起,會給貪圖方便的開發(fā)或者DBA工程師編寫很多數(shù)據(jù)間高度依賴的程序或者工具;
擴展性:無法針對某一個服務進行精準優(yōu)化或擴展,服務會大體分為兩個讀多寫少、寫多讀少,數(shù)據(jù)庫優(yōu)化是根據(jù)服務而來的,不是一篇而論。
所以隨行付內部一般推薦的做法:是為每一個微服務準備一個單獨的數(shù)據(jù)庫,即一庫一服模式。這種模式更加適合微服務架構,它滿足每一個服務是獨立開發(fā)、獨立部署、獨立擴展的特性。當需要對一個服務進行升級或者數(shù)據(jù)架構改動的時候,無須影響到其他的服務。需要對某個服務進行擴展的時候,也可以手術式的對某一個服務進行局部擴容。
那么問題來了,在改造中我們發(fā)現(xiàn),以下問題,誕生了該項目:
報表中心和前端詳細頁都存在SQL Join方式,經(jīng)歷我們一庫一服的拆分后,無法在繼續(xù)使用SQL Join方式了...
數(shù)據(jù)中心,做得是數(shù)據(jù)聚合,數(shù)據(jù)拆分后,給數(shù)據(jù)中心帶來了很大的麻煩...
微服務之后,各個應用模塊對數(shù)據(jù)庫的要求出現(xiàn)了分歧,數(shù)據(jù)庫類型多元化自主選擇還是統(tǒng)一...
等等...
Porter是一個集中式的數(shù)據(jù)處理通道,所有的數(shù)據(jù)都在這個數(shù)據(jù)處理平臺匯聚、分發(fā)。Porter是一個無中心、插件友好型分布式數(shù)據(jù)同步中間件。默認注冊中心插件實現(xiàn)為zookeeper, 當然,你也可以基于注冊中心接口實現(xiàn)自定義注冊中心模塊。在Porter的主流程外分布著集群插件、源端消費插件、源端消息轉換器插件、目標端寫入插件、告警插件、自定義數(shù)據(jù)定義插件等插件模塊,除了集群插件、告警插件是Porter任務節(jié)點全局作用域外,其余插件模塊都隨著同步任務的不同而相應組合。得益于良好的設計模式,Porter才能為大家呈現(xiàn)如此靈活的擴展性與易用性。
Porter始于2017年,提供數(shù)據(jù)同步功能,但并不僅僅局限于數(shù)據(jù)同步,在隨行付內部廣泛使用。主要提供一下功能:
原生支持Oracle|Mysql到Jdbc關系型數(shù)據(jù)庫最終一致同步
插件友好化,支持自定義源端消費插件、目標端載入插件、告警插件等插件二次開發(fā)。
支持自定義源端、目標端表、字段映射
支持節(jié)點基于配置文件的同步任務配置。
支持管理后臺同步任務推送,節(jié)點、任務管理。提供任務運行指標監(jiān)控,節(jié)點運行日志、任務異常告警。
支持節(jié)點資源限流、分配。
基于Zookeeper集群插件的分布式架構。支持自定義集群插件。
Porter節(jié)點通過注冊中心實現(xiàn)分布式集群,并根據(jù)資源需求動態(tài)擴縮容。Portert與注冊中心協(xié)商了一套任務、節(jié)點、統(tǒng)計接口,Porter節(jié)點通過監(jiān)聽注冊中心接口數(shù)據(jù)的變化實現(xiàn)任務的分配管理。配置管理后臺遵守并實現(xiàn)注冊中心的接口規(guī)范,實現(xiàn)對Porter節(jié)點遠程管理。注冊中心同樣有一套分布式鎖機制,用于任務資源的分配。
在這個機制外,Porter節(jié)點可以通過本地配置文件的方式實現(xiàn)任務的定義。
1、基于Canal開源產(chǎn)品,獲取MySql數(shù)據(jù)庫增量日志數(shù)據(jù)。
2、管理系統(tǒng)架構。管理節(jié)點(web manager)管理工作節(jié)點任務編排、數(shù)據(jù)工作節(jié)點(TaskWork)匯報工作進度
3、基于Zookeeper集群插件的分布式架構。支持自定義集群插件
4、基于Kafka消息組件,每張表對應一個Topic,數(shù)據(jù)節(jié)點分Topic消費工作
為了保證數(shù)據(jù)的一致性,源端數(shù)據(jù)提取與目標端插入采用單線程順序執(zhí)行,中間階段通過多線程執(zhí)行提高數(shù)據(jù)處理速度。對照上圖就是SelectJob與LoadJob單線程執(zhí)行,ExtractJob、TransformJob線程并行執(zhí)行,然后在LoadJob階段對數(shù)據(jù)包進行排序,順序寫入目標端。
正如文章開頭所說,告警插件與注冊中心插件在多個任務間共享,每個任務根據(jù)源端與目標端的類型、源端數(shù)據(jù)格式選擇與之相匹配的處理插件。也就是說告警插件、注冊中心插件與Porter節(jié)點配置相關,數(shù)據(jù)消費插件、目標端插件、自定義數(shù)據(jù)處理插件等插件與任務配置相關。
Porter通過SPI規(guī)范結合單例、工廠、監(jiān)聽者模式等設計模式,實現(xiàn)了極大的靈活性與松耦合,滿足不同場景的二次開發(fā)。具體涵蓋如下四個方面的插件化設計:
注冊中心插件
源端消費插件
目標端載入插件
自定義數(shù)據(jù)處理插件
Porter的集群模式依賴集群插件,默認的集群插件基于zookeeper實現(xiàn)。Porter任務節(jié)點和管理節(jié)點并不是強制綁定關系,任務部署可以通過任務配置文件,也可以通過管理節(jié)點推送。管理節(jié)點還可以管理節(jié)點、收集、展示監(jiān)控指標信息等,是一個不錯的、簡化運維的管理平臺。同樣的,可以基于zookeeper數(shù)據(jù)結構協(xié)議實現(xiàn)你自己的管理平臺。集群模式下的系統(tǒng)結構:
zookeeper數(shù)據(jù)結構協(xié)議:
Porter的集群機制主要有以下功能:
實現(xiàn)節(jié)點任務的負載,當前任務節(jié)點失效后自動漂移到其他任務節(jié)點
實現(xiàn)任務節(jié)點與管理節(jié)點的通信
實現(xiàn)任務處理進度的存儲與拉取
實現(xiàn)統(tǒng)計指標數(shù)據(jù)的上傳(最新的開發(fā)版本支持自定義統(tǒng)計指標上傳客戶端,原生支持kafka)
用于節(jié)點、任務搶占的分布式鎖實現(xiàn)
基于文件系統(tǒng)的單機模式插件
最新開發(fā)版支持Porter任務節(jié)點以單機模式運行,不依賴管理后臺和zookeeper,通過配置文件配置任務。單機模式是一種特殊的集群模式,僅支持部分集群功能,但簡化了任務部署的復雜性,靈活多變。
實現(xiàn)任務處理進度的存儲與拉取
實現(xiàn)統(tǒng)計指標數(shù)據(jù)的上傳
Porter任務節(jié)點運行模式的配置方式
#zookeeper集群配置
porter.cluster.strategy=ZOOKEEPER
porter.cluster.client.url=127.0.0.1:2181
porter.cluster.client.sessionTimeout=100000
#單機模式配置
porter.cluster.strategy=STANDALONE
porter.cluster.client.home=/path/.porter
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)站題目:微服務之數(shù)據(jù)同步Porter-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://muchs.cn/article24/ideje.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、企業(yè)網(wǎng)站制作、網(wǎng)站策劃、定制網(wǎng)站、靜態(tài)網(wǎng)站、網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)