漫畫:SOA中怎樣確定服務的粒度?

来源:https://www.cnblogs.com/xiexj/archive/2018/07/02/9252372.html
-Advertisement-
Play Games

一般系統的服務劃分有以下兩種維度: 按模塊劃分 這個比較適用於偏業務的場景:複雜的系統,最好先按業務領域橫向拆分成可獨立部署的子系統,每個子系統內部再按技術縱向拆分成不同的子模塊。 按角色劃分 這個比較適用於基礎服務類的場景:一個大系統,每個服務看起來關聯都很緊密,存在相互的調用關係。這時候可以考慮 ...



一般系統的服務劃分有以下兩種維度:

按模塊劃分

這個比較適用於偏業務的場景:複雜的系統,最好先按業務領域橫向拆分成可獨立部署的子系統,每個子系統內部再按技術縱向拆分成不同的子模塊。

按角色劃分

這個比較適用於基礎服務類的場景:一個大系統,每個服務看起來關聯都很緊密,存在相互的調用關係。這時候可以考慮它們各自承擔的角色和使命。

 

核心原則

單一職責:能不能用一句話說清楚這個服務的職責?非要分成兩句話,那就分成兩個服務。

在核心原則的基礎上,符合下麵的原則是一個比較好的實踐:

鬆散耦合原則

可復用性原則

服務自治原則

可發現性原則

可組合性原則

    服務自治、可發現性相對難理解一些,展開一下。

服務自治

當一個服務的邏輯單元由自身的領域邊界內所控制,不受其他外界條件的影響(外界條件帶有不可預測性),且運行環境是自身可控,完全自給自足,我們認為這個服務是自治的。

自治的服務自身可以很好的對穩定性做把控。

可發現性

因為服務是被用來複用的,如果在服務設計過程中,並不能發現一個已經存在的服務,而需要重新建立多個同樣邏輯元旦的服務,會極大增加管理和維護成本。

服務發現主要有兩種:

1.設計時發現(人)

服務設計人員和研發人員在研發一個新的服務時,可以通過搜索服務倉庫的元數據信息,查看服務倉庫是否已存在此服務,沒有才重新開發。

2.運行時發現(程式)

服務的消費者可以通過服務註冊中心查到特定服務的介面調用地址調用。

 

要根據系統的規模和人員配置情況。

比如如果系統一個系統的日活躍用戶在萬級和千萬級,粒度肯定是不一樣的。同樣,基於系統規模帶來的產出,那麼開發人員數量也會相應不同。比較好的一個實踐是一個人獨立負責一個到兩個服務。多人維護一個服務,交互成本非常高。

 

關註靜兒公眾號,不定期漫畫技術推送~

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、String類 想要瞭解一個類,最好的辦法就是看這個類的實現源代碼,來看一下String類的源碼: public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** ...
  • 閱讀目錄: 1. 網關請求流程 2. Eureka 服務治理 3. Config 配置中心 4. Hystrix 監控 5. 服務調用鏈路 6. ELK 日誌鏈路 7. 統一格式返回 "Java 微服務框架選型(Dubbo 和 Spring Cloud?)" 目前公司使用的 Spring Cloud ...
  • 現在假設有如下構建的游戲伺服器,游戲伺服器有一組gate伺服器,用來驗證客戶端,並且通過gate伺服器來與一組主伺服器,然後主伺服器與關係伺服器進行通信。 其中relation伺服器用來處理各種關係,例如好友關係,師徒關係等。現在有一個玩家A添加玩家B為好友,那麼客戶端發送給服務端的消息流程如上所示 ...
  • 學習更多設計模式請參考:入門設計模式之彙總篇 備忘錄模式:在不破壞封裝的條件下,將一個對象的狀態捕捉住,併在外部化存儲起來,從而可以在將來合適的時候把這個對象還原到存儲時的狀態。 通常的備忘錄模式包含3個角色: 發起人角色:這個角色就是需要被保存狀態的角色 備忘錄角色:負責保存發起人角色的狀態的對象 ...
  • JDK的動態代理是必須掌握的,動態代理的好處就不用我多說了吧 :) 小弟最近在研究mybatis的源碼實現,就開始瞭解mybatis的Mapper代理機制,為什麼介面不用實現類也能代理? 好了,廢話不多說!!! 上代碼 下麵是測試結果: JDK的動態代理要有實現一個InvocationHandler ...
  • 學習更多設計模式請參考:入門設計模式之彙總篇 命令模式:把命令包裝成對象,將命令發送者和命令接受者的耦合降低 舉個例子,皇帝發聖旨招一個大臣入宮。 這裡的皇帝就是客戶端,而聖旨就是命令,大臣就是命令接受者。那麼命令發送者通常都是某個公公對吧。這裡就是一個命令模式的實踐,為什麼這樣說呢?平常我們寫代碼 ...
  • 學習更多設計模式請參考:入門設計模式之彙總篇 責任鏈模式:很多對象由每一個對象對其下家的引用而連接起來行成的一條鏈。 其實責任鏈模式一直在我們的身邊。某一天,董事長有個想法,他吩咐給了經理,經理吩咐給了組長,組長分配給了你我。這時候我們發現,我們沒有下級了呀,咋辦,那就乾唄。 上方這個任務分配的過程 ...
  • Swagger作為WebAPI的文檔工具,廣為人知,Swagger對asp.net core的支持也幾近完美,這篇博文不是對asp.net core中使用Swagger作介紹,因為社區博客作了詳細說明。 今天主要說一下Swagger在Ocelot網關許可權驗證模式下的訪問,以及Swagger請求應答的... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...