摘要:微服務(wù)做的事情是按照項(xiàng)目顆粒度進(jìn)行服務(wù)的拆分,把模塊多帶帶拿出來(lái)做成每一個(gè)多帶帶的小項(xiàng)目。給我們提供了的底層服務(wù),我們并不需要去關(guān)心底層通訊細(xì)節(jié)和調(diào)用的過(guò)程。通過(guò)定義接口,實(shí)現(xiàn)接口,啟動(dòng)提供接口服務(wù)。
RPC 服務(wù)
RPC,是一種遠(yuǎn)程調(diào)用方式(Remote Procedure Call),通過(guò)RPC我們可以像調(diào)用本地方法一樣調(diào)用別的機(jī)器上的方法,用戶將無(wú)感服務(wù)器與服務(wù)器之間的通訊。RPC在微服務(wù)當(dāng)中起到相當(dāng)大的作用,當(dāng)然RPC不是微服務(wù)必須的一種方式,有別的方式也可以實(shí)現(xiàn)這種遠(yuǎn)程調(diào)用例如RESTful API就可以實(shí)現(xiàn)遠(yuǎn)程調(diào)用。如果有用過(guò)SOAP那么你使用RPC將會(huì)覺(jué)得很類似,都是可以直接調(diào)用別的機(jī)器上的方法。
隨著業(yè)務(wù)的發(fā)展我們的項(xiàng)目從簡(jiǎn)單的單體結(jié)構(gòu)逐漸的演化成微服務(wù)結(jié)構(gòu),我們?yōu)槭裁匆鸱殖晌⒎?wù)呢?那我們來(lái)說(shuō)說(shuō)微服務(wù)和單體架構(gòu)的優(yōu)缺點(diǎn)。我們看一下單體架構(gòu)圖。
單體架構(gòu) 單體架構(gòu)優(yōu)點(diǎn)部署容易,如php寫(xiě)的項(xiàng)目,只要一個(gè)文件夾復(fù)制到支持php的環(huán)境就可以了,java只需要一個(gè)jar包
測(cè)試容易,我們整體項(xiàng)目只要改了一個(gè)地方馬上就可以測(cè)試得出結(jié)果
負(fù)載均衡就可以解決,快速部署多個(gè)一模一樣的項(xiàng)目在不同的機(jī)器運(yùn)行分流
單體架構(gòu)的缺點(diǎn)部署的問(wèn)題,對(duì)于php來(lái)說(shuō)這點(diǎn)還好,但是對(duì)于java的項(xiàng)目來(lái)說(shuō),我們需要重新打包整個(gè)項(xiàng)目耗費(fèi)的時(shí)間是很長(zhǎng)的
代碼維護(hù),由于所有的代碼都寫(xiě)在一個(gè)項(xiàng)目里面,要想要修改某一個(gè)功能點(diǎn)那么需要對(duì)項(xiàng)目的整體邏輯和設(shè)計(jì)有較深的理解,否則代碼耦合嚴(yán)重,導(dǎo)致維護(hù)難,特別對(duì)于新入職的員工來(lái)說(shuō)這將是最容易出現(xiàn)問(wèn)題的地方
開(kāi)發(fā)效率低,隨著項(xiàng)目需求的不斷改變和新的功能新增,老舊的代碼又不敢隨便刪除,導(dǎo)致整個(gè)項(xiàng)目變得笨重,這將會(huì)增加你閱讀代碼的時(shí)間
擴(kuò)展性,在高并發(fā)的情況下,我們往往不是整個(gè)項(xiàng)目的每一個(gè)功能都處于高流量高請(qǐng)求的情況下的,很多時(shí)候都是某一個(gè)功能模塊使用的人數(shù)比較多,在單體結(jié)構(gòu)下我們沒(méi)有辦法針對(duì)單個(gè)功能實(shí)現(xiàn)分布式擴(kuò)展,必須整個(gè)項(xiàng)目一起部署
微服務(wù)架構(gòu)在2014年被提出,現(xiàn)在國(guó)內(nèi)很多公司已經(jīng)使用,微服務(wù)是一種架構(gòu)設(shè)計(jì),并不是說(shuō)什么框架或者代替什么。微服務(wù)做的事情是按照項(xiàng)目顆粒度進(jìn)行服務(wù)的拆分,把模塊多帶帶拿出來(lái)做成每一個(gè)多帶帶的小項(xiàng)目。微服務(wù)的主要特點(diǎn)有:每一個(gè)功能模塊是一個(gè)小項(xiàng)目、獨(dú)立運(yùn)行在不同進(jìn)程或者機(jī)器上、不同功能可以又不同的人員開(kāi)發(fā)獨(dú)立開(kāi)發(fā)不松耦合、獨(dú)立部署不需要依賴整體項(xiàng)目就可以啟動(dòng)單個(gè)服務(wù)、分布式管理。每一個(gè)服務(wù)只要做好自己的事情就好了。在設(shè)計(jì)微服務(wù)的時(shí)候還需要考慮到數(shù)據(jù)庫(kù)的問(wèn)題,是所有微服務(wù)使用共同一個(gè)數(shù)據(jù)庫(kù)還是每一個(gè)服務(wù)單個(gè)數(shù)據(jù)庫(kù)
微服務(wù)優(yōu)點(diǎn)拆分業(yè)務(wù),把整體大項(xiàng)目分割成不同小項(xiàng)目運(yùn)行在不同進(jìn)程或者機(jī)器上實(shí)現(xiàn)數(shù)據(jù)隔離
技術(shù)棧,每個(gè)服務(wù)可以又不同的團(tuán)隊(duì)或者開(kāi)發(fā)者進(jìn)行開(kāi)發(fā),外部調(diào)用人員不需要操心具體怎么實(shí)現(xiàn)的,只需要類似調(diào)用自己方法一樣或者接口一樣按照服務(wù)提供者給出來(lái)的參數(shù)傳遞即可
獨(dú)立部署,每一個(gè)服務(wù)獨(dú)立部署,部署一個(gè)服務(wù)不會(huì)影響整體項(xiàng)目,如果部署失敗最多是這個(gè)服務(wù)的功能缺失,并不影響其他功能的使用
按需部署,針對(duì)不同的需求可以給不同的服務(wù)自由擴(kuò)展服務(wù)器,根據(jù)服務(wù)的規(guī)模部署滿足需求的實(shí)例
局部修改,當(dāng)一個(gè)服務(wù)有新需求或者其他修改,不需要修改整體項(xiàng)目只要管好自己的服務(wù)就好了
微服務(wù)缺點(diǎn)運(yùn)維,微服務(wù)由于把業(yè)務(wù)拆分得細(xì),有可能部署在不同機(jī)器上,因此對(duì)于運(yùn)維人員的管理來(lái)說(shuō),這部分的成本會(huì)加大
接口調(diào)整,微服務(wù)之間通過(guò)接口進(jìn)行通信。如果修改某個(gè)微服務(wù)的API,可能所有使用了該接口的微服務(wù)都需要做調(diào)整;
重復(fù)勞動(dòng),很多服務(wù)可能都會(huì)使用到相同的功能。而這個(gè)功能并沒(méi)有達(dá)到分解為一個(gè)微服務(wù)的程度,這個(gè)時(shí)候,可能各個(gè)服務(wù)都會(huì)開(kāi)發(fā)這一功能,導(dǎo)致代碼重復(fù)。
分布式,由于會(huì)把不同服務(wù)部署在不同機(jī)器上,那么對(duì)于這些服務(wù)的調(diào)用、容錯(cuò)、網(wǎng)絡(luò)延遲、分布式事務(wù)等等都是一個(gè)很大的挑戰(zhàn),當(dāng)然微服務(wù)不一定全部都是部署在不同服務(wù)器上
服務(wù)調(diào)用如上圖所示,RPC就用于調(diào)用者與服務(wù)之間的通訊,RPC協(xié)議可基于TCP、UDP或者HTTP實(shí)現(xiàn),但是更推薦選擇TCP。
例如調(diào)用者需要調(diào)用商品的服務(wù)就可以通過(guò)RPC或者RESTful API來(lái)調(diào)用,那么RPC調(diào)用和RESTful API兩者之間的區(qū)別在哪呢?
TCP的支持保持連接,當(dāng)調(diào)用服務(wù)的時(shí)候不需要每次都進(jìn)行三次握手才實(shí)現(xiàn)。從性能和網(wǎng)絡(luò)消耗來(lái)說(shuō)RPC都具備了很好的優(yōu)勢(shì)。
RESTful API 基于HTTP的,也就是說(shuō)每次調(diào)用服務(wù)都需要進(jìn)行三次握手建立起通信才可以實(shí)現(xiàn)調(diào)用,當(dāng)我們的并發(fā)量高的時(shí)候這就會(huì)浪費(fèi)很多帶寬資源
服務(wù)對(duì)外的話采用RESTful API會(huì)比RPC更具備優(yōu)勢(shì),因此看自己團(tuán)隊(duì)的服務(wù)是對(duì)內(nèi)還是對(duì)外
RPC調(diào)用過(guò)程RPC最主要的作用就是用于服務(wù)調(diào)用
本文作為RPC的使用場(chǎng)景開(kāi)山篇,對(duì)于單體架構(gòu)和微服務(wù)的進(jìn)行了一個(gè)描述。這個(gè)就是RPC的一個(gè)使用場(chǎng)景,也是最常用的一個(gè)使用場(chǎng)景。大家只有了解好RPC是什么使用在什么場(chǎng)景才能更好的去使用。
Swoft給我們提供了RPC的底層服務(wù),我們并不需要去關(guān)心底層通訊細(xì)節(jié)和調(diào)用的過(guò)程。
Swoft通過(guò)定義接口,實(shí)現(xiàn)接口,啟動(dòng)RPC Server 提供接口服務(wù)。我們只需要簡(jiǎn)單的寫(xiě)好幾個(gè)類就可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單RPC模塊。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/29092.html
摘要:和服務(wù)關(guān)系最密切的進(jìn)程是中的進(jìn)程組,絕大部分業(yè)務(wù)處理都在該進(jìn)程中進(jìn)行。隨后觸發(fā)一個(gè)事件各組件通過(guò)該事件進(jìn)行配置文件加載路由注冊(cè)。事件每個(gè)請(qǐng)求到來(lái)時(shí)僅僅會(huì)觸發(fā)事件。服務(wù)器生命周期和服務(wù)基本一致,詳情參考源碼剖析功能實(shí)現(xiàn) 作者:bromine鏈接:https://www.jianshu.com/p/4c0...來(lái)源:簡(jiǎn)書(shū)著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對(duì)原文進(jìn)行了重新的排版。S...
摘要:值得一提的是目前的服務(wù)即服務(wù),暫沒(méi)有其他的服務(wù)功能,所以基本上相關(guān)的配置指代的就是。會(huì)將請(qǐng)求傳遞給各個(gè)中間件,最終最終傳遞給處理。源碼剖析系列目錄 作者:bromine鏈接:https://www.jianshu.com/p/411...來(lái)源:簡(jiǎn)書(shū)著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對(duì)原文進(jìn)行了重新的排版。Swoft Github: https://github.com/swo...
摘要:關(guān)于推薦使用的就是,是一個(gè)使用寫(xiě)的服務(wù)注冊(cè)發(fā)現(xiàn)配置管理系統(tǒng)。遠(yuǎn)程過(guò)程調(diào)用,這是一種允許客戶端發(fā)出服務(wù)器請(qǐng)求的請(qǐng)求響應(yīng)機(jī)制。 Consul服務(wù)器配置 微服務(wù)帶來(lái)最大的好處就是把整個(gè)大項(xiàng)目分割成不同的服務(wù),運(yùn)行在不同服務(wù)器上,實(shí)現(xiàn)解耦和分布式處理。微服務(wù)雖然有很多好處,但是也會(huì)有不好的一方面。任何事物都會(huì)有兩面性,在微服務(wù)里面運(yùn)維會(huì)是一個(gè)很大的難題,如果有一天我們的服務(wù)數(shù)量非常的多,然后我...
摘要:歷時(shí)年多緊鑼密鼓的開(kāi)發(fā),以及愉快而忙碌的春節(jié)假期,期間數(shù)從到快破,碼云首頁(yè)推薦,作者和社區(qū)的大力支持,正式版終于要和大家見(jiàn)面。此次更新新增了大量特性在易用性代碼復(fù)用性能方面都有所提升。可以用于構(gòu)建高性能的系統(tǒng)中間件基礎(chǔ)服務(wù)等等。 歷時(shí) 1 年多緊鑼密鼓的開(kāi)發(fā),以及愉快而忙碌的春節(jié)假期,期間 github star 數(shù)從 500 到快破 1k,碼云首頁(yè)推薦,Swoole作者 Rango ...
摘要:框架組件化改造框架從單體應(yīng)用到組件化改造的架構(gòu)升級(jí)之路經(jīng)過(guò)一年多的開(kāi)發(fā)框架功能越來(lái)越完善也越來(lái)越復(fù)雜初創(chuàng)時(shí)期的單體應(yīng)用已經(jīng)無(wú)法支撐項(xiàng)目的快速發(fā)展于是開(kāi)發(fā)組在年前為版制定了組件化改造的重構(gòu)方案內(nèi)容速覽組件化原理包管理基礎(chǔ)知識(shí)組件化方案來(lái) date: 2018-3-21 13:22:16title: Swoft| Swoft 框架組件化改造description: Swoft 框架從單體應(yīng)...
閱讀 3652·2021-09-02 15:11
閱讀 4563·2021-08-16 10:47
閱讀 1560·2019-08-29 18:35
閱讀 3030·2019-08-28 17:54
閱讀 2843·2019-08-26 11:37
閱讀 1496·2019-08-23 16:51
閱讀 1799·2019-08-23 14:36
閱讀 1801·2019-08-23 14:21