關于微服務的一點感悟和過往經驗的思考

一、為什么有微服務

解決單體應用的局限性
隨著業務發展,業務邏輯復雜、關聯方多,導致業務系統的代碼臃腫、難于做迭代或者維護,導致很多的問題,如:bug多、難于維護修復、每次需要評估改動服務接口影響的范圍,開發周期長等。為了解決這些問題,微服務架構應運而生,它將應用拆分成多個小服務,每個服務都是獨立、可單獨部署的,從而提高系統的可擴展性、可維護性和可靠性。

應對復雜業務場景
傳統的單體應用架構已經無法滿足快速變化的市場需求。微服務架構通過將業務拆分成多個小服務,每個服務專注于完成一個業務功能,從而降低了業務之間的耦合度,使得每個服務都可以獨立進行開發、測試、部署和擴展。這種靈活性使得微服務架構能夠更好地應對復雜業務場景,滿足快速變化的市場需求。

技術發展的推動
隨分布式系統、容器化技術、CI、CD的產生,讓微服務的開發、管理變得方便而高效

二、現有哪些微服務技術

前存在多種微服務技術,以下是一些常見的微服務技術,特別是在企業級開發中常用的:

Spring Cloud
Spring Cloud是Java領域微服務架構的王者。它提供了一套完整的微服務解決方案,包括服務發現、配置管理、智能路由、服務網關、負載均衡、熔斷器、分布式跟蹤等。Spring Cloud與Spring Boot的結合使用,可以非常快速地搭建起微服務架構。
Dubbo
Dubbo是阿里巴巴開源的一款高性能、輕量級的Java RPC框架。它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。Dubbo可以很好地處理服務之間的通信和治理問題。
Kubernetes
Kubernetes是一個開源的,用于管理云平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單并且高效(powerful),Kubernetes提供了應用部署、規劃、更新、維護的一種機制。
Nacos
Nacos是一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。它更適合于云原生架構中的服務治理、配置管理和服務注冊與發現。
Service Fabric
Service Fabric是微軟推出的一個微服務框架,用于構建和運行可伸縮且可靠的無服務器和容器化微服務。它提供了系統級的可靠性和性能,使開發人員能夠專注于實現業務邏輯

三、微服務有哪些特點

獨立性
每個微服務都是獨立的,可以獨立開發、測試、部署和擴展。

松耦合
微服務之間通過輕量級的通信機制(如API、消息隊列等)進行交互,降低了服務之間的耦合度。

自治性
每個微服務都可以獨立選擇技術棧、數據庫和部署方式。

容錯性
由于服務之間的松耦合,某個微服務的故障不會影響其他服務的正常運行
相比原有的

關于松耦合特性,原有的傳統服務的服務通信應該用到進程或者共享變量、如果需要很復雜的業務邏輯的情況下,這種就會造成資源的開銷大、代碼復雜性高的弊端;如果使用微服務的框架,例如RPC(HSF、Thrift)等,可以拆成簡單的api調用,并且本身服務和服務之間的體量就會小很多,我們可以很容易的實現業務的交織的調用過程,e.g. 訂單中心調用調度算法,調度算法調用地圖的計算邏輯,實現訂單的派單過程
上面的好處連帶的優勢就是開發新功能或者擴展已有的業務變得簡單,不需要整體的在一個大服務內執行應用發布,只需要變更關聯的api接口掛載的應用即可,減少了開發周期和成本,能夠做到快速迭代
獨立性的好處就是技術可以異構,不依賴于語言,前端的代碼也是一個服務,后端的代碼也是一個服務,借助現有的RPC框架,可以做到跨語言的調用,例如使用Thrift這個RPC框架

四、微服務的弊端

分布式復雜性:微服務架構是分布式系統,需要更多的測試和監控來確保服務之間的通信正常。一般會通過中間件消息隊列實現服務的通信和共享資源的分享,這就帶來了分布式領域下的數據同步和一致性的挑戰

服務劃分難度:如何合理地將系統拆分成多個微服務是一個挑戰。如果拆分的不對,會造成后續的很多反復、繁雜的工作挑戰

運維復雜度:隨著微服務數量的增加,運維的復雜度也會增加,拆分的越多越細,就需要一個人去維護更多的服務

漸進式的數據庫一致性 由于微服務的替換傳統服務不是一蹴而就的,很多時候偶都是同時存在新老系統的api和數據庫,如何維持新老系統的一致性就成了問題,所以在探索微服務的過程中,要做到數據同步鏈路的保障,需要更多的維護成本

五、過往經驗

使用情況

