基于容器的云原生,让业务更自由地翱翔云端

无论是要构建一个应用或开发一个更庞大的解决方案,在技术选型时,技术的开放性和可移植性已经成为很多企业优先考虑的问题之一。毕竟没人希望自己未来的发展方向和成长速度被自己若干年前选择使用的某项技术所限制或拖累。

那么当你的业务已经上云,当你在云中通过开放、自由的开源技术和产品来运营时,是否就意味着不再需要担心开放与否的问题?并不是!你选择的云平台本身,它开放吗?自由吗?存在技术锁定的隐患吗?

市面上的云服务平台丰富各异,如何选择最适合自己的?更重要的是,你考虑过云的可移植性问题吗?我们在今年根据具体需求选择的云平台,能否满足以后的需求?如果不能,是否可以在必要时方便快捷地将应用移植到其他平台?

云的中立性,该考虑了!

在云时代,诸如容器和无服务器计算这样的云原生技术是构建高可移植性应用程序时不可或缺的。与日渐繁琐并且几乎无法管理的单体(Monolithic)模型不同,云原生微服务架构是模块化(Modular)的。这种方法使得我们可以自由地为工作选择适合的工具,用一个服务来执行一种特定功能,通过“专精”获得更好的效果。

云原生方法在这种情况下开始大放异彩,它提供了一种有效流程,方便我们更新和替换应用程序中的单个组件,而不会对整个工作负载产生影响。使用云原生思维进行开发,还催生出一种声明性(Declarative)的部署方法:分别部署应用程序、为其提供支撑的软件栈,以及配套的系统配置。

为何使用容器?

我们可以把容器想像成一种专为执行某一特定任务而设计的超轻量级虚拟机。容器的寿命往往很短暂,前一分钟可能还在运行,下一分钟就消失了,缺乏持久性。实际上,持久性是通过绑定主机文件系统中的块存储或挂载其他存储服务来实现的,并不需要与容器本身进行绑定。

通过对应用程序进行容器化改造,可使其具备可移植性!只需准备好一个容器镜像,就能将其部署到不同架构CPU上运行的不同操作系统中。由于容器化应用程序是一种自包含(Self-contained)的独立单元,其中包括了所有必须的依赖项、库以及配置文件,因此在不同云环境中运行完全无需更改代码。

简单来说,在云原生设计中,容器可通过下列方式实现可移植性:

  • 轻量级虚拟化:容器为应用程序的运行提供了一种隔离环境,虽然共享主机操作系统内核,但会对进程、文件系统以及网络资源进行隔离。
  • 可移植且一致:容器将应用程序及其依赖项打包在一起,确保无论在开发还是生产环境中,应用程序都可以一致地运行。
  • 资源效率:容器比虚拟机消耗的资源更少,因为容器会隔离进程并共享主机操作系统的内核;同时容器不需要在主机操作系统之上运行一个单独的“来宾”操作系统,这进一步降低了开销。
  • 快速启动和部署:容器启动速度飞快,因为并不需要引导完整的操作系统,因此容器成了快速部署、扩展和恢复等场景中的理想选择。
  • 不可变的基础架构:容器在设计上是不可变(Immutable)的,这意味着容器在构建完成之后就不会再产生任何变化,这种特性简化了部署、版本控制和回滚流程,还有助于确保在不同环境中实现一致的行为。

何时应当考虑使用容器?

容器可以帮助我们维持一致性,同时有助于省略开发过程中的某些暂存和投产环节。开发过程中所发布的代码将在整个测试和部署周期中保持完整。

容器在资源的使用方面非常高效,并且本身非常轻巧。虽然类似于虚拟机,但容器一般只有数十MB大小,不像虚拟机那么庞大(往往有数GB大小,虽然也有更小的,但资源浪费情况更严重)。容器越轻巧,启动速度就越快,从而越容易在动态的云环境中实现弹性和高性能横向扩展。容器在设计上还是不可变的。如果有什么东西需要变更,并不需要将变更嵌入容器,只要销毁旧容器创建新容器就行了。

