GeneXus与微服务那点事
概覽
“微服務(wù)”是一個(gè)非常廣泛的話題,在過去幾年里,市面上存在著各種不同的定義。
雖然對(duì)這種架構(gòu)方式?jīng)]有一個(gè)非常精確的定義,但仍然有一些概念具有代表性。
微服務(wù)有著許多圍繞業(yè)務(wù)能力、自動(dòng)化部署、終端智能化、分布式數(shù)據(jù)以及其他與團(tuán)隊(duì)相關(guān)的一些特性。
為了更好地說明,我們參考了Martin Fowler對(duì)微服務(wù)簡(jiǎn)單而具體的定義:
In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.
GeneXus智能軟件開發(fā)平臺(tái),已經(jīng)能夠并將繼續(xù)支持軟件解決方案背后的各種技術(shù)架構(gòu)體系。
要理解什么時(shí)候使用微服務(wù)架構(gòu)能夠滿足業(yè)務(wù)軟件解決方案,首先必須明白微服務(wù)架構(gòu),并不僅僅是對(duì)團(tuán)隊(duì)技術(shù)層面的一個(gè)挑戰(zhàn),同時(shí)也是關(guān)于開發(fā)和交付軟件層面的一個(gè)全新理念。根據(jù)康威定律(Conway’s Law),擁有完整發(fā)團(tuán)隊(duì)的公司才能構(gòu)建完整統(tǒng)一的解決方案。
一個(gè)公司應(yīng)該在成熟度較高的時(shí)候再采用微服務(wù)架構(gòu)。即使像亞馬遜、Facebook、Netflix、Uber等這些公司,也都是在解決了人才和技術(shù)等相關(guān)擴(kuò)展性的問題后,才采用了微服務(wù)架構(gòu)。
但不管如何,GeneXus 16以及后續(xù)的版本能夠比其他任何平臺(tái)幫助公司更容易得使用微服務(wù)架構(gòu)。
接下來,我們看一下微服務(wù)架構(gòu)主要會(huì)面臨哪些特性和挑戰(zhàn)。
?
為什么要使用微服務(wù)?
在UX、安全性和集成性等各種需求不斷變化的大環(huán)境下,微服務(wù)的首要任務(wù)就是,保證我們正在開發(fā)的系統(tǒng)在需求變化的同時(shí)還能夠輕應(yīng)對(duì)。
因?yàn)樵诂F(xiàn)實(shí)環(huán)境中,軟件必須不斷接受改變才能更具競(jìng)爭(zhēng)力,同時(shí)還要聚焦于去適應(yīng)各種業(yè)務(wù)場(chǎng)景。
?
■發(fā)布
基于微服務(wù)架構(gòu),我們并不需要發(fā)布所有的項(xiàng)目。只需要對(duì)涉及到的幾個(gè)服務(wù),根據(jù)它們的發(fā)布周期進(jìn)行版本管理即可。
尤其是當(dāng)你有好幾個(gè)團(tuán)隊(duì)使用各種不同工具,一起參與同一個(gè)龐大的項(xiàng)目時(shí),這是一個(gè)非常大的優(yōu)勢(shì)。
?
■效率
您可以去擴(kuò)展、優(yōu)化或者變更一個(gè)小的業(yè)務(wù)場(chǎng)景,而不用把所有的模塊放在一起進(jìn)行評(píng)估。
但這時(shí),我們需要團(tuán)隊(duì)之間具有高度的凝聚力,因?yàn)檫@種低耦合意味著需要高度的凝聚力。而為了加強(qiáng)這種團(tuán)隊(duì)之間的凝聚力,我們需要做大量的額外工作,這樣反而有可能會(huì)導(dǎo)致我們喪失一定的效率。
?
■組織擴(kuò)展性
組織的擴(kuò)展性是使用微服務(wù)架構(gòu)的一個(gè)主要優(yōu)勢(shì)。只有具備低耦合的團(tuán)隊(duì),低耦合的技術(shù),以及低耦合的業(yè)務(wù)場(chǎng)景,我們才能夠讓不同的團(tuán)隊(duì),不同的技術(shù)和不同的業(yè)務(wù)場(chǎng)景在同一時(shí)間共同推進(jìn)。
但在帶來這些優(yōu)勢(shì)的同時(shí),微服務(wù)架構(gòu)也會(huì)給我們團(tuán)隊(duì)帶來很多的挑戰(zhàn)。
?
微服務(wù)帶來的挑戰(zhàn)
在使用微服務(wù)的同時(shí),也會(huì)帶來以下一些挑戰(zhàn):
■服務(wù)組合
正確定義微服務(wù)之間的邊界是非常具有挑戰(zhàn)性的。我們需要明白每個(gè)微服務(wù)必須且只能聚焦在一個(gè)業(yè)務(wù)場(chǎng)景上。
我們必須設(shè)計(jì)正確的服務(wù)邊界,以避免相依性地獄(dependency hell)問題的爆發(fā)。現(xiàn)在很多已經(jīng)使用微服務(wù)架構(gòu)的公司仍然面臨著這些問題。
?
■服務(wù)必須有自己的存儲(chǔ)
而由此會(huì)帶來一些挑戰(zhàn)和架構(gòu)決策:
-
數(shù)據(jù)共享(DATA SHARING)
通常我們會(huì)為每個(gè)需要進(jìn)行數(shù)據(jù)交互的微服務(wù)定義API來進(jìn)行數(shù)據(jù)共享。我們需要?jiǎng)?chuàng)建一系列的Web服務(wù)來進(jìn)行CRUD操作和數(shù)據(jù)查詢。
-
數(shù)據(jù)復(fù)制(DATA REPLICATION)
有時(shí)候使用API會(huì)非常緩慢,必須通過數(shù)據(jù)復(fù)制來加速查詢。
-
事件溯源(EVENT SOURCING)
應(yīng)用程序?qū)⑹录4娴绞录?shù)據(jù)庫中。事件數(shù)據(jù)庫可以通過API來添加和檢索實(shí)體事件。在這種方式下,通過事件溯源,微服務(wù)之間的溝通在很多情況下是異步的。
-
原子性和一致性(ATOMICITY AND CONSISTENCY)
因?yàn)楝F(xiàn)在存在好幾個(gè)存儲(chǔ)(有一個(gè)用于微服務(wù)),所以原子操作成了一個(gè)新的問題,由此又有了新的模式來解決這個(gè)問題。
?
■開發(fā)(DEVELOPMENT)
團(tuán)隊(duì)要處理大量的服務(wù),而且這些服務(wù)要經(jīng)常性地被重新發(fā)布。所以每個(gè)微服務(wù)都需要有一個(gè)發(fā)布計(jì)劃和監(jiān)控的系統(tǒng)。
?
GeneXus和微服務(wù)
我們認(rèn)為微服務(wù)是一種很抽象的概念和技術(shù)。您可以使用任何語言或技術(shù)來構(gòu)建微服務(wù)。但后續(xù)的維護(hù)和實(shí)施支撐可能會(huì)抵消掉這種系統(tǒng)架構(gòu)設(shè)計(jì)帶來的一切優(yōu)勢(shì)。
GeneXus的理念是創(chuàng)建、維護(hù)和演進(jìn)前所未有的軟件解決方案。我們一直致力于在許多方面演進(jìn)GeneXus產(chǎn)品,以便通過GeneXus能夠去創(chuàng)建未來的系統(tǒng),尤其是使用微服務(wù)架構(gòu)設(shè)計(jì)的系統(tǒng)。
我們相信使用GeneXus在面對(duì)這些挑戰(zhàn)時(shí),解決的唯一方式是通過基于知識(shí)庫的設(shè)計(jì),充分了解所有的服務(wù)內(nèi)容,并且掌握維護(hù)和演進(jìn)它們的方法。
?
為什么通過GeneXus來實(shí)現(xiàn)微服務(wù)是一個(gè)不錯(cuò)的選擇?
? 微服務(wù)所有的內(nèi)容必須由一個(gè)小團(tuán)隊(duì)來完成
當(dāng)您有一個(gè)非常完整的團(tuán)隊(duì)架構(gòu)時(shí),一些工作很有可能會(huì)被安排給好幾個(gè)不同的團(tuán)隊(duì)來完成。例如,后端服務(wù)團(tuán)隊(duì),安全團(tuán)隊(duì),數(shù)據(jù)建模團(tuán)隊(duì),前端開發(fā)人員等等。
而當(dāng)您在一個(gè)微服務(wù)體系架構(gòu)中開發(fā)時(shí),您應(yīng)該聚焦在業(yè)務(wù)場(chǎng)景。您的團(tuán)隊(duì)一般來說是一個(gè)小團(tuán)隊(duì),但又必須能完成微服務(wù)所有層面的工作內(nèi)容。
而這對(duì)于GeneXus開發(fā)人員是非常好的,因?yàn)镚eneXus自一開始就是以這種方式工作的。
?
在開發(fā)微服務(wù)時(shí),你必須考慮到服務(wù)的各個(gè)架構(gòu)層都需要編程(用戶界面層,數(shù)據(jù)層,業(yè)務(wù)層)。如果你是使用GeneXus的話,這些工作則會(huì)變得簡(jiǎn)單且更高效。
在這方面,我們?cè)贕eneXus 16中加入了更多的特性,能夠讓一個(gè)小團(tuán)隊(duì)使用微服務(wù)架構(gòu)實(shí)現(xiàn)一個(gè)業(yè)務(wù)場(chǎng)景的完整功能。
我們加入了UX、集成和安全等方面的一些特性。就GeneXus的UX而言,一個(gè)小團(tuán)隊(duì)就可以使用人工智能創(chuàng)建智能終端,也可以為我們的業(yè)務(wù)場(chǎng)景開發(fā)移動(dòng)APP,Web以及聊天機(jī)器人等多體驗(yàn)的終端應(yīng)用。
?
? GeneXus可以解決數(shù)據(jù)演變和共享所面臨的挑戰(zhàn)
數(shù)據(jù)共享、原子數(shù)據(jù)、事件溯源等這些問題都可以通過GeneXus來解決。
GeneXus為所有微服務(wù)的數(shù)據(jù)模型演變提供了最佳的解決方式。這些都可以在GeneXus知識(shí)庫中通過我們的方法完美實(shí)現(xiàn)。
但是對(duì)于微服務(wù)架構(gòu),為了將多個(gè)服務(wù)隔離開,您可能會(huì)有多個(gè)知識(shí)庫。
GeneXus 16整合了新的數(shù)據(jù)存儲(chǔ),這些數(shù)據(jù)存儲(chǔ)能夠完美匹配一些實(shí)現(xiàn)模式(如事件溯源)。我們已經(jīng)集成了對(duì)Kafka、DynamoDB的支持,之后還將繼續(xù)添加新的數(shù)據(jù)源,例如Hyperledger Blockchain,以及更多能夠支持不同實(shí)現(xiàn)模式的數(shù)據(jù)源。
?
我們每?jī)蓚€(gè)月就會(huì)發(fā)布一個(gè)新的版本,很快我們即將發(fā)布的版本會(huì)實(shí)現(xiàn)用更高層級(jí)的抽象方式來處理以下幾個(gè)微服務(wù)模式:
●事件溯源(EVENT SOURCING)
即使在現(xiàn)在的GeneXus版本中,您也可以通過使用例如Serverless和Kafka或DynamoDB或者其他的DBMS來實(shí)現(xiàn)此模式。我們正努力實(shí)現(xiàn)將事件建模抽象到更高一個(gè)層次的方法。
●API演變分析(API Evolution Analysis)
如今,微服務(wù)演變的主要關(guān)注點(diǎn)之一就是API的演變。對(duì)于GeneXus而言,這些工作和數(shù)據(jù)演變一樣,都能夠自動(dòng)完成。
●封裝(Encapsulation)
我們正致力于使用知識(shí)矩陣(Knowledge Matrix.)來增強(qiáng)模塊(Module)的功能,以及模塊共享的方式。通過其他幾個(gè)特性之間的知識(shí)矩陣,團(tuán)隊(duì)會(huì)具備發(fā)現(xiàn)、共享和發(fā)布服務(wù)的能力。該矩陣將會(huì)有一個(gè)在線版本和企業(yè)內(nèi)部安裝版本。我們要時(shí)刻謹(jǐn)記,微服務(wù)的一個(gè)主要挑戰(zhàn)就是避免相依性地獄(dependency hell)問題。所以我們將整合幾個(gè)工具,以便更廣泛得了解系統(tǒng)是什么。
●觀察(Observable)
當(dāng)有很多服務(wù)時(shí)能夠使擴(kuò)展性得到更大的效果,但每個(gè)服務(wù)都應(yīng)該能通過日志或者相關(guān)的消息來觀察。
在GeneXus 16中,我們集成了新的日志API,它可以與Elastic Stack(Logstach, Elastic Search 和Kibana)結(jié)合使用,以便收集和分析操作信息。
?
? 使用BPM整合微服務(wù)
人工智能和工作流是任何行業(yè)打造未來系統(tǒng)中最重要的技術(shù)。人工智能是當(dāng)今最熱門的話題話題之一,為了能夠在服務(wù)中使用,GeneXus已經(jīng)集成了一個(gè)GeneXus AI模塊。同時(shí)我們相信BPM是整合微服務(wù)最重要的工具,為此,GeneXus已經(jīng)內(nèi)置了一個(gè)工作流工具。
BPM仍然在不斷的演進(jìn),以解決更復(fù)雜的模式,例如SAGAs服務(wù)。在微服務(wù)架構(gòu)中,GeneXus有很強(qiáng)的業(yè)務(wù)流程建模、執(zhí)行和監(jiān)控方面的基礎(chǔ)。
?
? 通過GeneXus能夠?qū)崿F(xiàn)完全的自動(dòng)化發(fā)布
團(tuán)隊(duì)和服務(wù)都應(yīng)該使用自動(dòng)化技術(shù),這樣才能保證管理和運(yùn)維的高效。自動(dòng)化是GeneXus的基礎(chǔ)理念。
如果您不能引入各個(gè)開發(fā)方面的自動(dòng)化,那么使用大量的微服務(wù)反而會(huì)變得一團(tuán)糟。
?
-
GeneXus Server
?將開發(fā)流程進(jìn)行pipeline管理方式,最簡(jiǎn)單的開始方法是通過GeneXus和GXserver為項(xiàng)目建立分支/版本模型。
GXserver提供了SCM和PipeLine控制(開發(fā)、構(gòu)建、SCA、測(cè)試、原型和發(fā)布)
開發(fā)/構(gòu)建 ---> Jenkins Plugin + MSBuild Tasks
SCA ---> KBDoctor and Security Scanner
測(cè)試---> GXtest V4
原型和發(fā)布--> Docker容器和發(fā)布到PaaS或Serverless
?
-
持續(xù)集成(CI)
CI意味著每當(dāng)開發(fā)人員在GXserver的KB上進(jìn)行了一些修改的時(shí)候,代碼都會(huì)觸發(fā)一些自動(dòng)化操作,以檢查最新的修改是否可以成功得構(gòu)建一個(gè)新版本,而且不會(huì)與其他開發(fā)沖突。同時(shí),還會(huì)檢查是否有缺失的引用需要提交,以能夠在與開發(fā)完全不同的環(huán)境中構(gòu)建成功。
GeneXus發(fā)布了一個(gè)集成Jenkins的插件,需要注意,如果在GeneXus項(xiàng)目中要使用Jenkins,需要先安裝該插件,該插件能夠支持SCM和構(gòu)建集成。
?
-
持續(xù)交付(CD)
CD是一種軟件開發(fā)策略,以使公司能夠盡可能快速、高效地給客戶發(fā)布新功能。
?
隨著持續(xù)交付概念的出項(xiàng),也出現(xiàn)了pipeline概念。在軟件中,pipeline表示一系列排列的處理節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的輸出都是下一個(gè)節(jié)點(diǎn)的輸入。這意味著pipeline將軟件的交付分解為幾個(gè)階段,每個(gè)階段都要驗(yàn)證新功能的品質(zhì),以防止這些bug影響到用戶。Pipeline的目的是如果檢測(cè)到問題,則將在流程的每個(gè)節(jié)點(diǎn)反饋給開發(fā)團(tuán)隊(duì)。
?
為了實(shí)現(xiàn)Pipeline的目的,我們必須將每個(gè)階段中能夠自動(dòng)化的事情全部自動(dòng)化。每個(gè)階段都必須能夠自動(dòng)運(yùn)行測(cè)試、供應(yīng)、發(fā)布、安裝以及配置測(cè)試和階段環(huán)境,這樣才能保證開發(fā)人員能夠收到反饋。每次向Pipeline中添加代碼時(shí),都必須定義驗(yàn)證方法。當(dāng)代碼通過各個(gè)階段時(shí),都會(huì)被測(cè)試并反饋它的狀態(tài)信息。
?
-
Docker容器發(fā)布
能夠讓您構(gòu)建GeneXus應(yīng)用的Docker鏡像,然后可以在端對(duì)端的CD Pipeline管理中的每個(gè)發(fā)布階段使用它們。
?
-
GXtest 4.0
則通過采用為GeneXus開發(fā)人員、QE以及DevOps工程師設(shè)計(jì)的DevOps實(shí)踐和敏捷方法,以促進(jìn)GeneXus社區(qū)使用和提高開發(fā)流程
?
總結(jié)
GeneXus一直在努力整合新的功能和技術(shù),以讓團(tuán)隊(duì)在接下來的幾年中,能夠使用各種不同的架構(gòu)設(shè)計(jì),其中包括微服務(wù)架構(gòu)。
成功地應(yīng)用微服務(wù)架構(gòu)需要基于一個(gè)良好的自動(dòng)化策略,我們相信GeneXus對(duì)于任何想使用微服務(wù)的公司是一個(gè)最佳選擇。微服務(wù)架構(gòu)不僅僅是技術(shù)層面的選擇,同時(shí)還是一種不同的工作方式。而GeneXus將一直在這方面努力!
總結(jié)
以上是生活随笔為你收集整理的GeneXus与微服务那点事的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Android实例] ViewPage
- 下一篇: html游戏能在手机上玩吗,怎么在电脑上