文档章节

为什么CoreOS和Docker的分手是命中注定的

七牛云
 七牛云
发布于 2014/12/04 21:19
字数 1866
阅读 2877
收藏 48
点赞 6
评论 12

 

 

"韦恩·格雷茨基曾说过:“我总是溜向冰球将达到的点,而不是追逐它曾在的地方。”


关于Docker是否应该扩大产品的边界以扩张CoreOS的集群管理范围的争论由来已久,这也直接导致了CoreOS开发了自己的容器Rocket来与Docker争雄。这种现象可以被 Clayton Christensen教授的  Law of Conservation of Modularity 章节中的观点合理地解释:

“根据我们的研究,存在这样一种现象,当价值链上的一种产品在商品化的同时,与此同时在价值链上肯定会有一种当前产品非商品化的趋势, 这种相互作用的进程就意味着,当新的破坏性浪潮冲刷一个行业时,差异化能力仍然在价值链上不断的转移着。当发生这种情况时,那些将自身定位再不够完善的价值链区间的企业就能够盈利 ”    - Clayton Christensen, 第六章:创新者的方法。

关于Docker和CoreOS之间的这点事在科技界并不新鲜,在计算机产业发展的初期就曾经发生过。 差异化能力在价值链上不断的转移时,力图拥有这种能力的人之间就会产生各种对抗。 就像在冰球比赛中一样,总有人滑向价值将要产生的地方。

历史不会重演,但总是惊人地相似。起初,大型机的发展总是差强人意,所以被整体设计、制造和出售是一个大的趋势。IBM在这一整合的历史趋势中获得了大部分利润,由于它的供给能够填补当时这种趋势中的不足。几年后,小型机和大型机已经发展得足够完善了。这时候利润从组装整个机器的整合资源者(如IBM和康柏)转移到各个部件的生产商了:操作系统(微软),处理器(Intel),存储器和驱动器。现在又到了整合资源的商家通过填补整合资源的空白来获取利润的时代了。

在台式机的领域里,处理器和操作系统一开始不那么令人满意,因此价值转移至此并不断被持续改善。但存储器和驱动器就不那么幸运。当他们发展得足够好并且能够进行模块化操作的时候,利润早已经被生产DRAM的厂家瓜分大半。

在云服务领域,截至2013年云服务商提供的虚拟机服务已经足够完善而且成功商品化。发展得并不尽如人的方面是应用的重构、部署和多服务器的管理。这时涌现了一大批工具如puppet,chef 和ansible,但是所有工具的表现不分伯仲。 直到王者Docker在Github上的出现才打破了现有的格局。

从模块化和整合化的方面来说,我们可以认为Docker被设计的初衷是在独立封装和在任何平台都可以同步运行。Docker将操作系统、虚拟机、物理机和基于上面的操作整合起来进行商品化。同时提供了一系列的API,使得其他人能够基于这些API进行操作。Docker不能商品化的部分是数据中心,我们稍后会解释为什么特别强调这一点。

从一个开发者的角度,把应用封装在Docker的意义在于你可以你整个云服务作为一个模块进行操作,这其中的模块只是一个可以被替代的商品。Docker的伟大之处在于你可以任意地把你的应用进行迁移而无需做出其他改动。这对于谷歌这样的云服务的提供者可不是一个好消息,因为用户的迁移成本变得非常低。这时代,价值就从提供虚拟环境VM的云服务商流向Docker。

Docker对于开发者的意义在于,封装应用只需要Docker就够了。可以预见的是将会很快出现一大批公司提供基于Docker的无差异的整合服务。最著名的无疑是CoreOS。CoreOS提供了分离式的linux版本服务和基于容器Docker的集群机服务。CoreOS剥离了虚拟机和容器Docker,并以单一集群和商品化的数据中心进行代替。价值再次进行转移,从Docker转向整合Docker之后提供的服务。无论他们承认与否,CoreOS与其友商都是其他云服务商的潜在威胁:他们要将云服务及其建立在之上的整合平台进行商品化。

感受到这样的威胁,如果采取调整自己的服务以适应Docker的发展这样的策略对于谷歌这样的云服务提供商来说并不奇怪。他们的服务可以基于自己的硬件平台并将Docker整合在自己的服务里进行管理,这可以使价值重新分布。但令人大跌眼镜的是,谷歌又推出了自己的容器集群管理工具 Kubernetes。直到现在我还是理解不能。

