在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從分層架構到微服務架構介紹(四)

jf_78858299 ? 來源:元閏子的邀請 ? 作者:元閏子 ? 2023-05-10 17:00 ? 次閱讀

前言

微內核架構 (Microkernel Architecture),也被稱為 插件式架構 (plug-in architecture),作為一個在幾十年前就被創(chuàng)建出來的架構模式,它如今仍然被廣泛應用在各個領域中。比如在Web瀏覽器領域,谷歌的Chrome瀏覽器之所以被認為功能強大,一個很重要的原因是它有著豐富的插件類型;在開發(fā)工具領域,微軟的VS Code初始安裝后還只是個簡單的文本編輯器,但用戶可以安裝各種插件,從而讓它搖身一變成為功能強大的IDE。

Chrome和VS Code都是微內核架構的典型應用例子,它們提供一個具備最基礎能力的核心系統(tǒng),并定義好插件的開發(fā)接口。至于需要開發(fā)或安裝哪種類型的插件,則完全由普通開發(fā)者和用戶決定,這樣的設計讓系統(tǒng) 具備了極強的可定制化和可擴展能力

架構視圖

微內核架構由以下兩部分組成: 核心系統(tǒng) (core system)和 插件 (plug-in component), 將應用系統(tǒng)的業(yè)務邏輯拆分成核心系統(tǒng)和插件,能夠提供很好的可擴展性和靈活性,極大地方便了后續(xù)需求的新增和修改

圖片

微內核架構架構視圖

核心系統(tǒng)

核心系統(tǒng)通常只需提供能夠支撐整個系統(tǒng)正常運行的基本功能 ,比如前文所舉的VS Code例子,用戶初始安裝的是VS Code的核心系統(tǒng),它只是一個提供了打開文件、編輯文件內容和保存文件等基本功能的文本編輯器,其他的擴展功能(如語法檢查)都是通過安裝插件集成的。 將復雜的業(yè)務邏輯從核心系統(tǒng)中剝離出來,并通過插件實現(xiàn),能夠提升系統(tǒng)的可擴展性和可維護性 。同時,因為復雜的功能都成了互不干擾的插件,系統(tǒng)的可測性也得到了提高。

考慮現(xiàn)在需要實現(xiàn)一個電子設備回收系統(tǒng),在回收之前,每種型號的手機設備的回收流程都不一樣,那么我們可以這樣去實現(xiàn):

public void assessDevice(String deviceID) {
   if (deviceID.equals("iPhone6s")) {
      assessiPhone6s();
   } else if (deviceID.equals("iPad1"))
      assessiPad1();
   } else if (deviceID.equals("Galaxy5"))
      assessGalaxy5();
   } else ...
      ...
   }
}

如果我們把assessDevice看成是核心系統(tǒng),那么后面每次新增一個型號的手機,都需要新增一個if分支,也即對核心系統(tǒng)進行了改動。這樣的設計會導致核心系統(tǒng)非常地脆弱,正所謂 改的越多,出問題的概率也越大

比起這種將所有的可定制業(yè)務邏輯放在核心系統(tǒng)上的設計,更好的應該是將它們實現(xiàn)為插件的形式,這樣不僅每個設備回收邏輯都解耦了,還提供了強大的可擴展性:添加一個新的回收設備類型,只需新增一種插件即可,核心系統(tǒng)無需變動。

public void assessDevice(String deviceID) {
  String plugin = pluginRegistry.get(deviceID);
 DevicePlugin devicePlugin =
  (DevicePlugin)constructor.newInstance();
 DevicePlugin.assess();
}

微內核架構在實現(xiàn)時通常都結合了其他架構模式 ,這主要體現(xiàn)在核心系統(tǒng)的設計上,比如根據具體的業(yè)務特點,我們可以將核心系統(tǒng)設計成technically partitioned的分層架構,或者是domain partitioned的模塊化架構。

圖片

