j2ee核心模式_Operator和Sidecar正在成為軟件交付新模式

eabca1b54633f7ccec84f9f92a3c4db1.png

現如今的開發人員希望可以開發出具備彈性和可擴展的分布式系統。該系統受益于軟件復用和開源模型創新,針對安全性問題能夠輕易完成補丁更新并進行低風險的升級。該系統不可能通過帶有各種嵌入式語言庫的應用程序框架來實現。最近,一篇關于“多運行時微服務體系結構”的文章,其中探討了分布式系統的需求,例如生命周期管理,高級網絡,資源綁定,狀態抽象以及這些抽象概念多年來的變化。

在以Kubernetes為中心的分布式系統的發展過程中,形成了以Kubernetes Operators和sidecar作為分布式系統交付的主要創新機制。

基于Kubernetes構建的軟件應用,其架構的發展正朝著Kubernetes Operators和sidecar模型發展。Kubernetes Operators和sidecar可能會成為主流的軟件分發和消費方式,在極端情況下甚至會像我們過去那樣取代軟件庫和框架。Sidecar模型允許以不同語言編寫的應用程序組合完成交付,而無需與運行時捆綁。

接下來讓我們看一下Kubernetes Operators和sidecar的一些具體示例,然后我們將探索這種新的模型如何影響我們后續的開發模式。

一、智能化進程外延

在Kubernetes中,sidecar是通過在單個Pod中組織多個容器而實現的核心設計模式之一。Pod功能可確保將容器與指定節點綁定,并通過網絡,文件系統或其他IPC來進行協作。并且Operator可以將sidecar與平臺的其余部分進行自動化管理和集成。sidecar代表了語言無關性,可擴展的數據平面,為定制應用程序提供了分布式原語。Operator代表了集中化管理和控制平面。

讓我們看一下基于Sidecar模型的一些流行的開源項目。

Envoy

Istio,Consul等服務網格使用諸如Envoy之類的透明服務代理為分布式系統提供增強型聯網功能。Envoy具備高安全性、高級流量管理、彈性、深度監控和跟蹤特性。
不僅如此,它支持越來越多的七層協議產品,例如Redis,MongoDB,MySQL和Kafka。它增加了響應緩存功能,甚至還支持WebAssembly,這些功能將支持各種自定義插件。Envoy是透明服務代理如何將高級網絡功能添加到分布式系統而不將其涵蓋在分布式應用程序組件的運行時的一個典型示例。

Skupper

除了典型的服務網格外,還有一些項目(如Skupper)可通過外部代理透傳應用程序網絡流量。Skupper通過7層虛擬網絡解決了多集群Kubernetes的通信難題,并提供了高級路由和連接功能。但是,它沒有將Skupper嵌入到業務服務運行時中,而是在每個Kubernetes名稱空間運行一個實例。

Cloudstate

Cloudstate是Sidecar模型的另一個示例,但這一次是為serverless開發模型提供有狀態抽象。它通過GRPC提供有狀態原語,用于EventSourcing,CQRS,Pub / Sub,鍵值存儲和其他用例。這次是serverless編程模型涵蓋Operators和sidecar的例子。

Dapr

Dapr是由Microsoft發起的一個相對較年輕的項目,它還是使用sidecar模型來提供以開發人員為中心的分布式系統原語。Dapr為狀態管理,服務調用和故障處理,資源綁定,發布/訂閱,分布式跟蹤等提供抽象。盡管Dapr和Service Mesh提供的功能有些重疊,但兩者在本質上卻大有不同。帶有Istio的Envoy被注入并在
服務中透明運行,其代表一種操作工具。另一方面,必須從應用程序運行時通過HTTP或gRPC顯式調用Dapr,它是面向開發人員的顯式工具。其是一個用于分布
式原語的庫,可作為sidecar進行分發和使用,該模型對于使用分布式功能的開發人員變得非常有吸引力。

Camel K

