監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

erp系統(tǒng)構(gòu)架

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

   當(dāng)今互聯(lián)網(wǎng)思維。泛普軟件問題不要再去做一個(gè)大一統(tǒng)的系統(tǒng)了。我們要分拆一個(gè)大系統(tǒng),做成一個(gè)個(gè)小系統(tǒng)。然后通過系統(tǒng)接口讓這些小系統(tǒng)相互通信。這樣來組成一個(gè)大系統(tǒng),具體來說就是“分布式”、“服務(wù)化”的互聯(lián)網(wǎng)思維。讓系統(tǒng)在架構(gòu)設(shè)計(jì)上就是一個(gè)先天支持高度可擴(kuò)展的系統(tǒng)。

  怎么做呢?具體來說就是要將訂單管理、商品管理、生產(chǎn)采購(gòu)、倉(cāng)庫(kù)管理、物流管理、財(cái)務(wù)管理拆分成一個(gè)個(gè)子系統(tǒng)。這些子系統(tǒng)可以單獨(dú)設(shè)計(jì)開發(fā),對(duì)外暴露出各種其他子系統(tǒng)需求的數(shù)據(jù)接口即可。每個(gè)子系統(tǒng)都有單獨(dú)的數(shù)據(jù)庫(kù)。甚至這些子系統(tǒng)可以交由不同的團(tuán)隊(duì)去開發(fā)和維護(hù),使用不同的技術(shù)體系,使用不同的數(shù)據(jù)庫(kù)。而不是再像以前那樣,都集成在同一個(gè)大而全的系統(tǒng)中,一個(gè)大而全的數(shù)據(jù)庫(kù)。

  對(duì)于新架構(gòu)的系統(tǒng)他有什么優(yōu)點(diǎn)呢?

  首先,也是最重要的就是解決系統(tǒng)的性能問題。以往數(shù)據(jù)庫(kù)實(shí)例只有一個(gè),沒法擴(kuò)展出多個(gè)實(shí)例,以便在性能受限的情況下依靠增加數(shù)據(jù)庫(kù)實(shí)例來達(dá)到負(fù)載均衡。也許有人會(huì)說可以使用讀寫分離方案,但是因?yàn)镋RP系統(tǒng)的特點(diǎn),這個(gè)方案很多時(shí)候不現(xiàn)實(shí)。比如說操作庫(kù)存的時(shí)候,你不能從讀庫(kù)里讀庫(kù)存,然后在寫庫(kù)里寫入庫(kù)存。因?yàn)橹鲝膹?fù)制會(huì)有時(shí)效性,寫入的庫(kù)存并不能馬上寫入從庫(kù)。這樣的場(chǎng)景在ERP中也有多處。何況寫庫(kù)不能擴(kuò)展,只能有一個(gè)。而新設(shè)計(jì)方案是寫庫(kù)是分離的,每個(gè)子系統(tǒng)有自己的數(shù)據(jù)庫(kù)。