核心系統(tǒng)的架構設計

插件

插件就是一些包含了定制化業(yè)務邏輯、擴展功能、附加功能的獨立組件,用于擴充核心系統(tǒng)的功能 。插件之間是獨立的,插件與核心系統(tǒng)之間則一般是“點對點”通信:核心系統(tǒng)通過調用插件提供的接口(比如插件類的方法)使用擴展功能。

插件可以劃分為編譯時插件和運行時插件兩種類型,前者每次變更都需要重新構建和部署整個系統(tǒng),但實現(xiàn)較為簡單;后者則可以在系統(tǒng)運行時進行插件的新增和刪除操作,相對地,實現(xiàn)也較為復雜。

編譯時插件

在編譯時插件中,插件通常以package或namespace實現(xiàn),比如在package中可以以這樣的命名規(guī)則來區(qū)分插件:app.plug-in..

圖片

編譯時插件實現(xiàn)

運行時插件

運行時插件中插件的實現(xiàn)通常是動態(tài)庫的形式,比如.jar.so.dll文件。在上述的設備回收系統(tǒng)的例子中,每種型號的手機設備回收邏輯包含在一個獨立的.jar文件中:

圖片

運行時插件實現(xiàn)

遠端插件

當然,插件和核心系統(tǒng)并非只能通過本地接口調用進行通信,還可以采用REST/消息隊列/RPC等方式,這種場景下,插件就變成了一個獨立部署的服務。遠程插件具備運行時插件的特點,而且能夠提供更好的scalability: 插件和核心系統(tǒng)甚至都不必使用相同的技術棧實現(xiàn),只需遵守既定的REST接口即可

圖片

遠端插件

為了提升系統(tǒng)處理請求的responsiveness,我們還可以將核心系統(tǒng)調用插件的過程實現(xiàn)為異步通信 。以前文的電子設備回收系統(tǒng)為例,在異步通信的架構下,系統(tǒng)通過一個線程觸發(fā)插件啟動對某個設備的回收流程。之后,該線程無需一直等待回收結束,它可以去繼續(xù)回收別的設備。當設備回收結束后,插件會通過異步隊列告知核心系統(tǒng)。這樣的異步設計可以減少無謂的等待流程,明顯改善系統(tǒng)的responsiveness。

如果涉及到讀寫數(shù)據庫,為了能夠維持插件的獨立性,每個插件最好能夠擁有獨立的數(shù)據庫 。如果插件間有著無可避免的數(shù)據交互,則可以為核心系統(tǒng)配置一個中心數(shù)據庫,并通過它來進行數(shù)據中轉。

圖片

插件的的獨立數(shù)據庫

插件中心

核心系統(tǒng)在加載插件前,必須得知道 當前有哪些可用的插件 ,以及 這些插件在哪里可以獲取 。這要求系統(tǒng)有一個地方去管理插件,這就是 插件中心 (plug-in registry)的功能。插件中心類似于服務化架構中服務注冊中心的作用,它保存了所有插件的基本信息,包括名稱、數(shù)據契約、通信協(xié)議、加載地址等。

我們可以簡單地將插件中心實現(xiàn)為一個本地的map表,其中key可以是插件名稱,value為獲取插件的地址:

Map<String, String> registry = new HashMap<String, String>();
static {
  //point-to-point access example
  registry.put("iPhone6s", "Iphone6sPlugin");

  //messaging example
  registry.put("iPhone6s", "iphone6s.queue");

  //restful example
  registry.put("iPhone6s", "https://atlas:443/assess/iphone6s");
}

為了實現(xiàn)一些較為復雜的功能,如插件上下線通知等,我們還可以借助Apache ZooKeeper、ETCD這類的分布式協(xié)同系統(tǒng)實現(xiàn) 遠程插件中心

通信契約