Apache Camel是一個成熟的集成庫。其子項目Camel K大量使用Operators模型來改善開發人員體驗并與Kubernetes平臺進行深度集成。雖然Camel K不依賴于sidecar,但通過其CLI和Operators,它能夠在不到一秒鐘的時間內重用同一應用程序容器并在遠程Kubernetes集群中執行任何本地修改代碼。

這些只是通過Operators和sidecar探索各種可能的一些探索項目。為了減少基于容器的分布式體系結構(如數據平面開發工具包(DPDK))引入的網絡開銷,需要做更多的工作,該工具包是一種用戶空間應用程序,它繞過Linux內核網絡堆棧直接訪問網絡硬件。Kubernetes項目正在進行一些工作,以創建具有更精細的生命周期保證的sidecar容器。有一些基于GraalVM實現的Java項目,例如Quarkus,它們減少了資源消耗和應用程序啟動時間,這些創新的嘗試使得sidecar更具有吸引力。并為更多此類項目的誕生提供了可能。

32937b90729aadccd817941436095f1b.png

看到圍繞更具體用例的項目,例如sidecar上的作業調度程序對長期運行的有狀態編排(例如,BPMN引擎)進行的處理。無狀態集成引擎,如Sidecar中的Enterprise Integration Patterns實現;sidecar中的數據抽象和數據聯合引擎;sidecar中的OAuth2 / OpenID代理;可擴展的數據庫連接池;可用于無人駕駛汽車中的serverless工作負載;應用程序網絡,如輔助工具等。但是,為什么軟件供應商和開發人員會切換到這種模式?

接下來介紹這種模式帶來的優越性。

二、模式的優勢

控制平面的運行時

作為軟件供應商,可能已經考慮過將軟件以API或基于SaaS的解決方案的方式提供給客戶,這是最快的軟件消費模型。根據軟件的性質,您可能還會將軟件作為工具庫或運行時框架進行產品分發,也許現在是時候考慮是否將其以operator方式提供。這種軟件的分發機制和體系結構具有一些可執行文件無法提供的特有的好處。

支持多語言

通過協議標準或者標準庫,為多數編程語言提供開發方案。使用sidecar方式運行并通過HTTP協議對外暴露接口的方式,而無需任何特定的運行時庫。即使采用gRPC和Protobuf協議用于處理低延遲和高性能的交互,生成此類客戶端也比在應用程序運行時中包含第三方自定義庫和實現某些接口來的容易得多。兼容性 顯式的sidecar體系結構(與透明的sidecar體系結構相反)是一種軟件消費方式,其作為一個獨立運行時,支持面向開發人員為中心的API。它作為一種通用特性,可以添加到任何應用程序中,無論是單體,微服務,還是基于函數的架構。在Kubernetes上創建輔助工具很簡單,并且在其他軟件編排平臺上也可行。容錯性

業務邏輯始終是內部定制和開發的。分布式系統原語是眾所周知的產品功能,并且已作為平臺功能或產品庫使用。您可能正在使用來自第三方的開源項目或商業軟件來實現消息傳遞,網絡彈性和監視。這些第三方軟件的發布周期、關鍵代碼的修復和CVE補丁同樣會影響您的軟件發布周期。當第三方庫作為單獨的運行時(sidecar)使用時,升級過程會更簡單,因為它位于API服務的后面,并且不與應用程序運行時解藕。軟件開發團隊與第三方軟件之間的解藕變得更易于管理。

控制平面

當某個功能作為庫使用時,它就包含在應用程序的運行時中,您有責任了解它的工作方式,其中包括配置、監控、性能和升級。語言的運行時(例如JVM)和運行時框架(例如Spring Boot或應用程序服務器)決定了如何處理配置、監視和升級方案。當軟件功能作為單獨的運行時使用(例如,sidecar或獨立容器)時,它將以Kubernetes operator的形式提供其控制平面。由于控制平面了解其管理的軟件并具備必要的智能化管理特性,否則它將作為文檔和最佳實踐進行分發。此外,運營商還與Kubernetes進行了深度集成,提供了平臺集成和operator開箱即用的奇妙組合。operator由同一開發人員創建,他們了解容器化功能的內部結構,并且知道如何最佳地操作。operator是容器中的SRE,隨著更多operator及其應用市場的興起,operator的數量及其功能正在穩步增長。

