360私有云容器服務(wù)團(tuán)隊(duì)和人工智能研究院團(tuán)隊(duì)一起配合,在云端提升機(jī)器學(xué)習(xí)的效能方面進(jìn)行了深入的研究和實(shí)踐,為業(yè)務(wù)提供了“人臉檢測(cè)”、“花屏檢測(cè)”、“色情檢測(cè)”、“寵物檢測(cè)”、“圖片風(fēng)格化”、“文字識(shí)別”、“智能裁圖”等多種深度學(xué)習(xí)服務(wù)。
下面主要介紹實(shí)踐中涉及的“微服務(wù)網(wǎng)關(guān)與容器服務(wù)”技術(shù)。
一、什么是微服務(wù)架構(gòu)
微服務(wù)是一種構(gòu)建軟件的架構(gòu)和方法。在微服務(wù)中將以前的單體應(yīng)用拆分成多個(gè)小的組件,并彼此獨(dú)立。不同于將所有組件內(nèi)置于一個(gè)架構(gòu)中的傳統(tǒng)單體式應(yīng)用的構(gòu)建方法,在微服務(wù)架構(gòu)中,所有的部分都是相互獨(dú)立的(可以使用不同的語(yǔ)言,不同團(tuán)隊(duì)來(lái)開發(fā)不同的服務(wù)模塊)。通過(guò)合作來(lái)完成相同的任務(wù)。其中的每一個(gè)組件或流程都是微服務(wù)??偨Y(jié)微服務(wù)的特點(diǎn)就是:更小,更快,更強(qiáng)。
可能通過(guò)上面對(duì)微服務(wù)的描述還是不是特別的直觀,將傳統(tǒng)的單體應(yīng)用架構(gòu)和微服務(wù)架構(gòu)進(jìn)行下比較,就比較直觀了。
1. 單體應(yīng)用架構(gòu)
最早對(duì)于web程序的開發(fā)(比如JAVA),通常將整個(gè)程序打包到一個(gè)WAR文件中,然后直接部署到服務(wù)器即可。
單體應(yīng)用架構(gòu)易于測(cè)試和部署,但是在服務(wù)的可伸縮性,可靠性, 系統(tǒng)迭代, 跨語(yǔ)言程序, 團(tuán)隊(duì)協(xié)作等方便沒(méi)有微服務(wù)方便。
2. 微服務(wù)架構(gòu)
為了解決單體應(yīng)用架構(gòu)的這些諸多弊端(不是說(shuō)單體應(yīng)用架構(gòu)不好,需要根據(jù)不同的業(yè)務(wù)場(chǎng)景選擇不同的服務(wù)架構(gòu)),可以將單體應(yīng)用架構(gòu)拆分成多個(gè)獨(dú)立的小的組件。 這樣就可以每個(gè)團(tuán)隊(duì)使用自己的技術(shù)棧來(lái)實(shí)現(xiàn)自己的組件,并在系統(tǒng)迭代的時(shí)候獨(dú)立地進(jìn)行迭代而不影響整個(gè)應(yīng)用的整體使用。
二、為什么需要微服務(wù)網(wǎng)關(guān)
首先介紹下什么是API網(wǎng)關(guān),API網(wǎng)關(guān)可以提供一個(gè)單獨(dú)且統(tǒng)一的API入口用于訪問(wèn)內(nèi)部一個(gè)或多個(gè)API服務(wù)。API網(wǎng)關(guān)常會(huì)提供負(fù)載均衡,訪問(wèn)頻率限制,認(rèn)證授權(quán),監(jiān)控,緩存等功能。
通過(guò)API網(wǎng)關(guān),可以將內(nèi)部服務(wù)對(duì)外部用戶隱藏,而暴露給外部用戶真實(shí)需要的API,并可以對(duì)外部訪問(wèn)進(jìn)行訪問(wèn)頻率的限制同時(shí)還可以對(duì)外部的用戶設(shè)置認(rèn)證授權(quán)。來(lái)保證應(yīng)用整體的穩(wěn)定及安全等等。而網(wǎng)關(guān)內(nèi)部的服務(wù)則可以根據(jù)自己的需求通過(guò)相關(guān)的協(xié)議(REST API, GRPC)進(jìn)行通信。
三、微服務(wù)網(wǎng)關(guān)(kong)介紹
kong是一款基于nginx_lua模塊寫的高可用,易擴(kuò)展的API網(wǎng)關(guān)。由于kong是基于nginx的,所以可以水平的擴(kuò)展多個(gè)kong服務(wù)實(shí)例,通過(guò)前置的負(fù)載均衡配置把請(qǐng)求均勻地分到各個(gè)server,來(lái)應(yīng)對(duì)大批量的網(wǎng)絡(luò)請(qǐng)求。
kong網(wǎng)關(guān)組成:
Kong server: 基于nginx的服務(wù)器,接收外部的api請(qǐng)求。 PostgreSQL: 用來(lái)存儲(chǔ)操作的數(shù)據(jù)。
并且kong采用插件機(jī)制進(jìn)行功能的定制,插件集在API請(qǐng)求響應(yīng)循環(huán)的生命周期中被執(zhí)行。插件使用lua編寫。
四、微服務(wù)網(wǎng)關(guān)與容器服務(wù)結(jié)合使用
通過(guò)一個(gè)具體的例子來(lái)描述部署到容器上的服務(wù)是如何與微服務(wù)網(wǎng)關(guān)結(jié)合使用的。比如我們現(xiàn)在有人臉檢測(cè), 寵物檢測(cè), 鑒黃服務(wù)等將這個(gè)單獨(dú)的服務(wù)組成一個(gè)完成的應(yīng)用實(shí)體來(lái)對(duì)外提供多功能的服務(wù)。
首先在容器服務(wù)平臺(tái)上部署我的三個(gè)服務(wù)實(shí)例(人臉檢測(cè),寵物檢測(cè),鑒黃服務(wù))。并為這些服務(wù)實(shí)例申請(qǐng)vip。
服務(wù)注冊(cè)完成之后,管理端將這三個(gè)服務(wù)注冊(cè)到微服務(wù)網(wǎng)關(guān)(kong),kong會(huì)將注冊(cè)的信息持久化到PostgreSQL數(shù)據(jù)庫(kù)。并可以根據(jù)不同的業(yè)務(wù)為各個(gè)服務(wù)已插件的形式注冊(cè)認(rèn)證授權(quán),訪問(wèn)頻率限制,CORS等插件。
當(dāng)服務(wù)注冊(cè)完成之后,用戶端可以基于被授權(quán)的用戶token去訪問(wèn)他們想要使用的服務(wù)。
本文只是簡(jiǎn)單地介紹了下整體的流程。但是每一個(gè)部分都需要用戶自己去深入了解了~~