1. 程式人生 > >實戰:基於ESB的企業系統整合

實戰:基於ESB的企業系統整合

    隨著企業資訊化程度的不斷提高,越來越多的資訊系統逐漸上線,這些系統在為企業帶來效益的同時,也帶來了一些讓開發及維護人員頭痛不已的問題,主要表現在系統分散,資訊孤島,互動複雜,維護成本太高。
    多說無益,直接上乾貨,請看下圖:

 
假設現在有A、B、C、D、E、F、G 7個業務系統。
各系統均為獨立的業務系統,系統的開發語言、所使用的資料庫、所需要的執行環境也不盡相同。有些為自主開發,有些為外部採購。
根據業務需求各系統間需要有各式的資料互動。
為了更加直觀,現將其假設為華信內部常用的系統名稱。(實際上公司內部的系統要遠遠多於上述內容,並且關係更為複雜)。
舉例來說: 假設A系統為HR系統,系統B為OA系統、C為ERP系統等等。

為了與其他系統互動,各系統均提供webservice介面,用來接收處理資料。每個系統在傳送資料時需要呼叫其他系統的介面,以HR系統為例:當有新員工入職時,首先將員工資訊錄入到本地系統中,然後分別通知,PM、OA、CAPA、CRM等等系統,要求對方也同時追加該員工的相關資訊,並根據需要向其他系統返回相應資訊。於是一張密密麻麻的蜘蛛網就成型了。
直觀一點,我們看一下現在HR系統需要呼叫的介面:
編號    目標系統    資料方向    介面內容
1    PM    輸出    人員基本資訊、人員職位、人員組織。。。
2    OA    輸出    人員基本資訊、人員職位、人員組織。。。
3    ERP    輸出    人員基本資訊、人員職位、人員組織。。。
4    CAPA    輸出    人員基本資訊、人員職位、人員組織。。。
5    EMAIL    輸出    人員基本資訊、人員職位、人員組織。。。
6    CRM    輸出    人員基本資訊、人員職位、人員組織。。。
7    Consume    輸出    人員基本資訊、人員職位、人員組織。。。

既然有輸出,就一定還會有輸入,這裡就不再列舉。
每個系統都會提供很多的介面,可以想象,現在的資料互動這部分的複雜程度和程式碼量。對編碼人員和業務人員這都是一個很殘酷的考驗。每次新增一個系統或者改動某些現有業務就是一次噩夢。

現在我們需要改變,我們目標是:
以面向服務的方式,實現異構、分散式應用系統之間鬆散耦合的整合共享、互聯互通的訊息傳送平臺
直觀些,我們想要這樣的東西:


 

值得慶幸的是,之前的結構看起來雖然很亂,但是他們是基於SOA的。

現在重新梳理一下我們面對的問題和需求:
    多對多的資料交換,牽一髮動全身
    各業務系統的介面對外公開,安全性差
    業務邏輯多處重複,浪費開發資源
    難以進行的業務修改,無法快速推出新業務
    開發質量難以控制
    業務系統工作量很大
簡單說:我是一個業務系統,我不想同時和那麼多業務系統打交道,多了我會暈的,我只想跟一個系統有互動。舉個貼近生活的例子:我是名普通員工,我今天刷卡不好用了,你不能讓我分別去跟OA、PM、消費等等那些相關人員去打交道,我只想跟一個人說一遍,然後等候結果就行了。
這個中間的訊息平臺應該是什麼呢?沒錯,就是她ESB。

 
ESB的特點
1.    面向服務的架構 - 分散式的應用由可重用的服務組成;
2.    面向訊息的架構 - 應用之間通過ESB傳送和接受訊息;
3.    事件驅動的架構 - 應用之間非同步地產生和接收訊息;
ESB就是在SOA架構中實現服務間智慧化整合與管理的中介。
這簡直就是為了解決我的問題而生的東西。

現在看一看我們都需要做什麼:
1、    接收資料:接收各系統傳送過來的資料,這裡採用對外發布webservice的方式。
2、    處理資料:對接收的資料進行相應的轉換處理,以匹配不同的目標系統。舉例:A系統中的性別欄位中儲存的是0,1 而B系統中是男,女。
3、    傳送資料:根據業務規則將其傳送給相關係統,呼叫對方提供的服務。
 