除此之外,在决定是否将容器作为云原生模型的一部分时,还需要注意下列因素:

  • 提高部署的一致性:容器会将应用程序及其依赖项打包在一起,确保在不同环境中运行时产生一致的行为,这还有助于简化部署过程,降低配置问题造成的风险。
  • 增强可扩展性:容器可通过快速启动新实例来应对激增的需求,帮助应用程序实现快速扩展,同时还可优化资源使用,改善系统整体性能。
  • 经济高效的资源利用率:容器的资源用量远少于传统虚拟机,企业可在相同硬件上运行更多实例,从而节约云基础设施的成本。
  • 为开发和测试周期提速:容器促进了开发、测试和生产环境间的无缝过渡,简化了开发过程,加快了新功能和Bug修复的发布速度。
  • 简化应用程序管理:容器编排平台负责管理容器化应用程序的部署、扩展和维护,可自动实现大部分运维任务,降低IT团队的负担。

有关容器的最佳实践

运行容器的方法有很多,这些方法都是可以互操作的。例如,在从其他公有云平台迁移时,只需将自己的容器镜像重新部署到新环境,即可快速迁移工作负载。此外,我们还可以使用不同的工具和引擎来运行容器。这些方式有着不同的资源利用率和价格点。

以Akamai的云平台为例,如果通过Linode进行托管,用户将可以使用Linode Kubernetes Engine(LKE)运行自己的容器,或者也可以通过虚拟机来运行Podman、HashiCorp Nomad、Docker Swarm以及Compose。

这些符合开放标准的工具可以帮助大家快速完成开发和测试工作,并且在使用LKE这样的服务时,还可以通过简化管理获得更多附加值。Kubernetes会成为用户的控制平面。用户可将其视作一个控制台,通过上面的各种按钮和旋钮控制自己的容器,并使用各种基于开放标准的工具。

容器的另一个重点在于需要理解该用什么来存储和访问自己的容器镜像(这个东西也被称为容器注册表)。通常建议使用Harbor。作为一个CNCF项目,Harbor可以帮助我们运行专用的容器注册表,从而控制相关的安全设置。

请始终记得进行测试,并准备好足够深入的回归测试套件,以确保自己的代码符合最高的性能和安全性要求。容器还应该具备失败计划。如果一个容器失败,此时的重试机制应该是怎样的?该如何重新启动?这会产生怎样的影响?应用程序又该如何恢复?有状态数据是否持久保留在映射卷或已绑定的挂载卷上?

在云原生环境中使用容器时,还需要注意下列最佳实践:

  • 使用轻量级基础镜像:从轻量级基础镜像(例如Alpine Linux或BusyBox)着手,这有助于减小容器的整体大小并最大限度减小攻击面。
  • 使用容器编排工具:使用容器编排工具(例如Kubernetes、HashiCorp Nomad、Docker Swarm或Apache Mesos)来跨越多台主机管理和扩展容器。
  • 使用容器注册表:使用容器注册表(例如Docker Hub、GitHub Packages registry、GitLab Container registry、Harbor等)来存储和访问容器镜像。这有助于跨越多台主机和计算环境共享和部署容器镜像。
  • 限制容器特权:限制容器所获的的特权,只为容器提供完成预期目的所必须的特权。尽可能部署无Root容器,从而降低容器遭到破坏被滥用后造成的风险。
  • 实施资源约束:针对CPU和内存等资源设置限制约束,防止容器使用太多资源并影响到系统整体性能。
  • 确保容器处于最新状态:通过最新安全补丁和更新让容器镜像始终处于最新状态,最大限度降低漏洞所造成的风险。
  • 充分测试容器:在部署到生产环境前,确保容器能够按照预期工作且不包含漏洞。使用CI管道在每个阶段进行自动化测试,从而减少人为错误。
  • 为容器实施备份和恢复机制:为容器访问的持久数据实施备份和恢复策略,以确保在出现故障或灾难后,工作负载依然可以快速恢复。

越来越多的企业和业务开始上云,云计算的概念也变得愈加重要。云平台的中立性对于维护公平竞争环境、保护数据安全和隐私、确保服务质量和可靠性以及提升业务灵活性和可扩展性都至关重要。在选择云服务商时,企业有必要考虑服务商是否能保持中立性,并采取相应的监管和管理措施,以确保云服务的公正性和安全性。

在选择了要使用的云平台,并开始构建、部署自己的应用和业务时,也需要充分利用上文提到的云原生思路和容器等技术,为应用的可移植性奠定基础,确保在需要时能够以最小的代价,顺利在不同平台之间进行迁移。