那最后留给Docker的是什么呢?从一开始他提供了一个模块化的组件供其他应用使用。这对于其他组件是有很大价值的,但对Docker却没有什么价值,因为这个过程并不能获得极大的利润。完全商品化并不是一条好的出路,对于Docker的投资人来说肯定也不会带来极高的回报率。

所以CoreOS肯定会把Docker当作一个商品的构成的要素,当Docker意识到自己的价值不过是被像CoreOS这样的企业作为一个工具来创造价值的时候,Docker肯定不能只是继续停留在OS层面提供价值。对于Docker来说,惟一的出路是向上一层发展。基于Docker进行构建和运行并且进行管理的整合式集群服务对Docker来说才有意义。

CoreOS对这种变化是非常在意的,因为Docker对于他们来说 ,在开发者中间,是一个极大的潜在竞争者。最自然的反应就是构建一个新的容器作为和Docker进行博弈的工具从而支持他们本来自己的服务。Rocket从出生开始相对于Docker就有技术方面的优势,这是因为它本身就是CoreOS制造用来抵挡来自Docker的威胁。

在不久的将来,集群管理也将会被完全商品化,价值将会流到别的地方,这种循环又会重新上演。这种把戏,跟打冰球没什么两样。

原文链接: http://danielcompton.net/2014/12/02/modular-integrated-docker-coreos#rd

 

© 著作权归作者所有

共有 人打赏支持
七牛云
粉丝 39
博文 60
码字总数 109690
作品 0
浦东
加载中

评论(12)

七牛云
七牛云
谢谢指正,一会儿改~0
七牛云
七牛云

引用来自“久永”的评论

他提到的那本书有中文版不?
现在还没有中文版的呢~
袁国涛
袁国涛
翻译有问题.Law of Conservation of Modularity是Clayton Christensen教授的书的第六章,不是一书名,那本书的书名叫 The Innovator's Solution pdf版本在这里http://pan.baidu.com/s/1qW9bIiw
asdfsx
asdfsx
袁国涛
袁国涛

引用来自“久永”的评论

他提到的那本书有中文版不?
同问,刚敲完问题就看到了.不过估计不会有中文版的,能引进的都是原版再版七八次的书
young7
young7
不是很懂
久永
久永
他提到的那本书有中文版不?
xioxin
xioxin
小编辑
小编辑
Zoker
Zoker
rkt v1.30.0 发布,CoreOS 的容器引擎

rkt v1.30.0 发布了。Rocket (也叫 rkt)是 CoreOS 推出的一款容器引擎,和 Docker 类似,帮助开发者打包应用和依赖包到可移植容器中,简化搭环境等部署工作。Rocket 和 Docker 不同的地方在...

周其 ⋅ 04/17 ⋅ 0

如何确定kubernetes依赖的各个组件版本?

综述 简单来讲:kubernetes依赖的各个组件版本都可以在对应的changlog中找到 比如1.10版本依赖情况如下: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.10.md#externa...

党志强 ⋅ 04/24 ⋅ 0

随着Kubernetes的发展,一个初创生态圈也随之建立

Kubernetes,一项开源的容器编排工具,几年前从Google开源出来,并且正以惊人的速度发展。伴随着它成长历程里的每一个阶段,它已经为一些围绕开源项目之上发展业务的企业创造了诸多机会。 开...

Docker ⋅ 06/10 ⋅ 0

Docker image 存储路径解析

在生产环境中,经常遇到docker image 在资源池中的主机上存留的数据,由于随着业务系统的升级,旧的image 需要进行清理。这里梳理下,docker image的在linux 系统上的存储目录,以针对性的进...

wangxuwei ⋅ 06/02 ⋅ 0

Prometheus Operator - 每天5分钟玩转 Docker 容器技术(177)

前面我们介绍了 Kubernetes 的两种监控方案 Weave Scope 和 Heapster,它们主要的监控对象是 Node 和 Pod。这些数据对 Kubernetes 运维人员是必须的,但还不够。我们通常还希望监控集群本身的...

cloudman6 ⋅ 06/05 ⋅ 0

etcdctl的使用[v3版本]

