成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

開發(fā) | 老板下了死命令,要上微服務!

開發(fā) 架構(gòu)
這些年軟件的設計規(guī)模越來越龐大,業(yè)務需求也越來越復雜,針對系統(tǒng)的性能、高吞吐率、高穩(wěn)定性、高擴展等特性提出了更高的要求。

 這些年軟件的設計規(guī)模越來越龐大,業(yè)務需求也越來越復雜,針對系統(tǒng)的性能、高吞吐率、高穩(wěn)定性、高擴展等特性提出了更高的要求。

[[350756]]

圖片來自 Pexels 

可以說業(yè)務需求是軟件架構(gòu)能力的第一推動力,由于這些因素導致了軟件架構(gòu)思想和相關(guān)技術(shù)也在發(fā)生著巨變。

這些變化反應在軟件架構(gòu)行業(yè)里,就是我們開始越來越多的聽到了很多新的詞匯,比如:“分布式”、“SOA”、“微服務”、“中臺”等概念。

今天我就把我學習微服務的過程記錄下來,包括所有技術(shù)的實現(xiàn)細節(jié)和個人的理解。俗話說:好記性,不如爛筆頭,以防自己忘記,以后可以查詢。

當然,這些東西有很多東西都是自己的理解,里面的插圖也是自己畫的,可能會有一些有失偏頗的地方,當然希望有高手可以指正,不靈賜教,大家共同進步。

架構(gòu)發(fā)展歷程

現(xiàn)在的科學技術(shù)可以說是日新月異,發(fā)展迅速。相對于我們軟件設計行業(yè)也在發(fā)生著巨變,業(yè)務越來越復雜,需求越來越龐大、繁雜,軟件架構(gòu)和部署的規(guī)模也發(fā)生著翻天覆地的變化。

作為軟件架構(gòu)思想之一的“微服務架構(gòu)”也在按著自己的規(guī)律進化著,接下來我們就簡單的了解一下“微服務架構(gòu)”發(fā)展經(jīng)歷的三個時期,這些只是個人理解。

單體架構(gòu)(Monolithic)

單體應用時代:應用程序無論如何分層,都是一個解決方案,或者說都是一個項目,這里的“解決方案”和“項目”不是我們使用的 Visual Studio 里面的概念,最終的程序代碼都會在一個進程里運行。

如圖:

 

優(yōu)點:開發(fā)簡單,集中管理,沒有分布式的損耗,都是系統(tǒng)進程內(nèi)的通信。

缺點:不好維護,升級困難,耦合嚴重,無法應付高并發(fā)和大數(shù)據(jù)場景,無法快捷迭代。

垂直拆分

隨著業(yè)務規(guī)模的越來越龐大,系統(tǒng)設計就越來越復雜,大的系統(tǒng)就開始進行業(yè)務的垂直拆分。

比如:有專門做商品秒殺的部門,有專門做生鮮商品的部門,有專門做超市的部門,等等,當然這是根據(jù)部門天生劃分的,也有根據(jù)業(yè)務需求進行系統(tǒng)劃分的。

如圖:

 

優(yōu)點:垂直拆分,系統(tǒng)獨立部署和維護,每個系統(tǒng)在自己進程內(nèi)執(zhí)行,分而治之。

缺點:拆分越多,存儲越復雜,系統(tǒng)間重復的東西也越多,單個系統(tǒng)還是單體模式。

分布式服務

隨著業(yè)務系統(tǒng)的越來越龐大,軟件系統(tǒng)設計起來越來越復雜。為了避免過度復雜的業(yè)務需求,開始對業(yè)務系統(tǒng)的進行垂直拆分,形成多個獨立的業(yè)務系統(tǒng),如果多個系統(tǒng)之間要通信,可以通過跨進程的技術(shù)完成通訊。

