当前位置: 首页 > 编程日记 > 正文

企业为什么要使用基于Docker的PaaS/CaaS平台

作者:精灵云


前言
早在十多年前国内外的一些大厂就开始投入研发和使用容器技术,比如Google,对他们来说,使用容器能够充分利用计算资源节省硬件成本。而这几年——众所周知——真正把容器技术发扬光大的是Docker。Docker的slogan“Build,Ship & Run anywhere”定位非常清晰,Docker的出现打破了传统运维模式里从打包到部署的过程中环境、语言、平台不一致的乱象,将这一整套开发运维模式标准化了,从而真正帮助企业实践了DevOps和微服务化。
但是,国内的大型企业面临技术转型的的时候,历史包袱太沉重,对Docker的接受和部署非常缓慢。同样地,多数的中小型企业也并未把Docker作为生产环境上部署和管理服务的标配,而选择继续使用传统的运维方案。造成这种现象的原因是什么呢?可能原因之一是企业从业人员对Docker的学习认知并不够。之二是目前市面上Docker的容器编排系统很多,常见的就有K8s,Mesos,Swarm,Rancher,Newben,编排系统的学习和认知成本也进一步提升了企业应用Docker的难度。

1.png


企业为什么要使用Docker
这个问题的本质是企业用Docker究竟能做什么,要回答这个问题,需要我们回归到Docker本身来分析。Docker本身只是提供了一个运行环境,除了把服务跑起来之外,要让多个服务容器协同起来工作,实际还需要一个容器编排系统。一般来说企业期望编排系统能帮助实现如下几个目的:
 定义服务栈
提供一种机制,可以用配置文件来定义服务的网络端口,镜像及版本,在需要的时候通过配置可再现的创建出一整套服务。
 服务发现、注册和注销
需要在创建服务后自动创建DNS记录用于访问相关容器,容器状态健康后注册SRV信息。
 健康检查
可以精细化控制服务注册时机,以支持容器正常启动后的初始化完成后再注册服务,以对外提供稳定可用的服务。
 自动扩容和缩容
实时监测容器CPU和内存使用情况,当容器平均性能指标超过阈值一段时间后启动自动扩容,创建更多容器以达到阈值要求,当没有主机资源运行新容器时,自动申请新主机。当一段时间负载持续低于阈值启动缩容优先删除新创建容器和主机,以释放资源和降低运营成本。
 合理的调度
要求最大限度的榨取主机资源避免浪费,并可实现快速的创建容器,减少镜像拉取时间和磁盘空间浪费。
 负载均衡和高可用

使用Docker的三个阶段
根据我们的观察,根据企业规模和阶段性需求的不同,在使用Docker技术的时候分了三个阶段来进行。

 阶段一:利用开源工具实现一定功能
由于一个Docker容器只是一个(或一组)进程的封装,一个容器需要绑定宿主机的端口来向宿主机之外的网络提供服务,为了避免端口冲突,对于需要暴露端口的容器,Docker会随机绑定一个宿主机端口,这个时候就需要服务发现来帮助不同机器上的服务来进行通信了。举例一个简单的方案:Docker-discover和Docker-register。
这个方案提供了一套系统的几个基本功能:应用发布,服务发现,负载均衡和进程守护。除了提供一致的运行环境使服务的发布和回滚比较可控,这套简单的系统在发布流程上还是像传统运维一样需要远程执行脚本,功能比较简单,适用于小企业,随着后端系统成长起来,很快就不够用了。
 阶段二:开源容器编排工具
第二个阶段是选择开源容器编排框架来管理,常见的开源容器编排工具有Kubernetes,Swarm和Mesos 。市面上也有同时支持这三种开源容器编排引擎的容器管理打包方案,通常作为入门级容器管理平台使用。这种入门级的方案虽然是开源的,但技术上的文档明显欠缺,社区中的使用难题也很少有公司之外的contributor,当暴露一些难题的时候就很难解决,这点和Kubernetes有很大不同。