Akamai旗下的Linode云计算平台始终坚持开放的心态,不仅努力打造开放且自由的平台,允许用户自由选择和管理自己的服务,而且始终致力于保护用户数据的安全和隐私,遵循严格的隐私政策和数据处理规范。此外,Linode也大力参与到开源社区,提供了对许多开源项目和工具的支持。

无论你是开发者、创业者还是企业家,Linode都能为你提供高性能、安全可靠的云服务,助你轻松构建、扩展和管理项目和业务。欢迎关注Akamai机构号,立即体验Linode,拥抱自由选择与灵活自主的云平台,释放创新无限可能!

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

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

相关文章

S32K324 Stack异常分析及解决方案

文章目录 前言正向排查尝试反向排查问题原因分析问题解决处理总结前言 在项目开发过程中,在一次软件变更时,调整了task优先级之后导致应用层软件中的float数据经常性的变为NAN,导致应用层功能失效。本文记录下这个bug的分析及解决过程。 正向排查尝试 由于问题复现的概率…

28、基于springboot的房屋租赁系统

房屋是人类生活栖息的重要场所,随着城市中的流动人口的增多,人们对房屋租赁需求越来越高,为满足用户查询房屋、预约看房、房屋租赁的需求,特开发了本基于Spring Boot的房屋租赁系统。 本文重点阐述了房屋租赁系统的开发过程&…

[react] <NavLink>自带激活属性

NavLink v6.28.0 | React Router 点谁谁就带上类名 当然类名也是可以自定义 <NavLinkto{item.link}className{({ isActive }) > (isActive ? 测试 : )}>{item.title}</NavLink> 有什么用?他会监听你的路由,刷新的话也会带上激活效果

深入理解 HTTP HEAD 请求:节省带宽、提高效率的秘密武器

序言&#xff1a; 在HTTP协议中&#xff0c;HEAD请求是一种非常实用且被忽略的请求方法。与GET请求相似&#xff0c;HEAD请求同样从服务器获取资源&#xff0c;但与GET请求的最大不同之处在与&#xff0c;HEAD请求 仅返回响应的头部信息&#xff0c;不包含内容提。这使得HEAD请…

ChatGPT重大更新:新增实时搜索和高级语音

12月17日消息&#xff0c;据报道&#xff0c;OpenAI开启了第八天技术分享直播&#xff0c;对ChatGPT搜索功能进行了大量更新。 此次ChatGPT新增的功能亮点纷呈。其中&#xff0c;实时搜索功能尤为引人注目。OpenAI对搜索算法进行了深度优化&#xff0c;使得用户提出问题后&…

如何利用webpack来优化前端性能?

使用Webpack来优化前端性能涉及到多个方面&#xff0c;以下是一些关键的策略和技巧&#xff1a; 1. 代码拆分&#xff08;Code Splitting&#xff09; 通过代码拆分&#xff0c;可以将代码分成不同的块&#xff08;chunks&#xff09;&#xff0c;按需加载&#xff0c;从而减…

Springboot 整合DL4J 打造智能写作助手(文本生成)

项目准备 环境要求: Java 1.8或以上 Maven 或 Gradle&#xff08;用于项目管理&#xff09; Spring Boot框架 DL4J库&#xff08;DeepLearning4J&#xff09; 创建 Spring Boot 项目 使用 Spring Initializr 来生成一个新的 Spring Boot 项目。选择合适的依赖&#xff0c;例如…

单片机上电后程序不运行怎么排查问题?

1.电源检查。使用电压表测量单片机的电源电压是否正常&#xff0c;确保电压在规定的范围内&#xff0c;如常见的5V。 2.复位检查。检查复位引脚的电压是否正常&#xff0c;在单片机接通电源时&#xff0c;复位引脚通常会有一个高电平&#xff0c;按下复位按钮时&#xff0c;复位…

android studio更改应用图片,和应用名字。

更改应用图标&#xff0c;和名字 先打开AndroidManifest.xml文件。 更改图片文件名字&#xff08; 右键-->构建-->重命名&#xff08;R&#xff09;&#xff09;

Android 16 关于动态权限使用的变更