但是垂直拆分也導致了大量重復代碼、重復模塊的產(chǎn)生,比如:用戶模塊、日志模塊、支付模塊、認證授權(quán)模塊等,這樣分散的代碼也給系統(tǒng)的維護和升級帶來了困難。

我們對業(yè)務重新劃分,把獨立的模塊接口化、服務化,提高重用,這個時候,我們就開始進入了分布式服務的時代。(分布式的第一要務就是不要分布式)

如圖:

 

優(yōu)點:

  • 獨立進程部署,獨立進程運行,獨立演化。服務之間可以做到高內(nèi)聚,低耦合。
  • 獨立開發(fā)和維護,業(yè)務解耦,無論是業(yè)務系統(tǒng)還是分布式服務都獨立演化。
  • 分布式管理。
  • 隔離性增強。
  • 由一系列服務組裝成系統(tǒng),不用重復建設,模塊、代碼可以復用。

缺點:

  • 數(shù)據(jù)一致性(多服務完成一個任務)和系統(tǒng)的可用性(集群)成為問題。
  • 數(shù)據(jù)庫也進行了拆分。
  • 維護、設計、架構(gòu)成本增加,調(diào)試、糾錯更難。
  • 網(wǎng)絡傳輸分布式損耗成本。
  • 不適合高并發(fā)和大數(shù)據(jù)的環(huán)境。

微服務架構(gòu)

微服務的出現(xiàn)時分布式架構(gòu)已經(jīng)很成熟了,架構(gòu)中各種問題已經(jīng)有了很成熟的解決方案,對于現(xiàn)在的業(yè)務系統(tǒng)來說,分布式架構(gòu)已經(jīng)變成了一種常規(guī)手段,這個時候,微服務就出現(xiàn)了。

微服務架構(gòu)是一個用分布式服務拆分業(yè)務邏輯,完成解耦的架構(gòu)模式(架構(gòu)風格)。

微服務肯定是分布式的一種,是在分布式技術(shù)成熟之后,然后把分布式當成解耦手段來架構(gòu)系統(tǒng)。

因為拆分的服務很細致,服務數(shù)量規(guī)模開始變多了,服務的體量開始縮小了,由以前幾個大的服務,轉(zhuǎn)變?yōu)槎鄠€獨立運行的、原子性質(zhì)的服務。

如圖:

 

微服務最重要的特性是:

  • 可用性:描述一個系統(tǒng)在一段時間內(nèi)提供有用資源的能力,從而減少停工時間,而保持其服務的高度可用性。
  • 伸縮性:根據(jù)需求動態(tài)添加和刪除系統(tǒng)中資源的能力,是水平或垂直擴展的專門實現(xiàn)。

集群(負載均衡)可以解決系統(tǒng)的高可用和伸縮特性。

SOA 面向服務架構(gòu)

Service-Oriented Architecture 面向服務架構(gòu):是一個組件模型,它將應用程序的不同功能單元(稱為服務)進行拆分,并通過這些服務之間定義良好的接口和協(xié)議聯(lián)系起來。

如圖:

 

微服務架構(gòu)的發(fā)展歷程

我們要解決微服務的高可用和可伸縮的兩個問題,自然就會想到通過集群來實現(xiàn),這個思路沒有錯。

如果我們實現(xiàn)了服務集群,那另外兩個問題就會出現(xiàn),這兩個問題也導致了微服務架構(gòu)的發(fā)展版本的差異。

第一個:服務的發(fā)現(xiàn)問題,調(diào)用方如何發(fā)現(xiàn)服務,有了新的服務,我們?nèi)绾沃溃蟹諏嵗艟€,我們?nèi)绾螘缘茫l(fā)現(xiàn)服務就很重要,這個是基礎問題,第一個問題不解決,第二個問題也沒有辦法實現(xiàn)。

第二個:如何調(diào)用服務,如何管理那么多的服務實例。有那么多的集群實例,也就有那么多的服務實例,我們該怎么去調(diào)用這些服務呢?多個服務調(diào)用的關(guān)系如何呢?

