李冬軍 北京銳安科技有限公司
隨著互聯(lián)網(wǎng)技術(shù)快速發(fā)展,智能穿戴、智能硬件、移動應用等技術(shù)發(fā)展,越來越多的終端應用場景下都需要可靠的在線信息服務技術(shù)。通過在線服務技術(shù),可以實現(xiàn)不同終端獲取信息需要,從而實現(xiàn)信息的發(fā)送、接收以及同步等功能。目前云服務技術(shù)以及各種信息傳輸技術(shù)都是基于HTTP技術(shù)來完成,但是隨著時代發(fā)展和硬件計算能力提升,對于信息服務效率和質(zhì)量提出了新的要求和新的期待,這就需要提供一種新的軟件架構(gòu),這種結(jié)構(gòu)在移植性、擴展性、維護性、效率性方面要具有更強的優(yōu)勢。而微服務架構(gòu)就能夠滿足這種需求,它能夠更好滿足企業(yè)的需求,針對于企業(yè)的需求能夠在舊系統(tǒng)的框架上進行一定優(yōu)化,更好增加系統(tǒng)框架的穩(wěn)定性,同時降低了系統(tǒng)維護程度,是未來發(fā)展的重要趨勢。
在微服務架構(gòu)被提出之前,傳統(tǒng)的網(wǎng)站服務(web)、接口服務(移動端)架構(gòu)設計都是體現(xiàn)了“一站式”的設計思路。這種一站式的設計思路往往在一個服務事件中設置了很多的外部接口和模塊,一方面便于外部的訪問,另外一方面便于功能拓展。而且傳統(tǒng)設計的方案往往都是采用自頂而下的分層設計思路,這樣便于不同設計團隊的設計,而且便于架構(gòu)維護和開發(fā)。這里就以一個web網(wǎng)站開發(fā)為例,在網(wǎng)絡架構(gòu)中一般包含了很多層級,每一層級都有著自己的功能和作用,每一層之間還有各種模塊和結(jié)構(gòu)。例如web服務中至少包含了表示層、業(yè)務層(邏輯控制)、服務層、數(shù)據(jù)訪問層、持久層5 層。但是這種分層設計存在著很大局限性,主要保障各層之間的聯(lián)系性過于緊密,一旦一個層級沒有編輯成功,就會影響這個站點部署問題。但是到2012年,一種微服務的架構(gòu)被廣泛應用,很多公司基于微服務結(jié)構(gòu)設計出了很多優(yōu)秀的軟件項目。自從那以后,很多大型公司(Amazon、Uber)意識到這種結(jié)構(gòu)的優(yōu)勢,并且基于此開發(fā)了很多優(yōu)秀的項目。和傳統(tǒng)的結(jié)構(gòu)相比,微服務更加強調(diào)的是服務的組件化和面向服務,每一種服務都是在各自容器中獨立運行的,而且不同容器之間不存在著相互干擾問題,同時在外部結(jié)構(gòu)設置方面,微服務器只是將API形式給外部使用。
在微服務架構(gòu)設計過程中,對于不同的微服務的分工十分明確,不同的微服務只是對應一個不同的任務進度,這樣保障各個微服務之間的分工的特點十分明確、獨立,同時將微服務處理過的結(jié)果僅僅通過API的形式作為外部接口,這樣方便了外部的調(diào)用而不需要關(guān)注內(nèi)部地實現(xiàn)過程。而且通過這種結(jié)構(gòu)設計,可以體現(xiàn)出微服務只是將這個軟件開發(fā)項目或者軟件平臺進行了相應的細粒度拆分,而且這種拆分的結(jié)果之間互相沒有干擾,每一個拆分的微服務事件都是放在一個獨立的容器當中,每一個容器運行都是獨立完成的,不同容器之間不會出現(xiàn)干擾因素。這種架構(gòu)原理和傳統(tǒng)的架構(gòu)存在著很大不同,在以往的架構(gòu)設計過程中,需要在服務層設置一定的外部結(jié)構(gòu),是以參數(shù)或者對象的形式來完成軟件項目細?;鸱诌^程,但是這個環(huán)節(jié)往往是在內(nèi)存中完成的。但是微服務的結(jié)構(gòu)不同于這種設計思路,而是將這種拆分搬到了外部來實現(xiàn)。這里以一個簡單的例子來說明二者的區(qū)別。在傳統(tǒng)架構(gòu)下面,用戶登錄過程往往經(jīng)過了以下幾個階段:黑白名單檢查、密碼口令比對、登錄日志記錄3個過程。但是在微服務結(jié)構(gòu)中,這個過程都是可以通過微服務形式獨立工作的,進而使微服務的代碼成為組件。
微服務架構(gòu)和其他網(wǎng)絡結(jié)構(gòu)存在著很多不同,最大的特點在于服務器的結(jié)構(gòu)的穩(wěn)定性和靈活性,使得網(wǎng)路結(jié)構(gòu)十分間接靈活,通過低耦拆分的微服務結(jié)構(gòu)在軟件開發(fā)、測試以及部署、更新、維護等各個環(huán)節(jié)的效率大大增加,不但保障開發(fā)維護效率,而且大大降低了開發(fā)維護成本。微服務結(jié)構(gòu)在規(guī)模龐大的軟件開發(fā)項目中逐漸顯示出自身優(yōu)勢,方便了企業(yè)用戶的管理和維護,而且接口設置更加人性化。而且對于企業(yè)角度來說,由于微服務架構(gòu)只與API相關(guān),它使得不同服務可以使用不同的語言和開發(fā)框架進行開發(fā),極大地擴大了企業(yè)對人才招聘的限定范圍。但是微服務結(jié)構(gòu)也存在著一定的缺點,雖然微服務一直立志于獨立化和組件化,但是在微服務中的很多操作并沒有實現(xiàn)獨立化和組件化。這些就影響了架構(gòu)效率提高,例如在微服務中的數(shù)據(jù)庫層的底層操作一般不推薦服務化過程。另外在設計任務劃分過程中需要設計者根據(jù)軟件下項目開發(fā)任務量來進行有效劃分。此外,微服務架構(gòu)設計的目的就是最大程度提高軟件開發(fā)的效率和質(zhì)量問題,但是微服務很多操作結(jié)構(gòu)都是通過以API的形式提供給外部,這樣就增加了訪問時間和數(shù)據(jù)傳輸時間,因為基于結(jié)構(gòu)的傳輸時間是比內(nèi)存訪問函數(shù)接口調(diào)用慢了幾個數(shù)量級。如果任務量很大的情況時,對于結(jié)構(gòu)提供效率提出了不小的挑戰(zhàn),對于架構(gòu)分配也提出了新的要求。
微服務體系結(jié)構(gòu)的靈活性可以使項目開發(fā)過程更容易管理,從而大大提高了項目開發(fā)團隊的開發(fā)效率。微服務的獨立性和異常劃分的設計理念可以讓開發(fā)者更加關(guān)注組件的內(nèi)部結(jié)構(gòu),從而提高軟件代碼的質(zhì)量。同時,服務的重用將開發(fā)人員從先前的代碼、對象和模塊的重用中解放出來。服務重用的優(yōu)點是開發(fā)人員不需要關(guān)心項目中的代碼級組件和測試工作,只需根據(jù)定義的REST API將請求發(fā)送到相應的地址,真正實現(xiàn)“一次部署,無限使用”。這將大大減少企業(yè)或項目團隊在構(gòu)建后續(xù)功能時的時間和人力成本,使整個行業(yè)有更多的時間在現(xiàn)有微服務的基礎(chǔ)上開發(fā)更多新的微服務,這樣不僅能夠有效提高開發(fā)效率和質(zhì)量,將開發(fā)完成好的微服務對外開放,還可以在開放過程中收獲一定的經(jīng)濟效益。
近年來,在國家創(chuàng)新創(chuàng)業(yè)政策的支持下,越來越多的行業(yè)跨界與互聯(lián)網(wǎng)行業(yè)融合,創(chuàng)業(yè)項目如雨后春筍般涌現(xiàn)。創(chuàng)業(yè)項目的信息服務平臺開發(fā)和外包軟件開發(fā)的過程通常是非常不同的。創(chuàng)業(yè)公司中的很多軟件項目都是試驗性的,這導致他們的需求更頻繁地變化,傳統(tǒng)的統(tǒng)一集成服務開發(fā)框架難以適應。如果創(chuàng)業(yè)團隊不能把握需求變化的步伐和生產(chǎn)環(huán)境,很容易導致服務完整性的缺失。微服務體系結(jié)構(gòu)的出現(xiàn),使得初創(chuàng)項目的軟件開發(fā)遵循微服務開發(fā)順序,從中心到外圍,從重要到次要,減少了需求的臨時變化對項目完整性的影響,從而加快了項目的形成。
微服務結(jié)構(gòu)和傳統(tǒng)結(jié)構(gòu)相比,在很多方面更具有優(yōu)勢,不僅提高軟件項目開發(fā)的效率和維護,也大大降低了開發(fā)成本,同時相比于一站式服務,微服務結(jié)構(gòu)更注重于組件化和面向服務,這樣便于對舊結(jié)構(gòu)維護和升級,更加適用于企業(yè)項目。