热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一份Docker的反方辩论——我还是用Heroku好了

这是一篇在国外社区非常火的文章。由CircleCI创始人所写,追逐热点新技术的程序员与只想做个简单web应用的程序员对话,Docker到底能否解决简单小应用的问题吗?Heroku真

这是一篇在国外社区非常火的文章。由CircleCI创始人所写,追逐热点新技术的程序员与只想做个简单web应用的程序员对话,Docker到底能否解决简单小应用的问题吗?Heroku真的歇菜了吗?我们有请反方辩者登场——

PS,小数只是勤劳的搬运工,文章并不代表数人云观点:)

本文为两个程序员之间的对话,一个打算使用Heroku做个简单Web应用的传统程序员,另一个追捧Docker及各种新技术的时髦程序员,前者虚心向后者“请教”的故事……

嗨我老板让我和你聊聊,我听说你很懂Web应用?

是的,我现在更沉迷分布式系统。我刚从ContainerCamp 和 Gluecon大会回来,我正准备去参加下周的Dockercon。我对于行业正在发生的变化感觉十分兴奋——一切都更简单和可靠了,这就是未来呀!

真酷。目前我只搭建了一个简单的Web应用——一个普通的使用Rails的CRUD应用,打算部署到Heroku上去。是不是还是这样的路子?

哦不。那都是老一套了。Heroku已死——已经没有人用了。你需要使用Docker,那才是未来。

哦好吧,那是啥?

Docker是一种容器化的新方式。就像LXC,但是同时也是一种封装形式,一个分布式平台,工具让分布式系统变得非常容易。

容……容器?接下来呢,LXE是啥?

就像steroids上的chroot!

好吧cher——oot又是啥?

好吧,看,Docker,容器化,它是未来,它就像虚拟化但是更快更便宜。

哦就像Vagrant。

不,Vagrant已经死了。现在所有的一切都在容器化,它是未来。

好吧,所以我不再需要了解虚拟化的东西?

不,你仍然需要虚拟化,因为容器并不提供一个完全安全的环境。所以如果你想在多租户的环境下跑东西,你还是需要保证你没有脱离沙盒的。

好吧,这里我有点迷惑。我们来说一下,所以有一个类似虚拟化的东西叫做容器,我可以把它用在Heroku上面吗?

Heroku对Docker是有一些支持,但是我告诉你:Heroku已死,你应该把你的容器跑在CoreOS上。

好吧,那是啥?

它是很酷的Host OS,你可以和Docker一起使用。甚至,你不需要Docker,你可以用rkt。

火箭?

不,是rkt

好吧,火箭。

不,它现在叫rkt。完全不一样,它是一个可选择的容器化形式,并不像Docker那样是捆绑式的,所以它更有编排性。

哦那它好不好吗?

当然非常好,编排性是未来啊。

好的,那你是如何用它的?

我不知道,我不认为现在会有人用它。

哎,那你说说刚才提到的CoreOS?

好的,它是你和Docker搭配使用的一个Host OS。

Host OS又是什么?

Host OS跑你所有的容器。

跑我的容器?

是的,你需要东西来跑你的容器。所以你搭建像EC2的实例,你把Core OS放上面,然后运行Docker daemon,然后可以把Docker镜像部署到里面。

这里的哪一部分是容器?

所有都是,看,你把你的应用写一个Dockerfile,把它转变成本地镜像,然后你可以把它推到任何一个Docker主机。

哦,就像Heroku?

不,不是Heroku。我告诉你了,Heroku已经死了。你用Docker来跑你的云。

啥?

是的,它真的很简单,看gifee。

Gify?

“人人都可拥有Google那样的基础设施”(Google’s infrastructure foreveryone else)。你用一些现成的工具和堆栈,用容器,然后就可以拥有和Google一样强大的基础设施了。

那为啥我不能直接用Google的东西?

你认为六个月之内能搞定吗?

好吧,没有其他人弄这个东西吗?我自己不想弄。

亚马逊有ECS,但是你要写XML或者其他玩意。

那OpenStack上的什么呢?

Ew。

Ew?

Ew。

好吧你看我真的不想自己来弄。

不,它真的很简单,你需要建一个Kubernetes集群就可以了。

我需要一个集群?

Kubernetes集群。它会管理你所有服务的部署。

我只有一个服务。

你的意思是啥?你有一个应用,那么你就该有至少8-12个服务。

什么?不,只有一个应用,服务嘛,也只是其中一个。

不,看看微服务。它才是未来。我们做的都是微服务,你把你的整体式应用分割成12个服务,每一块你做的工作都只是一部分。

这看起来有点多啊。

这是确保它可靠的唯一方式。如果你的认证服务挂了……

认证服务?我正打算用它,就跟我之前用过的几次一样。

棒极了。用gem,把它放到它的项目里,把RESTful API放上去,然后你的其他服务也用那个API,就可以很好地处理失败和其他事情。把它放到容器里,然后持续地交付。