在過往的公司中,微服務架構被廣泛應用于大型、復雜的項目中。通過將項目拆分成多個小服務,降低了開發難度和復雜度,提高了開發效率和靈活性。同時,每個服務都可以獨立擴展,從而提高了整個系統的可擴展性。

拆分思路:縱向的技術通用面和橫向的業務角度,技術通用可以將一些通用api、算法抽離出來,也可以從架構的角度將業務分為業務應用層、服務計算層、服務存儲層等;橫向的角度可以根據業務系統拆分為運單中心、訂單中心、運營中心、算法中心等

技術特點

在過往公司的實踐中,微服務架構的技術特點主要體現在以下幾個方面

技術棧的多樣性:每個微服務都可以獨立選擇技術棧、數據庫和部署方式。這帶來了技術的靈活性,但也增加了技術的復雜度。
通信機制的輕量級:微服務之間通過輕量級的通信機制(如API、消息隊列等)進行交互,降低了服務之間的耦合度。
獨立開發和部署:每個微服務都可以獨立開發、測試、部署和擴展,提高了開發效率和靈活性。

總結

微服務架構是一種先進的架構模式,適用于大型、復雜的項目。它帶來了很多好處,如降低開發難度和復雜度、提高系統的可擴展性和容錯性等。但是,它也帶來了一些挑戰和復雜度,如服務劃分難度、分布式復雜性、運維復雜度等。因此,在使用微服務架構時,需要仔細權衡其優缺點,并結合項目的實際情況進行選擇。同時,需要不斷學習和探索新的技術和方法,以應對微服務架構帶來的挑戰和復雜度。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13669.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13669.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13669.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

碰撞器觸發事件(OnTriggerEnter/OnTriggerStay/OnTriggerExit)

碰撞器觸發事件(OnTriggerEnter/OnTriggerStay/OnTriggerExit)簡介 在Unity中,觸發器事件是當一個游戲對象進入、停留或離開另一個游戲對象的觸發器碰撞器時發生的事件。這些事件分別是: OnTriggerEnter: 當其他Collider首次進入觸發器時調用…

服務端Web資源緩存

1.前言 雖然客戶端緩存效果很好,但它有一個核心問題:要在本地提供資源,必須先將其存儲在緩存中。因此,每個客戶端都需要其緩存的資源。如果請求的資源需要大量計算,則無法擴展。服務器端緩存背后的理念是計算一次資源…

【CAN】libsocketcan庫詳解

1、簡介 libsocketcan是用戶空間通過SocketCAN操作CAN的接口。 源碼:https://github.com/linux-can/libsocketcan 2、API詳解 2.1 can_do_restart 1)說明:重啟CAN接口 2)原型: int can_do_restart(const char *name);3)參數: name:CAN接口名,比如:can0、can1,…

繼續分析開發人員容易被騙的原因和防范措施

繼續分析開發人員容易被騙的原因和防范措施,可以深入探討一些具體的技術細節和實際操作建議,以更全面地理解和應對這一問題。 技術細節: 未加密的敏感數據傳輸: 原因:開發人員可能忽視了數據傳輸過程中的安全性&#…

第10章 軟件架構的演化和維護

軟件架構周期:初始設計、實際使用、修改完善(這就是演化)、退化棄用。 演化和維護的目的:為了使軟件能夠適應環境的變化而進行的糾錯性修改和完善性修改等,而且這個過程是一個不斷迭代的過程。 架構演化的重要性、演化過程、演化分類、演化…

Vary HTTP 標頭

1.前言 服務器端 Web 資源緩存的想法是在客戶端和上游之間設置一個組件來緩存先前計算的結果,以避免后者過載。根據您的基礎架構和要求,此組件可以是反向代理或 API 網關。HTTP 提供Cache-Control標頭來自定義緩存的不同方面,例如&#xff0…

Java——通過方法交換實參值

