从物理机到K8S:应用系统部署方式的演进及其影响

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。

概述

随着科技的进步,软件系统的部署架构也在不断演进,从以前传统的物理机虚拟机DockerKubernetes,我们经历了一系列变化。

这些技术的引入给我们带来了更高的资源利用率、更快的部署速度和更强大的扩展性,下面让我们一起探索这些演进,了解如何从传统部署走向现代化架构,为软件系统的开发和部署带来更多的便利和灵活性。

物理机部署

物理机部署在计算机早期阶段比较盛行,因为那时候虚拟化和云计算等技术还没有普及,物理机是主要的部署选择。

优点
  • 性能和资源控制:物理机提供了直接访问硬件资源的能力,在某些对性能要求较高的应用场景中,可以实现更好的性能表现。
  • 硬件特定需求:某些应用程序可能对特定硬件设备或外部接口有依赖,例如需要直接访问物理网卡或存储设备
缺点

系统资源利用率较低

  • 不同应用程序依赖于同一类库的不同版本,必须使用不同的机器
  • 不同的应用程序不能共用同一端口,这使得在某些场景下,即使计算节点还有足够的计算资源,依然无法通过 部署多个实例来提供服务

系统资源无法进行有效隔离

  • 很可能出现一个应用程序耗光所有资源,导致其他应用程序无法正常运行的情况。
  • 无法做到应用程序快速弹性扩容
运维方式

物理机代表:IBM小型机、HP小型机,在此架构和部署的模式下,哪种应用部署在哪些节点上,往往是固定不变的,这使得自动化运维变得困难重重,通常的做法是人工维护应用与服务器之间的关系表

虚拟机部署


虚拟机是一种将物理计算机资源划分为多个独立的虚拟环境的技术,通过虚拟化软件,可以在一台物理服务器上运行多个虚拟机,云计算的兴起和发展,使得虚拟机得到了更广泛的应用,截止目前,大部分还是有在用虚拟机部署。

优点
  • 硬件资源隔离
  • 资源的充分利用
缺点
  • 运维管理成本较高,需要管理的主机数量是原来的数倍,管理复杂度的提升显而易见
  • 依赖库需要单独安装,版本很难保持一致
  • 不容易迁移
运维方式

小公司自建私有云,采用业界开源OpenStack的云平台进行管理,大的公有云公司采用自己的云平台进行管理,如:阿里云、腾讯云、华为云、青云、AWS

容器化部署

容器化部署主要是以Docker为代表,Docker的出现填补了传统虚拟化技术的一些不足之处,如启动时间长、资源占用高等问题。它通过利用Linux内核的容器特性,实现了更为轻量级的虚拟化解决方案,所以不少公司采用了这种方式部署。

优点

一致的运行环境

提供了除内核外完整的运行时环境,确保了应用运行环境一致性

快速移植

由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的

更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间

更高效的利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效

缺点

由于容器数量庞大,通过手动运维方式工作量比较大

与虚拟机比较
特性容器虚拟机
启动秒级分钟级
硬盘使用MBGB
性能接近原生弱于
系统支持量单机支持上千个容器一般几十个
管理成熟度已k8s为代表以OpenStack、vmware为代表

K8S部署

尽管Docker提供了一种方便的容器化解决方案,但在进行大规模部署和管理时,会面临大量的版本更新升级部署,以及高可用的管理等问题。

Kubernetes提供了更强大和全面的容器管理和编排功能,他能够自动处理复杂的任务,如容器调度、扩缩容、服务发现和负载均衡等,简化了部署和管理过程,同时提供了更好的可扩展性和可靠性,所以是现在各大公司采用的主流部署方式。

优点

应用自动化部署

只需要执行一个命令,就可以把服务启动起来,而不用关心该部署到那个节点上。

弹性扩缩容

使用一个简单的命令、控制台 或基于 CPU 内存使用情况自动对应用程序进行扩容或者缩容

灰度发布

保证在应用版本升级时,对线上用户无感知

多环境部署支持

支持公有云,私有云,混合云,多重云部署

可维护好

提供了专门的运维系统界面,可以在线管理大规模应用,进行升级、回滚、监控等,比如 RancherKubeSphere

缺点

K8s 系统架构比较复杂,对于初学者门槛有点高

运维方式

采用k8s进行容器管理,在发布服务时,构建基础容器镜像,到镜像仓库,在对应环境访问镜像仓库,拉取对应容器镜像进行部署

以上我们介绍了物理机、虚拟机、容器化和K8s部署区别,我们可以根据自身的需求选择最适合自己的部署方式,希望对你有所帮助。

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

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

相关文章

VBA技术资料MF88:测试Excel文件名是否有效

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…

系列二十五、Spring设计模式之适配器模式

一、适配器模式 1.1、概述 适配器模式(Adapter Pattern)用于兼容不相关的接口之间,类似于一个桥梁,它结合了两个独立接口的功能,这种类型的设计属于结构型模式,为了方便大家伙的理解,我举个例子…

什么是美颜sdk?集成第三方美颜sdk的步骤

本文将深入探讨如何集成第三方美颜sdk,为直播平台引入更先进、更具吸引力的美颜特效。 第一步:选择合适的第三方美颜sdk 在开始集成美颜sdk之前,首要任务是选择适合自己直播平台需求的第三方美颜sdk。不同的sdk可能具有不同的特色和性能&a…

如何修改.exe文件的修改时间,亲测有效

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 演示视频: 10秒钟实现将文件的修改…

Linux:可视化管理工具Webmin的安装