2.png


Kubernetes提供的是一个框架,要求使用者对他的组件有一定程度了解,使用之前需要不少配置工作,对Docker入门者来说,学习能力要求很高,不过好在社区有各种contributor,提供了很多帮助部署的installer。除了对学习能力有要求以外,对中小企业来说,对基础设施的投入肯定不如大企业,一般没有专人去熟悉Kubernetes这种大型开源项目。
当然,像Kubernetes这样的容器编排系统本身很复杂,体量很大,很多企业也出现过当丢包严重的时候问题排查起来很困难的局面,毕竟要深入到庞大的代码中定位问题本身就是件很不容易的事情。
虽然现在Kubernetes是容器调度主力军,但我们认为调度引擎是容器最核心的模块,在PaaS这个关键的云计算领域不应该由国外来主导,特别是在军工、政务、金融等领域,我们需要自主研发的调度引擎,只有这样我们才能掌握云计算基础架构的核心技术。于是就有了第三个阶段的使用建议:高定制化的容器云平台。
基于Docker的PaaS/CaaS平台
为了适应国内的企业需求,出现了很多运用Docker开源调度框架的容器云平台,这些平台大都有一个特点:“服务本地化,核心开源化”。我们认为这并不是真正的本地化,真正的本地化应该是在满足不同领域不同企业的上云和转型需求的同时能随时响应定制化需求。基于这样的思想,被称为“中国的K8s”的容器调度引擎Newben应运而生。
Newben是精灵云全自主研发的容器调度引擎,也是目前国内唯一自研引擎,具备多项技术专利和著作专利,定制能力强、支撑功能丰富,能为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能。如下图所示,将Newben、K8s、Mesos和Swarm进行详细对比,会发现Newben事实上吸取了各开源调度引擎的长处,在网络、服务发现、负载均衡、弹性伸缩、高可用、CI/CD集成、镜像集成、日志监控等方面都有着非常大的优势。

3.png


(Newben和开源容器调度框架的对比)
Ghostcloud EcOS平台是精灵云旗下的企业级容器云平台,内置自研容器调度引擎Newben,同时适配多种开源框架,如K8s、Swarm等。由Ghostcloud精灵云全自主研发的EcOS平台基于精灵云PaaS/CaaS云核心功能模块,能支持私有云和混合云部署,满足企业的容器云部署需求,为企业研发、运维及新业务上线部署提供了一整套解决方案和管理平台。不仅帮助企业大幅削减成本和提升效率,帮助传统企业加速所需业务互联网化进程,更能帮助互联网企业加快产品迭代,提高产品市场占有率。 

4.png


(EcOS的平台架构)
Ghostcloud EcOS的应用场景
Ghostcloud EcOS平台作为统一的平台, 可服务于多个解决方案,应用到政务、教育、金融、互联网、医疗等多个行业和领域。接下来我们以金融行业为例来说明。

5.png


(EcOS应用场景)
传统的金融行业受迫于银监会的要求(容器作为两项最核心技术之一被写入十三五规划)需要在企业内部推行云计算技术,同时互联网金融的爆发式增长,传统金融公司在技术上无法应对自如。蚂蚁金服和万达金融等大型互联网金融公司都在使用容器作为后台支撑平台,传统金融企业也需要类似的PaaS/CaaS平台,但是本身没有搭建和维护能力。

面对这些需求,需要从几个方面解决:
• 整合系统内部资源,推行基于容器的开发、测试、生产和运维一体的PaaS平台;
• 推行DevOps,开发运维一体化,降低运维成本;
• 推行敏捷和CI/CD,加快系统交付和部署;
• 使用基于容器的弹性负载均衡系统,适配突发流量;
• 加固开源容器系统,对镜像及镜像仓库进行私有化定制。
在具体的实施中,使用EcOS容器云平台,对仓库和镜像进行加固,在内网和公网环境混合管理做安全隔离,借助平台自带的CI/CD流程,标准化研发流程;借助EcOS的资源调度框架,动态资源调配。通过容器只暴露特定端口,提升了整个系统的安全性,系统开发速度和上线速度大幅度提升,团队整体响应速度也大幅度提升。通过商用Docker云平台,提升了IT部门的技术能力,更好的适应了未来业务发展需求,物理资源利用率提升,能够很好的应对突发的流量暴增,在有限资源下提升了系统并发量。