想寫一個方法來交換main函數中的兩個變量值,代碼如下: public class Test {public static void swap(int x,int y) {int tmp x;x y;y tmp;}public static void main(String[] args) {int a 10;int b 20;System.out.println("交換前&#xff1…

Autodesk Maya 2025軟件安裝教程(附軟件下載地址)

軟件簡介: 軟件【下載地址】獲取方式見文末。注:推薦使用,更貼合此安裝方法! Autodesk Maya 2025是一款領先的三維動畫設計軟件,界面直觀且功能豐富。它集成了全球領先的3D設計技術,提供了多種創意功能&a…

深度學習 --- stanford cs231 編程作業(如何在chrome中安裝colab)

stanford cs231 編程作業(如何開始你的colab編程) 斯坦福231n的所有作業都要求在colab里面做,colab可以為你提供免費的云計算。實際上在他的官網中也有關于如何安裝colab的詳細說明視頻。 https://youtu.be/DsGd2e9JNH4https://youtu.be/DsGd2e9JNH4 我…

2831.找出最長等值子數組(哈希表+滑動窗口法)

給你一個下標從 0 開始的整數數組 nums 和一個整數 k 。 如果子數組中所有元素都相等,則認為子數組是一個 等值子數組 。注意,空數組是 等值子數組 。 從 nums 中刪除最多 k 個元素后,返回可能的最長等值子數組的長度。 子數組 是數組中一個連…

電路筆記 :元器件焊接相關 酒精燈松香浴加熱取芯片

記錄一下只使用松香和小火源加熱(如酒精燈、小蠟燭)從電路板中取芯片。 過程 多放松香 讓松香淹沒芯片盡量均勻加熱,等芯片旁邊的松香開始從芯片里冒細小的“泡泡”,就差不多了 注:這種方法也可以用于焊接&#xff0…

Qt QString詳細用法

一.基礎用法 1.創建QString對象 QString str1 "Hello, World!"; QString str2("This is a QString object."); //一個是等號的重載,一個是拷貝構造,本質上是等價的 2.獲取字符串長度 int length str1.length(); // 返回字符串…

大模型落地競逐,云計算大廠“百舸爭流”

作者 | 辰紋 來源 | 洞見新研社 從ChatGPT到Sora,從圖文到視頻,從通用大模型到垂直大模型……經過了1年多時間的探索,大模型進入到以落地為先的第二階段。 行業的躁動與資本的狂熱相交匯,既造就了信仰派的腳踏實地,也…

7.從0做一個vue鍵盤組件

文章目錄 1. 從0做一個鍵盤組件1.1. 最終效果1.2. 分析1.3. 實現1.4. 如何引用 1. 從0做一個鍵盤組件 首先是why的問題:為什么需要做鍵盤組件? 我們目前可知的場景: 在新增賬單的時候,需要用到鍵盤在比如從賬單列表頁&#xff…

保護共享資源的方法(互斥鎖)

我最近開了幾個專欄,誠信互三! > |||《算法專欄》::刷題教程來自網站《代碼隨想錄》。||| > |||《C專欄》::記錄我學習C的經歷,看完你一定會有收獲。||| > |||《Linux專欄》&#xff1…

MagicAnimate: Temporally Consistent Human Image Animation using Diffusion Model

show lab NUS&bytedancehttps://github.com/magic-research/magic-animate 問題引入 輸入參考圖片 I r e f I_{ref} Iref?和動作序列 p 1 : N [ p 1 , ? , p N ] p^{1:N}[p_1,\cdots,p_N] p1:N[p1?,?,pN?],其中 N N N表示的是幀數,輸出的是 …

探索iOS中的KVC

目錄 前言 1.iOS中的KVC(鍵值編碼) 1. 什么是KVC? 2. 使用KVC 1.設置屬性值 2.獲取屬性值 3. KVC的高級用法 1.訪問私有屬性 2.訪問集合屬性 4. KVC的安全性 5. KVC原理 1. 查找順序 2. 設置值 6.參考文章 前言 這篇文章主要是…

UbuntuLinux系統下安裝wrk和使用

前言 wrk是一個用c語言寫的壓力測試工具,非常有用,但是ubuntu的軟件倉庫沒有收錄wrk,需要我們自己進行編譯和安裝,最近在學習一些性能測試、性能優化方面的知識,需要使用到這個強有力的工具,故此記錄安裝和…

Windows安全應急--在應急響應中需要知道的信息

在網絡安全事件發生后,一般是要去客戶現場排查問題的, 那么要想解決問題,信息的完整性決定了這次任務的成敗。。 1. 你需要知道的: 先讓客戶梳理一遍事情的起因經過結果 詢問客戶需要解決的問題 了解客戶的網絡環境&#xff08…

【ARM 嵌入式 C 入門及漸進 6.2 -- ARMv8 C 內嵌匯編讀系統寄存器的函數實現】

請閱讀【嵌入式開發學習必備專欄】 文章目錄 ARMv8 C 內嵌匯編讀系統寄存器 ARMv8 C 內嵌匯編讀系統寄存器 要在ARMv8架構中通過C代碼和內嵌匯編來讀取系統寄存器s3_0_c15_c5_5的值,并將其返回,可以按照以下方式實現system_read_reg函數: #…