由于這些問題,那我們就看看微服務架構(gòu)的三個版本是如何解決的。

①集中式代理:Nginx(V1.0 版本(服務注冊/服務發(fā)現(xiàn)----手動))

 

如上圖:

  • 服務發(fā)現(xiàn),手動修改配置文件,重新啟動。
  • 負載均衡,可以輪訓、權(quán)重、哈希等等。
  • 服務新增無法發(fā)現(xiàn),需要手動配置,服務掉線可以自動檢查。
  • 客戶端的實現(xiàn)很簡單,不需要額外的代碼,簡單,高效。

②客戶端嵌入:Consul(V2.0 版本(服務注冊/服務發(fā)現(xiàn)—自動---服務治理))

 

如上圖:

  • 服務注冊與發(fā)現(xiàn),動態(tài)增加,自動完成。
  • 健康檢查,可以查看損壞服務,去掉服務,自動完成。
  • 負載均衡,Consul 返回所有活動服務實例,客戶端自己實現(xiàn)負載均衡。

功能強大,自動發(fā)現(xiàn)-自動下線,客戶端集成比較復雜,負載均衡在客戶端實現(xiàn)。

③服務網(wǎng)格:Service Mesh(V3.0---技術(shù)不成熟,華為+唯品會,lstio)

 

SideCar 服務管理服務實例的注冊和發(fā)現(xiàn),服務實例的治理和調(diào)用。Service Mesh’s Control Plan 管理所有的 SideCar。

這個技術(shù)我就不多談了,網(wǎng)上的資料也很多,目前這個技術(shù)還不是很成熟,使用的范圍也不是很廣,只有一些大的公司有過使用,比如:微軟等。

 

微服務架構(gòu)必備技術(shù)棧

微服務是一種軟件設計、架構(gòu)思想,當然,里面也包含了相關(guān)技術(shù)點要解決當前要務。學習微服務,我們不能空口而談,一定要落實到具體的技術(shù)棧上。

當今使用比較多兩個技術(shù)體系,一個是 Java,另外一個就是 Net,廢話不多說,我是使用微軟相關(guān)技術(shù)棧的軟件架構(gòu)人員,當然使用的“微服務”架構(gòu)技術(shù)棧也都是微軟的。

今天我就把相關(guān)“微服務架構(gòu)”所用到的技術(shù)棧羅列出來,我也要說明一下,微服務架構(gòu)里面的很多技術(shù)是和開發(fā)語言無關(guān)的,無論是 .Net 還是 Java 平臺都可以使用。以后,一步一步的針對每項技術(shù)在做深入研究。

①服務通信

WebService、WCF、WebAPI,甚至可以是 ASHX,ASPX,這都是微軟本身的技術(shù)體系,沒什么可說的:

  • 主動觸發(fā)
  • 數(shù)據(jù)序列化傳遞
  • 跨平臺
  • 跨語言
  • Http 穿透防火墻

②進程通信

Net Remoting:Net 平臺督郵的,不支持跨平臺。

gRPC:高性能、開源和通用 RPC 框架,面向服務端和移動端,基于 HTTP/2 設計,推薦使用。

③API 網(wǎng)關(guān)服務(Ocelot)

 

API 網(wǎng)關(guān):它是系統(tǒng)的暴露在外部的一個訪問入口。這個有點像代理訪問的家伙,就像一個公司的門衛(wèi)承擔著尋址、限制進入、安全檢查、位置引導、等等功能。

Ocelot 是一個用 .NET Core 實現(xiàn)并且開源的 API 網(wǎng)關(guān),它功能強大,包括了:路由、請求聚合、服務發(fā)現(xiàn)、認證、鑒權(quán)、限流熔斷。

并內(nèi)置了負載均衡器與 Service Fabric、Butterfly Tracing 集成。這些功能只都只需要簡單的配置即可完成。

如圖:


