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

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

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

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

云的中立性,该考虑了!

在云时代,诸如容器和无服务器计算这样的云原生技术是构建高可移植性应用程序时不可或缺的。与日渐繁琐并且几乎无法管理的单体(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,拥抱自由选择与灵活自主的云平台,释放创新无限可能!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 使用 GitHub Copilot 协助调试

🎀🎀🎀【AI辅助编程系列】🎀🎀🎀 Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…

springboot限流注解

我们在工作中 有些接口访问量过大 为了保证服务的正常运行可以增加限流 第一步 引入aop和redis <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency…

MySQL多表查询时有哪些连接方式?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL多表查询时有哪些连接方式?】面试题。希望对大家有帮助&#xff1b; MySQL多表查询时有哪些连接方式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中进行多表查询时&#xff0c;常见的连接方式有以下…

Python | 虚拟环境01 - 什么是虚拟环境、它的由来

导言 python3真的不是安装了就完事&#xff0c;必须理解虚拟环境是什么才算是初步掌握python环境。 学习python3虚拟环境&#xff0c;建议参考B站教程。这位博主用了6个视频&#xff0c;每一个视频仅仅几分钟。居然把python3的虚拟环境讲明白了。 虚拟环境&#xff08;Virtual…

【已解决】在Visual Studio里将应用与Microsoft Store关联时提示网络异常

发布Windows应用时。在Visual Studio里点击"发布“&#xff0c;将应用与Microsoft Store关联时&#xff0c;一直提示网络错误。 查了一下论坛&#xff0c;发现之前也经常出现&#xff0c;但我是第一次遇到。 不能就这样一直被卡着呀&#xff0c;研究了一下&#xff0c;还…

html基础-认识html

1.什么是html html是浏览器可以识别的的标记语言&#xff0c;我们在浏览器浏览的网页就是一个个的html文档 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>认识html</title> </head> <body><h1…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(四)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(四) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…

MySQL 深入理解隔离性

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 MySQL 深入理解隔离性 收录于专栏[MySQL] 本专栏旨在分享学习MySQL的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 由于之前在 MySQL 事务特…

Nacos 3.0 考虑升级到 Spring Boot 3 + JDK 17 了!

Nacos 由阿里开源&#xff0c;是 Spring Cloud Alibaba 中的一个重要组件&#xff0c;主要用于发现、配置和管理微服务。 由于 Spring Boot 2 的维护已于近期停止&#xff0c;Nacos 团队考虑升级到 Spring Boot 3 JDK 17&#xff0c;目前正在征求意见和建议。 这其实是一件好…

【硬件接口】I2C总线接口

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、概述 I2C总线是一种非常常用的总线&#xff0c;其多用于一个主机&#xff08;或多个&#xff09;与单个或多个从设备通讯…

监控视频汇聚融合云平台一站式解决视频资源管理痛点

随着5G技术的广泛应用&#xff0c;各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据&#xff0c;并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而&#xff0c;随着数字化建设和生产经营管理活动的长期开展&#xff0…

GEE+本地XGboot分类

GEE本地XGboot分类 我想做提取耕地提取&#xff0c;想到了一篇董金玮老师的一篇论文&#xff0c;这个论文是先提取的耕地&#xff0c;再做作物分类&#xff0c;耕地的提取代码是开源的。 但这个代码直接在云端上进行分类&#xff0c;GEE会爆内存&#xff0c;因此我准备把数据下…

Spring Boot 集成 MyBatis 全面讲解

Spring Boot 集成 MyBatis 全面讲解 MyBatis 是一款优秀的持久层框架&#xff0c;与 Spring Boot 集成后可以大大简化开发流程。本文将全面讲解如何在 Spring Boot 中集成 MyBatis&#xff0c;包括环境配置、基础操作、高级功能和最佳实践。 一、MyBatis 简介 1. SqlSession …

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 项目介绍 2.0 用户登录功能 3.0 用户管理功能 4.0 影院管理功能 5.0 电影管理功能 6.0 影厅管理功能 7.0 电影排片管理功能 8.0 用户评论管理功能 9.0 用户购票功…

【字符串匹配算法——BF算法】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 BF算法介绍及过程演示代码实现过程下节预告KMP算法利用next数组存储子串中j回退的位置&#xff08;…

单幅图像合成 360° 3D 场景的新方法:PanoDreamer,可同时生成全景图像和相应的深度信息。

论文介绍了一种从单幅图像合成 360 3D 场景的新方法。该方法以连贯的方式生成全景图及其相应的深度&#xff0c;解决了现有最先进方法&#xff08;如 LucidDreamer 和 WonderJourney 的局限性。这些方法按照生成轨迹依次添加细节&#xff0c;通常在循环回输入图像时导致可见的接…

【蓝桥杯】46195.水仙花数

水仙花数 问题描述 打印所有100至999之间的水仙花数。所谓水仙花数是指满足其各位数字立方和为该数字本身的整数&#xff0c;例如 153135333。 样例输入 无 样例输出 153 370 371 407解题思路 遍历100到999之间的所有整数。对每个整数&#xff0c;计算其各位数字的立方和…

#思科模拟器通过服务配置保障无线网络安全Radius

演示拓扑图&#xff1a; 搭建拓扑时要注意&#xff1a; 只能连接它的Ethernet接口&#xff0c;不然会不通 MAC地址绑定 要求 &#xff1a;通过配置MAC地址过滤禁止非内部员工连接WiFi 打开无线路由器GUI界面&#xff0c;点开下图页面&#xff0c;配置路由器无线网络MAC地址过…

cpolar使用步骤

功能&#xff1a;内网穿透 下载地址&#xff1a;cpolar - secure introspectable tunnels to localhost 1 找到安装目录 2 进入命令行 目录处输入 cmd 3 验证 authtoken 不同用户 验证码不同。 注册后可以使用 cpolar.exe authtoken MzBlNzMwODktZjA3Yi00ZjJlLWJiMzQtNWU…

【排序算法】——插入排序

目录 前言 简介 基本思想 1.直接插入排序 2.希尔排序 代码实现 1.直接插入排序 2.希尔排序 总结 1.时空复杂度 2.稳定性 尾声 前言 排序(Sorting) 是计算机程序设计中的一种重要操作&#xff0c;它的功能是将一个数据元素&#xff08;或记录&#xff09;的任意序列&…