优秀的龙芯Docker虚拟机解决方案

http://www.loongson.cn/m/view.php?aid=836

时间:2019-05-23 15:03  来源:未知   作者:龙芯中科   点击:1027次

云平台是近几年流行的服务器部署架构,现在的大型数据中心往往会安装几千台甚至上万台服务器,传统的操作系统和网络管理软件已经难以满足管理效率要求。云平台是专门面向海量服务器的管理系统,有虚拟机(KVM)和容器两种类型。Docker属于后者,是一种轻量级的开源容器引擎,“容器”(Container)的含义是指开发者可以将应用程序以及依赖的库文件进行打包,封装到一个镜像中,这个镜像可以在网络上发布,用户把镜像传输到要运行应用程序的服务器上,在Docker引擎上以容器的方式运行,每一个容器是一个自成一体的应用实例。容器在底层使用沙箱机制,每一个容器拥有独立的文件系统,各个容器之间在逻辑上隔离,容器之间的访问受到严格的安全限制,从而保证容器内运行的应用和数据的安全。

龙芯电脑完善支持Docker,具备了建立大规模集群节点的管理能力,适合做为公有云或者私有云的基础架构。

一、为什么要有容器技术

云平台的兴起时间在2000年以后,到2010年成为IT领域的热门术语。云平台兴起的原因主要是两点:第一是服务器数量成倍增长,第二是软件平台的复杂性和差异化日益严重,尤其体现在Linux操作系统的碎片化。网络上的文章一般强调前者,其实服务器数量上的增长只是表面现象,后者才是导致云平台产生的最主要原因。

1. Linux操作系统的碎片化

Linux操作系统的碎片化是指Linux衍生出几百种各不相同的变体,每一种变体又分成多种版本,这种差异化会严重导致浪费开发资源、加重运营负担。Linux天生是一个在开源社区上自由生长的操作系统,每个人都可以从源代码制作一个发行版(Distribution),从而形成了Debian、Fedora、Ubuntu、CentOS等为数众多的变体,据统计这样的发行版总共有几百个,常用的也有十多个。这些发行版不像企业主导开发的软件一样有较强的秩序约束,各个发行版之间存在一定的互不兼容,在软件包格式、基础软件版本、升级机制等方面都会有差别。整体上看,Linux生态呈现出严重的发散状态,这种碎片化的特性是开源软件的通病,在未来还会更加严重。

设想有一个软件公司,基于Linux开发和维护着多个软件项目。由于硬件、软件不断在升级进步,新开发的项目一般倾向于选用当时最新版本的操作系统。随着时间的积累,项目的数量逐年增长,而老的项目还需要维护,必然导致这些项目使用的操作系统各不相同。经过一定年份,软件公司会面对很多种操作系统,软件分别运行在不同版本的基础软件上,尤其是JDK、中间件、数据库等等。由于各操作系统之间不兼容,基础软件也不保证向下兼容,应用程序一旦开发完毕、代码冻结,只有在开发时确定的操作系统版本上才能保证功能正常。这种“操作系统—基础软件—应用程序”的搭配会形成组合爆炸的趋势。

2. 最原始的部署方式:独立服务器

在没有云平台之前,服务器采用原始的“独立部署”方式,每一台服务器安装一种操作系统,在上面部署一套基础软件、应用程序。只要有一种“操作系统—基础软件—应用程序”的搭配,就需要购买和部署一台服务器,如图 1所示。

图 1 基于独立服务器的部署方式

对于三个软件项目,需要三台服务器分别运行一个项目,每一个项目使用不同版本的操作系统、JDK、中间件、数据库。这种部署方式的弊端在于资源严重浪费,购买服务器的原因只是为了解决软件版本的需求,对于大型企业,经常运行成百上千个业务系统,需要投入的硬件数量是巨大的。由于现在服务器的硬件性能非常高,一个项目往往占不满服务器的计算资源,存在极大浪费,管理成本、用电消耗、机房面积都不堪重负。

3. 云平台的第一阶段:KVM虚拟机

虚拟机(Virtual Machine)是针对上述部署方式的不足,为了提高服务器硬件使用效率而提出一种改进方法。虚拟机的宗旨是把不同的操作系统、基础软件、应用程序部署到相同机器上,也就是在一台物理机上安装多个不同的操作系统,并且可以同时运行,每一个操作系统中则可以安装不同版本的基础软件,这样就实现了在一台物理机上部署不同的软件项目。虚拟机技术的典型代表有IBM OS/360(1964年)、VMware(1999年)、KVM(2006年)、VirtualBox(2007年)等。图 2是基于虚拟机的部署方式。

图 2 虚拟机的部署方式

通过使用虚拟机的方式,可以将三个软件项目运行在一台服务器上,每一个虚拟机都是一套独立的操作系统和基础软件环境。只要服务器的计算性能可以承受三个软件同时运行的压力,就可以有效减少机器数量、提高资源利用率。大部分有能力的软件公司都转型到虚拟机这种部署方式。