官網(wǎng): 

  1. https://ocelot.readthedocs.io/en/latest/index.html 

④認證&授權(quán)

 

現(xiàn)在的應用開發(fā)層出不窮,基于瀏覽器的網(wǎng)頁應用,基于微信的公眾號、小程序,基于 iOS、Android 的 App,基于 Windows 系統(tǒng)的桌面應用和 UWP 應用等等。

這么多種類的應用,就給應用的開發(fā)帶來的挑戰(zhàn),我們除了分別實現(xiàn)各個應用外,我們還要考慮各個應用之間的交互,通用模塊的提煉,其中身份的認證和授權(quán)就是每個應用必不可少的的一部分。

而現(xiàn)在的互聯(lián)網(wǎng),對于信息安全要求又十分苛刻,所以一套統(tǒng)一的身份認證和授權(quán)就至關(guān)重要。

IdentityServer4 就是這樣一個框架,IdentityServer4 是為 ASP.NET CORE 量身定制的實現(xiàn)了 OpenId Connect 和 OAuth2.0 協(xié)議的認證授權(quán)中間件。

項目地址:

  1. https://github.com/IdentityServer/IdentityServer4 

⑤瞬態(tài)故障處理

 

Polly 它一款強大的類庫,Polly 是一種 .NET 彈性和瞬態(tài)故障處理庫,允許我們以非常順暢和線程安全的方式來執(zhí)諸如行重試,斷路,超時,故障恢復等策略。

Polly 針對 .NET 4.0,.NET 4.5 和 .NET Standard 1.1 以及 .NET Core 實現(xiàn),該項目作者現(xiàn)已成為 .NET 基金會一員,項目一直在不停迭代和更新,你值得擁有。

項目地址:

  1. https://github.com/App-vNext/Polly 

⑥分布式追蹤

 

隨著微服務架構(gòu)的流行,一些微服務架構(gòu)下的問題也會越來越突出,比如一個請求會涉及多個服務,而服務本身可能也會依賴其他服務,整個請求路徑就構(gòu)成了一個網(wǎng)狀的調(diào)用鏈。

而在整個調(diào)用鏈中一旦某個節(jié)點發(fā)生異常,整個調(diào)用鏈的穩(wěn)定性就會受到影響,所以會深深的感受到 “銀彈” 這個詞是不存在的,每種架構(gòu)都有其優(yōu)缺點 。

 

面對以上情況, 我們就需要一些可以幫助理解系統(tǒng)行為、用于分析性能問題的工具,以便發(fā)生故障的時候,能夠快速定位和解決問題,這時候 APM(應用性能管理)工具就該閃亮登場了。

項目地址:

  1. https://github.com/SkyAPM/SkyAPM-dotnet 

⑦分布式日志

一般我們需要進行日志分析場景:直接在日志文件中 grep、awk 就可以獲得自己想要的信息。

但在規(guī)模較大也就是日志量多而復雜的場景中,此方法效率低下,面臨問題包括日志量太大如何歸檔、文本搜索太慢怎么辦、如何多維度查詢。

需要集中化的日志管理,所有服務器上的日志收集匯總。常見解決思路是建立集中式日志收集系統(tǒng),將所有節(jié)點上的日志統(tǒng)一收集,管理,訪問。

大型系統(tǒng)通常都是一個分布式部署的架構(gòu),不同的服務模塊部署在不同的服務器上,問題出現(xiàn)時,大部分情況需要根據(jù)問題暴露的關(guān)鍵信息,定位到具體的服務器和服務模塊,構(gòu)建一套集中式日志系統(tǒng),可以提高定位問題的效率。

Exceptionless:是一個開源的實時的日志收集框架,它可以應用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等技術(shù)棧的應用程序中,并且提供了Rest接口可以應用在 Javascript,Node.js 中。

它將日志收集變得簡單易用并且不需要了解太多的相關(guān)技術(shù)細節(jié)及配置。