三、未來軟件發行

以sidecar方式分發軟件并附帶管理平面

假設您是Java框架的軟件提供商,我們可以以Maven配置方式進行分發。當然更進一步,我們可以直接以容器鏡像方式分發。無論采用何種方式,在當今的云原生世界中,都未達到盡善盡美的地步。用戶仍然需要知道如何在零停機狀態下對應用程序程序進行熱更新,同時需要知道應該備份的內容以及如何配置其監控并設置告警閾值。他們必須知道如何檢測復雜故障并解決。他們必須知道如何根據當前的負載配置文件來調整應用程序。

在處理上述類似的場景時,Kubernetes以operator方式提供管理平面的方案將是最優解。operator包含應用程序和以關聯業務特性的配置方式來以管理工作負載的組件。

Sidecars和operators正在成為主流的軟件分發和消費方式,在某些情況下甚至會像我們過去那樣取代軟件庫和框架。

假設您提供的軟件庫作為依賴項包含在使用者應用程序中。可能是上面描述的后端框架的客戶端庫。例如,如果它是在Java中,那么您可能已經在J2EE服務器上運行,前提是Spring啟動程序、構建程序、工廠和其他實現都隱藏在Java接口后面,這樣你甚至可以把它移植到golang。

有了Kubernetes的operator和sidecars之后,所有這些都對消費者透明。工廠類被operator取代,唯一的配置接口是自定義資源的YAML文件。然后,operator負責配置軟件,以便用戶可以將其作為一個顯式的sidecar來使用。在所有情況下,您的應用程序都可以通過遠程API調用,并與平臺功能甚至其他依賴的operator完全集成。

通過遠程API而不是嵌入式庫使用的軟件

換種角度來看,sidecar的作用類似于OOP中繼承原則的組合,但是在多語言環境中。通過組合來自不同進程的功能,而不是將它們作為依賴項包含在單個應用程序中,這是一種組織應用程序功能的不同方式。當您將軟件用作庫時,可以實例化一個類,并通過傳遞一些值來調用其方法。當您將其用作進程外功能時,您將訪問本地進程。在此模型中,方法被API取代,進程內方法被HTTP或gRPC調用所取代,并使用CloudEvents之類的通信標準。這是從應用程序服務器到Kubernetes的分布式運行時的轉變。這是從特定語言的界面到遠程API的轉變。從內存調用到HTTP,從值對象到CloudEvents,等等。

這要求軟件提供商分發容器和控制器以對其進行管理。創建能夠在本地構建和調試多個運行時服務的IDE。用于代碼更新并配置控制平面以快速部署到Kubernetes的CLI。可以決定在自定義應用程序運行時中進行編譯的內容,可以從Sidecar輸出哪些能力以及從業務流程平臺獲得哪些功能。

f12a9ce953d99622af1dc75eb30762f4.png

從長遠來看,這將導致標準API的合并,這些標準API用于消耗sidecar中的通用能力。除了特定語言的標準和API,我們將使用多語種API。例如,除了Java數據庫連接(JDBC)API,Java緩存API(JCache),Java持久性API(JPA)之外,我們還將使用CloudEvents之類的基于HTTP的多語言API。以Sidecar為中心API,如用于消息傳遞,緩存,可靠的網絡,cron作業和計時器調度,資源綁定(其他API,協議的連接器),冪等性,SAGA等。所有這些功能都將隨表格中包含的管理層一起提供,甚至包含自助式用戶管理界面。operator是上述特性的關鍵推動力,因為它們將使分散的架構易于在Kubernetes上進行管控。operator的管理接口由CustomResourceDefinition定義,代表第三方資源面向公眾管理的API。