虚拟机为实现云平台提供了基础,云平台是实现海量服务器和应用软件的集中管控和运行服务的架构,早期的云平台都是建立在虚拟机技术上。

虚拟机的方式已经可以解决操作系统碎片化的问题,但是还是存在一定的不足,主要是启动时间慢。由于每一个虚拟机里面运行的都是完整的操作系统,这意味着每次部署一个新的应用软件,都需要创建一个新的虚拟机、启动一个完整的虚拟操作系统,这个时间一般在几分钟。感觉上几分钟可能并不是太长,但是对于生产环境上的业务系统,几分钟的时间很可能会影响很多订单收入。下一步的发展方向集中解决“怎样减少启动时间”这个问题,容器技术就是沿着这个思路产生的。

二、云平台的进化:容器技术

容器(Container)技术的本质是在一个服务器上只运行一个操作系统,每次部署一个新的软件不用重新启动操作系统,只剩下软件本身的启动时间。容器技术和虚拟机的区别如图3:

图3 虚拟机与容器的对比

虚拟机和容器的区别如下:

1. 从架构角度看,每一个虚拟机中启动的是完整的操作系统,各个虚拟机可以使用不同的Linux内核,即图10- 3中左侧的“Guest OS”的含义。而每一个容器只是一个文件系统(即应用程序 + 依赖的库文件),所有容器都使用相同的Linux内核,也就是图10- 3中右侧的“Host OS”。

⇨ 提示:什么是内核?
     Linux操作系统由几千个软件包组成,其中有一个最重要的软件,承担了操作系统最核心的功能,即课本上所讲的进程管理、内存管理、文件管理、外设管理功能,这个软件包就叫做内核。除了内核之外的其它软件总称为“文件系统”,像日常使用的所有命令行工具(ls、cd、mkdir等)都属于文件系统中的软件,另外还有图形桌面环境、Web服务器、办公软件也都属于文件系统。
     按照严格的操作系统定义,只有内核实现了操作系统本身的核心功能,其它所有的软件都是属于“应用软件”。所以,图中的Host OS、Guest OS实际上都是指Linux内核。

2. 从运行角度看,每一次虚拟机的启动过程都包括内核(Guest OS)加上应用程序的启动时间,因此往往要有几分钟;而每一个容器的启动过程不包含内核的启动时间,只有应用程序的启动时间,所以最短只需要几秒钟就可以启动一个容器。

3. 从资源角度看,容器不需要重新分配内核资源,从而比虚拟机节省了CPU和内存。一台主流的服务器运行的虚拟机数量一般不超过几十个,而运行容器则很容易突破上千个。在这个意义上,容器又被称为“轻量级虚拟机”(Light-weighted Virtual Machine)。

使用容器部署应用程序的架构如图4所示。

图4 容器的部署方式

在一台服务器上,只需要安装一个本地操作系统(例如CentOS 7),启动多个容器,在一个容器内安装任意版本的基础软件和应用软件。容器为应用程序提供隔离机制,每个容器中的应用程序只能访问本容器内部的文件系统,即使一个容器的应用程序把文件写出错误,其它容器不受任何影响。

容器的轻量级优点适应了云平台的发展需求,主流云平台在近几年都开始对容器技术进行支持。

三、容器是否能取代KVM?

由于上述优点,容器技术从产生到现在一直很火爆,大有全面取代虚拟机的势头。在Linux领域中,虚拟机技术的代表软件是KVM,容器技术的代表软件是Docker。

图5 Docker形象标识

既然容器有诸多优点,是否以KVM为代表的虚拟机技术会在将来消亡?有以下两个原因会使KVM继续保持一定的生命力:

1. 如果要部署使用不同内核的应用程序,只能使用虚拟机。由于容器在结构上不包含内核,所有容器只能共享使用相同的本地内核,这已经能满足大多数场合,但是如果应用程序依赖于不同的内核版本,那么只能使用虚拟机技术。还有一种典型场景是用于开发内核,假设一个程序员对标准Linux内核进行了修改,例如添加了新功能或者修正了一个Bug,想快速的运行调试新内核,那么无疑是不能使用容器技术的,只能使用虚拟机技术。

2. 已经使用虚拟机的云平台,还需要继续维护。如果云平台已经运行了大量的应用系统,改造成容器技术需要较大工作量,从企业利益出发有可能会考虑以虚拟机方式长久的运行下去,而对于新部署的应用系统则放到容器平台上。

鉴于上述原因,KVM虚拟机和Docker容器都是实现云平台的基础技术,Docker更具有天生优势,从商业份额上看,Docker的占用率呈现出逐年增长的趋势。

四、容器相比KVM的优势

从技术原理上,Docker天生具有“轻量”的优势,因此更容易发挥服务器物理主的性能。图 6是对Docker和KVM进行的比较,可以看到Docker在各方面的性能上全面超越KVM。

图 6 Docker全面优于KVM

