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