現在看起來好多了。現在各業務系統只需要對外公開資料接收的服務就可以了。並且只需要呼叫ESB提供的一套webservice就可以,不用依次去呼叫每個系統的webservice。工作量大幅減少。為了讓ESB知道我的資料要傳送給那個系統,在ESB接收端有一個標識 TargetSystem用以標識目標系統。
好了,大家都很開心,但是,這樣做真的已經很好了嗎?我們通過對比來看一下。
    改造前    改造後
傳送資料    呼叫各系統提供的介面。    只調用ESB提供的介面。
接收資料    由自身提供    由自身提供
資料處理    業務系統自己處理    ESB統一處理
目標系統    按需直接呼叫對方介面    只需通知ESB
系統壓力    被呼叫時產生壓力    ESB接收端壓力巨大
日誌及錯誤    各系統自行處理    ESB處理
安全性    各系統間介面公開    介面僅對ESB公開
來一個實際的例子:
公司組織機構調整,此次涉及1000人,這些人不光人員組織資訊變動,還有職位資訊變動,還有部分人的基本資訊進行了變動(比如更換了手機號,增加了學歷資訊),此次資訊修改的發起者是HR系統,方式是在零時統一執行,接收方有10個系統。那麼未改造前HR會呼叫介面:1000人*3處變動*10個系統=30000次。
改造後HR會呼叫介面:1000人*3處變動*1個系統=3000次。
與此同時PM系統要對這些人所對應的專案資訊進行處理,並通知5個系統。假設平均每個人有2條專案資訊需要處理。那麼就是1000人*2處變動*5個系統=10000次呼叫。
改造後PM系統會呼叫:1000人*2處變動*1個系統=2000
變化非常的大,但是,但是。。。
改造後所有的壓力都轉到了ESB身上。上述兩步ESB的介面被直接呼叫了5000次。然後ESB再通過各種處理轉化,將這5000次的請求分別傳送到其他系統,系統的壓力非常大。並且這只是日常工作中的很常見的一種情況,很多時候,會有多個系統同時有大量資料的請求。ESB很容易因壓力過大而出現暫時停止響應的情況。
在安全性上,ESB的介面對外公佈,潛在的危險也很大。另外各個業務系統呼叫ESB介面時不瞭解ESB當時的壓力。如果某個業務系統出現bug,比如死迴圈呼叫,會導致ESB伺服器直接掛掉。各業務系統呼叫ESB介面的方式和錯誤處理方式都不同,很有可能造成許多未知的問題。當ESB停止響應時,所有業務系統都會報錯。在ESB尚未恢復期間可能有大量的資料丟失,且難以恢復。
另外一點,現在個業務系統都被動的被要求知道自己資料的流向,他必須知道我的資料要到達哪些系統,一旦有新系統或原有系統有變化工作量也很大。原則上,這不應該是業務系統本身應該考慮的問題。現在我們要把這個問題簡化,業務系統幹好自己該乾的事情,其他就不要操心了。
說了那麼多其實就是四點1、效能 2、安全性 3、容錯 4、資料流向處理
改進一下,解決上面的問題:
1、    效能:硬體支援。邏輯分層、物理分層。
2、    安全性:ESB接收資料由被動方式變為主動方式。
3、    容錯:統一業務系統的傳送端和接收端,業務系統端採用訊息佇列方式提供資料。
4、    資料流向:這個是業務問題,應該有專門的排程去處理,這部分功能加入到ESB中。

現在看一下改動過的效果:
 
傳送端元件:統一的資料傳送模式、統一的錯誤處理機制、日誌及其他。
訊息佇列:儲存業務系統需要傳送的資料,等待ESB的提取。
接收端元件:統一的接收模式、統一的錯誤處理機制、日誌及其他。
現在業務系統只需呼叫統一的元件即可。
再看ESB系統
 