在以前,我們做日志收集大多使用 Log4net,Nlog 等框架,在應用程序變得復雜并且集群的時候,可能傳統(tǒng)的方式已經(jīng)不是很好的適用了,因為收集各個日志并且分析他們將變得麻煩而且浪費時間。

現(xiàn)在 Exceptionless 團隊給我們提供了一個更好的框架來做這件事情,我認為這是非常偉大并且有意義的,感謝他們。 

 

官網(wǎng): 

  1. http://exceptionless.com/ 

GitHub:

  1. https://github.com/exceptionless/Exceptionless 

ELK:是三個開源軟件的縮寫,分別為:Elasticsearch 、 Logstash以及Kibana , 它們都是開源軟件。

不過現(xiàn)在還新增了一個 Beats,它是一個輕量級的日志收集處理工具(Agent),Beats 占用資源少,適合于在各個服務器上搜集日志后傳輸給 Logstash,官方也推薦此工具。

目前由于原本的 ELK Stack 成員中加入了 Beats 工具所以已改名為 Elastic Stack,推薦使用。

 

⑧分布式配置中心

 

Apollo(阿波羅)是攜程框架部門研發(fā)的配置管理平臺,能夠集中化管理應用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r推送到應用端,并且具備規(guī)范的權(quán)限、流程治理等特性。

服務端基于 Spring Boot 和 Spring Cloud 開發(fā),打包后可以直接運行,不需要額外安裝 Tomcat 等應用容器。

Java 客戶端不依賴任何框架,能夠運行于所有 Java 運行時環(huán)境,同時對 Spring 環(huán)境也有較好的支持。.Net 客戶端不依賴任何框架,能夠運行于所有 .Net 運行時環(huán)境。

項目地址:

  1. https://github.com/ctripcorp/apollo/ 

分布式鎖的解決方案有很多,我在這里就羅列一些:

  • Consul 可以實現(xiàn)分布式鎖
  • Redis 可以實現(xiàn)分布式鎖,推薦使用
  • Zookeeper 可以實現(xiàn)分布式鎖
  • 數(shù)據(jù)庫可以實現(xiàn)分布式鎖

⑩分布式事務

分布式事務的實現(xiàn)方式也不少:

  • 2PC(two-phase commit protocol,強一致性,沒有可用性)
  • 3PC
  • TCC(Try-Confirm-Cancel)
  • 本地消息表,推薦 RabbitMQ
  • Saga 模式

本地消息表:MQ 分布式事務—本地消息表—基于消息的一致性。

  • 上有投遞消息
  • 下游獲取消息
  • 上游投遞穩(wěn)定性
  • 下游接受穩(wěn)定性

⑪容器化

Docker 是一個開源的應用容器引擎,可以打包應用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的 Linux 和Windows 機器上,也可以實現(xiàn)虛擬化。

Docker 使用客戶端-服務器 (C/S) 架構(gòu)模式,使用遠程 API 來管理和創(chuàng)建 Docker 容器。

Docker 容器通過 Docker 鏡像來創(chuàng)建。容器與鏡像的關(guān)系類似于面向?qū)ο缶幊讨械膶ο笈c類。

Docker 采用 C/S 架構(gòu) Docker daemon 作為服務端接受來自客戶的請求,并處理這些請求(創(chuàng)建、運行、分發(fā)容器)。

客戶端和服務端既可以運行在一個機器上,也可通過 Socket 或者 RESTful API 來進行通信。

Docker daemon 一般在宿主主機后臺運行,等待接收來自客戶端的消息。

Docker 客戶端則為用戶提供一系列可執(zhí)行命令,用戶用這些命令實現(xiàn)跟 Docker daemon 交互。

如圖: 

 

⑫容器編排

 

Kubernetes 是 Google 開源的一個容器編排引擎,它支持自動化部署、大規(guī)模可伸縮、應用容器化管理。

