超越“迁移”的思考:应用程序该如何被Kubernetes接管?

传统虚拟机(VM)的可扩展性差强人意,但Kubernetes可以快速,无缝地扩展正在运行的服务。

Kubernetes将容器、集群以及广泛的抽象配置方法引入桌面,用于提升部署和变更管理体验,从而使人们对Kubernetes关注更多。

示例:“简单”三层应用程序

“一致性逻辑抽象”是什么意思?也许一个例子会有所帮助。让我们看一个简单的三层应用程序,如下图1所示。

图1:一个简单的三层应用程序(逻辑视图)

像上述那种逻辑视图有意隐藏了许多技术细节。在这种情况下,我们认为使用网络是理所当然的,即使它在表示层和应用程序层之间包含一个负载平衡器,也可以将流量定向到在单独的VM上运行的应用程序实例中。

三层应用程序在云中运行,也面临一些基本限制。如扩展需要配置其他VM,这通常太慢而无法响应需求的突然变化,并且配置和维护也很昂贵。

扩大负责维护和更新应用程序团队的难度很大,因为随着应用程序规模的扩大,大型团队的成员并行工作变得越来越困难。

将应用程序迁移到Kubernetes

云原生架构是构建基于Kubernetes的应用程序的核心最佳实践,它增加了抽象层,以掩盖其他复杂性。

这样,虽然三层应用程序仍然基本上保持了三个逻辑层,但是在将其迁移到Kubernetes之后,该应用程序的逻辑看起来却大不相同,如下图2所示。

图2:Kubernetes应用程序的逻辑视图

在上图中,我们已经将以浏览器为中心的表示层扩展到了抽象客户端,该客户端包括移动设备、IoT终结点、第三方SaaS应用程序的云终结点等。

同样,我们用抽象存储代替了传统的持久层,而我们的Kubernetes集群现在代表了应用层。

虽然三层逻辑架构将网络视为理所当然,但在Kubernetes架构中,它是一等公民,因为配置以一致的方式驱动跨计算,网络和存储的抽象。

服务网格通过这种全面的抽象来处理Kubernetes集群中的微服务交互,该抽象将物理网络特征(如VLAN和IP地址)与逻辑网络隔离开来。

云原生API管理技术处理集群中客户端和微服务之间的交互,以及抽象的存储接口(使用容器存储接口(CSI)插件和persistentVolumes之类的技术)。

生产部署的所有方面都应通过配置来表示(在Helm图表,YAML文件等中)。为了进行生产方面的任何更改,Kubernetes团队应遵循不变的基础架构的“非宠物”原则,根据需要更改配置并重新部署。

抽象化“升迁”

将图1所示的应用程序迁移到Kubernetes中,使其最终看起来像图2那样,绝非易事。

即使原始应用程序是完全基于云的应用程序,这种迁移离基本操作也很遥远。

这种情况是棘手难题。

首先,提供一个附加的抽象层,使应用程序可以从图1迁移到图2,而不必进行应用程序通常需要的重新构造和重写。

此外,解决每个层的特殊需求,特别是现在必须利用抽象存储的持久性层。

这一层的挑战是Kubernetes本质上是无状态的,因此,图2中架构的各个方面都不能跟踪任何应用程序的状态或数据。

请记住,Kubernetes容器本质上是短暂的,因此,如果它们跟踪任何内容,状态信息很容易突然丢失。

已迁移的应用程序,需要考虑处理所有由此产生的状态管理问题,处理与抽象存储的交互问题,同时解决与回退和灾难恢复等与状态层相关的棘手问题。

此外,还要维护应用程序的状态– 这方面Kubernetes本身没有提供任何处理方法。例如,如果某个流程(例如,电子商务购买)在中途失败,Kubernetes即时动态配置组件无效时,就需要维持应用程序的状态。

为简单起见,上面的讨论只针对单个应用程序。但是,在现实世界中,企业正在一次将多个应用程序转移到Kubernetes。