现在的很多的云平台,例如阿里云、华为云,都是同时提供虚拟机、容器两种选择,用户根据自己的需要租用适合的平台。

龙芯从几年前开始就完善支持Docker方案,KVM也已经在2019年4月正式发布。用户可以针对应用场景选择Docker或者KVM中的一种,两者都可以完善的支撑公有云或者私有云平台。在绝大多数云平台中,Docker已经足够取代KVM。

参考资料

[1] 《龙芯应用开发标准教程》第10章“奔向云端:Docker虚拟机”,2018年12月,人民邮电出版社
[2] Docker官网,https://www.docker.com
[3] 阿里云容器服务平台,https://www.aliyun.com/product/containerservice
[4] Docker与KVM之间的区别,https://blog.csdn.net/wzyzzu/article/details/67644316
(责任编辑:龙芯中科)

【转贴】优秀的龙芯Docker虚拟机解决方案的更多相关文章

  1. [转帖]龙芯:Docker 配置与实践清单

    Docker 配置与实践清单 http://www.sohu.com/a/254904706_198222 文章对来官方文档及 Docker Links[1] 中链接内容进行归档整理,包含了日常工作中 ...

  2. 【转贴】龙芯内核发展策略 已经支持k8s

    龙芯内核发展策略 时间:2019-06-27 15:48  来源:未知   作者:龙芯中科   点击:1002次 http://www.loongson.cn/m/view.php?aid=1118 ...

  3. 中标麒麟龙芯平台--docker基础镜像制作

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 的出现为开发人员和运维人员带来了极大的便利.Docker在X86下常见的发行版Linux如Ub ...

  4. RAMSPEED的简单测试数据 x86虚拟机 龙芯 飞腾

    1. ramspeed 简介 http://alasir.com/software/ramspeed/ 官网为 2. 进行简单安装测试的步骤 . 下载 wget http://alasir.com/s ...

  5. 使用U盘为龙芯笔记本安装操作系统

    摘要:在没有光驱的情况下,可以使用dd命令或者ultraISO软件制作Linux安装U盘,方法适合龙芯和X86.AMD64的设备. 前段时间,由于开发需要,拿到了一部龙芯3A3000的笔记本.出厂的安 ...

  6. [转帖]全国产 台式机/笔记本/服务器都有 方正龙芯3A3000整机三连发

    台式机/笔记本/服务器都有 方正龙芯3A3000整机三连发 2019年03月29日 17:17 4171 次阅读 稿源:快科技 7 条评论 https://www.cnbeta.com/article ...

  7. [转帖]方正数码发布基于龙芯3A3000系列整机

    方正数码发布基于龙芯3A3000系列整机 http://www.loongson.cn/news/company/730.html 方正数码也出过龙芯相关的服务器和PC笔记本等 发布时间:2019-0 ...

  8. [转帖]【架构系列】龙芯loongson简介

    [架构系列]龙芯loongson简介 https://blog.csdn.net/SoaringLee_fighting/article/details/97759305 2019年07月30日 10 ...

  9. [转帖] 龙芯 中标麒麟的 源 以及K8S

    龙芯Mips64el平台上部署K8s https://ysicing.me/posts/mips64el-loongson-k8s/ YSICING May 29 2019   kubernetes ...

随机推荐

  1. .net大文件传输断点续传源码

    IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...

  2. word粘贴图片到ckeitor

    在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper. 通过知乎提供的思路找到粘贴的原理,通过TheViper找 ...

  3. CDOJ 1135 邱老师看电影 概率dp

    邱老师看电影 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit St ...

  4. pyTerra

    https://pypi.org/project/pyTerra/ pyTerra is a Python module that allows you to make requests to Mic ...

  5. 推荐系统系列(三):FNN理论与实践

    背景 在FM之后出现了很多基于FM的升级改造工作,由于计算复杂度等原因,FM通常只对特征进行二阶交叉.当面对海量高度稀疏的用户行为反馈数据时,二阶交叉往往是不够的,三阶.四阶甚至更高阶的组合交叉能够进 ...

  6. Into Blocks (easy version)

    G1 - Into Blocks (easy version) 参考:Codeforces Round #584 - Dasha Code Championship - Elimination Rou ...

  7. MySQL_(Java)提取工具类JDBCUtils

    MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC创建用户名和密码校验查询方法 传送门 MySQL_(Java)使用preparestatement ...

  8. Java线程中的异常处理

    对于对线程,当主线程中有子线程运行出现异常时,主线程是不能捕获到该异常的,子线程会直接退出,不会记录任何日志. 解决: 1.子线程中try catch. 2.设置线程的未捕获异常处理器,Uncaugh ...

  9. 「Luogu P5603」小O与桌游

    题目链接 戳我 \(Solution\) 我们来分析题目. 实际上就是求一个拓扑序满足拓扑序的前缀最大值最多/最少 对于第一种情况,很明显一直选当前能选的最小的是最优的对吧.因为你需要大的尽可能多.用 ...

  10. java web过滤器防止未登录进入界面

    import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import ja ...