摘要:什么是分布式系統(tǒng)從進(jìn)程角度看兩個(gè)程序分別運(yùn)行在兩臺(tái)主機(jī)的進(jìn)程上它們相互協(xié)作最終完成同一個(gè)服務(wù)那么理論上這兩個(gè)程序所組成的系統(tǒng)可以稱(chēng)作分布式系統(tǒng)當(dāng)然這兩個(gè)程序可以是不同的程序可以是相同的程序如果是相同的程序我們又可以稱(chēng)為集群所謂集群就是將相同
什么是分布式系統(tǒng)
從進(jìn)程角度看, 兩個(gè)程序分別運(yùn)行在兩臺(tái)主機(jī)的進(jìn)程上, 它們相互協(xié)作最終完成同一個(gè)服務(wù), 那么理論上這兩個(gè)程序所組成的系統(tǒng), 可以稱(chēng)作"分布式系統(tǒng)".
當(dāng)然, 這兩個(gè)程序可以是不同的程序, 可以是相同的程序. 如果是相同的程序, 我們又可以稱(chēng)為 "集群". 所謂集群, 就是將相同的程序, 通過(guò)不斷橫向擴(kuò)展, 以提高服務(wù)能力的方式.
應(yīng)用框架演進(jìn) 服務(wù)化架構(gòu)上圖的 web app 服務(wù)是單體化的, 所有組件耦合在一個(gè)開(kāi)發(fā)項(xiàng)目中, 并且配置和運(yùn)行在一個(gè) JVM 進(jìn)程中. 如果某個(gè)組件需要升級(jí)上線, 則會(huì)導(dǎo)致其他沒(méi)有變更的組件同樣上線.
而且無(wú)法滿(mǎn)足高并發(fā)請(qǐng)求處理, 水平擴(kuò)展能力也很有限的.
為了解決上述問(wèn)題, SOA 出現(xiàn)了. SOA 代表面向服務(wù)的架構(gòu), 俗稱(chēng)服務(wù)化. SOA 將應(yīng)用程序的模塊化組件通過(guò)定義明確的接口和協(xié)議聯(lián)系起來(lái), 接口是采用中立的方式進(jìn)行定義的, 獨(dú)立于某種語(yǔ)言、硬件和操作系統(tǒng), 通常通過(guò)網(wǎng)絡(luò)通信來(lái)完成, 但是并不局限于某種網(wǎng)絡(luò)協(xié)議, 可以是底層的 TCP/IP, 可以是應(yīng)用層的 HTTP, 也可以是消息隊(duì)列協(xié)議, 甚至可以是來(lái)約定的某種數(shù)據(jù)庫(kù)存儲(chǔ)信息.
這使得各種各樣的系統(tǒng)中的模塊化組件可以以一種統(tǒng)一和通用的方式進(jìn)行交互.
SOA 將模塊化組件從單一進(jìn)程中進(jìn)一步拆分, 通過(guò)某種網(wǎng)絡(luò)協(xié)議形成獨(dú)立的對(duì)外提供服務(wù)的網(wǎng)絡(luò)化組件, 這種架構(gòu)下的特點(diǎn)如下:
SOA 定義了良好的對(duì)外接口, 通過(guò)網(wǎng)絡(luò)協(xié)議對(duì)外提供服務(wù), 服務(wù)之間表現(xiàn)為松耦合性.
某個(gè)服務(wù)的內(nèi)部結(jié)構(gòu)和實(shí)現(xiàn)發(fā)生改變時(shí), 只要接口保持不變, 不影響整個(gè)流程對(duì)外提供服務(wù).
SOA 通過(guò)定義標(biāo)準(zhǔn)的對(duì)外接口, 可以讓多個(gè)使用方同時(shí)使用, 增加服務(wù)的可重用性.
SOA 可以讓企業(yè)最大化地使用內(nèi)部和外部地公共服務(wù), 避免重復(fù)造輪子.
要徹底理解 SOA 時(shí)代地服務(wù)化發(fā)展情況, 我們必須理解 SOA 的兩個(gè)主流實(shí)現(xiàn)方式: web service 和 ESB.
Web Service
Web Service 技術(shù)是 SOA 服務(wù)化的一種實(shí)現(xiàn)方式. 運(yùn)行在不同操作系統(tǒng)上的服務(wù)的互相發(fā)現(xiàn)和調(diào)用, 并且可以通過(guò)某種協(xié)議交換數(shù)據(jù).
上圖可以看到, 每個(gè)服務(wù)之間是對(duì)等的, 并且互相是解耦的, 通過(guò) WSDL 定義的服務(wù)發(fā)現(xiàn)接口進(jìn)行訪問(wèn), 并通過(guò) SOAP 協(xié)議進(jìn)行通信. SOAP 協(xié)議通常是一種在 HTTP 或者 HTTPS 通道上傳輸 XML 數(shù)據(jù)來(lái)實(shí)現(xiàn)的協(xié)議, 但是每個(gè)服務(wù)都要依賴(lài)中心化 Web Service 目錄來(lái)發(fā)現(xiàn)現(xiàn)存的服務(wù).
Web Service 的工作原理如下.
服務(wù)提供者 Web Service 2 和 Web Service 3 通過(guò) UDDI 協(xié)議將服務(wù)注冊(cè)到 Web Service 目錄服務(wù)中.
服務(wù)消費(fèi)者 Web Service 1 通過(guò) UDDI 協(xié)議從 Web Service 目錄中查詢(xún)服務(wù), 并獲得服務(wù)的 WSDL 服務(wù)描述文件.
服務(wù)消費(fèi)者 Web Service 1 通過(guò) WSDL 語(yǔ)言遠(yuǎn)程調(diào)用和消費(fèi) Web Service 2 和 3 提供的服務(wù).
通過(guò)這個(gè)過(guò)程, 要改造一個(gè)新的業(yè)務(wù)流程, 可以從 Web Service 目錄中發(fā)現(xiàn)現(xiàn)有的服務(wù), 并最大限度地重用現(xiàn)有的服務(wù).
從服務(wù)化到微服務(wù)隨著物聯(lián)網(wǎng)企業(yè)的不斷發(fā)展, 互聯(lián)網(wǎng)產(chǎn)品需要服務(wù)的用戶(hù)量逐漸增加, 海量用戶(hù)發(fā)起的大規(guī)模、高并發(fā)請(qǐng)求是企業(yè)不得不面對(duì)的.
前面介紹的 SOA 服務(wù)化系統(tǒng)能夠分解任務(wù), 讓每個(gè)服務(wù)更簡(jiǎn)單、職責(zé)單一、更易于擴(kuò)展, 但無(wú)論是 Web Service 還是 ESB, 都有時(shí)代遺留問(wèn)題.
Web Service 的問(wèn)題如下:
依賴(lài)中心化的服務(wù)發(fā)現(xiàn)機(jī)制.
使用 SOAP 通信協(xié)議, 通常使用 XML 格式來(lái)序列化通信數(shù)據(jù), XML 格式的數(shù)據(jù)冗余太大, 協(xié)議太重.
服務(wù)化管理和治理設(shè)施并不完善.
微服務(wù)架構(gòu)倡導(dǎo)將軟件應(yīng)用設(shè)計(jì)成多個(gè)可獨(dú)立開(kāi)發(fā)、可配置、可運(yùn)行和可維護(hù)的子服務(wù), 子服務(wù)之間通過(guò)良好的接口定義通信機(jī)制, 通常使用 RESTful 風(fēng)格的 API 形式來(lái)通信, 因?yàn)?RESTful 風(fēng)格的 API 通常是在 HTTP 或者 HTTPS 通道上傳輸 JSON 格式的數(shù)據(jù)來(lái)實(shí)現(xiàn)的, HTTP 協(xié)議有跨語(yǔ)言、跨異構(gòu)系統(tǒng)的優(yōu)點(diǎn).
當(dāng)然, 也可以通過(guò)底層的二進(jìn)制協(xié)議、消息隊(duì)列協(xié)議等進(jìn)行交互.
這些服務(wù)不需要中心化的統(tǒng)一管理, 每個(gè)服務(wù)的功能可以自治, 并且可以由不同的語(yǔ)言、系統(tǒng)和平臺(tái)實(shí)現(xiàn).
微服務(wù)架構(gòu)與傳統(tǒng)單體架構(gòu)的對(duì)比上圖我們可以得出如下結(jié)論:
微服務(wù)把每個(gè)職責(zé)單一的功能放在一個(gè)獨(dú)立的服務(wù)中.
每個(gè)服務(wù)運(yùn)行在一個(gè)多帶帶的進(jìn)程中.
每個(gè)服務(wù)有多個(gè)實(shí)例在運(yùn)行, 每個(gè)實(shí)例可以運(yùn)行在容器化平臺(tái)內(nèi), 達(dá)到平滑伸縮的效果.
每個(gè)服務(wù)有自己的數(shù)據(jù)存儲(chǔ), 實(shí)際上, 每個(gè)服務(wù)又該有自己獨(dú)享的數(shù)據(jù)庫(kù)、緩存、信息隊(duì)列等資源.
每個(gè)服務(wù)應(yīng)該有自己的運(yùn)營(yíng)平臺(tái), 以及獨(dú)享的運(yùn)營(yíng)人員, 這包括技術(shù)運(yùn)維和業(yè)務(wù)運(yùn)營(yíng)人員; 每個(gè)服務(wù)都高度自治, 內(nèi)部的變化對(duì)外透明.
每個(gè)服務(wù)都可以根據(jù)性能需求獨(dú)立的進(jìn)行水平伸縮.
通過(guò)對(duì)比微服務(wù)與傳統(tǒng)單體架構(gòu), 我們得知傳統(tǒng)單體架構(gòu)具有如下特點(diǎn):
傳統(tǒng)單體架構(gòu)將所有模塊化組件混合后運(yùn)行在同一個(gè) JVM 進(jìn)程中.
可對(duì)包含多個(gè)模塊化組件的整體 JVM 進(jìn)程進(jìn)行水平擴(kuò)展, 而無(wú)法對(duì)某個(gè)模塊化組件進(jìn)行水平擴(kuò)展.
某個(gè)模塊化組件發(fā)生變化時(shí), 需要所有模塊化組件進(jìn)行編譯、打包、和上線.
久而久之, 模塊之間的依賴(lài)將會(huì)不清晰, 互相耦合、相互依賴(lài)成為家常便飯.
微服務(wù)架構(gòu)與 SOA 服務(wù)化的對(duì)比微服務(wù)在 SOA 服務(wù)化的基礎(chǔ)上進(jìn)行演進(jìn)和疊加, 形成了適合現(xiàn)代化應(yīng)用場(chǎng)景的一個(gè)方法論.
1.目的不同
SOA 服務(wù)化涉及的范圍更廣一些, 強(qiáng)調(diào)不同的異構(gòu)服務(wù)之間的協(xié)作和協(xié)議, 并強(qiáng)調(diào)有效集成、業(yè)務(wù)流程編排、歷史應(yīng)用集成等, 典型代表 Web Service 和 ESB.
微服務(wù)使用一系列的微小服務(wù)來(lái)實(shí)現(xiàn)整體的業(yè)務(wù)流程, 目的是有效的拆分應(yīng)用, 實(shí)現(xiàn)敏捷開(kāi)發(fā)和部署, 在每個(gè)微小服務(wù)的團(tuán)隊(duì)里, 減少了跨團(tuán)的溝通, 讓專(zhuān)業(yè)的人做專(zhuān)業(yè)的事, 縮小變更和迭代影響的范圍, 并達(dá)到單一微服務(wù)更容易水平擴(kuò)展的目的.
2.部署方式不同
微服務(wù)將完整的應(yīng)用拆分成多個(gè)細(xì)小的服務(wù), 通常使用敏捷擴(kuò)容、縮容的 Docker 技術(shù)來(lái)實(shí)現(xiàn)自動(dòng)化的容器管理, 每個(gè)微服務(wù)運(yùn)行在單一的進(jìn)程內(nèi), 微服務(wù)中的部署互相獨(dú)立、互不影響.
SOA 服務(wù)化通常將多個(gè)業(yè)務(wù)服務(wù)通過(guò)組件化模塊方式打包在一個(gè) war 包里, 然后統(tǒng)一部署在一個(gè)應(yīng)用服務(wù)器上.
3.服務(wù)粒度不同
微服務(wù)倡導(dǎo)將服務(wù)拆分成更細(xì)的粒度, 通過(guò)多個(gè)服務(wù)組合來(lái)實(shí)現(xiàn)業(yè)務(wù)流程的處理, 拆分到職責(zé)單一, 甚至小到不能再進(jìn)行拆分.
SOA 對(duì)粒度沒(méi)有要求, 在實(shí)戰(zhàn)中服務(wù)通常是粗粒度的, 強(qiáng)調(diào)接口協(xié)議的規(guī)范化, 內(nèi)部實(shí)現(xiàn)可以更粗顆粒.
總結(jié)微服務(wù)是新一代分布式架構(gòu).
每個(gè)服務(wù)運(yùn)行在單一的進(jìn)程內(nèi), 獨(dú)立部署、互不影響.
每個(gè)服務(wù)拆分到職責(zé)單一、甚至小到不能在拆分.
每個(gè)服務(wù)有自己獨(dú)享的數(shù)據(jù)庫(kù)、緩存、信息隊(duì)列等資源.
每個(gè)服務(wù)有自己的運(yùn)營(yíng)平臺(tái); 每個(gè)服務(wù)都高度自治, 內(nèi)部的變化對(duì)外透明.
每個(gè)服務(wù)可以通過(guò) HTTP 或底層的二進(jìn)制協(xié)議、消息隊(duì)列協(xié)議等進(jìn)行交互.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72865.html
摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語(yǔ)言和等其他語(yǔ)言的對(duì)比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問(wèn)到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動(dòng)化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯(cuò)過(guò)的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語(yǔ)言和Java、python等其他語(yǔ)言的對(duì)比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...
摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語(yǔ)言和等其他語(yǔ)言的對(duì)比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問(wèn)到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動(dòng)化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯(cuò)過(guò)的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語(yǔ)言和Java、python等其他語(yǔ)言的對(duì)比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...
摘要:微服務(wù)架構(gòu)概述應(yīng)用架構(gòu)的發(fā)展應(yīng)用是可獨(dú)立運(yùn)行的程序代碼,提供相對(duì)完善的業(yè)務(wù)功能。阿里開(kāi)源的是的典型實(shí)現(xiàn)。它目前由官方開(kāi)發(fā)維護(hù),基于開(kāi)發(fā),提供一套完整的微服務(wù)解決方案。 微服務(wù)與Spring Cloud 隨著互聯(lián)網(wǎng)的快速發(fā)展, 云計(jì)算近十年也得到蓬勃發(fā)展, 企業(yè)的IT環(huán)境和IT架構(gòu)也逐漸在發(fā)生變革,從過(guò)去的單體應(yīng)用架構(gòu)發(fā)展為至今廣泛流行的微服務(wù)架構(gòu)。 微服務(wù)是一種架構(gòu)風(fēng)格, 能給軟件應(yīng)用...
摘要:缺點(diǎn)系統(tǒng)依賴(lài)復(fù)雜,給開(kāi)發(fā)測(cè)試部署帶來(lái)不便,分布式數(shù)據(jù)一致性和分布式事務(wù)支持困難,一般通過(guò)最終一致性簡(jiǎn)化解決。微服務(wù)架構(gòu)分成三種實(shí)現(xiàn)模式。事件驅(qū)動(dòng)架構(gòu)事件是狀態(tài)發(fā)生變化時(shí),軟件發(fā)出的通知。事件驅(qū)動(dòng)架構(gòu)的四個(gè)部分事件隊(duì)列接收事件的入口。 架構(gòu)的規(guī)劃誰(shuí)架構(gòu)就是對(duì)系統(tǒng)中的實(shí)體以及實(shí)體之間的關(guān)系所進(jìn)行的抽象描述,是決策。...
摘要:阿里巴巴的共享服務(wù)理念以及企業(yè)級(jí)互聯(lián)網(wǎng)架構(gòu)建設(shè)的思路,給這些企業(yè)帶來(lái)了不少新的思路,這也是我最終決定寫(xiě)這本書(shū)的最主要原因。盡在雙阿里巴巴技術(shù)演進(jìn)與超越是迄今唯一由阿里巴巴集團(tuán)官方出品全面闡述雙八年以來(lái)在技術(shù)和商業(yè)上演進(jìn)和創(chuàng)新歷程的書(shū)籍。 showImg(https://segmentfault.com/img/remote/1460000015386860); 1、大型網(wǎng)站技術(shù)架構(gòu):核...
閱讀 3062·2023-04-26 00:40
閱讀 2406·2021-09-27 13:47
閱讀 4265·2021-09-07 10:22
閱讀 2973·2021-09-06 15:02
閱讀 3322·2021-09-04 16:45
閱讀 2507·2021-08-11 10:23
閱讀 3612·2021-07-26 23:38
閱讀 2908·2019-08-30 15:54