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

news2024/12/19 5:43:53

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

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

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

云的中立性,该考虑了!

在云时代,诸如容器和无服务器计算这样的云原生技术是构建高可移植性应用程序时不可或缺的。与日渐繁琐并且几乎无法管理的单体(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.coloradmin.cn/o/2261969.html

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

相关文章

二叉树_堆

目录 一. 树(非线性结构) 1.1 树的概念与结构 1.2 树的表示 二. 二叉树 2.1 二叉树的概念与结构 2.2 特殊的二叉树 2.3 二叉树的存储结构 三. 实现顺序结构的二叉树 3.1 堆的概念与结构 一. 树(非线性结构) 1.1 树的概念与结构 概念&#xff…

linux0.11源码分析第一弹——bootset.s内容

🚀前言 本系列主要参考的《linux源码趣读》,也结合之前《一个64位操作系统的设计与实现》的内容结合起来进行整理成本系列博客。在这一篇博客对应的是《linux源码趣读》第一~四回 目录 🚀前言🏆启动后的第一步📃启动区…

设计模式之桥接模式:抽象与实现之间的分离艺术

~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 桥接模式概述与角色组成 想象一下你家里的电视遥控器,无论是索尼还是三星的电视机,遥控器的按键功能都差不多&#xff1…

【从零开始入门unity游戏开发之——C#篇17】C#面向对象的封装——类(Class)和对象、成员变量和访问修饰符、成员方法

文章目录 一、类和对象1、什么是类和对象?2、例子说明2.1 例子1:(1) **类的定义:**(2) **创建对象:**(3) **类和对象的关系:** 2.2 例子2:**类的比喻:****对象的比喻:**代码实例&…

在Ubuntu 22.04 LTS中使用PyTorch深度学习框架并调用多GPU时遇到indexSelectLargeIndex相关的断言失败【笔记】

在Ubuntu 22.04 LTS系统中,已安装配置好CUDA 12.4、cuDNN 9.1.1以及PyTorch环境 export CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7 在PyTorch深度学习框架训练调用多GPU时,提示 indexSelectLargeIndex: block: [x, 0, 0], thread: [x, 0, 0] Assertion src…

FutureCompletableFuture实战

1. Callable&Future&FutureTask介绍 直接继承Thread或者实现Runnable接口都可以创建线程,但是这两种方法都有一个问题就是:没有返回值,也就是不能获取执行完的结果。因此java1.5就提供了Callable接口来实现这一场景,而Fu…

[论文阅读笔记]-PalmTree: 学习一个用于指令嵌入的汇编语言模型

深度学习已在众多二进制分析任务中展示了其优势,包括函数边界检测、二进制代码搜索、函数原型推理、值集分析等。现有方案忽略了复杂的指令内结构,主要依赖于控制流,其中上下文信息是嘈杂的,并且可能受到编译器优化的影响。为了解…

CH582F BLE5.3 蓝牙核心板开发板 60MHz RAM:32KB ROM:448KB

CH582F BLE5.3 蓝牙核心板开发板 60MHz RAM:32KB ROM:448KB 是一款基于南京沁恒(WCH)推出的高性能、低功耗无线通信芯片CH582F的开发板。以下是该开发板的功能和参数详细介绍: 主要特性 双模蓝牙支持: 支持蓝牙5.0标准&#xff0…

数字IC后端设计实现篇之TSMC 12nm TCD cell(Dummy TCD Cell)应该怎么加?

TSMC 12nm A72项目我们需要按照foundary的要求提前在floorplan阶段加好TCD Cell。这个cell是用来做工艺校准的。这个dummy TCD Cell也可以等后续Calibre 插dummy自动插。但咱们项目要求提前在floorplan阶段就先预先规划好位置。 TSCM12nm 1P9M的metal stack结构图如下图所示。…

《网络对抗技术》Exp9 Web安全基础

实验目标 理解常用网络攻击技术的基本原理。 实验内容 Webgoat实践下相关实验。 实验环境 macOS下Parallels Desktop虚拟机中(网络源均设置为共享网络模式): Kali Linux - 64bit(攻击机,IP为10.211.55.10)…

Chrome 132 版本开发者工具(DevTools)更新内容

Chrome 132 版本开发者工具(DevTools)更新内容 一、使用 Gemini 调试 Network、Source 和 Performance Chrome 131 可以使用 Gemini 调试 CSS,现在可以调试更多模块了 与元素面板中的右键菜单类似,要打开 AI 辅助面板并开始与 …

消息系统之 Kafka

什么是消息系统 消息系统是专用的中间件,负责将数据从一个应用传递到另外一个应用。使应用只需关注于数据,无需关注数据在两个或多个应用间是如何传递的。 消息系统一般基于可靠的消息队列来实现,使用点对点模式或发布订阅模式。数据实时在…

Intel-ECI之Codesys PLC + Ethercat 远端IO + Codesys IDE编程

目录 一、 准备工作 二、安装Codesys 软件 PLC 三、 使用Codesys IDE 编程测试 CODESYS* 是领先的独立于制造商的 IEC 61131-3 自动化软件,适用于工程控制系统。它用于 Intel Edge Controls for Industrial(Intel ECI 或 ECI),…

[2015~2024]SmartMediaKit音视频直播技术演进之路

技术背景 2015年,因应急指挥项目需求,我们实现了RTMP推送音视频采集推送(采集摄像头和麦克风数据)模块,在我们做好了RTMP推送模块后,苦于没有一个满足我们毫秒级延迟诉求的RTMP播放器,于是第一…

Ubuntu24.04 安装 visual studio code

# 导入软件包密钥 wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg# 添加官方库 echo "deb [arch…

docker 搭建自动唤醒UpSnap工具

1、拉取阿里UpSnap镜像 docker pull crpi-k5k93ldwfc7o75ip.cn-hangzhou.personal.cr.aliyuncs.com/upsnap/upsnap:4 2、创建docker-compose.yml文件,进行配置: version: "3" services:upsnap:container_name: upsnapimage: crpi-k5k93ldwf…

已解决:elasticsearch创建索引失败

报错信息 具体报错: org.elasticsearch.ElasticsearchStatusException: Elasticsearch exception [typeillegal_argument_exception, reasonunknown setting [index.mappings.properties.category.analyzer] please check that any required plugins are installed…

PHPstudy中的数据库启动不了

法一 netstat -ano |findstr "3306" 查看占用该端口的进程号 taskkill /f /pid 6720 杀死进程 法二 sc delete mysql

计算机视觉中的特征提取算法

摘要: 本文聚焦于计算机视觉中的特征提取算法,深入探讨尺度不变特征变换(SIFT)算法。详细阐述 SIFT 算法的原理,包括尺度空间构建、关键点检测、方向分配与特征描述子生成等核心步骤。通过 C#、Python 和 C 三种编程语…

Linux USB开发整理和随笔

目录 1 概述 2 硬件原理基础 2.1 USB发展 2.2 USB的拓扑 2.3 硬件接口 2.4 USB总线协议 2.4.1 通信过程 2.4.2 概念关系 2.4.3 管道PIPE 2.4.4 传输 2.4.5 事务 2.4.6 包结构与类型 2.4.6.1 令牌包 2.4.6.2 数据包 2.4.6.3 握手包 2.5 描述符 2.5.1 设备描述符…