通信契約定義了插件與核心系統(tǒng)之間的通信方式、交互行為和數(shù)據格式。通信方式可以是本地接口調用、REST、RPC、消息隊列等;交互行為則可以理解為插件對核心系統(tǒng)提供的接口,比如本地的函數(shù)/方法、REST的URI等;對本地插件而言,數(shù)據格式通常是一個類/結構體,對遠程插件而言,常用的數(shù)據格式有JSON、XML、ProtoBuf等。

考慮電子設備回收系統(tǒng)的例子,系統(tǒng)有著如下定義的通信契約:

public interface AssessmentPlugin {
  // 回收設備流程
 public AssessmentOutput assess();
  // 將該插件注冊到插件中心
 public String register();
  // 從插件中心去注冊
 public String deregister();
}

public class AssessmentOutput {
  // 回收報告,僅僅用于展示結構給用戶看,核心系統(tǒng)無需了解該格式
 public String assessmentReport;
  // 用于標識該設備是否可以在二手市場上重新售賣
 public Boolean resell;
  // 表示該設備的價值
 public Double value;
  // 表示推薦的售賣價格
 public Double resellPrice;
}

從該契約定義中可以看出,通信方式為本地接口調用(AssessmentPlugin接口);它有著3個交互行為,assess()為回收設備流程、register()表示將該插件注冊到插件中心、deregister表示去注冊;數(shù)據格式則是AssessmentOutput類,它定義了回收流程的結果。

架構評分

圖片

微內核架構的架構評分

和之前介紹的分層架構、管道架構一樣,微內核架構同樣屬于單體架構,因此Simplicity和Overall cost是該架構模式主要優(yōu)勢;而Elasticity、Fault tolerance和Scalability是主要劣勢。

另外,微內核架構的Testability、Deployability、Reliability、Modularity之所以能夠取得3顆星,得益于不同的功能能夠被拆分至獨立的插件上,特別地,運行時插件的增刪無需重新部署系統(tǒng)。 這使得系統(tǒng)能夠快速響應需求變更,具備很高的擴展性 。比如對于前面的電子設備回收系統(tǒng),如果需要新增一種新的電子設備回收流程,只需新增一個插件即可;如果某種設備不再需要回收,則去除對應插件即可。

微內核架構比較特別的一點是,它既可以是technically partitioned,也可以是domain partitioned,這取決于核心系統(tǒng)的實現(xiàn)方式,前文也有介紹。

總結

Robert C.Martin曾經說過, 軟件開發(fā)技術發(fā)展的歷史就是一個如何想方設法方便地增加插件,從而構建一個可擴展、可維護的系統(tǒng)架構的故事 。在敏捷開發(fā)的潮流之下,需求的變更如同家常便飯,系統(tǒng)不應該因為某一部分發(fā)生變更從而導致其他不相關的部分出現(xiàn)問題。將系統(tǒng)設計為微內核架構,就等于構建起了一面變更無法逾越的防火墻,插件發(fā)生的變更就不會影響系統(tǒng)的核心業(yè)務邏輯。

微內核架構的設計思想,能夠極大提升系統(tǒng)的可擴展性和健壯性 ,在其他的一些軟件方法論里,我們也隱約能看到它的影子。比如在領域驅動設計中,領域層就相當于核心系統(tǒng),它定義了系統(tǒng)的核心業(yè)務邏輯;基礎設施層則相當于插件,切換不同的基礎設施并不會影響系統(tǒng)的業(yè)務邏輯,這得益于基礎設施層依賴倒置的設計原則。

當然,作為微內核架構也有著一些缺點,它天然具備了單體架構的一些劣勢,比如核心系統(tǒng)作為架構的中心節(jié)點并不具備Fault tolerance能力。因此,該架構模式往往被廣泛應用于一些著重提供很強的用戶定制化功能的小型產品,如VS Code等,它們對系統(tǒng)的Elasticity、Fault tolerance和Scalability并沒有很高的要求。