在交付速度和可操作性的驅動下,這是一種思想上的巨大轉變,其轉向了一種革命性的軟件分發和使用的方式。這是從單一運行時架構到多運行時應用程序架構的轉變。這與摩爾定律結束后硬件行業從單核平臺向多核平臺的轉變歷史。這一變化正在慢慢發生:我們已經統一采用標準化容器,我們已經基于Kubernetes確定了事實上的編排標準,隨著推出的sidecar,以及operator的廣泛應用,以及CloudEvents標準的深入人心,標準化的API和生態系統也會隨之出現。

參考資料

Operators及Sidecars成為軟件交付新模式

End

樂于輸出干貨的CloudNative相關技術公眾號:DCOS。

02bd1156d1de371629e2ce6fda2d90de.gif

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

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

相關文章

微信JS-SDK選擇相冊或拍照并上傳PHP實現

理解:微信上傳接口是拍照,或者選擇本地照片,上傳到微信的服務器,獲取到一個id,通過token與這個id獲取到圖片,保存到服務器即可。 效果 通過微信js接口,調用底層程序。 需要引入js文件&#xff0…

JMS-ActiveMQ學習-3 ActiveMQ與Spring集成

Spring下開發消息的發送和接收程序 點對點模式 一、創建生產者項目 1.創建maven項目 2.添加spring-jms、jms規范、activemq依賴 <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms&…

看libevent所遇到的英語生詞

libevent – an event notification library The libevent API &#xff08;libevent應用程序&#xff09;provides a mechanism&#xff08;機制&#xff09; to execute&#xff08;執行&#xff09; a callback function&#xff08;回調函數&#xff09; when a specific&a…

java中迭代器要導包嗎_java 中迭代器的使用方法詳解

java 中迭代器的使用方法詳解前言&#xff1a;迭代器模式將一個集合給封裝起來&#xff0c;主要是為用戶提供了一種遍歷其內部元素的方式。迭代器模式有兩個優點&#xff1a;①提供給用戶一個遍歷的方式&#xff0c;而沒有暴露其內部實現細節&#xff1b;②把元素之間游走的責任…

android socket 長連接_TCP/IP,http,socket,長連接,短連接

點擊上方藍色字體&#xff0c;選擇“標星公眾號”優質文章&#xff0c;第一時間送達上一篇&#xff1a;這300G的Java資料是我師傅當年給我的&#xff0c;免費分享給大家下一篇&#xff1a;這200G的Java實戰資料是我師傅當年教我的第二招作者 | ksfzhaohui來源 | my.oschina.net…

二、Python安裝擴展庫

第一步:推薦easy_install工具 下載地址:https://pypi.python.org/pypi/setuptools 下載"ez_setup.py"文件; 通過運行cmd命令找到ez_setup.py文件所在目錄,通過命令[python ez_setup.py]執行安裝easy_install 安裝成功截圖 第二步:安裝擴展酷 例如安裝"suds"…

ORACLE 10.2.01升級10.2.05 for windows 詳細文檔

最近要做一個數據庫的升級工作&#xff0c;提前在自己的PC機上練習了一下&#xff0c;這種文檔在網上很多&#xff0c;但是大多都是使用命令編輯腳本&#xff0c;其實數據庫還有一個DBUA的升級工具可以使用&#xff0c;使升級工作方便了很多。 OS環境&#xff1a;windows XP 32…

php 導出mysql 結構_導出結構和數據(如phpmyadmin)

在這里,您可以找到一個全面的解決方案來轉儲MySQL結構和數據,比如在PMA中(不使用exec、passthru等):它是Dszymczuk項目的一個分支,有我的增強功能。用法很簡單//MySQL connection parameters$dbhost localhost;$dbuser dbuser;$dbpsw pass;$dbname dbname;//Connects to my…

tableViewCell的操作

在iOS的開發過程中&#xff0c;tableView的使用永遠都是最常用的控件。今天學習了一下tableViewCell的操作。代碼并不是很復雜&#xff0c;如果有OC開發經驗的人&#xff0c;應該很容易看懂的。 class ViewController: UIViewController ,UITableViewDelegate, UITableViewData…

stm32正交編碼器 原理圖_惡劣環境下應用的電感式增量編碼器和絕對編碼器

