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.mzph.cn/news/396997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信JS-SDK选择相册或拍照并上传PHP实现

理解:微信上传接口是拍照,或者选择本地照片,上传到微信的服务器,获取到一个id,通过token与这个id获取到图片,保存到服务器即可。 效果 通过微信js接口,调用底层程序。 需要引入js文件&#xff0…

android socket 长连接_TCP/IP,http,socket,长连接,短连接

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达上一篇:这300G的Java资料是我师傅当年给我的,免费分享给大家下一篇:这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 详细文档

最近要做一个数据库的升级工作,提前在自己的PC机上练习了一下,这种文档在网上很多,但是大多都是使用命令编辑脚本,其实数据库还有一个DBUA的升级工具可以使用,使升级工作方便了很多。 OS环境:windows XP 32…

stm32正交编码器 原理图_恶劣环境下应用的电感式增量编码器和绝对编码器

编码器可分为两种基本类型 - 增量编码器和绝对编码器。增量编码器的显着特征是它报告角度的变化。换句话说,当增量编码器通电时,它不会报告其角位置,直到它具有测量的参考点。绝对编码器明确地在比例或范围内报告其位置。换句话说&#xff0c…

python基础代码的含义_Python基础学习篇

原标题:Python基础学习篇 1、编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是unicode 字符串。 当然你也可以为源码文件指定不同的编码:# -*- coding: cp-1252 -*- 2、标识符 第一个字符必须是字母表中字母或下划…

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

一、super关键字它是一个指代变量,用于在子类中指代父类对象。1.作用指代父类对象区分子父类同名的成员变量,区分父类中成员变量和子类中同名的局部变量2.使用与this相同,调用父类成员变量和成员方法:super.xx super.xxx()调用父类…

mac下的svn服务器建立

MAC下的SVN服务器建立: from : http://blog.csdn.net/q199109106q/article/details/8655204 在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件…

php 字符串 替换 最后,php如何替换字符串中的最后一个字符

php替换字符串中的最后一个字符的方法是:可以通过preg_replace()函数来实现。该函数的语法为:【preg_replace(mixed $pattern, mixed $replacement, mixed $subject】。要替换字符串中的最后一个字符,可以通过preg_replace()函数来实现。(如果…

logback的使用和logback.xml详解

原文地址:https://www.cnblogs.com/warking/p/5710303.html#4046335 作者:行走在云端的愚公 一、logback的介绍   Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch。它当前分为下面下个模块: …

tcp协议的主要功能是什么_前端要知道的网络知识一:TCP/IP 协议到底在讲什么...

你之所以不知道那套书在讲什么,是因为你还没有认识到网络协议有什么用,怎么用,以什么形式在使用,网络协议的概念很简单,就几句话,你只知道网络协议的概念,只知道很多大神都推荐这套书&#xff0…

mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间

为什么80%的码农都做不了架构师?>>> 由于项目需要创建定时器(evevt),所以就百度了一下,发现基本都是来源于一个模板,有些功能还不全,现在自己总结一下。 注:mysql版本是…

音频视频

1.IOS视频播放代码(添加MediaPlayer.framework和#import) -(void)playMovie:(NSString *)fileName{//视频文件路径NSString *path [[NSBundle mainBundle] pathForResource:fileName ofType:"mp4"];//视频URLNSURL *url [NSURL fileURLWithP…

linux内核怎么修改屏幕旋转方向_树莓派4—屏幕旋转

配置:树莓派4raspberry pi系统,HDMI显示,非触屏。问题:想将屏幕旋转90,按网上说的,方法一:在config.txt文件中添加display_rotate1,或者添加display_hdmi_rotate1,保存后…

独家直播!阿里移动前端开源框架Weex揭秘

或许你写过了很多行代码,修过许多的bug,学过各种各样的语言,却只在一个最好的时机遇见了他…… 是啥? 敲!黑!板!跟!我!念!Weex~~&…

python异常值处理实例_利用Python进行异常值分析实例代码

前言 异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值。常用检测方法3σ原则和箱型图。其中,3σ原则只适用服从正态分布的数据。在3σ原则下,异常值被定义为观察值和平均值的偏差超过3倍标准差的值。P(|x−μ|…

MSSQL 发布订阅,实现读写分离

主库做增删改,从库只读。 大部分的数据库压力,都是由查询引起的,读写分离可以减轻数据库的压力。 1、在(主)数据库上对需要同步的数据进行发布。 2、在(从)数据库上对(主)数据库的发布进行订阅。 注:发布订阅都需要实际的服务器名…

Block

1、认识Block Block封装了一段代码,可以在任何时候执行Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值,它和传统的函数指针很类似,但是有区别:block是inline(内联函数)的&#x…

坚持学习WF(8):本地服务之调用外部方法

WF提供了一组核心服务,例如在SQL 数据库中存储工作流实例的执行详细信息的持久性服务,计划服务,事务服务和跟踪服务。除了这些WF也提供了另外一种服务,叫做Local Service也可以叫做Data exchange service。主要是实现工作流和宿主…

c++归并排序_合并排序法

一、合并排序(Merge Sort) 就是将多个有序数据表合并成一个有序数据表。如果参与合并的只有两个有序表,那么称为二路合并。对于一个原始的待排序序列,往往可以通过分割的方法来归结为多路合并排序。二、一个待排序的原始数据序列进行合并排序的基本思路是…