在生產(chǎn)環(huán)境中部署一個應用程序時,通常要部署該應用的多個實例以便對應用請求進行負載均衡。

在 Kubernetes 中,我們可以創(chuàng)建多個容器,每個容器里面運行一個應用實例,然后通過內(nèi)置的負載均衡策略,實現(xiàn)對這一組應用實例的管理、發(fā)現(xiàn)、訪問,而這些細節(jié)都不需要運維人員去進行復雜的手工配置和處理。

Kubernetes 也可以理解為 Docker 的編排容器,是管理應用的全生命周期的工具,從創(chuàng)建應用/部署,應用提供服務,擴容縮容,更新,都非常的方便,而且可以做到故障自愈。

中文社區(qū):

  1. http://docs.kubernetes.org.cn/ 

官網(wǎng):

  1. https://kubernetes.io/docs/home/ 

⑬CI/CD

 

Jenkins 是一個開源的、提供友好操作界面的持續(xù)集成(CI)工具,主要用于持續(xù)、自動的構(gòu)建/測試軟件項目、監(jiān)控外部任務的運行。

官網(wǎng):

  1. http://www.jenkins.org.cn/ 

結(jié)束語

好了,今天就分享到這里了,沒別的,就是做一下相關(guān)技術(shù)棧的記錄,以后有時間,再把每項技術(shù)仔細研究。

作者:可均可可

編輯:陶家龍

出處:https://www.cnblogs.com/PatrickLiu/

 

責任編輯:武曉燕 來源: 博客園
相關(guān)推薦

2020-10-30 12:37:42

日志系統(tǒng)

2020-06-22 08:38:50

微服務架構(gòu)互聯(lián)網(wǎng)

2022-06-02 07:51:06

RainbondNocalhost微服務

2021-05-31 11:22:24

微服務開發(fā)框架

2024-09-04 17:49:27

2017-03-06 17:30:11

微服務架構(gòu)系統(tǒng)

2019-06-19 09:33:17

微服務面試電商

2020-01-18 09:35:03

微服務團隊架構(gòu)

2024-07-08 13:56:12

微服務API代碼

2023-01-09 17:46:07

項目版本號字段

2020-08-05 08:23:19

架構(gòu)Java微服務

2021-04-19 09:15:14

老板公司企業(yè)

2017-02-28 14:32:48

微服務開發(fā)軟件

2019-07-12 14:41:31

微服務Kubernetes容器

2017-12-11 10:18:01

2018-12-17 16:44:49

Golang微服務

2018-12-17 16:48:05

Golang微服務

2018-12-17 16:39:20

Golang微服務

2010-08-27 10:37:41

馬云

2010-10-19 10:47:59

百度
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩在线免费视频 | h免费观看| 久久午夜视频 | 久久久久久久久久影视 | 九九热这里 | 97精品超碰一区二区三区 | 美国黄色毛片 | 国产一级毛片精品完整视频版 | www.99热这里只有精品 | 成人日韩 | 国产欧美精品 | 日韩欧美在线观看 | 一区二区三区国产 | 欧美日韩在线视频一区二区 | 久久综合一区 | 6996成人影院网在线播放 | 成人在线视频观看 | 超碰免费在线 | 免费的日批视频 | 欧美精品一区在线发布 | h网站在线观看 | 一道本不卡视频 | 人人干人人看 | 精品一区二区久久久久久久网站 | 国产精品地址 | 无码日韩精品一区二区免费 | 国产精品日日摸夜夜添夜夜av | 久久久综合色 | 国产成人精品久久二区二区 | 国产精品久久久久久影视 | 日本在线一区二区三区 | 国产免费国产 | 一区二区三区影院 | 在线日韩欧美 | 九九久久久 | 欧美一级特黄aaa大片在线观看 | 久久久久久国 | 黄色一级片aaa | 久久久噜噜噜久久中文字幕色伊伊 | 久色网| 久久一二 |