SA實(shí)戰(zhàn) ·《SpringCloud Alibaba實(shí)戰(zhàn)》微服務(wù)介紹
今天給大家分享一些微服務(wù)開發(fā)過程中的一些常見概念,這樣在后面為大家正式開始實(shí)戰(zhàn)內(nèi)容的話就能夠統(tǒng)一概念了。
微服務(wù)化后的問題
一個(gè)系統(tǒng),尤其是大型系統(tǒng)使用微服務(wù)架構(gòu)模式進(jìn)行搭建和開發(fā)時(shí),雖然總體上能夠提高研發(fā)效率、能夠支持更高的并發(fā),也能夠提高系統(tǒng)整體的性能和可靠性,以及可維護(hù)性。但是在實(shí)現(xiàn)細(xì)節(jié)上還是存在著不少的問題。
(1)將系統(tǒng)拆分成各個(gè)微服務(wù)后,如果管理和感知那么多的服務(wù)呢?
(2)將系統(tǒng)拆分成各個(gè)微服務(wù)后,各個(gè)微服務(wù)之間如何通信?
(3)將系統(tǒng)拆分成各個(gè)微服務(wù)后,一旦系統(tǒng)出現(xiàn)問題,如何快速定位問題呢?
(4)將系統(tǒng)拆分成各個(gè)微服務(wù)后,如何最大程度的保證系統(tǒng)的可用性?
(5)將系統(tǒng)拆分成各個(gè)微服務(wù)后,客戶端如何訪問那么多的微服務(wù)?
大家可以先思考下這些問題,冰河在下一篇文章中,會(huì)為大家揭曉這些問題的答案。
微服務(wù)常見概念
微服務(wù)中有一些常見的概念需要大家了解,以便更好的學(xué)習(xí)后面的實(shí)戰(zhàn)章節(jié),冰河今天就簡(jiǎn)單整理了一些概念性的知識(shí)。
服務(wù)調(diào)用
將一個(gè)系統(tǒng)拆分成各個(gè)微服務(wù)后,各個(gè)微服務(wù)之間協(xié)同工作才能對(duì)外提供完整的服務(wù),這就涉及到各個(gè)微服務(wù)之間的調(diào)用問題。目前各個(gè)微服務(wù)之間一般會(huì)采用Restful接口或者RPC協(xié)議的方式進(jìn)行調(diào)用。
(1)Restful接口
Restful接口一般是基于HTTP協(xié)議實(shí)現(xiàn)的,這種協(xié)議使用上比較廣泛,幾乎所有的編程語言都支持HTTP協(xié)議。
(2)RPC協(xié)議
RPC是一種遠(yuǎn)程過程調(diào)用,能夠做到像調(diào)用本地服務(wù)一樣調(diào)用遠(yuǎn)程服務(wù)。RPC框架在底層屏蔽了數(shù)據(jù)的傳輸方式,序列化方式和交互的細(xì)節(jié)信息,讓使用RPC框架開發(fā)微服務(wù)的人員覺得更加簡(jiǎn)單,實(shí)現(xiàn)起來更加容易。
服務(wù)治理
服務(wù)治理,說白了就是如何自動(dòng)化的管理各個(gè)微服務(wù),核心的功能就是服務(wù)的注冊(cè)、發(fā)現(xiàn)和剔除。
(1)服務(wù)注冊(cè)
各個(gè)微服務(wù)實(shí)例在啟動(dòng)時(shí),能夠?qū)⒆陨硖峁┑姆?wù)注冊(cè)到某個(gè)注冊(cè)中心。
(2)服務(wù)發(fā)現(xiàn)
當(dāng)某個(gè)微服務(wù)將自身提供的服務(wù)注冊(cè)到注冊(cè)中心時(shí),其他微服務(wù)實(shí)例能夠通過注冊(cè)中心感知到這個(gè)微服務(wù)提供的服務(wù),并且能夠獲取到這個(gè)微服務(wù)的實(shí)例信息,通過這個(gè)微服務(wù)的實(shí)例信息就能夠調(diào)用這個(gè)微服務(wù)的方法,來進(jìn)行相應(yīng)的讀寫操作。
(3)服務(wù)剔除
如果某個(gè)微服務(wù)實(shí)例出現(xiàn)故障,或者連接一直超時(shí),則注冊(cè)中心會(huì)認(rèn)為當(dāng)前微服務(wù)實(shí)例不可用,就會(huì)將這個(gè)微服務(wù)實(shí)例剔除出注冊(cè)中心,使其不再被其他微服務(wù)感知到和調(diào)用到。
注冊(cè)中心
提供微服務(wù)注冊(cè)、發(fā)現(xiàn)和剔除功能的服務(wù)組件。
服務(wù)網(wǎng)關(guān)
服務(wù)網(wǎng)關(guān)是所有微服務(wù)的入口,客戶端在訪問各個(gè)微服務(wù)時(shí),首先需要經(jīng)過服務(wù)網(wǎng)關(guān)。接入服務(wù)網(wǎng)關(guān)后,會(huì)將所有API的調(diào)用統(tǒng)一接入到API的網(wǎng)關(guān)層,由網(wǎng)關(guān)層統(tǒng)一接收參數(shù)進(jìn)行路由轉(zhuǎn)發(fā),將返回的結(jié)果數(shù)據(jù)返回給客戶端。
通常情況下,一個(gè)服務(wù)網(wǎng)關(guān)最基本的功能包括:統(tǒng)一接入、限流、熔斷、降級(jí)、安全防護(hù)、協(xié)議適配、容錯(cuò)等等。主要專注的是對(duì)系統(tǒng)安全、流量和路由等的管理。這樣,業(yè)務(wù)開發(fā)人員就可以專注于開發(fā)業(yè)務(wù)邏輯啦。
服務(wù)限流
在高并發(fā)大流量場(chǎng)景下,經(jīng)常會(huì)出現(xiàn)某個(gè)服務(wù)或者接口因?yàn)檎{(diào)用的流量過大而導(dǎo)致不可用的情況,由于某個(gè)服務(wù)或者接口的不可用,可能還會(huì)導(dǎo)致整個(gè)系統(tǒng)崩潰。此時(shí),就會(huì)對(duì)系統(tǒng)采取限流的手段來進(jìn)行防護(hù),當(dāng)請(qǐng)求達(dá)到一定的頻率或者速率時(shí),對(duì)這些請(qǐng)求采取排隊(duì)、等待、降級(jí)等策略,甚至是拒絕服務(wù)。
服務(wù)熔斷
如果某個(gè)服務(wù)出現(xiàn)故障不可用,或者調(diào)用超時(shí),為了不讓其他服務(wù)受到牽累而導(dǎo)致整個(gè)系統(tǒng)不可用,則斷開與這個(gè)服務(wù)的連接,暫停對(duì)這個(gè)服務(wù)的調(diào)用。
服務(wù)降級(jí)
服務(wù)降級(jí)主要是從整個(gè)系統(tǒng)的負(fù)載情況進(jìn)行考慮,如果某些服務(wù)的負(fù)載情況比較高,則為了預(yù)防某些功能出現(xiàn)負(fù)載過高而導(dǎo)致響應(yīng)慢的問題,會(huì)在提供這些功能的方法內(nèi)部暫時(shí)舍棄對(duì)一些非核心功能接口的調(diào)用,直接返回一個(gè)提前準(zhǔn)備好的錯(cuò)誤處理信息。
服務(wù)降級(jí)是有損服務(wù),但是能夠保證整個(gè)系統(tǒng)的穩(wěn)定性和可用性。
服務(wù)容錯(cuò)
服務(wù)容錯(cuò)指的是微服務(wù)能夠容納一定錯(cuò)誤情況的發(fā)生。從某種意義上說,服務(wù)限流、服務(wù)熔斷和服務(wù)降級(jí)都是服務(wù)容錯(cuò)的措施。
鏈路追蹤
當(dāng)系統(tǒng)被拆分成各個(gè)微服務(wù)后,一次請(qǐng)求往往會(huì)涉及到多個(gè)服務(wù)之間的調(diào)用關(guān)系。如果系統(tǒng)出現(xiàn)問題,則會(huì)增加定位問題的難度。為了解決這個(gè)問題,就需要對(duì)一次請(qǐng)求涉及到的多個(gè)服務(wù)鏈路的日志進(jìn)行追蹤和記錄,一方面可以記錄調(diào)用的鏈路,另一方面還可以監(jiān)控系統(tǒng)中各個(gè)調(diào)用環(huán)節(jié)的性能,這就是鏈路追蹤。
SpringCloud AlibabaSpringCloud Alibaba是阿里開源的一套微服務(wù)解決方案,包含各種微服務(wù)組件,能夠極大的方便開發(fā)人員構(gòu)建微服務(wù)應(yīng)用。
主要功能
服務(wù)限流降級(jí):默認(rèn)支持 WebServlet、WebFlux、OpenFeign、RestTemplate、Spring Cloud Gateway、Zuul、Dubbo 和 RocketMQ 限流降級(jí)功能的接入,可以在運(yùn)行時(shí)通過控制臺(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ù)問題。
- 阿里云對(duì)象存儲(chǔ):阿里云提供的海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù)。支持在任何應(yīng)用、任何時(shí)間、任何地點(diǎn)存儲(chǔ)和訪問任意類型的數(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á)通道。
除了上述所具有的功能外,針對(duì)企業(yè)級(jí)用戶的場(chǎng)景,Spring Cloud Alibaba 配套的企業(yè)版微服務(wù)治理方案 微服務(wù)引擎 MSE 還提供了企業(yè)級(jí)微服務(wù)治理中心,包括全鏈路灰度、服務(wù)預(yù)熱、無損上下線和離群實(shí)例摘除等更多更強(qiáng)大的治理能力,同時(shí)還提供了企業(yè)級(jí) Nacos 注冊(cè)配置中心,企業(yè)級(jí)云原生網(wǎng)關(guān)等多種產(chǎn)品及解決方案。
組件
- 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:一款開源的分布式消息系統(tǒng),基于高可用分布式集群技術(shù),提供低延時(shí)的、高可靠的消息發(fā)布與訂閱服務(wù)。
- Dubbo:Apache Dubbo? 是一款高性能 Java RPC 框架。
- Seata:阿里巴巴開源產(chǎn)品,一個(gè)易于使用的高性能微服務(wù)分布式事務(wù)解決方案。
- Alibaba Cloud OSS: 阿里云對(duì)象存儲(chǔ)服務(wù)(Object Storage Service,簡(jiǎn)稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù)。您可以在任何應(yīng)用、任何時(shí)間、任何地點(diǎn)存儲(chǔ)和訪問任意類型的數(shù)據(jù)。
- Alibaba Cloud SchedulerX: 阿里中間件團(tuán)隊(duì)開發(fā)的一款分布式任務(wù)調(diào)度產(chǎn)品,提供秒級(jí)、精準(zhǔn)、高可靠、高可用的定時(shí)(基于 Cron 表達(dá)式)任務(wù)調(diào)度服務(wù)。
- Alibaba Cloud SMS: 覆蓋全球的短信服務(wù),友好、高效、智能的互聯(lián)化通訊能力,幫助企業(yè)迅速搭建客戶觸達(dá)通道。