结语
国内的企业需要在使用Docker进程中选择更本土化的容器编排系统,只有拥有核心可控的技术才能真正开展云计算基础设施建设。推荐选择能针对个性化需求做定制化解决方案的PaaS/CaaS容器云平台——Ghostcloud EcOS。

相关文章:

算法基础知识科普:8大搜索算法之红黑树(下)

这是介绍红黑树的最后一部分,令y为要删除结点,n为要删除结点的子结点(子结点最多有1个),w为y的兄弟结点,删除操作的重点是使红黑树删除结点并通过调整后仍满足自身是搜索二叉树和设定的三点规则。删除操作可…

asp提供在线文章翻译的功能(转)

有时候想为我们的网页提供多语言支持,如果一种语言用一张网页来做实在太麻烦了,幸好Google提供了语言工具功能,下面介绍如何利用它来实现网页多种语言之间的转换。 作者:淘特网 出处:http://www.tot.name 注&#xff1…

Java基础学习总结(13)——流IO

2019独角兽企业重金招聘Python工程师标准>>> 一、JAVA流式输入/输出原理 流是用来读写数据的,java有一个类叫File,它封装的是文件的文件名,只是内存里面的一个对象,真正的文件是在硬盘上的一块空间,在这个文…

ASP.NET 2.0 绑定高级技巧

1.简单数据绑定定<!--ASP.NET 1.x data binding expression --><%# DataBinder.Eval(Container.DataItem, "Price") %><!--Equivalent ASP.NET 2.0 data binding expression --><%# Eval("Price") %><!--XML data binding --&g…

JSP中的EL表达式详细介绍

2019独角兽企业重金招聘Python工程师标准>>> 一、JSP EL语言定义 EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算。JSP 2.0…

Software development Problem

筹划“软件开发过程”以及“面向对象分析与设计”这个话题已有很长时间。虽然大学毕业后在Rational公司学习过这方面的内容&#xff0c;这几年带着团队也一直践行里面的理念与方法&#xff0c;但总感觉自己理解的不透彻&#xff0c;不敢动笔。 10年过去了&#xff0c;总不能一…

Spring MVC常用注解说明

2019独角兽企业重金招聘Python工程师标准>>> 使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能。02 之前在使用Struts2实现MVC的注解时&#xff0c;是借助struts2-convention这个插件&#xff0c;如今我们使用Spring自带的spring-webmvc组件来实现同…

代码规范性与品质问题~

&#xff12;&#xff10;&#xff10;&#xff11;年在delphibbs做“首届Delphi编程竞赛”活动(http://www.delphibbs.com/delphibbs/dispq.asp?lid650664)的时候&#xff0c;曾就代码的规范性与品质问题与大家进行过讨论&#xff0c;摘录一些言论如下&#xff1a;3. 我们公司…

FutureTask中Treiber堆的实现

2019独角兽企业重金招聘Python工程师标准>>> 在文章FutureTask源码分析中简单说明了FutureTask中使用Treiber堆栈来保存等待结果的线程&#xff0c;本文将详细分析其原理。 Treiber堆使用CAS操作来实现节点的入栈和出栈&#xff0c;由于CAS操作只是保证操作的原子性…

软件开发过程中遇到的问题

今天早晨去石家庄河北电力工程监理有限公司&#xff0c;回来后就在整理这篇图文&#xff0c;结果还是过了12:00。这是针对昨天图文“Software Development Problem”的翻译以及自己的一些理解&#xff0c;分享给大家。 其实&#xff0c;看看这些东西蛮好的&#xff0c;最起码能…

