文/張樹新 吳海斌 蒙輝 湯麥倫
EDI電子數(shù)據(jù)交換技術(shù)在航運(yùn)中擁有無可取代的地位。航運(yùn)EDI主要服務(wù)于貿(mào)易商、海關(guān)、商檢、港口、航運(yùn)企業(yè)、貨代、船代等企業(yè)部門,然而,由于企業(yè)部門使用的EDI標(biāo)準(zhǔn)不一致,航運(yùn)EDI交換自動(dòng)化程度較低,國內(nèi)目前僅上海億通國際建有較為成熟的航運(yùn)EDI交換中心,主要通過協(xié)議適配、管道、字典等技術(shù)手段實(shí)現(xiàn)報(bào)文語義識別及格式轉(zhuǎn)換[1]。
作為最新一代云計(jì)算技術(shù)框架,SpringCloud 為開發(fā)者提供了在分布式系統(tǒng)(配置管理、服務(wù)發(fā)現(xiàn)、熔斷、路由、微代理、控制總線、一次性token、全居瑣、leader選舉、分布式session、集群狀態(tài))中快速構(gòu)建的工具,使用Spring Cloud的開發(fā)者可以快速地啟動(dòng)服務(wù)或構(gòu)建應(yīng)用,同時(shí)能夠快速和云平臺資源進(jìn)行對接[2]。SpringCloud作為新生的微服務(wù)框架,相比阿里巴巴Dubbo等RPC框架, Spring Cloud提供的全套分布式系統(tǒng)解決方案更利于構(gòu)建完整的IT生態(tài)環(huán)境。
本文通過分析航運(yùn)EDI平臺單節(jié)點(diǎn)系統(tǒng)存在的痛點(diǎn),并對采用新技術(shù)后開發(fā)測試、實(shí)施運(yùn)維、集成擴(kuò)展過程存在的問題進(jìn)行分析,提出云計(jì)算時(shí)代IT生態(tài)環(huán)境的規(guī)劃愿景,然后基于SpringCloud分布式架構(gòu)構(gòu)建完整的云生態(tài)環(huán)境,最終實(shí)現(xiàn)降低專業(yè)人員技術(shù)門檻、提供靈活高效的運(yùn)維環(huán)境,達(dá)成平臺具備持續(xù)集成和交付能力的目標(biāo)。
目前國內(nèi)航運(yùn)EDI平臺大多仍處于單節(jié)點(diǎn)系統(tǒng)或小工具層面,制約其發(fā)展的原因不外乎EDI標(biāo)準(zhǔn)不統(tǒng)一及現(xiàn)有平臺技術(shù)發(fā)展緩慢。
技術(shù)發(fā)展緩慢并不是因?yàn)镋DI核心技術(shù)復(fù)雜或是共性技術(shù)無法應(yīng)用,相反EDI核心技術(shù)非常簡單,也正是因此,EDI系統(tǒng)、小工具在小范圍內(nèi)應(yīng)用良好。
小系統(tǒng)、小工具適應(yīng)面有限,航運(yùn)對通用性強(qiáng)的平臺級EDI有著迫切的需求,如何適應(yīng)繁雜不一的標(biāo)準(zhǔn),不斷接納新的標(biāo)準(zhǔn),打造開放統(tǒng)一的一站式交換環(huán)境,一直是平臺級EDI努力的方向。
EDI平臺的開放性是個(gè)復(fù)雜、綜合、長期的命題,也為了有效降低成本,在新技術(shù)應(yīng)用上,EDI平臺從未放慢追隨的腳步,而新技術(shù)的應(yīng)用帶來了學(xué)習(xí)成本增加、專業(yè)技術(shù)人員難覓、運(yùn)維復(fù)雜度增加、集成擴(kuò)展不易等問題,應(yīng)用新技術(shù)的副作用將開發(fā)運(yùn)維成本逐漸推高,甚至超過全新開發(fā)的成本,而違背了使用新技術(shù)的初衷。正是這樣的客觀情況,航運(yùn)EDI平臺技術(shù)的發(fā)展相對緩慢。
當(dāng)然,部分平臺也順應(yīng)發(fā)展,逐步應(yīng)用SOA架構(gòu)、阿里巴巴的Duboo微服務(wù)架構(gòu)、IaaS基礎(chǔ)云、Docker容器等新技術(shù),很大程度上,新技術(shù)地使用降低了平臺開發(fā)技術(shù)門檻,提升了平臺的擴(kuò)展性及可維護(hù)性,但當(dāng)IT人員從這些新技術(shù)上獲得便利、敏捷的同時(shí),新技術(shù)的生態(tài)鏈連貫性不足、可靠性未經(jīng)歷考驗(yàn),這都是制約平臺技術(shù)更新?lián)Q代的最大痛點(diǎn)。
究其根源,不是新技術(shù)不適用,而是每項(xiàng)新技術(shù)僅能解決軟件工程的某一方面的問題,但平臺不單只是軟件工程,而是集開發(fā)、測試、部署、運(yùn)維、集成等一系列的工作的IT生態(tài)圈,航運(yùn)EDI平臺缺少的是一個(gè)連貫性好、技術(shù)門檻低、開放性佳、可方便擴(kuò)展、能在未來5到10年內(nèi)適用技術(shù)發(fā)展的IT生態(tài)環(huán)境。
良好的IT生態(tài)應(yīng)該是簡單地開發(fā)、完善地測試、快捷地實(shí)施、連貫高效地運(yùn)維、持續(xù)地集成、持續(xù)地交付,這些應(yīng)該都是云化的,各個(gè)階段都有完善的解決方案和工具支持,這就是EDI平臺云生態(tài)的愿景。
開放方面,應(yīng)使用市場成熟、生命力旺盛、學(xué)習(xí)成本低、具備良好延續(xù)性的技術(shù)。開發(fā)語言、框架應(yīng)是當(dāng)下流行的技術(shù),智力資源易于從高?;蛏鐣?huì)中獲取,擁有一定的社區(qū)群體,遇到問題能有多渠道途徑解決,且開發(fā)人員應(yīng)不需要很高深的專業(yè)開發(fā)能力,經(jīng)過簡單培訓(xùn)即可參與并完成功能服務(wù)開發(fā),平臺應(yīng)能方便地拆分模塊外包開發(fā),并順利組裝對接。
測試方面,應(yīng)具備與單元測試、自動(dòng)化測試、回歸測試工具良好結(jié)合的能力。
運(yùn)維方面,新技術(shù)不應(yīng)導(dǎo)致運(yùn)維成本增加,而應(yīng)盡可能融合云計(jì)算、容器、自動(dòng)化技術(shù)提高系統(tǒng)可用性、魯棒性,降低運(yùn)維難度及人力需求。各微服務(wù)模塊能通過Docker實(shí)現(xiàn)云環(huán)境自動(dòng)化部署,各微服務(wù)具備路由及負(fù)載均衡能力,整體平臺不存在單點(diǎn)故障,支持不停機(jī)平滑升級、快速高效地運(yùn)維配置熱更新、版本控制。
集成擴(kuò)展方面,平臺應(yīng)可以從最小化系統(tǒng)功能進(jìn)行搭建,逐漸集成擴(kuò)展堆積新功能模塊,而不影響平臺代碼可維護(hù)性及運(yùn)行效率,并能通過簡單硬件擴(kuò)展提升平臺服務(wù)能力。
航運(yùn)EDI平臺從單節(jié)點(diǎn)系統(tǒng)向SOA架構(gòu)變革的過程,隨著服務(wù)的增多,逐漸暴露出管理難的問題,在考察對比了阿里巴巴的Duboo服務(wù)治理架構(gòu)及SpringCloud分布式架構(gòu)后,最終選定了SpringCloud架構(gòu)作為構(gòu)建平臺云生態(tài)環(huán)境的基礎(chǔ)。
這里簡單介紹基于SpringCloud的總體架構(gòu)設(shè)計(jì),重點(diǎn)介紹平臺開發(fā)及運(yùn)維生態(tài)環(huán)境的規(guī)劃設(shè)計(jì)。
圖1
圖1 為平臺整體架構(gòu)[2][3]:
考慮到需構(gòu)建結(jié)構(gòu)完善、智力密集、人工成本合理、能應(yīng)對人才流動(dòng)性沖擊、可持續(xù)發(fā)展的開發(fā)團(tuán)隊(duì),因此,選擇生命力頑強(qiáng)、延續(xù)性好的通用性技術(shù)以降低學(xué)習(xí)門檻、應(yīng)對沖擊是至關(guān)重要的,這里選擇了Java開發(fā)語言、Spring體系作為基礎(chǔ)搭建開發(fā)生態(tài)環(huán)境,Java及Spring已經(jīng)成就的大生態(tài)環(huán)境,能很好地解決組建、運(yùn)營開發(fā)團(tuán)隊(duì)遇到的問題。
同樣是在底層的平臺運(yùn)行生態(tài)環(huán)境,這里選擇IaaS基礎(chǔ)云、Docker容器技術(shù)進(jìn)行搭建,經(jīng)過近10年的發(fā)展,IaaS和PaaS云技術(shù)已經(jīng)落地成熟,IaaS與Docker完美結(jié)合,SpringCloud通過SpringBoot與Docker無縫對接,在這些技術(shù)的基礎(chǔ)上,可極大地降低平臺部署運(yùn)維難度,終結(jié)了起早貪黑、提醒吊膽、全天候值守的運(yùn)維時(shí)代,是一個(gè)較為完美的平臺運(yùn)行生態(tài)環(huán)境[2][4][7]。
服務(wù)層采用為微服務(wù)架構(gòu)的設(shè)計(jì)思想,微服務(wù)較SOA架構(gòu)更輕量級,是對SOA架構(gòu)的更小劃分,將SOA的思想融入到單個(gè)業(yè)務(wù)系統(tǒng)內(nèi)部,實(shí)現(xiàn)真正的組件化[5],這里構(gòu)建了用戶、日志、審計(jì)、權(quán)限、文件、報(bào)文協(xié)議適配器、報(bào)文解析器、主數(shù)據(jù)字典、報(bào)文生成器等微服務(wù),各服務(wù)獨(dú)立成系統(tǒng),擁有自己的數(shù)據(jù)庫,業(yè)務(wù)邏輯。這樣的服務(wù)生態(tài)環(huán)境設(shè)計(jì),能很好地將平臺復(fù)雜的功能分解成一個(gè)個(gè)功能獨(dú)立的單表維護(hù)組件,符合軟件工程總體規(guī)劃分步實(shí)施的原則,讓開發(fā)外包、通過簡單擴(kuò)充智力資源提高開發(fā)效率成為可能,且隨著微服務(wù)的組件化,服務(wù)的復(fù)用度、開發(fā)難度大大降低[3]。
隨著微服務(wù)架構(gòu)的應(yīng)用,勢必導(dǎo)致服務(wù)碎片化,管理難度會(huì)隨著微服務(wù)的增加而呈現(xiàn)幾何級增長,為了解決這一問題,這里構(gòu)建了服務(wù)管理生態(tài)環(huán)境,包含配置管理、服務(wù)發(fā)現(xiàn)、熔斷控制、服務(wù)路由、負(fù)載均衡,服務(wù)狀態(tài)監(jiān)控,服務(wù)路徑跟蹤、ESB總線等,將微服務(wù)的變化產(chǎn)生的漣漪進(jìn)行有效監(jiān)控,結(jié)合IaaS和PaaS的高可用特性,通過簡單地重啟、重新部署等方式解決服務(wù)生存周期出現(xiàn)的問題[8]。
整個(gè)EDI平臺生態(tài)環(huán)境還包括自動(dòng)化測試構(gòu)建、平臺健康管理生態(tài)等等,這里就不過多介紹了。
為確保航運(yùn)EDI平臺能順利更新?lián)Q代,平臺開發(fā)環(huán)境的生態(tài)體系至關(guān)重要。
1.選擇Sping家族產(chǎn)品,可有效解決技術(shù)門檻、學(xué)習(xí)環(huán)境、資源獲取、人才需求、疑難解決等問題,這為開發(fā)生態(tài)環(huán)境打下了良好的基礎(chǔ)。Sping系列架構(gòu)從2004年至今,其引領(lǐng)的SSH儼然已成為JAVA學(xué)習(xí)的必修課程,作為SpringCloud底層的SpringBoot更是將Spring的學(xué)習(xí)門檻降低到了極致。
2.通過Spring Cloud Netflix組件輕松實(shí)現(xiàn)服務(wù)治理,解決SOA架構(gòu)下服務(wù)調(diào)用困難的問題。使用Eureka可完成服務(wù)的注冊和發(fā)現(xiàn),使用Zuul網(wǎng)關(guān)實(shí)現(xiàn)服務(wù)的路由及訪問,使用Feign實(shí)現(xiàn)服務(wù)間的互訪,使用Hystrix組件實(shí)現(xiàn)斷路器模式,解決微服務(wù)下單點(diǎn)故障傳播后的“雪崩”問題[6]。
3.使用Spring Cloud Bus 將分布式的節(jié)點(diǎn)和輕量的消息代理連接起來,通過消息總線的模式,結(jié)合異步執(zhí)行,解決服務(wù)串行調(diào)用開銷過大導(dǎo)致的性能問題,并能在消息總線上方便地實(shí)現(xiàn)微服務(wù)的熱插拔,在松耦合的環(huán)境下,解決平臺基礎(chǔ)擴(kuò)展及動(dòng)態(tài)交付問題[6]。
4.SpringCloud通過SVN與Jenkins、harbor結(jié)合,可實(shí)現(xiàn)與Docker的無縫對接,實(shí)現(xiàn)自動(dòng)化構(gòu)建部署,打造高效的開發(fā)編譯環(huán)境。
通過以上設(shè)計(jì),平臺將具備完善的開發(fā)環(huán)境生態(tài)鏈,即獲得了便利、敏捷,又解決開發(fā)混亂、管理困難的問題,形成健壯的開發(fā)生態(tài)環(huán)境,而不至于因某個(gè)服務(wù)或個(gè)人的異常而影響整個(gè)平臺質(zhì)量。
運(yùn)維作為整個(gè)生態(tài)環(huán)境里的重要組成部分,對航運(yùn)EDI平臺至關(guān)重要。系統(tǒng)的性能、穩(wěn)定性、可靠性、不間斷的服務(wù)、無縫升級,都是航運(yùn)EDI平臺所必須的,這些將是構(gòu)建運(yùn)維生態(tài)環(huán)境的重要考量因素[9]。
1.通過Ribbon組件提供的負(fù)載均衡功能,可通過Docker在很短時(shí)間內(nèi)拉起多個(gè)相同功能的服務(wù),共同注冊到Eureka上,實(shí)現(xiàn)服務(wù)的負(fù)載均衡,可有效解決系統(tǒng)性能瓶頸問題[7][10]。
2.通過Ribbon負(fù)載均衡組件結(jié)合Hystrix斷路器組件,可輕松實(shí)現(xiàn)服務(wù)的高可用,確保業(yè)務(wù)的穩(wěn)定連貫,讓不間斷服務(wù)成為可能,在此基礎(chǔ)上,單服務(wù)的無縫升級也能輕松實(shí)現(xiàn),分布式服務(wù)優(yōu)勢在運(yùn)維生態(tài)上得到完美體現(xiàn)。
3.Hystrix Dashboard監(jiān)控面板及Turbine監(jiān)控聚合組件無需做過多的配置就可以實(shí)現(xiàn)對所有微服務(wù)實(shí)例的運(yùn)行狀態(tài)、性能、服務(wù)調(diào)用消耗等信息進(jìn)行統(tǒng)一查看,讓運(yùn)維更精準(zhǔn)及時(shí)。
4.微服務(wù)運(yùn)維過程中,最繁瑣的當(dāng)屬服務(wù)配置更新,當(dāng)微服務(wù)數(shù)量達(dá)到一次程度時(shí),對所有服務(wù)進(jìn)行一次配置更新不但費(fèi)時(shí)費(fèi)力,還容易出錯(cuò),管理相當(dāng)困難,Spring Cloud Config提供了服務(wù)配置中心的管理概念,可與SVN、Git進(jìn)行結(jié)合,對環(huán)境配置進(jìn)行版本管理,與Spring Cloud Bus總線結(jié)合后,還能實(shí)現(xiàn)微服務(wù)配置的自動(dòng)批量更新,這是運(yùn)維生態(tài)環(huán)境的有力支撐[2]。
5.隨著EDI業(yè)務(wù)的不斷擴(kuò)張,服務(wù)之間互相調(diào)用會(huì)越來越復(fù)雜,業(yè)務(wù)邏輯層的一個(gè)接口可能需要很多個(gè)服務(wù)協(xié)同才能完成這個(gè)接口功能,如果鏈路上任何一個(gè)服務(wù)出現(xiàn)問題或者網(wǎng)絡(luò)超時(shí),都會(huì)形成導(dǎo)致接口調(diào)用失敗,Spring Cloud Sleuth提供在分布式系統(tǒng)中追蹤服務(wù)調(diào)用的解決方案,以及可視化的呈現(xiàn)。
通過這些有益的設(shè)計(jì),平臺具備簡單、高效的運(yùn)維生態(tài)環(huán)境。
本文較為寬泛的對航運(yùn)EDI平臺提出了IT生態(tài)環(huán)境設(shè)計(jì),而SpringCloud作為新生分布式架構(gòu)套件,具有連貫性好、健壯性強(qiáng)、全組件化的優(yōu)點(diǎn),且文中設(shè)計(jì)的IT生態(tài)環(huán)境在眾多行業(yè)中具有共性,有著非常強(qiáng)的應(yīng)用價(jià)值。
[1]倪瑩瑩,王曉峰,畢坤.基于模式類的航運(yùn)EDI共享系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].上海海事大學(xué)學(xué)報(bào), 2016.
[2]Pivotal Software, Inc..Spring Cloud[J].http://projects.spring.io/spring-cloud/.2017.
[3]郭棟,王偉,曾國蓀.一種基于微服務(wù)架構(gòu)的新型云件PaaS平臺[J].信息網(wǎng)絡(luò)安全, 2015.
[4]shuijieshuijie.Spring Cloud和dubbo對比[J].http://blog.csdn.net/shuijieshuijie/article/details/53133082.2016.
[5]風(fēng)的姿態(tài).我所理解的SOA和微服務(wù)[J].http://www.cnblogs.com/fengzheng/p/5847441.html.2016.
[6]Long J.Building Microservices with Spring Cloud - O’Reilly Media Free, Live Events[J].2017.
[7]師德清.基于Docker的PaaS架構(gòu)設(shè)計(jì)研究[J].信息與電腦(理論版),2017.
[8]謝璐俊,楊鶴彪.基于Dubbox的分布式服務(wù)架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)[J/OL].軟件導(dǎo)刊,2016.
[9]蔣煒,劉遠(yuǎn),王寧.電力企業(yè)一體化云運(yùn)維管理平臺研究[J].信息通信,2015.
[10]陳世宜,葉德建.基于SOA架構(gòu)的新型云平臺服務(wù)管理中間件[J].微型電腦應(yīng)用,2016.