每種架構模式都有其合適的應用場景,只有熟悉常用的幾種架構模式,才能設計出更好的軟件系統(tǒng)。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Web
    Web
    +關注

    關注

    2

    文章

    1283

    瀏覽量

    70848
  • IDE
    IDE
    +關注

    關注

    0

    文章

    347

    瀏覽量

    47502
  • 微內核架構
    +關注

    關注

    0

    文章

    5

    瀏覽量

    6589
  • 瀏覽器
    +關注

    關注

    1

    文章

    1040

    瀏覽量

    36100
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    微服務架構幾種典型的基礎框架,你了解嗎?

    SpringCloud、Dubbo、Dropwizard、Akka等是常見微服務框架。SpringCloud基于SpringBoot,生態(tài)豐富;Dropwizard輕量且繼承SpringBoot優(yōu)點
    的頭像 發(fā)表于 03-04 11:05 ?335次閱讀

    揭秘云計算架構分層奧秘

    的重要基石。那么,云計算架構究竟是如何構建的呢?今天,我們帶您揭秘云計算架構分層奧秘——邊緣層、IaaS、PaaS、SaaS。
    的頭像 發(fā)表于 02-26 17:41 ?392次閱讀

    微服務容器化部署好處多嗎?

    微服務容器化部署好處有很多,包括環(huán)境一致性、資源高效利用、快速部署與啟動、隔離性與安全性、版本控制與回滾以及持續(xù)集成與持續(xù)部署。這些優(yōu)勢助力應用可靠穩(wěn)定運行,提升開發(fā)運維效率,是現(xiàn)代軟件架構的優(yōu)質選擇。UU云小編認為微服務容器化
    的頭像 發(fā)表于 01-17 10:22 ?288次閱讀

    容器化能替代微服務嗎?兩者有何區(qū)別

    和可維護性。而容器化技術則是一種輕量級的虛擬化技術,它將應用程序及其依賴項打包一個獨立的容器中,使其能夠在不同的環(huán)境中一致地運行。雖然容器化技術為微服務提供了一個理想的運行環(huán)境,但微服務架構
    的頭像 發(fā)表于 01-13 10:40 ?356次閱讀

    探討篇(三):代碼復用的智慧 - 提升架構的效率與可維護性

    作者:京東物流 馮志文 前兩篇服務粒度和服務內的分層架構角度探討,本文繼續(xù)
    的頭像 發(fā)表于 12-27 15:58 ?565次閱讀
    探討篇(三):代碼復用的智慧 - 提升<b class='flag-5'>架構</b>的效率與可維護性

    寶藏級微服務架構工具合集

    大量數(shù)據流。這些工具各有特色,可根據具體需求和場景選擇合適的來構建和管理微服務架構。以下是UU云小編整理的幾個熱門的微服務架構工具及其概括性介紹
    的頭像 發(fā)表于 12-21 16:33 ?559次閱讀

    k8s微服務架構就是云原生嗎?兩者是什么關系

    k8s微服務架構就是云原生嗎?K8s微服務架構并不等同于云原生,但兩者之間存在密切的聯(lián)系。Kubernetes在云原生架構中扮演著核心組件的
    的頭像 發(fā)表于 11-25 09:39 ?464次閱讀

    SSR與微服務架構的結合應用

    隨著互聯(lián)網技術的快速發(fā)展,前端技術棧不斷更新迭代,后端架構也經歷了單體應用到微服務的變革。在這個過程中,服務端渲染(SSR)作為一種提升頁面加載速度和SEO性能的技術,與
    的頭像 發(fā)表于 11-18 11:34 ?748次閱讀

    GPU服務器AI網絡架構設計

    眾所周知,在大型模型訓練中,通常采用每臺服務器配備多個GPU的集群架構。在上一篇文章《高性能GPU服務器AI網絡架構(上篇)》中,我們對GPU網絡中的核心術語與概念進行了詳盡
    的頭像 發(fā)表于 11-05 16:20 ?1082次閱讀
    GPU<b class='flag-5'>服務</b>器AI網絡<b class='flag-5'>架構</b>設計

    架構與設計 常見微服務分層架構的區(qū)別和落地實踐

    架構風格越傾向于清晰的職責定位,且讓領域模型成為架構的核心。 基于這些架構風格,在軟件架構設計過程中又有非常多的架構
    的頭像 發(fā)表于 10-22 15:34 ?579次閱讀
    <b class='flag-5'>架構</b>與設計 常見<b class='flag-5'>微服務</b><b class='flag-5'>分層</b><b class='flag-5'>架構</b>的區(qū)別和落地實踐

    微服務架構與容器云的關系與區(qū)別

    微服務架構與容器云密切相關又有所區(qū)別。微服務將大型應用拆分為小型、獨立的服務,而容器云基于容器技術,為微服務提供構建、發(fā)布和運行的平臺。區(qū)別
    的頭像 發(fā)表于 10-21 17:28 ?494次閱讀

    入門級攻略:如何容器化部署微服務

    第一步理解容器化基礎,第二步創(chuàng)建Dockerfile,第三步構建推送鏡像,第步部署微服務,第五步管理微服務、第六步優(yōu)化更新。容器化部署微服務是現(xiàn)代軟件開發(fā)中的一種高效方法,可提供良好
    的頭像 發(fā)表于 10-09 10:08 ?339次閱讀

    服務器而言,ARM架構與X86架構有什么區(qū)別?各自的優(yōu)勢在哪里?

    ,x86 架構服務器在市場占主導,有強大處理能力和廣泛軟件兼容性,廣泛用于企業(yè)數(shù)據中心。ARM 架構服務器近年崛起,憑借低功耗、高效能優(yōu)勢在云計算和
    的頭像 發(fā)表于 09-09 14:05 ?2778次閱讀

    Proxyless的多活流量和微服務治理

    1. 引言 1.1 項目的背景及意義 在當今的微服務架構中,應用程序通常被拆分成多個獨立的服務,這些服務通過網絡進行通信。這種架構的優(yōu)勢在于
    的頭像 發(fā)表于 08-28 16:54 ?1921次閱讀
    Proxyless的多活流量和<b class='flag-5'>微服務</b>治理

    ai服務器是什么架構類型

    AI服務器,即人工智能服務器,是專門為人工智能應用設計的高性能計算服務器。AI服務器的架構類型有很多種,以下是一些常見的
    的頭像 發(fā)表于 07-02 09:51 ?1780次閱讀
    主站蜘蛛池模板: 最新色站| 丁香六月婷婷综合 | 激情综合网五月婷婷 | 可以看黄色的网站 | 精品视频日本 | 一级女人毛片人一女人 | 都市激情亚洲综合 | 综合久色 | 亚洲婷婷在线视频 | 香蕉久久精品 | 日日干夜夜骑 | 天天综合天天做天天综合 | 天天干天天要 | 免费观看黄网站 | 丰满年轻岳欲乱中文字幕 | 天天操电影 | 亚洲午夜日韩高清一区 | 一级a性色生活片毛片 | 亚洲伊人久久网 | 6080国产午夜精品 | 亚洲аv电影天堂网 | 国产免费好大好硬视频 | 欧美综合视频 | 国产在线干 | 99久久综合精品免费 | 成 人 黄 色视频免费播放 | 日产国产精品亚洲系列 | 久草视频一区 | 九九热在线视频观看 | 久热精品在线视频 | 99亚洲精品卡2卡三卡4卡2卡 | 天天草天天 | 色骚网| 天天躁夜夜躁狠狠躁 | 日本三级带日本三级带黄首页 | 色婷婷99综合久久久精品 | 日韩一区二区视频在线观看 | 国产亚洲精品成人a在线 | 日本黄视频在线播放 | 四虎hu | 一级毛片免费全部播放完整 |