Java基础学习总结(9)——this关键字

2019独角兽企业重金招聘Python工程师标准>>> 一、this关键字 this是一个引用&#xff0c;它指向自身的这个对象。 看内存分析图&#xff1a; 假设我们在堆内存new了一个对象&#xff0c;在这个对象里面你想象着他有一个引用this&#xff0c;this指向这个对象自己&am…

转贴:雅虎公司C#笔试题,看看你能解答多少

这是刚在在网上看到了&#xff0c;觉得这些题目出得真不错&#xff0c;能考出一个程序员的基本功。所以先发在这里&#xff0c;做个备份&#xff0c;以后慢慢来做&#xff08;偶好像只能免强及格哦&#xff0c;呵呵&#xff0c;关于网络的题目太多了&#xff0c;偶不太熟啊&…

亿级PV请求的三种负载均衡技术

在互联网不断渗透到生活中的今天&#xff0c;各种各样的网络服务存在在我们身边&#xff0c;他们的访问流量也是大得惊人。一个大型网站&#xff08;百万PV以上&#xff09;想要正常访问&#xff0c;单单靠一台服务器是不可能提供稳定服务的。这时候就需要用负载均衡技术将海量…

The Six Best Practices(1~3)

前几期的图文我们介绍了软件工程中常见的问题&#xff0c;分析了产生这些问题的根本原因&#xff0c;引出了软件工程中的六个最佳经验。今天我们具体介绍这些最佳经验的内容。

Java项目命名规范

2019独角兽企业重金招聘Python工程师标准>>> 一、命名规范 1、 项目名全部小写 2、 包名全部小写 3、 类名首字母大写&#xff0c;如果类名由多个单词组成&#xff0c;每个单词的首字母都要大写。 如&#xff1a;public class MyFirstClass{} 4、 变量名、方法名首字…

一道数据结构算法题

现有一个链表&#xff0c;证明如果存在环&#xff0c;则&#xff1a;使用两个指针同时前进但步长不一样&#xff0c;则能够在有限步之后能够相逢。题目的意思是我归纳出来的&#xff0c;我的解题思路是这样的&#xff1a;能够相下逢的意思是&#xff1a;在走了x步以后&#xff…

win7系统下载 ghost win7 Sp1 32位纯净3月版

win7系统下载 ghost win7 Sp1 32位纯净3月版软件名称: Ghost Win7 Sp1 32位纯净3月版软件语言: 简体中文软件大小: 3.81大小: GB发布日期: 2017-03-21文件名称: ZJY_Ghost_win 7_X86_CJ201703.GHOM D 5: C21A7A17D8C2568A05844C5…

The Six Best Practices(4~6)

昨天图文介绍了The Six Best Practices的前三个经验&#xff1a;迭代化开发、需求管理、基于构件的体系构架&#xff0c;今天介绍后面的三个经验&#xff1a;可视化建模、持续的质量验证和变更管理。

代码生成器前戏 之 数据库元数据

总结&#xff1a;代码生成器大致有两种方式&#xff0c;1.根据po 生成 表 结构 等系列类&#xff0c;如 Hibernate自动生成 2.根据表生成 po 等系列类。其实实际 开发时候 多半还是 先设计好表&#xff0c;然后生成 的情况多。 元数据&#xff1a;描述数据的数据&#xff0c;就…

有感于框架设计难,实施框架更难!

很久没有写了&#xff0c;不能怪没有时间&#xff0c;只是自己太懒。这两天休息&#xff0c;有时间重新回顾一下项目的设计&#xff0c;从目前的开发情况看&#xff0c;最早设计的一些编程框架&#xff0c;并没有很好的遵守&#xff0c;看上去比较零乱&#xff0c;这个可能由于…

六个最佳的软件工程实践(基于构件的体系结构、可视化建模)