一、下载 地址:Webmin官网 我这里下载的是1.700-1版本 二、安装 1、在虚拟机上新建目录并安装软件 mkdir /opt/webmin rpm -ivh webmin-1.700-1.noarch.rpm2、修改webmin的root密码 /usr/libexec/webmin/changepass.pl /etc/webmin root 1234563、修改端口(可…

docker读取字体异常

解决方法 docker容器中执行 apk add ttf-freefont 根据版本不同 apk add ttf-dejavu-fonts apk add ttf-bernoulli

【开源】基于Vue.js的医院门诊预约挂号系统的设计和实现

项目编号: S 033 ,文末获取源码。 \color{red}{项目编号:S033,文末获取源码。} 项目编号:S033,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2…

Ranger安装和使用

Ranger部署 1.准备 1.1 编译 Ranger编译(已经编译过的话,直接看1.2) 1.1.1 准备到Ranger官网下载ranger的源码:http://ranger.apache.org/download.html 1.1.2 Ranger编译的过程实在非虚拟机环境下完成的,下载好r…

chapter10-homework-Java

第十章作业 Homework01知识点 Homework02知识点 Homework03知识点 Homework04知识点 Homework05知识点 Homework06Homework07Homework08 Homework01 分析执行结果。 public static void main(String[] args) {Car_ c new Car_();Car_ c1 new Car_(100);System.out.println(…

Vue中 实现自定义指令(directive)及应用场景

一、Vue2 1. 指令钩子函数 一个指令定义对象可以提供如下几个钩子函数 (均为可选): bind 只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。inserted 被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已…

三.排序与分页

目录 一.排序数据二.分页 一.排序数据 1.排序规则 使用ORDER BY 子句排序 ASC(ascend)升序DESC(descend)降序 ORDER BY 子句在SELECT语句的结尾 2.单列排序 SELECT last_name, job_id, department_id, hire_date FROM e…

(蓝桥杯)1125 第 4 场算法双周赛题解+AC代码(c++/java)

题目一&#xff1a;验题人的生日【算法赛】 验题人的生日【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路&#xff1a; 1.又是偶数&#xff0c;又是质数&#xff0c;那么只有2喽 AC_Code:C #include <iostream> using namespace std; int main() {cout<<2;return 0; …

【Web端CAD/CAE文字标注】webgl+canvas 2d实现文字标注功能

一、需求背景 在CAD/CAE领域经常会遇到显示节点编号这种需求&#xff0c;效果如下图&#xff1a; 本文介绍如何在WebGL中实现文字的显示&#xff0c;对于如何在OpenGL中实现请绕路。 二、实现原理 Canvas是HTML5提供的元素&#xff0c;用于在网页上绘制图形&#xff0c;其支…

设计循环队列

目录 设计循环队列 &#x1f642;【1】数组循环队列 思路分析 ❓1 ❓2 ❓3 易错总结 创建MyCircularQueue 初始化myCircularQueueCreate 为空否myCircularQueueIsEmpty 为满否myCircularQueueIsFull 插入元素myCircularQueueEnQueue 删除元素myCircularQueueDeQue…

无醇啤酒行业分析:预计2028年将达到106亿美元

按照国际惯用的标准划分&#xff0c;通常将酒精度3.5%-4%的称为普通啤酒&#xff0c;将酒精度大于0.5%、小于2.5%的称为低醇啤酒&#xff0c;而酒精度小于0.5%便称为无醇啤酒。酒精给人带来的兴奋感&#xff0c;与体育比赛的紧张刺激相辅相成&#xff0c;啤酒也成为了许多球迷们…

基于UDP的网络聊天室

客户端 #include <myhead.h> //定义存储信息结构体 typedef struct _MSG {char code; //操作码&#xff1a;L表示登录C表示群聊S表示系统消息S表示退出char name[128]; char txt[256];}msg_t;//定义保存客户端网络信息的链表 typedef struct _ADDR {struct sockaddr_i…

【elementUI】el-tab相关问题

Tabs 标签页 分隔内容上有关联但属于不同类别的数据集合。 <template><el-tabs v-model"activeName" tab-click"handleClick"><el-tab-pane label"用户管理" name"first">用户管理</el-tab-pane><el-tab-p…

Linux重置MySql密码(简洁版)

关闭验证 /etc/my.cnf-->[mysqld]-->skip-grant-tables 重启MySql service mysql restart 登陆MySql mysql -u root 刷新权限 FLUSH PRIVILEGES; 更新密码 ALTER USER rootlocalhost IDENTIFIED BY 123456; 退出MySql exit 打开验证 /etc/my.cnf-->[mysqld]-->skip…

建设“参与城市”大学--SMU在2023年绿色金融全球论坛上分享观点

2023年11月21日&#xff0c;由新加坡管理大学&#xff08;SMU&#xff0c;简称新大&#xff09;和中国人民大学&#xff08;RUC&#xff0c;简称人大&#xff09;联合主办的“绿色金融与治理&#xff1a;从承诺到行动”全球论坛在北京召开。论坛汇集了来自新加坡、中国及世界各…

SpringBoot项目打成jar包后,上传的静态资源(图片等)如何存储和访问

1.问题描述&#xff1a; 使用springboot开发一个项目&#xff0c;开发文件上传的时候&#xff0c;通常会将上传的文件存储到资源目录下的static里面&#xff0c;然后在本地测试上传文件功能没有问题&#xff0c;但是将项目打成jar包放到服务器上运行的时候就会报错&#xff0c…