目录: 的版本与版本使用命令有所不同,本文介绍版本的命令工具的使用方式。 1. etcdctl的安装 的二进制文件可以在 github.com/coreos/etcd/releases 选择对应的版本下载,例如可以执行以下的...

huwh_ ⋅ 05/07 ⋅ 0

linux-单节点的etcd,简单快速搭建

  简介   一个键值存储仓库,主要用于配置共享和服务发现。   特点:   简单:基于HTTP+JSON的API让你用curl命令就可以轻松使用。   安全:可选SSL客户认证机制。   快速:每个实...

linux运维菜 ⋅ 05/03 ⋅ 0

基于linux7的k8s部署(一)

基于linux7的k8s部署(一) 环境准备 初始化配置工作 Master 和 Node 节点由于分工不一样,所以安装的服务不同,最终安装完毕,Master 和 Node 启动的核心服务分别如下: 基础镜像(二进制文件...

品鉴初心 ⋅ 05/02 ⋅ 0

Kubernetes实现SSO登录之命令行体验

上一篇文章中,我们讨论了Kubernetes的几种用户认证方法,还说了我的团队在Pusher希望为我们的工程师创建一个无缝的SSO(单点登录)环境,以及是如何开始对Open ID Connect(OIDC)进行调查并...

m2l0zgssvc7r69efdtj ⋅ 05/27 ⋅ 0

Prometheus Operator 架构 - 每天5分钟玩转 Docker 容器技术(178)

本节讨论 Prometheus Operator 的架构。 因为 Prometheus Operator 是基于 Prometheus 的,我们需要先了解一下 Prometheus。 Prometheus 架构 Prometheus 是一个非常优秀的监控工具。准确的说...

cloudman6 ⋅ 06/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

内核线程、轻量级进程、用户线程

线程与进程概念 在现代操作系统中,进程支持多线程。 进程是资源管理的最小单元; 线程是程序执行的最小单元。 即线程作为调度和分配的基本单位,进程作为资源分配的基本单位 一个进程的组成...

117 ⋅ 17分钟前 ⋅ 0

elasticsearch2.4.6升级为elasticsearch-5.5.0的经历

将elasticsearch-5.5.0 中的配置 path.data 指向原来的数据路径 即 path.data: /usr/local/src/elasticsearch-2.4.6/data 注意: elasticsearch-5.5.0 需要将jdk版本升级到1.8...

晨猫 ⋅ 18分钟前 ⋅ 1

lvm讲解 磁盘故障小案例

1

oschina130111 ⋅ 22分钟前 ⋅ 0

那些提升开发人员工作效率的在线工具

本文转载自公众号 Hollis 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工具是我们在日常开发及学习过程中要经常使用到的。 Hollis偏爱使用...

时刻在奔跑 ⋅ 34分钟前 ⋅ 0

restful风格 实现DELETE PUT请求 的web.xml的配置

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframe......

泉天下 ⋅ 39分钟前 ⋅ 0

Shell数组

Shell数组 Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数...

蜗牛奔跑 ⋅ 49分钟前 ⋅ 0

nmap为了开发方便 可以做简单的修改

因为nmap扫描是默认使用的是nse脚本,但是在开发的过程中需要修改后缀(主要是因为后缀为lua才能显示高亮,所以这里用一个取巧的办法) nse_main.lua文件中我们找到如下代码 local t, path = cn...

超级大黑猫 ⋅ 53分钟前 ⋅ 0

springmvc获取axios数据为null情况

场景:前端用了vue没有用ajax与后台通信,用了axios,但是在代码运行过程中发现axios传递到后台的值接受到数据为null。 问题原因:此处的问题在与axios返回给后台的数据为json类型的,后台接...

王子城 ⋅ 55分钟前 ⋅ 0

hadoop技术入门学习之发行版选择

经常会看到这样的问题:零基础学习hadoop难不难?有的人回答说:零基础学习hadoop,没有想象的那么难,也没有想象的那么容易。看到这样的答案不免觉得有些尴尬,这个问题算是白问了,因为这个...

左手的倒影 ⋅ 55分钟前 ⋅ 0

806. Number of Lines To Write String - LeetCode

Question 806. Number of Lines To Write String Solution 思路:注意一点,如果a长度为4,当前行已经用了98个单元,要另起一行。 Java实现: public int[] numberOfLines(int[] widths, Str...

yysue ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部