收集服務:從各業務系統的獲取訊息佇列中獲取資料。
資料處理:根據需求進行資料的清洗、過濾、整合等等。
資料分發:根據規則將資料傳送到指定的業務系統中去。
以上三部分功能分別部署在三臺物理伺服器上,來提高各自的使用效率。
ESB由被動轉換為主動,現在我們可以根據ESB的負載情況來自動或手動的進行自我調節,甚至可以停止或啟用某些流程。某個業務系統出現問題,不會影響到其他系統的執行,ESB出現問題,業務系統也可以正常運轉,只是在ESB恢復正常之前他無法傳送或接收新的資料,當ESB恢復時,會自動將業務系統中的資料獲取併發送給相應目標。
下面給出一個相對完整的流程。
 
當然細節還有很多包括:
日誌記錄、錯誤處理、資料對映、流程管理、資料重發、規則管理等等。

經過上述改造,ESB系統已經可以輕鬆應對公司內部的各系統間的資料互動工作,由於將業務分發規則納入到系統中,可以動態的進行資料流程管理,各業務系統各司其職,系統開發和運維人員可以把精力完全投入在自身系統當中。系統的安全性、實時性、有效性和可擴充套件性都得到了很大的提高。






技術就像圍城:城外的人想進去,城裡的人真會玩!

BY      智商無下限

Mail:   [email protected]


相關推薦

實戰基於ESB企業系統整合

    隨著企業資訊化程度的不斷提高,越來越多的資訊系統逐漸上線,這些系統在為企業帶來效益的同時,也帶來了一些讓開發及維護人員頭痛不已的問題,主要表現在系統分散,資訊孤島,互動複雜,維護成本太高。     多說無益,直接上乾貨,請看下圖:   假設現在有A、B、C、D、E、

開發實戰基於深度學習+maven+SSM+EasyUI的高校共享汽車管理系統(二)

