从开发者的角度看K8S中的复合容器模式

news2025/7/22 5:28:32

就应用设计最佳实践和原则而言,构建复杂的基于容器的架构与编程没有太大区别。本文的目标是使用众所周知的编程原理从开发人员的角度展示三种流行的可扩展性架构模式。

让我们从单一职责原则开始。根据 R. Martin 的说法,“一个类应该只有一个改变的理由。” 但类是用于简化现实世界问题并表示软件组件的抽象。因此,一个组件应该只有一个随时间变化的原因。软件服务,特别是微服务也是组件(运行时组件),应该只有一个改变的理由。微服务应该是单个可部署单元,这意味着它们独立于其他组件进行部署,并且可以根据需要拥有任意数量的实例。

但这总是正确的吗?微服务是否始终作为单个单元部署?

在Kubernetes中,微服务的体现是 Pod。Pod 被定义为一组共享文件系统、内核命名空间和 IP 地址等资源的容器。Pod 是 Kubernetes 集群中调度的原子单元,每个 Pod 旨在运行给定应用程序的单个实例。

根据文档,“Pod 旨在支持形成一个内聚服务单元的多个协作进程(作为容器)。Pod 中的容器会自动在集群中的同一物理或虚拟机上共同定位和共同调度”水平扩展应用程序意味着复制 Pod。根据 Kubernetes 文档,可以使用两种策略来配置 Pod:

运行单个容器的 Pod:“每个 Pod 一个容器”模型是最常见的 Kubernetes 用例;Pod 是单个容器的包装器,Kubernetes 管理 Pod,而不是直接管理容器。

运行多个容器一起工作的 Pod:Pod 可以封装由多个紧密耦合且需要共享资源的共置容器组成的应用程序。这些位于同一位置的容器形成了一个单一的内聚服务单元,例如,一个容器向公众提供存储在共享卷中的数据,而一个单独的sidecar容器则刷新或更新这些文件。Pod 将这些容器、存储资源和临时网络身份包装在一起作为一个单元。”

答案是:不!微服务并不总是作为单个单元部署!

除了可扩展性模式、部署和可靠性模式等一些流行的云架构模式之外,还有可扩展性架构模式。我们将仔细研究云架构的三种最流行的可扩展性模式:

  • 边车模式

  • 大使模式

  • 适配器模式

边车模式

问题

每个可部署的服务/应用程序都有自己的“更改原因”或责任。然而,除了其核心功能之外,它还需要做其他事情,在软件开发人员术语中称为“横切关注点”。一个示例是需要发送到监控服务的性能指标的集合。另一种方法是记录事件并将其发送到分布式日志服务。我将它们称为横切关注点,因为它们不直接与业务逻辑相关并且是多个服务所需要的,它们基本上代表了需要成为每个部署单元一部分的可重用功能。

解决方案

这个问题的解决方案被称为边车模式,并且要求创建一个称为边车容器的额外容器。边车容器是主容器的扩展,遵循开放-封闭设计原则(开放于扩展,封闭于修改)。它们在部署方面与“主”容器紧密耦合,因为它们作为同一Pod的一部分部署,但仍然容易替换,并且不破坏扩展容器的单一责任。此外,实现的模块化允许对与业务相关的功能和其他助手服务(如事件记录或监控)进行独立测试。两个容器之间的通信是快速和可靠的,它们共享对相同资源的访问,使助手组件能够提供可重用的基础架构相关服务。此外,它适用于许多类型的服务,解决了在使用不同技术方面的异质性问题。边车组件的升级也很简单,因为它通常意味着升级Docker容器版本,并使用例如Kubernetes的无停机时间策略进行重新部署。

大使容器

问题

已部署的服务并不是孤立运行的。它们通常通过网络与其他服务进行通信,甚至在单个组织控制的应用程序或软件平台之外。组件之间的集成通常意味着与外部 API 的集成以及处理外部系统的故障或不可用。外部系统集成的常见做法是定义所谓的 API Facade,即隐藏外部系统 API 复杂性的内部 API。API Facade 的作用是隔离外部依赖项,提供内部 API 定义的实现,并在需要时负责安全性和路由。此外,外部系统的故障和不可用通常使用一些常见模式(例如重试模式、断路器模式)进行处理,有时还由本地缓存提供支持。所有这些技术细节都会使主要服务变得复杂,并且似乎是辅助容器的候选者。