昨天图文介绍了迭代化开发和需求管理&#xff0c;今天我们介绍基于构件的体系结构和可视化建模。基于构件的体系结构是软件开发中最体现创造力的地方&#xff0c;可以通过“修建桥梁”来理解为什么要贯彻基于构件的体系结构以指导我们每次开发的演进增量过程。可视化建模是为了…

通讯组基本管理任务一

经常收发邮件的人都有同感&#xff1a;很多时候都需要向一组人发送邮件。如果一封封地发送&#xff0c;不仅耽误时间&#xff0c;而且很容易出错&#xff0c;将邮件发送给不应该接受邮件的收件人。Exchange Server 2010为了方便用户使用&#xff0c;通过“通讯组”和“地址列表…

无人驾驶相关数据集

普林斯顿大学人工智能自动驾驶汽车项目&#xff1a; 代码V1&#xff1a;http://deepdriving.cs.princeton.edu/DeepDrivingCode_v1.zip 代码V2&#xff1a; http://deepdriving.cs.princeton.edu/DeepDrivingCode_v2.zip 训练集&#xff08;50G&#xff09;&#xff1a;http://…

六个最佳的软件工程实践(持续的质量验证、变更管理)

昨天图文介绍了基于构件的体系结构以及可视化建模&#xff0c;今天我们介绍六个最佳工程实践的最后两个&#xff0c;持续的质量验证以及变更管理。持续的质量验证是伴随迭代化开发而进行的不断验证&#xff0c;且每次迭代的测试集合都是不断递增的。质量验证不仅从功能方面要满…

css层叠样式表(一)

今天研究了下css。这东东入门不算难。可是想写出好的样式就得有很深的功底了。按照老大给网址&#xff0c;12天学会网页设计。做下总结吧。css通过div&#xff08;层&#xff09;来定位&#xff0c;通过层的margin,padding,border等属性来控制板块的间距。常用的模型是盒状模型…

aspx页面使用ajax遇到try catch中使用Response.End()报错

1、使用Ajax接收数据&#xff0c;在返回Response.Write()后应该调用Response.End()才能将数据写入到调用的页面,才能被jQuery的回调函数获取到返回的JSON数据 2、在try--catch里面不能用Response.End()&#xff0c;否则会报错&#xff1a;由于代码已经过优化或者本机框架位于调…

GO是更好的编程语言吗?

引言 团队有项目考虑用GO重写&#xff0c;所以花了些时间调研GO。 第一次接触GO是2年前&#xff0c;17年3月份&#xff0c;全职钻研一周&#xff0c;彼时C中毒太深&#xff0c;内心排斥其他编程语言&#xff0c;看其他语法总觉得有点怪&#xff0c;而且有“C/C能做任何事&#…

定位DIV滚动条

如果由于table中有一个下拉框&#xff0c;还有一个treeview时&#xff0c;treeview的所有节点都是取于下拉框的下拉选项来的&#xff0c;所以在第一定位这之后&#xff0c;当选择其他下拉框中其他的选项时&#xff0c;DIV的scrollTop值是会一直保存前一个步聚DIV滚动条所在的位…

JS作用域相关知识(#精)

在学习《你不知道的JS》一书中&#xff0c;特将作用域相关知识在此分享一下: #说到作用域&#xff0c;就不得不提到LHS查询和RHS查询: 1)如果查询目的是对变量进行赋值&#xff0c;则使用LHS查询 2)如果查询目的是获取变量的值&#xff0c;则使用RHS查询 作用域的查询都会从当前…

RUP within the context of the Six Best Practices

前面几期图文介绍了软件工程中常见的问题&#xff0c;以及找到它们的根本原因&#xff0c;提出了在软件工程实践中总结出来的六个最佳工程实践。迭代化开发、需求管理、基于构件的体系结构、可视化建模、持续的质量验证、变更管理。今天我们介绍Rational公司的RUP&#xff0c;看…