企业不仅会转移单个应用程序,也会将多个应用程序组合到“应用程序管道”中,这些组合是经常更新以响应市场不断变化的应用程序的组合。

支持这种动态管道的云原生架构与以前的架构方法本质上是不同的,即使它们一定是建立在过去经验上的。

为了与Kubernetes一起取得成功,必须跳出框框进行思考,框框是您认为关于大规模构建企业应用程序基础架构所了解的一切。

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

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

相关文章

C++string容器-字符串拼接

string字符串拼接 功能描述&#xff1a; 实现在字符串末尾拼接字符串 函数原型&#xff1a; 代码如下&#xff1a; #include <iostream> using namespace std; #include <cstring>//string字符串拼接 void test01() {string str1 "我";str1 "爱…

如何运用领域驱动设计 - 存储库

概述在上一篇文章<如何运用领域驱动设计 - 聚合>中&#xff0c;我们已经了解过领域驱动设计中一个很核心的对象-聚合。在现实场景中&#xff0c;我们往往需要将聚合持久化到某个地方&#xff0c;或者是从某个地方创建出聚合。此时就会使得领域对象与我们的基础架构产生紧…

C++string容器-字符串查找和替换

string查找和替换 功能描述&#xff1a; 查找&#xff1a;查找指定字符串是否存在 替换&#xff1a;在指定的位置替换字符串 函数原型&#xff1a; rfind 和find 的区别&#xff1a; rfind从右往左查找 find从左往右查找 查找案列代码如下&#xff1a; #include <iostrea…

如何运用领域驱动设计 - 工作单元

概述在上一篇 《如何运用领域驱动设计 - 存储库》 的文章中&#xff0c;我们讲述了有关仓储的概念和使用规范。仓储为聚合提供了持久化到本地的功能&#xff0c;但是在持久化的过程中&#xff0c;有时一个聚合根中的各个领域对象会分散到不同的数据库表里面&#xff1b;又或者是…

C++string容器-字符串比较

string字符串比较 功能描述: 字符串之间的比较 比较方式&#xff1a; 通常用来比较两个字符串是否相等 函数原型&#xff1a; 代码如下&#xff1a; #include <iostream> using namespace std; #include <cstring> //string字符串比较void test01() {string…

国产自主研发编程语言火了,同行十二年,不知Python是木兰?

1月17号有媒体称&#xff0c;一款面向智能物联网和编程教育的号称自主研发语言横空出世&#xff0c;名为【Mulan 】。消息一出&#xff0c;引起了众多争议。但有知乎网友发现&#xff0c;下载的程序包解包后——是个 Python&#xff1f;何为木兰&#xff1f;1月17号&#xff0c…

C++string容器-字符存取

string中单个字符存取方式有两种 代码如下&#xff1a; #include <iostream> using namespace std; #include <cstring>//string 字符存取 void test01() {string str "hello";cout << "str " << str << endl;for (int i…

有了容器为什么kubernetes还需要Pod?

简介容器并不是软件开发的银弹&#xff0c;没有任何一种技术能解决软件开发中的所有问题当我们采用容器化技术的时候&#xff0c;摒弃了传统的物理机或者虚拟机的部署方式&#xff0c;以一种更加轻快&#xff0c;便捷的方式来部署我们的应用。到容器化的进阶&#xff0c;再加上…

C++string容器-插入和删除

string插入和删除 功能描述&#xff1a; 对string字符串进行插入和删除字符操作 函数原型&#xff1a; #include <iostream> using namespace std; #include <cstring>//字符串 插入和删除 void test01() {string str "hello";str.insert(1, "…

.NET绘制旋转太极图

前言我之前发了一篇《 用.NET写“算命”程序》的文章&#xff0c;但有人纷纷提出了质疑&#xff0c;认为没有“科学”&#xff08; mi xin&#xff09;依据????。所谓“太极生两仪&#xff0c;两仪生四象&#xff0c;四象生八卦&#xff0c;八卦定吉凶&#xff0c;吉凶生大…