解决方案

该问题的解决方案被称为大使模式,并意味着创建一个称为大使容器的额外容器。大使容器将本地连接代理到外部世界,它们基本上是一种边车容器。这种容器组合很强大,不仅因为关注点的分离和不同团队可以轻松地拥有组件,而且它还允许轻松地模拟本地开发环境的外部服务。

适配器容器

问题

仍有许多整体系统计划迁移到更轻量级的架构。然而,迁移不可能一次性完成,而且在两个版本的系统中都支持添加新功能的同时,等待整个系统重写多年也是有风险的。迁移应该以小块的形式进行,发布单独的服务并将它们一一集成。这个过程会重复进行,直到遗留的整体系统消失。因此,我们有一个支持新 API 的系统新部分和一个仍然支持旧 API 的旧系统部分。例如,我们可能新实现了 REST 服务,但仍然有一些旧的基于 SOAP 的服务。我们需要一些东西来负责暴露旧功能,就好像所有服务都已迁移并且可以由客户系统集成一样。

解决方案

该问题的解决方案称为适配器或反腐败模式。适配器容器负责从一种通信协议转换为另一种通信协议以及从一种数据模型转换为另一种数据模型,同时向外部世界隐藏实际服务。此外,适配器容器可以提供双向通信。如果遗留系统需要与新服务通信,它也可以是该通信的适应组件,充当一种大使容器,直到迁移完成。


在本文中,我们了解了容器组合如何在不实际更改主应用程序容器的情况下提供可扩展性机制,通过允许将复合 Pod 视为在微服务架构中公开单个简单服务的任何其他简单 Pod 来提供稳定性和可重用性。有人会问为什么不使用一个库并在多个容器之间共享它。好吧,这也是一个解决方案,但我们面临着在使用它的所有服务之间引入耦合的共同责任问题。此外,异构服务需要使用所有支持的语言重写库。这也打破了单一责任原则,无论如何我们都希望保留这一原则。

作者:Daniela Kolarova

更多内容请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1157132.html

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

相关文章

高性能渲染——详解Html Canvas的优势与性能

本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 一、什么是Canvas 想必学习前端的同学们对Canvas 都不陌生,它是 HTML5 新增的“画布”元素&#x…

污水一体处理设备工艺有哪些

污水一体处理设备工艺主要包括以下几种: AO工艺:AO工艺是增加好氧池缺氧池形成硝化-反硝化系统,处理污水中氮含量效率提升。SBR工艺:SBR工艺是按间歇曝气方式运行的活性污泥处理技术,厌氧、好氧、缺氧处于交替状态&am…

选择适合制造业的企业邮箱平台

自2010年成立以来,J公司已从一家小型有限责任公司发展成为全球领先的工业内窥镜研发、生产和销售企业。公司的产品制造采用国际先进技术和一流生产工艺,专业为客户提供定制解决方案,产品已广泛应用于锅检特检、机械制造、发电、石油、燃气、化…

AWS认证考试的那些事

1 为啥会有这个认证 你既然点进来了这个也就不重要了,重要的是怎么拿到他,以SAA-C03为例,从开始到结束我们一起来进行准备 2 考试卷 目前AWS的考试是要交钱的,正常情况下拿到5折劵很容易,比如你之前考过AWS的认证会给…

蓝牙 - LE的Connection Parameters设定

BLE链接参数设定 两个BLE设备建立链接后,可以更改链接参数。Central和Peripheral设备均可发送更新链接参数请求。这个在很多时候是有必要的,因为广播扫描的建立链接过程,和链接保持的过程,对链接参数的要求是不同的。比如设置连接…

LInux之在同一Tomcat下使用不同的端口号访问不同的项目

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《LInux实战开发》。🎯🎯 …

深入探索 C++ 多态 ② - 继承关系

前言 上一章 简述了虚函数的调用链路,本章主要探索 C 各种继承关系的类对象的多态特性。 深入探索 C 多态 ① - 虚函数调用链路深入探索 C 多态 ② - 继承关系深入探索 C 多态 ③ - 虚析构 1. 概述 封装,继承,多态是 C 的三大特性&#xf…

