前言
隨著互聯(lián)網(wǎng)的發(fā)展幔嗦,網(wǎng)站應(yīng)用的規(guī)模也在不斷的擴(kuò)大酿愧,進(jìn)而導(dǎo)致系統(tǒng)架構(gòu)也在不斷的進(jìn)行變化。
一邀泉、系統(tǒng)架構(gòu)演變
從互聯(lián)網(wǎng)早起到現(xiàn)在嬉挡,系統(tǒng)架構(gòu)大體經(jīng)歷了下面幾個(gè)過(guò)程: 單體應(yīng)用架構(gòu)--->垂直應(yīng)用架構(gòu)--->分布式架構(gòu)--->SOA架構(gòu)--->微服務(wù)架構(gòu),當(dāng)然還有悄然興起的Service Mesh(服務(wù)網(wǎng)格化)汇恤。接下來(lái)我們就來(lái)了解一下每種系統(tǒng)架構(gòu)是什么樣子的庞钢, 以及各有什么優(yōu)缺點(diǎn)。
1因谎、單體應(yīng)用架構(gòu)
互聯(lián)網(wǎng)早期基括,一般的網(wǎng)站應(yīng)用流量較小,只需一個(gè)應(yīng)用财岔,將所有功能代碼都部署在一起就可以风皿,這樣可以減少開(kāi)發(fā)、部署和維護(hù)的成本匠璧。
比如說(shuō)一個(gè)電商系統(tǒng)桐款,里面會(huì)包含很多用戶管理,商品管理夷恍,訂單管理魔眨,物流管理等等很多模塊,我們會(huì)把它們做成一個(gè)web項(xiàng)目裁厅,然后部署到一臺(tái)tomcat服務(wù)器上冰沙。
優(yōu)點(diǎn):
- 項(xiàng)目架構(gòu)簡(jiǎn)單侨艾,小型項(xiàng)目的話执虹, 開(kāi)發(fā)成本低
- 項(xiàng)目部署在一個(gè)節(jié)點(diǎn)上, 維護(hù)方便
缺點(diǎn):
- 全部功能集成在一個(gè)工程中唠梨,對(duì)于大型項(xiàng)目來(lái)講不易開(kāi)發(fā)和維護(hù)
- 項(xiàng)目模塊之間緊密耦合袋励,單點(diǎn)容錯(cuò)率低
- 無(wú)法針對(duì)不同模塊進(jìn)行針對(duì)性優(yōu)化和水平擴(kuò)展
2、垂直應(yīng)用架構(gòu)
隨著訪問(wèn)量的逐漸增大,單一應(yīng)用只能依靠增加節(jié)點(diǎn)來(lái)應(yīng)對(duì)茬故,但是這時(shí)候會(huì)發(fā)現(xiàn)并不是所有的模塊都會(huì)有比較大的訪問(wèn)量.
還是以上面的電商為例子盖灸, 用戶訪問(wèn)量的增加可能影響的只是用戶和訂單模塊, 但是對(duì)消息模塊的影響就比較小. 那么此時(shí)我們希望只多增加幾個(gè)訂單模塊磺芭, 而不增加消息模塊. 此時(shí)單體應(yīng)用就做不到了赁炎, 垂直應(yīng)用就應(yīng)運(yùn)而生了.
所謂的垂直應(yīng)用架構(gòu),就是將原來(lái)的一個(gè)應(yīng)用拆成互不相干的幾個(gè)應(yīng)用钾腺,以提升效率徙垫。比如我們可以將上面電商的單體應(yīng)用拆分成:
- 電商系統(tǒng)(用戶管理 商品管理 訂單管理)
- 后臺(tái)系統(tǒng)(用戶管理 訂單管理 客戶管理)
- CMS系統(tǒng)(廣告管理 營(yíng)銷管理)
這樣拆分完畢之后,一旦用戶訪問(wèn)量變大放棒,只需要增加電商系統(tǒng)的節(jié)點(diǎn)就可以了姻报,而無(wú)需增加后臺(tái)和CMS的節(jié)點(diǎn)。
優(yōu)點(diǎn):
- 系統(tǒng)拆分實(shí)現(xiàn)了流量分擔(dān)间螟,解決了并發(fā)問(wèn)題吴旋,而且可以針對(duì)不同模塊進(jìn)行優(yōu)化和水平擴(kuò)展
- 一個(gè)系統(tǒng)的問(wèn)題不會(huì)影響到其他系統(tǒng),提高容錯(cuò)率
缺點(diǎn):
- 系統(tǒng)之間相互獨(dú)立厢破, 無(wú)法進(jìn)行相互調(diào)用
- 系統(tǒng)之間相互獨(dú)立荣瑟, 會(huì)有重復(fù)的開(kāi)發(fā)任務(wù)
3、分布式架構(gòu)
當(dāng)垂直應(yīng)用越來(lái)越多摩泪,重復(fù)的業(yè)務(wù)代碼就會(huì)越來(lái)越多褂傀。這時(shí)候,我們就思考可不可以將重復(fù)的代碼抽取出來(lái)加勤,做成統(tǒng)一的業(yè)務(wù)層作為獨(dú)立的服務(wù)仙辟,然后由前端控制層調(diào)用不同的業(yè)務(wù)層服務(wù)呢?
這就產(chǎn)生了新的分布式系統(tǒng)架構(gòu)鳄梅。它將把工程拆分成表現(xiàn)層和服務(wù)層兩個(gè)部分叠国,服務(wù)層中包含業(yè)務(wù)邏輯。表現(xiàn)層只需要處理和頁(yè)面的交互戴尸,業(yè)務(wù)邏輯都是調(diào)用服務(wù)層的服務(wù)來(lái)實(shí)現(xiàn)粟焊。
優(yōu)點(diǎn):
抽取公共的功能為服務(wù)層,提高代碼復(fù)用性
缺點(diǎn):
系統(tǒng)間耦合度變高孙蒙,調(diào)用關(guān)系錯(cuò)綜復(fù)雜项棠,難以維護(hù)
4、SOA架構(gòu)
在分布式架構(gòu)下挎峦,當(dāng)服務(wù)越來(lái)越多香追,容量的評(píng)估,小服務(wù)資源的浪費(fèi)等問(wèn)題逐漸顯現(xiàn)坦胶,此時(shí)需增加一個(gè)調(diào)度中心對(duì)集群進(jìn)行實(shí)時(shí)管理透典。此時(shí)晴楔,用于資源調(diào)度和治理中心(SOA Service OrientedArchitecture,面向服務(wù)的架構(gòu))是關(guān)鍵峭咒。
優(yōu)點(diǎn):
使用注冊(cè)中心解決了服務(wù)間調(diào)用關(guān)系的自動(dòng)調(diào)節(jié)
缺點(diǎn):
- 服務(wù)間會(huì)有依賴關(guān)系税弃,一旦某個(gè)環(huán)節(jié)出錯(cuò)會(huì)影響較大( 服務(wù)雪崩 )
- 服務(wù)關(guān)心復(fù)雜,運(yùn)維凑队、測(cè)試部署困難
5则果、微服務(wù)架構(gòu)
微服務(wù)架構(gòu)在某種程度上是面向服務(wù)的架構(gòu)SOA繼續(xù)發(fā)展的下一步,它更加強(qiáng)調(diào)服務(wù)的"徹底拆分"漩氨。
優(yōu)點(diǎn):
- 服務(wù)原子化拆分短条,獨(dú)立打包、部署和升級(jí)才菠,保證每個(gè)微服務(wù)清晰的任務(wù)劃分茸时,利于擴(kuò)展
- 微服務(wù)之間采用Restful等輕量級(jí)http協(xié)議相互調(diào)用
缺點(diǎn):
分布式系統(tǒng)開(kāi)發(fā)的技術(shù)成本高(容錯(cuò)、分布式事務(wù)等)
二赋访、微服務(wù)架構(gòu)介紹
微服務(wù)架構(gòu)可都, 簡(jiǎn)單的說(shuō)就是將單體應(yīng)用進(jìn)一步拆分,拆分成更小的服務(wù)蚓耽,每個(gè)服務(wù)都是一個(gè)可以獨(dú)立運(yùn)行的項(xiàng)目渠牲。
1、微服務(wù)架構(gòu)的常見(jiàn)問(wèn)題
一旦采用微服務(wù)系統(tǒng)架構(gòu)步悠,就勢(shì)必會(huì)遇到這樣幾個(gè)問(wèn)題:
- 這么多小服務(wù)签杈,如何管理他們?(服務(wù)治理 注冊(cè)中心服務(wù)注冊(cè) 發(fā)現(xiàn) 剔除)
- 這么多小服務(wù)鼎兽,他們之間如何通訊答姥?(restful rpc)
- 這么多小服務(wù),客戶端怎么訪問(wèn)他們谚咬?(網(wǎng)關(guān))
- 這么多小服務(wù)鹦付,一旦出現(xiàn)問(wèn)題了,應(yīng)該如何自處理择卦?(容錯(cuò))
- 這么多小服務(wù)敲长,一旦出現(xiàn)問(wèn)題了,應(yīng)該如何排錯(cuò)? (鏈路追蹤)
對(duì)于上面的問(wèn)題秉继,是任何一個(gè)微服務(wù)設(shè)計(jì)者都不能繞過(guò)去的祈噪,因此大部分的微服務(wù)產(chǎn)品都針對(duì)每一個(gè)問(wèn)題提供了相應(yīng)的組件來(lái)解決它們。
2尚辑、微服務(wù)架構(gòu)的常見(jiàn)概念
服務(wù)治理
服務(wù)治理就是進(jìn)行服務(wù)的自動(dòng)化管理辑鲤,其核心是服務(wù)的自動(dòng)注冊(cè)與發(fā)現(xiàn)。
服務(wù)注冊(cè):服務(wù)實(shí)例將自身服務(wù)信息注冊(cè)到注冊(cè)中心腌巾。
服務(wù)發(fā)現(xiàn):服務(wù)實(shí)例通過(guò)注冊(cè)中心遂填,獲取到注冊(cè)到其中的服務(wù)實(shí)例的信息铲觉,通過(guò)這些信息去請(qǐng)求它們提供的服務(wù)澈蝙。
服務(wù)剔除:服務(wù)注冊(cè)中心將出問(wèn)題的服務(wù)自動(dòng)剔除到可用列表之外吓坚,使其不會(huì)被調(diào)用到。
服務(wù)調(diào)用
在微服務(wù)架構(gòu)中灯荧,通常存在多個(gè)服務(wù)之間的遠(yuǎn)程調(diào)用的需求礁击。目前主流的遠(yuǎn)程調(diào)用技術(shù)有基于HTTP的RESTful接口以及基于TCP的RPC協(xié)議。
REST(Representational State Transfer)
這是一種HTTP調(diào)用的格式逗载,更標(biāo)準(zhǔn)哆窿,更通用,無(wú)論哪種語(yǔ)言都支持http協(xié)議
RPC(Remote Promote Call)
一種進(jìn)程間通信方式厉斟。允許像調(diào)用本地服務(wù)一樣調(diào)用遠(yuǎn)程服務(wù)挚躯。RPC框架的主要目標(biāo)就是讓遠(yuǎn)程服務(wù)調(diào)用更簡(jiǎn)單、透明擦秽。RPC框架負(fù)責(zé)屏蔽底層的傳輸方式码荔、序列化方式和通信細(xì)節(jié)。開(kāi)發(fā)人員在使用的時(shí)候只需要了解誰(shuí)在什么位置提供了什么樣的遠(yuǎn)程服務(wù)接口即可感挥,并不需要關(guān)心底層通信細(xì)節(jié)和調(diào)用過(guò)程
區(qū)別與聯(lián)系
服務(wù)網(wǎng)關(guān)
隨著微服務(wù)的不斷增多缩搅,不同的微服務(wù)一般會(huì)有不同的網(wǎng)絡(luò)地址,而外部客戶端可能需要調(diào)用多個(gè)服務(wù)的接口才能完成一個(gè)業(yè)務(wù)需求触幼,如果讓客戶端直接與各個(gè)微服務(wù)通信可能出現(xiàn):
- 客戶端需要調(diào)用不同的url地址硼瓣,增加難度
- 在一定的場(chǎng)景下,存在跨域請(qǐng)求的問(wèn)題
- 每個(gè)微服務(wù)都需要進(jìn)行單獨(dú)的身份認(rèn)證
針對(duì)這些問(wèn)題置谦,API網(wǎng)關(guān)順勢(shì)而生堂鲤。
API網(wǎng)關(guān)直面意思是將所有API調(diào)用統(tǒng)一接入到API網(wǎng)關(guān)層,由網(wǎng)關(guān)層統(tǒng)一接入和輸出媒峡。一個(gè)網(wǎng)關(guān)的基本功能有:統(tǒng)一接入筑累、安全防護(hù)、協(xié)議適配丝蹭、流量管控慢宗、長(zhǎng)短鏈接支持、容錯(cuò)能力奔穿。有了網(wǎng)關(guān)之后镜沽,各個(gè)API服務(wù)提供團(tuán)隊(duì)可以專注于自己的的業(yè)務(wù)邏輯處理,而API網(wǎng)關(guān)更專注于安全贱田、流量缅茉、路由等問(wèn)題
服務(wù)容錯(cuò)
在微服務(wù)當(dāng)中,一個(gè)請(qǐng)求經(jīng)常會(huì)涉及到調(diào)用幾個(gè)服務(wù)男摧,如果其中某個(gè)服務(wù)不可用蔬墩,沒(méi)有做服務(wù)容錯(cuò)的話译打,極有可能會(huì)造成一連串的服務(wù)不可用,這就是雪崩效應(yīng)拇颅。我們沒(méi)法預(yù)防雪崩效應(yīng)的發(fā)生奏司,只能盡可能去做好容錯(cuò)。服務(wù)容錯(cuò)的三個(gè)核心思想是:
- 不被外界環(huán)境影響
- 不被上游請(qǐng)求壓垮
- 不被下游響應(yīng)拖垮
鏈路追蹤
隨著微服務(wù)架構(gòu)的流行樟插,服務(wù)按照不同的維度進(jìn)行拆分韵洋,一次請(qǐng)求往往需要涉及到多個(gè)服務(wù)』拼福互聯(lián)網(wǎng)應(yīng)用構(gòu)建在不同的軟件模塊集上搪缨,這些軟件模塊,有可能是由不同的團(tuán)隊(duì)開(kāi)發(fā)鸵熟、可能使用不同的編程語(yǔ)言來(lái)實(shí)現(xiàn)副编、有可能布在了幾千臺(tái)服務(wù)器,橫跨多個(gè)不同的數(shù)據(jù)中心流强。因此痹届,就需要對(duì)一次請(qǐng)求涉及的多個(gè)服務(wù)鏈路進(jìn)行日志記錄,性能監(jiān)控即鏈路追蹤
三煮盼、微服務(wù)架構(gòu)的常見(jiàn)解決方案
Apache ServiceComb短纵,前身是華為云的微服務(wù)引擎 CSE (Cloud Service Engine) 云服務(wù),是全球首個(gè)Apache微服務(wù)頂級(jí)項(xiàng)目僵控。它提供了一站式的微服務(wù)開(kāi)源解決方案香到,致力于幫助企業(yè)、用戶和開(kāi)發(fā)者將企業(yè)應(yīng)用輕松微服務(wù)化上云报破,并實(shí)現(xiàn)對(duì)微服務(wù)應(yīng)用的高效運(yùn)維管理悠就。
1、SpringCloud
Spring Cloud是一系列框架的集合充易。它利用Spring Boot的開(kāi)發(fā)便利性巧妙地簡(jiǎn)化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開(kāi)發(fā)梗脾,如服務(wù)發(fā)現(xiàn)注冊(cè)、配置中心盹靴、消息總線炸茧、負(fù)載均衡、斷路器稿静、數(shù)據(jù)監(jiān)控等梭冠,都可以用Spring Boot的開(kāi)發(fā)風(fēng)格做到一鍵啟動(dòng)和部署。
Spring Cloud并沒(méi)有重復(fù)制造輪子改备,它只是將目前各家公司開(kāi)發(fā)的比較成熟控漠、經(jīng)得起實(shí)際考驗(yàn)的服務(wù)框架組合起來(lái),通過(guò)Spring Boot風(fēng)格進(jìn)行再封裝屏蔽掉了復(fù)雜的配置和實(shí)現(xiàn)原理,最終給開(kāi)發(fā)者留出了一套簡(jiǎn)單易懂盐捷、易部署和易維護(hù)的分布式系統(tǒng)開(kāi)發(fā)工具包偶翅。
2、SpringCloud Alibaba
Spring Cloud Alibaba 致力于提供微服務(wù)開(kāi)發(fā)的一站式解決方案碉渡。此項(xiàng)目包含開(kāi)發(fā)分布式應(yīng)用微服務(wù)的必需組件聚谁,方便開(kāi)發(fā)者通過(guò) Spring Cloud 編程模型輕松使用這些組件來(lái)開(kāi)發(fā)分布式應(yīng)用服務(wù)。
3爆价、SpringCloud Alibaba介紹
Spring Cloud Alibaba 致力于提供微服務(wù)開(kāi)發(fā)的一站式解決方案垦巴。此項(xiàng)目包含開(kāi)發(fā)分布式應(yīng)用微服務(wù)的必需組件媳搪,方便開(kāi)發(fā)者通過(guò) Spring Cloud 編程模型輕松使用這些組件來(lái)開(kāi)發(fā)分布式應(yīng)用服務(wù)铭段。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置秦爆,就可以將 Spring Cloud 應(yīng)用接入阿里微服務(wù)解決方案序愚,通過(guò)阿里中間件來(lái)迅速搭建分布式應(yīng)用系統(tǒng)。
主要功能
- 服務(wù)限流降級(jí):默認(rèn)支持 WebServlet等限、WebFlux爸吮, OpenFeign、RestTemplate望门、Spring CloudGateway形娇, Zuul, Dubbo 和 RocketMQ 限流降級(jí)功能的接入筹误,可以在運(yùn)行時(shí)通過(guò)控制臺(tái)實(shí)時(shí)修改限流降級(jí)規(guī)則桐早,還支持查看限流降級(jí) Metrics 監(jiān)控。
- 服務(wù)注冊(cè)與發(fā)現(xiàn):適配 Spring Cloud 服務(wù)注冊(cè)與發(fā)現(xiàn)標(biāo)準(zhǔn)厨剪,默認(rèn)集成了 Ribbon 的支持哄酝。
- 分布式配置管理:支持分布式系統(tǒng)中的外部化配置,配置更改時(shí)自動(dòng)刷新祷膳。
- 消息驅(qū)動(dòng)能力:基于 Spring Cloud Stream 為微服務(wù)應(yīng)用構(gòu)建消息驅(qū)動(dòng)能力陶衅。
- 分布式事務(wù):使用 @GlobalTransactional 注解, 高效并且對(duì)業(yè)務(wù)零侵入地解決分布式事務(wù)問(wèn)題直晨。
- 阿里云對(duì)象存儲(chǔ):阿里云提供的海量搀军、安全、低成本勇皇、高可靠的云存儲(chǔ)服務(wù)罩句。支持在任何應(yīng)用、任何時(shí)間儒士、任何地點(diǎn)存儲(chǔ)和訪問(wèn)任意類型的數(shù)據(jù)的止。
- 分布式任務(wù)調(diào)度:提供秒級(jí)、精準(zhǔn)着撩、高可靠诅福、高可用的定時(shí)(基于 Cron 表達(dá)式)任務(wù)調(diào)度服務(wù)匾委。同時(shí)提供分布式的任務(wù)執(zhí)行模型,如網(wǎng)格任務(wù)氓润。網(wǎng)格任務(wù)支持海量子任務(wù)均勻分配到所有Worker(schedulerx-client)上執(zhí)行赂乐。
- 阿里云短信服務(wù):覆蓋全球的短信服務(wù),友好咖气、高效挨措、智能的互聯(lián)化通訊能力,幫助企業(yè)迅速搭建客戶觸達(dá)通道
組件
Sentinel:把流量作為切入點(diǎn)崩溪,從流量控制浅役、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度保護(hù)服務(wù)的穩(wěn)定性伶唯。
Nacos:一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)觉既、配置管理和服務(wù)管理平臺(tái)。
RocketMQ:一款開(kāi)源的分布式消息系統(tǒng)乳幸,基于高可用分布式集群技術(shù)瞪讼,提供低延時(shí)的、高可靠的消息發(fā)布與訂閱服務(wù)粹断。
Dubbo:Apache Dubbo? 是一款高性能 Java RPC 框架符欠。
Seata:阿里巴巴開(kāi)源產(chǎn)品,一個(gè)易于使用的高性能微服務(wù)分布式事務(wù)解決方案瓶埋。
Alibaba Cloud ACM:一款在分布式架構(gòu)環(huán)境中對(duì)應(yīng)用配置進(jìn)行集中管理和推送的應(yīng)用配置中心產(chǎn)品希柿。
Alibaba Cloud OSS: 阿里云對(duì)象存儲(chǔ)服務(wù)(Object Storage Service,簡(jiǎn)稱 OSS)悬赏,是阿里云提供的海量狡汉、安全、低成本闽颇、高可靠的云存儲(chǔ)服務(wù)盾戴。您可以在任何應(yīng)用、任何時(shí)間兵多、任何地點(diǎn)存儲(chǔ)和訪問(wèn)任意類型的數(shù)據(jù)尖啡。
Alibaba Cloud SchedulerX: 阿里中間件團(tuán)隊(duì)開(kāi)發(fā)的一款分布式任務(wù)調(diào)度產(chǎn)品,提供秒級(jí)剩膘、精準(zhǔn)衅斩、高可靠、高可用的定時(shí)(基于 Cron 表達(dá)式)任務(wù)調(diào)度服務(wù)怠褐。
Alibaba Cloud SMS: 覆蓋全球的短信服務(wù)畏梆,友好、高效、智能的互聯(lián)化通訊能力奠涌,幫助企業(yè)迅速搭建客戶觸達(dá)通道宪巨。
微服務(wù)入門+項(xiàng)目搭建推薦:Spring Cloud Alibaba學(xué)習(xí)筆記