基於深度學習+maven+SSM+EasyUI的高校共享汽車管理系統   繼上一篇 [專案需求分析](https://blog.csdn.net/ITBigGod/article/details/82729233)之後,接下來就是資料庫設計了。      作為一個管理系統,各種資訊表是必

開發實戰基於深度學習+maven+SSM+EasyUI的高校共享汽車管理系統(一)

基於深度學習+maven+SSM+EasyUI的高校共享汽車管理系統 1.專案簡介   在現在,共享汽車在中國各地方開始熱起來,於是本人想做一個基於maven+SSM+EasyUI的高校共享汽車管理系統,當然該專案是博主本人2019年的畢業設計,除了javaweb部分,本專案還

開發實戰基於maven+SSM+EasyUI的高校共享汽車管理系統(二)

基於maven+SSM+EasyUI的高校共享汽車管理系統   繼上一篇 專案需求分析之後,接下來就是資料庫設計了。      作為一個管理系統,各種資訊表是必不可少的了。一般來說,專案都是開發之前先確定資料庫有哪些表的,但是因為我這個個人思考的畢業設計,

基於BeautifulSoup的Python3實戰四周實現爬蟲系統筆記

章節1 第零周:開始之前 勤快寫,多動手,不浮躁,堅持堅持堅持。-----慢慢來,做完美 科學上網 好的IDE 工具  理解 模仿 實戰 畫流程圖,新增異常處理 幾種爬蟲比較 urllib+正則:無第三方依賴 requests+BeautifulSoup:libra

第一次作業基於Linux操作系統的進程模型分析

一起 正常 std 文本 pid 存儲 time 計算機 關於 1.什麽是進程 ·進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。它不只是程序的代碼,還包括當前的活動,通過程序計數器的值和處理寄

第一次作業基於linux操作系統深入源碼進程模型分析

getpid tree 容器 svi 執行過程 網絡服務 -h cfs 阻塞 1.關於進程 定義: 進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。在早期面向進程設計的計算機結構中,進程

實戰基於spring cloud + docker構建微服務

系列 速度 oss 分享 -s 本地 border 檢查 pad 本系列記錄學習 spring-cloud-microservice-example的實戰過程,並對利用spring cloud + docker 構建端到端的微服務架構技術進行解析。0.安裝前的準備,下列軟件

高軟作業3基於原型化系統墨刀的雲筆記應用

產品經理 row 這一 設計 顯示 冗余 targe 圖片 我們 1.基於調研分析的產品原型 在上一次作業中,我們分析了七款各具特色的雲筆記軟件,分別列出了他們的長處和短處。並最終作為這一次作業的原型依據。 2.使用的原型設計工具——墨刀   墨刀是一款在線原

《阿里巴巴MongoDB4.0高階實戰基於Java Spring Boot 2.0》運維、監控、聚合、叢集、監控等高階面試題

《阿里巴巴MongoDB4.0高階實戰》阿里巴巴技術大牛 資深專家P9葉翔、專家徐雷.  NoSQL排名第一!最流行的NoSQL資料庫;谷歌、阿里巴巴、螞蟻金服、騰訊、百度等一線網際網路公司必備技能。 本系列課程涵蓋:MongoDB入門命令、管理、聚合分析、核心架構、資料庫管理、匯入匯出、索引、

文獻基於地基增強系統的格網虛擬觀測值(未完)

2018-11-04 1. 2.可以參考的思路 3.存在問題:需要對使用者端軟體進行升級 4.   5.河南:雙差對流層延遲 在固定基線整週模糊度之後,採用雙頻消電離層組合可以準確計算出基線上的雙差對流層延遲。 相同基線長度的 GPS 和 BDS 的雙差對流層延遲影

分享《機器學習實戰基於Scikit-Learn和TensorFlow》高清中英文PDF+原始碼

下載:https://pan.baidu.com/s/1kNN4tDt58ckFoD_OWH5sGw 更多資料分享:http://blog.51cto.com/3215120 《機器學習實戰:基於Scikit-Learn和TensorFlow》高清中文版PDF+高清英文版PDF+原始碼 高清中文版PDF

分享《機器學習實戰基於Scikit-Learn和TensorFlow》高清中英文PDF+源代碼

ESS alt mark 構建 image 機器學習實戰 dff com 化學 下載:https://pan.baidu.com/s/1kNN4tDt58ckFoD_OWH5sGw 更多資料分享:http://blog.51cto.com/3215120 《機器學習實戰:基

分享《機器學習實戰基於Scikit-Learn和TensorFlow》+PDF+Aurelien

ext https oss 模型 img kit 復制 mage 更多 下載:https://pan.baidu.com/s/127EzxtY9zdBU2vOfxEgIjQ 更多資料分享:http://blog.51cto.com/14087171 《機器學習實戰:基於Sc

實戰基於 Spring 的應用配置如何遷移至阿里雲應用配置管理 ACM

最近遇到一些開發者朋友,準備將原有的Java Spring的應用配置遷移到 阿里雲應用配置管理 ACM 中。遷移過程中,遇到不少有趣的問題。本文將通過一個簡單的樣例來還原遷移過程中遇到的問題和相關解決思路,以期達到和讀者交流的目的。 什麼樣的配置適合進入配置中心 這是所有準備遷移配置到配置中心的使用者遇到

實戰基於 Spring 的應用配置如何遷移至阿裏雲應用配置管理 ACM

-s conf 統一 ges 編輯 配置 path 51cto 信息 最近遇到一些開發者朋友,準備將原有的Java Spring的應用配置遷移到 阿裏雲應用配置管理 ACM 中。遷移過程中,遇到不少有趣的問題。本文將通過一個簡單的樣例來還原遷移過程中遇到的問題和相關解決思路

分享《機器學習實戰基於Scikit-Learn和TensorFlow》高清中英文PDF+原始碼免費

下載:https://pan.baidu.com/s/191hQMWZYGhXtqZxbfqTDtw 《機器學習實戰:基於Scikit-Learn和TensorFlow》高清中文版PDF+高清英文版PDF+原始碼免費下載 高清中文版PDF,649頁,帶目錄和書籤,文字能夠複製貼上;高清英文版PDF

Keras實戰基於LSTM的股價預測方法(吐血推薦,新手入門必看~)

    Hi,這裡是一隻殫精竭慮的老鼠屎。最近在處理公交資料,模型效果非常不理想。過程中學習了師兄留下的lstm做的金融資料預測,使用的是keras框架,這裡整理一下。這篇部落格裡面交代了包括資料的處理、模型搭建、模型調參、模型評估等重要環節,十分適合新手入門。師兄留下的ju

Servlet + JSP 專案實戰使用者資訊管理系統

專案實戰:使用者資訊管理系統 技 術

Docker實戰基於centos7映象建立可以ssh連結的Docker容器

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@