好的,然后我就有了成堆的无法管理的服务,那该怎么办?

是的,我正在说的Kubernetes,会协调你所有的服务的。

协调它们?

是的,你有了这些服务,为了确保它们可靠你需要很多份它们的备份,Kubernetes会确保你有足够的备份,在你的fleet里它们是各个节点分布式的,所以它们总是可用的。

我现在需要一个fleet?

是的,为了稳定性。但是Kubernetes可以为你管理它,你知道Kubernetes很好用因为Google建造了它,它跑在etcd上面。

Etcd是啥?

它是RAFT的一个具体实现。

好吧,Raft是啥?

它就像Paxos。

好吧,这个兔子洞到底有多深?我只是想实现一个应用,哎,好吧,深呼吸,那么Paxos是啥?

Paxos就像一种很古老的70年代的旧分布式协议,没人理解或者使用。

好吧,感谢你告诉我这个。那么Raft是啥。

因为没人理解Paxos,所以这个叫diego的家伙……

哦你知道他?

不,他做的是CoreOS,然而,Diego为他的博士论文创造了Raft,因为Paxos实在太难了。真是邪恶而聪明的家伙。他又写了etcd作为实现,Aphyr说它并不是很糟。

Aphyr是谁?

Aphyr是那个写了“Call Me Maybe”的家伙,你知道,那个分布式系统和BDSM的家伙。

什么?你说BDSM?

是的,在旧金山,每个人都进入了分布式系统和BDSM。

哦,他写了那个Katy Perry的歌?

不,他写了一系列的关于每个数据库如何挂了CAP的博客

CAP是啥?

CAP定理,它表明你只能在一致性,可用性和隔离性中选择两个。

好吧,所有的数据库都完败CAP?这意味着什么?

这意味着它们都是渣渣,就像Mongo。

我猜Mongo是web规模的?

对,没错。

Etcd呢?

Etcd是一个分布式键值存储。

好吧就像Redis。

不,并不像Redis。Edcd是分布式的,如果网络分区了Redis会失去它一半的代码。

好吧,它是分布式键值存储。那为啥它有用?

Kubernetes用etcd建立了一个标准的5节点的集群作为一个消息总线,它包含了Kubernetes一些自己的服务来提供一个有弹性的编排系统。

5个节点?我只有一个应用,那么我需要多少个机子?

好吧,你要有12个服务,你也需要一些多余的备份,一些负载均衡,edcd集群,你的数据库,Kubernetes集群。所以你至少应该跑50个容器。

哦天!

没什么大不了的。容器真的非常效率,所以你应该可以把他们分布在8个机子上,是不是很了不起?

确实是一个方法,通过这个,我是不是可以简单地部署我的应用了?

当然,我是说,存储对于Docker和Kubernetes来说仍然是一个开放的问题,网络会承担一些工作,但是你基本已经可以达到那个未来之地了。

我明白了,好吧,我懂了。

棒极了。

感谢你的这些解释。

没问题。

那我来重复一遍确保我领悟了这些。

好的!

我只需要把我简单的CRUD应用分割成12个微服务,每一个都配有API可以弹性地恢复它们的错误,把它们放进Docker容器,启动8个机器的fleet,均为跑Core OS的Docker主机,用一个小的跑etcd的Kubernetes的集群来协调它们,明确网络和存储的开放问题,然后我就可以持续地给我的fleet交付多个微服务的冗余备份,是这样吗?

是的,它是不是很棒?

我要回去继续Heroku了。

(文章转自:CircleCI blog)


推荐阅读
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • protobuf 使用心得:解析与编码陷阱
    本文记录了一次在广告系统中使用protobuf进行数据交换时遇到的问题及其解决过程。通过这次经历,我们将探讨protobuf的特性和编码机制,帮助开发者避免类似的陷阱。 ... [详细]
  • 整理于2020年10月下旬:总结过去,展望未来Itistoughtodayandtomorrowwillbetougher.butthedayaftertomorrowisbeau ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
  • 本文探讨了一种统一的语义数据模型,旨在支持物联网、建筑及企业环境下的数据转换。该模型强调简洁性和可扩展性,以促进不同行业间的插件化和互操作性。对于智能硬件开发者而言,这一模型提供了重要的参考价值。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 本文详细记录了 MIT 6.824 课程中 MapReduce 实验的开发过程,包括环境搭建、实验步骤和具体实现方法。 ... [详细]
  • 对象存储与块存储、文件存储等对比
    看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
  • 8个IDC大数据基础定义解析丨IDC
    本文针对IDC数据行业相关名词术语进行解析,分为4组相关概念,希望大家读完 ... [详细]
  • 近年来,区块链技术备受关注,其中比特币(Bitcoin)功不可没。尽管数字货币的概念早在上个世纪就被提出,但直到比特币的诞生,这一概念才真正落地生根。本文将详细探讨比特币、以太坊和超级账本(Hyperledger)的核心技术和应用场景。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
author-avatar
hero-laiquwuz_82914c
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有