权限声明code 在 Android 中&#xff0c;权限的申请分为静态权限和动态权限。 静态权限 静态权限是指在应用的 AndroidManifest.xml 文件中声明的权限。这些权限在应用安装时就会被用户授予。常见的静态权限包括访问互联网、读取用户联系人等。 <manifest xmlns:android&…

青少年编程与数学 02-004 Go语言Web编程 14课题、数据操作

青少年编程与数学 02-004 Go语言Web编程 14课题、数据操作 一、数据操作二、CRUD说明&#xff1a; 三、数据验证为什么需要数据验证&#xff1f;Go Web应用中的数据验证示例步骤 1: 定义订单结构体步骤 2: 实现验证逻辑步骤 3: 在HTTP处理函数中使用验证 四、数据格式化什么是数…

kali设置中文输入法

目录 下载 使用 下载 打开终端输入 sudo apt-get install ibus ibus-pinyin 点击y即可 使用 桌面右上角这里可以选择中文输入法 效果如下

VTK知识学习(27)- 图像基本操作(二)

1、图像类型转换 1&#xff09;vtkImageCast 图像数据类型转换在数字图像处理中会频繁用到。一些常用的图像算子(例如梯度算子)在计算时出于精度的考虑&#xff0c;会将结果存储为float或double类型&#xff0c;但在图像显示时&#xff0c;一般要求图像为 unsigned char 类型,…

活动预告|云原生创新论坛:知乎携手 AutoMQ、OceanBase、快猫星云的实践分享

近年来&#xff0c;云原生技术迅猛发展&#xff0c;成为企业数字化转型的关键动力&#xff0c;云原生不仅极大地提升了系统的灵活性和可扩展性&#xff0c;还为企业带来了前所未有的创新机遇。 12 月 28 日 知乎携手 AutoMQ、OceanBase 和快猫星云推出“云原生创新论坛”主题的…

lpips使用笔记

LPIPS指的是 Learned Perceptual Image Patch Similarity&#xff08;学习感知图像块相似度&#xff09;&#xff0c;它是一种用于衡量两张图像之间感知相似度的指标。 1. 安装 pip install lpips 2. 使用 import torch import lpips# 加载预训练的 LPIPS 模型 loss_fn lp…

学习因子异步化的粒子群优化算法(AsyLnCPSO)——源码

目录 1. 学习因子异步化的概念 2. 算法步骤 2.1 初始化 2.2 迭代过程 3.优势 4. 与传统粒子群算法的区别 5.代码下载&#xff1a; 学习因子异步化的粒子群优化算法&#xff08;AsyLnCPSO&#xff09;是一种改进的粒子群优化&#xff08;PSO&#xff09;算法&#xff0c;…

windows安装Elasticsearch及增删改查操作

1.首先去官网下载Elasticsearch 下载地址 我这里选择的是7.17.18 选择windows版本 下载完成后解压是这样的 下载完成后点击elasticsearch.bat启动elasticsearch服务 输入http://localhost:9200看到如下信息说明启动成功。 还有记得修改elasticsearch.yml文件,创建node名…

Flutter组件————Scaffold

Scaffold Scaffold 是一个基础的可视化界面结构组件&#xff0c;它实现了基本的Material Design布局结构。使用 Scaffold 可以快速地搭建起包含应用栏&#xff08;AppBar&#xff09;、内容区域&#xff08;body&#xff09;、抽屉菜单&#xff08;Drawer&#xff09;、底部导…

低代码软件搭建自学第2.5天——箭头连线和动态更新

文章目录 使用 PyQtGraph 实现图形连接器&#xff1a;支持动态拖动和箭头连线引言实现功能的关键点代码实现功能演示实现过程中的经验教训结语 使用 PyQtGraph 实现图形连接器&#xff1a;支持动态拖动和箭头连线 引言 在这篇博客中&#xff0c;使用 PyQtGraph 和 PyQt6 创建一…

CoinShares预测2025年加密市场前景看涨

原文来源&#xff1a;CoinShares预测2025年加密市场前景看涨 - 币热网 - 区块链数字货币新闻消息资讯 欧洲加密投资公司CoinShares发布了2025年的市场预测&#xff0c;概述了可能塑造行业的关键趋势。 报告指出&#xff0c;在即将上任的川普政府下&#xff0c;监管环境将更加…