群晖 Docker版qbittorrent 下载显示错误 解决方法

这些天在折腾AIO玩,PVE虚拟机底层,核显直通,群晖安装,免不了踩些坑。 今天写篇博客,讲述一下群晖 Docker版qbittorrent 下载显示错误的解决方法,顺便记录一下配置,以便日后折腾可以参考。 直接…

4.讲究先来后到的队列

概述 目标: 队列的存储结构及操作特点java中队列相关的api基于单链表的队列实现刷题(设计循环队列) 存储结构及特点 队列(queue) 和栈一样,代表具有一类操作特征的数据结构,拿日常生活中的一个场景举例说明,去车站的窗口买票&…

百度上传自己个人简介攻略,个人介绍百度百科怎么做?

个人介绍要展示在百度百科上该怎么操作,我们都清楚百度百科词条是需要申请才能拥有的,但是没有百度上传自己个人简介的攻略,很多人是不知从何下手的。下面洛希爱做百科网带着大家一起来了解。 一、了解百度百科词条的创建规则 1. 词条名称规…

python项目部署代码汇总:目标检测类、人体姿态类

一、AI健身计数 1、图片视频检测 (cpu运行): 注:左上角为fps,左下角为次数统计。 1.哑铃弯举:12,14,16 详细环境安装教程:pyqt5AI健身CPU实时检测mediapipe 可视化界面…

光学雨量计:更灵敏可靠、更智能的降雨监测工具

光学雨量计:更灵敏可靠、更智能的降雨监测工具 降雨量信息是评估大气环境和降水研究的关键指标,也是环境监测和农业安全监测的重要参数。目前,我们通常使用翻斗式或光学雨量计来监测降雨量,这些工具能够感知自然界的降雨量&#…

媒体宣传如何助力品牌发展

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体宣传可以在多方面助力品牌发展,下面是一些关键的方式: 1. 提高品牌知名度:媒体宣传可以将品牌曝光给更广泛的受众,使更多人了解您的品…

内涝积水监测仪怎么样?万宾科技城市内涝积水监测的作用

在城市建设发展过程中,道路基础设施的建设永远都占据着重要一席,因为人们出行一旦受阻便会影响城市进展,也会影响经济发展。在城市之中有隧道,下穿式立交桥等容易存积水的地方,一旦出现恶劣暴雨天气,这些地…

CHAT——新手必看的文章

今天小编用CHAT写一篇文章:Ipad新手注意事项,一定要看。 标题:iPad新手必读:一篇你绝对不能错过的关于iPad使用的注意事项 当你买了一台全新的iPad,无论是为了工作还是娱乐,这款强大而引人入胜的设备都提供…

Wonder3D:用单张图片生成纹理网格

Wonder3D 只需 2 ∼ 3 分钟即可从单视图图像重建高度详细的纹理网格。 Wonder3D首先通过跨域扩散模型生成一致的多视图法线图和相应的彩色图像,然后利用新颖的法线融合方法实现快速、高质量的重建。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 1、推理准…

Linux ---------------------Shell 基本运算符

(一)摘要 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符关系运算符布尔运算符字符串运算符文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk …

界面控件DevExpress WinForms Gauge组件 - 实现更高级别数据可视化

DevExpress WinForms控件包含了超过150个随时可用的仪表盘预设,包括圆形,数字,线性和状态指示器等,来帮助用户实现更高级的数据可视化。 DevExpress WinForms有180组件和UI库,能为Windows Forms平台创建具有影响力的业…

解决ubunut20.04系统麦克风异常问题

背景 在部分ubunut环境中,我们指定了麦克风的下标,使用指定的麦克风有问题,只能录音一次,第二次就失效了,不过只是部分ubunut系统会遇到这个情况 # 找到以usb_mic_prefix为前缀的麦克风下标 import speech_recognitio…

(五)上市企业实施IPD成功案例分享之——迈瑞医疗

医疗器械企业是被严格监管的行业,同时也是市场充分竞争的行业。医疗器械细分市场众多,需求强劲,存在着巨大的商机,被称为永远的朝阳行业。但是,存在商机并不等于能够抓住商机。不同的医疗器械企业在同样的宏观环境、细…