.NET CORE(C#) WPF 抽屉式菜单

.NET CORE(C#) WPF 抽屉式菜单阅读导航本文背景代码实现本文参考源码1. 本文背景使用简单动画实现抽屉式菜单2. 代码实现使用 .NET CORE 3.1 创建名为 “AnimatedColorfulMenu” 的WPF模板项目&#xff0c;添加1个Nuget库&#xff1a;MaterialDesignThemes&#xff0c;版本为最…

C++string容器-子串获取

string子串 功能描述&#xff1a; 从字符串中获取想要的子串 函数原型&#xff1a; 代码如下&#xff1a; #include <iostream> using namespace std; #include <cstring>//string求子串void test01() {string str "abcdef";string subStr str.sub…

我的 .NET Core 博客性能优化经验补充

点击上方蓝字关注“汪宇杰博客”导语去年年底我写了一篇《我的 .NET Core 博客性能优化经验总结》&#xff0c;但后来还发现有一处遗漏需要补充。我们一起来看看~牺牲空间换时间我们知道软件设计只有高手才能做到又小又快&#xff0c;像我这种普通程序员通常只有两种方案&#…

使用 OAS(OpenAPI标准)来描述 Web API

无论哪种类型的Web API, 都可能需要给其他开发者使用. 所以API的开发者体验是很重要的. API的开发者体验, 简写为 API DX (Developer Experience). 它包含很多东西, 例如如何使用API, 文档, 技术支持等等, 但是最重要的还是API的设计. 如果 API 设计的不好, 那么使用该API构建的…

dedemodule.class.php,DEDECMS5.7模块/模块管理列表显示空白问题解决方法

DEDECMS5.7模块/模块管理列表显示空白(站长基地配图)今天站长基地升级至dedecms最新版本&#xff0c;进入后台意外的发现&#xff0c;模块/模块管理一片空白&#xff0c;但有没有及时备份&#xff0c;于是赶紧去网上找寻解决办法&#xff0c;经过整理&#xff0c;大致有以下几种…

dotNET Core 中怎样操作AD(续1)

在之前的文章《dotNET Core 中怎样操作 AD&#xff1f;》中主要以AD的数据同步到数据库的场景来描述了在 dotNetCore 中怎样操作AD&#xff0c;本文将继续介绍一些在 dotNetCore 中操作 AD 的其他常用操作。环境dotNET Core&#xff1a;3.0Novell.Directory.Ldap.NETStandard2_…

【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分

为了更好的完善Magicodes.IE&#xff0c;春节期间我们会进行一次大的重构。由于精力有限&#xff0c;急缺文档和翻译&#xff08;将文档翻译为英文文档&#xff09;支持&#xff0c;诚邀各位加入。同时在功能方便也做了相关规划&#xff0c;有兴趣的朋友可以参与提交PR。https:…

Mbp,一个用于学习.net core的开发框架

Mbp(https://github.com/mbpframework/Mbp)是一个.net core 3的企业级web开发框架,是我个人用于学习.net core而发起的一个开源项目.这个借鉴了国外优秀开源项目abp vnext,及国内优秀开源框架Osharp的一些思想和实现.欢迎各路开发爱好者加入这个项目,一起学习,一起玩耍,共同成长…

什么?原来C#还有这两个关键字

系列介绍简介【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面&#xff0c;比如C#的小细节&#xff0c;AspnetCore&#xff0c;微服务中的.net知识等等。场景您可以在下班坐地铁的时候&#xff0c;拿出…

蓝桥杯2015初赛-三羊献瑞-枚举

题目描述 观察下面的加法算式&#xff1a; 其中&#xff0c;相同的汉字代表相同的数字&#xff0c;不同的汉字代表不同的数字。 请你填写“三羊献瑞”所代表的4位数字&#xff08;答案唯一&#xff09;&#xff0c;不要填写任何多余内容。 输出 请你填写“三羊献瑞”所代表…