erp7.png

  其次,就是更新非常方便,各個(gè)子系統(tǒng)以后臺(tái)微服務(wù)的方式存在。前臺(tái)一個(gè)單獨(dú)的web項(xiàng)目,這個(gè)web項(xiàng)目調(diào)用后臺(tái)這些子系統(tǒng)的服務(wù)接口。這樣的設(shè)計(jì),在某個(gè)業(yè)務(wù)子系統(tǒng)需要更新的時(shí)候,可以單獨(dú)更新。不用像以前那種單進(jìn)程架構(gòu)時(shí),一個(gè)小更新需要整個(gè)系統(tǒng)重啟,導(dǎo)致用戶會(huì)話也丟失,用戶需要新登錄。而現(xiàn)在的這種設(shè)計(jì)就不會(huì)有這個(gè)問題。

  泛普erp系統(tǒng)整體架構(gòu)設(shè)計(jì)

  詳細(xì)設(shè)計(jì)

  拆分應(yīng)用層

  拆分應(yīng)用層,是踐行“微服務(wù)”架構(gòu)的理念。將原來大而全的單進(jìn)程架構(gòu)按照業(yè)務(wù)模塊拆分成可獨(dú)立部署的應(yīng)用程序,以此來達(dá)到平滑系統(tǒng)更新、升級(jí)、方便負(fù)載擴(kuò)展的目的。具體來說,技術(shù)上可以使用restfull風(fēng)格的接口,也可以使用像java中dubbo框架方式來簡(jiǎn)化開發(fā)復(fù)雜度。ERPWeb端或其他移動(dòng)端也是一個(gè)單獨(dú)的應(yīng)用充當(dāng)表現(xiàn)層。非常薄,只是簡(jiǎn)單的接受參數(shù),調(diào)取后臺(tái)其他各種微服務(wù)程序的接口獲取所需展示的數(shù)據(jù)。微服務(wù)充當(dāng)業(yè)務(wù)邏輯層,每個(gè)微服務(wù)都是可獨(dú)立部署上線的程序,對(duì)外提供數(shù)據(jù)訪問接口。

  微服務(wù)可以使用流行的各種RPC框架,比如dubbo,可以支持多種調(diào)用協(xié)議Http、TCP等,這些框架使得編碼比較容易,框架封裝底層數(shù)據(jù)通信細(xì)節(jié),使得客戶端執(zhí)行遠(yuǎn)程方法如同執(zhí)行本地方法一樣簡(jiǎn)單。

  dubbo微服務(wù)架構(gòu),還支持服務(wù)治理,負(fù)載均衡等功能。這樣不僅可以提高系統(tǒng)的可用性,還能動(dòng)態(tài)提升系統(tǒng)應(yīng)用層的性能。比如倉(cāng)庫(kù)管理中入庫(kù)業(yè)務(wù)非常繁忙,占用非常多的CPU和內(nèi)存資源,我們可以另外加一臺(tái)機(jī)器,單獨(dú)再部署一個(gè)倉(cāng)庫(kù)管理服務(wù)上去。這樣使得整個(gè)系統(tǒng),有兩個(gè)倉(cāng)庫(kù)管理服務(wù)在同時(shí)工作,平衡負(fù)載。而這一切都是在服務(wù)注冊(cè)中心,比如Zookeeper下自動(dòng)完成的。

  微服務(wù)結(jié)構(gòu),天生很好的支持系統(tǒng)更新升級(jí)操作。比如財(cái)務(wù)模塊有個(gè)新需求需要上線,我們只需要替換財(cái)務(wù)模塊的服務(wù)重啟即可。這對(duì)已經(jīng)登錄系統(tǒng)的用戶來說,沒有多少影響,不用重新登陸系統(tǒng),其他模塊服務(wù)使用也不受影響。

  拆分?jǐn)?shù)據(jù)層

  數(shù)據(jù)庫(kù)瓶頸是ERP系統(tǒng)的永久之傷。大量復(fù)雜的數(shù)據(jù)查詢表連接邏輯充斥著整個(gè)系統(tǒng)。數(shù)據(jù)庫(kù)垂直拆分成功的關(guān)鍵就是如何重新設(shè)計(jì)系統(tǒng)數(shù)據(jù)層各個(gè)模塊相互耦合的問題。能解決這個(gè)問題,永久之傷便可以解決了。

  分布式事務(wù)

  也許有人又又問了,ERP系統(tǒng)很多操作都要求事務(wù)性,你拆分系統(tǒng)后怎么實(shí)現(xiàn)事務(wù)性,保障數(shù)據(jù)一致性呢?