編碼器可分為兩種基本類型 - 增量編碼器和絕對編碼器。增量編碼器的顯著特征是它報告角度的變化。換句話說&#xff0c;當增量編碼器通電時&#xff0c;它不會報告其角位置&#xff0c;直到它具有測量的參考點。絕對編碼器明確地在比例或范圍內報告其位置。換句話說&#xff0c…

【SqlServer】Sqlserver中的DOS命令操作

輸入osql ?查看是否支持當前版本&#xff0c;如果是SQL Server 2005以上用Sqlcmd , 以下用Osql連接數據庫&#xff08;a&#xff09;Osql -S localhost -U username -P password(SQL Server身份驗證&#xff0c;需要用戶民和密碼)&#xff08;b&#xff09;Osql -S localhos…

微信小程序內訓筆記

2016年9月22日凌晨微信官方正式宣布“小程序”開始內測&#xff0c;有“微信之父”之稱、騰訊集團高級執行副總裁張小龍在2016年末對外宣布“小程序“應用將于2017年1月9日正式推出 這一次微信還是按照慣例&#xff0c;通過機器跑出的數據&#xff0c;首先將“小程序”開放給了…

python基礎代碼的含義_Python基礎學習篇

原標題&#xff1a;Python基礎學習篇 1、編碼 默認情況下&#xff0c;Python 3 源碼文件以 UTF-8 編碼&#xff0c;所有字符串都是unicode 字符串。 當然你也可以為源碼文件指定不同的編碼&#xff1a;# -*- coding: cp-1252 -*- 2、標識符 第一個字符必須是字母表中字母或下劃…

java面向對象super_【JavaSE】面向對象之super、final

一、super關鍵字它是一個指代變量&#xff0c;用于在子類中指代父類對象。1.作用指代父類對象區分子父類同名的成員變量&#xff0c;區分父類中成員變量和子類中同名的局部變量2.使用與this相同&#xff0c;調用父類成員變量和成員方法&#xff1a;super.xx super.xxx()調用父類…

Week_1_Physical Electronics and Semiconductors

Semiconductors Fundamentals Type of solids 轉載于:https://www.cnblogs.com/ronnielee/p/9579783.html

【Linux高頻命令專題(23)】tar

概述 通過SSH訪問服務器&#xff0c;難免會要用到壓縮&#xff0c;解壓縮&#xff0c;打包&#xff0c;解包等&#xff0c;這時候tar命令就是是必不可少的一個功能強大的工具。linux中最流行的tar是麻雀雖小&#xff0c;五臟俱全&#xff0c;功能強大。 tar命令可以為linux的文…

2. Add Two Numbers

直接用一個carry記錄進位就可以 1 //NEW2 class Solution {3 public ListNode addTwoNumbers(ListNode l1, ListNode l2) {4 ListNode root new ListNode(0);5 return addTwoNumbers(l1, l2, root);6 }7 public ListNode addTwoNumbers(ListNode …

安裝Windows更新程序遇到錯誤:0x80070422

看看服務那里 windows update服務是不是被禁用了&#xff1f; 還有一個問題可能是由于Windows Modules Installer被禁用了。

談談對python的理解_淺談對python pandas中 inplace 參數的理解

這篇文章主要介紹了對python pandas中 inplace 參數的理解&#xff0c;具有很好的參考價值&#xff0c;希望對大家有所幫助。一起跟隨小編過來看看吧 pandas 中 inplace 參數在很多函數中都會有&#xff0c;它的作用是&#xff1a;是否在原對象基礎上進行修改 inplace True&am…

java中 hashset_Java中的HashSet

HashSet擴展AbstractSet并實現Set接口。它創建一個使用哈希表進行存儲的集合。哈希表通過使用稱為哈希的機制來存儲信息。在散列中&#xff0c;鍵的信息內容用于確定唯一值&#xff0c;稱為其散列碼。然后&#xff0c;將哈希碼用作存儲與鍵關聯的數據的索引。鍵到其哈希碼的轉換…