erp19.png

  這個(gè)問題很好,也是我決定寫這篇文章前思考的最后一個(gè)問題。在微服務(wù)架構(gòu)中,實(shí)現(xiàn)夸服務(wù)的事務(wù)并不容易,至少不像本地應(yīng)用使用本地?cái)?shù)據(jù)庫(kù)事務(wù)那樣方便,性能高效,數(shù)據(jù)一致性好。

  也許你聽過分布式事務(wù)這個(gè)概念。有兩種情景,一種是一個(gè)應(yīng)用中使用多個(gè)數(shù)據(jù)庫(kù),為保障數(shù)據(jù)一致性,需要使用分布式事務(wù)。還有一種情況就是針對(duì)我們這個(gè)架構(gòu)而言的。微服務(wù)環(huán)境下的分布式事務(wù),具體來說打個(gè)比方。采購(gòu)入庫(kù)這個(gè)操作設(shè)計(jì)在倉(cāng)庫(kù)管理服務(wù)中。入庫(kù)后,需要更新采購(gòu)子系統(tǒng)中的采購(gòu)單中的入庫(kù)數(shù)量。這個(gè)過程要求數(shù)據(jù)一致性,也就是采購(gòu)單入庫(kù)成功后寫入了庫(kù)存表中的數(shù)量,同時(shí)要更新采購(gòu)單表中的入庫(kù)數(shù)量。我們不能直接在倉(cāng)庫(kù)服務(wù)中去訪問采購(gòu)服務(wù)中的數(shù)據(jù)庫(kù),必須通過采購(gòu)服務(wù)提供的服務(wù)接口才行。如果這樣,我們?cè)趺茨鼙WC數(shù)據(jù)一致性呢?因?yàn)楹苡锌赡軒?kù)存表寫入成功,但調(diào)取采購(gòu)服務(wù)寫入采購(gòu)單數(shù)據(jù)時(shí)失敗了??赡苁蔷W(wǎng)絡(luò)問題原因?qū)е碌?,這樣數(shù)據(jù)就不一致了。

  在分布式事務(wù)技術(shù)中,有實(shí)現(xiàn)最終一致性這么一說,意思就是只要我能保證兩邊數(shù)據(jù)最終實(shí)現(xiàn)了一致性就行,不一定要使用事務(wù)。這樣說來就有方案了。如倉(cāng)庫(kù)子系統(tǒng)在處理采購(gòu)入庫(kù)時(shí)需要增加入庫(kù)單數(shù)據(jù)和更新庫(kù)存數(shù)據(jù)等多個(gè)表。這多個(gè)表都在倉(cāng)庫(kù)子系統(tǒng)中,我們可以使用一個(gè)本地事務(wù)來保證倉(cāng)庫(kù)子系統(tǒng)中的表數(shù)據(jù)一致性。然后調(diào)用采購(gòu)子系統(tǒng)更新采購(gòu)單里的入庫(kù)數(shù)量。為了防止這個(gè)過程突然中斷導(dǎo)致調(diào)用失敗,我們考慮增加一個(gè)消息隊(duì)列中間件如ActiveMQ。如果接口返回失敗我們就往MQ里寫入這個(gè)處理請(qǐng)求,等到采購(gòu)子系統(tǒng)恢復(fù)正常后,MQ通知采購(gòu)子系統(tǒng)處理這個(gè)更新操作。由于消息消費(fèi)掉以后不會(huì)再有通知了,采購(gòu)子系統(tǒng)處理過程中發(fā)生異常導(dǎo)致更新失敗,需要將問題寫入本地的日志庫(kù),以便通知管理員做后續(xù)補(bǔ)償處理。就這樣通過各種辦法來達(dá)到數(shù)據(jù)的最終一致性即可。雖然聽上去有點(diǎn)坑,但這就是解決方案。沒有其他更好的了?;蛘吒率『笾匦抡{(diào)用倉(cāng)庫(kù)子系統(tǒng)回滾入庫(kù)單和庫(kù)存數(shù)據(jù),達(dá)到最終一致性!

發(fā)布:2021-05-08 13:54    編輯:泛普軟件 · hujian    [打印此頁(yè)]    [關(guān)閉]
功能詳情
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢

相關(guān)欄目

ERP系統(tǒng)設(shè)計(jì) ERP系統(tǒng)開發(fā) ERP需求調(diào)研 ERP系統(tǒng)實(shí)施 ERP系統(tǒng)培訓(xùn) ERP解決方案 ERP售后服務(wù) ERP系統(tǒng)免費(fèi)下載 ERP系統(tǒng)破解 ERP系統(tǒng)二次開發(fā) ERP系統(tǒng)怎么用 ERP是什么意思 行業(yè)動(dòng)態(tài) 規(guī)劃選型 技術(shù)文章