热门标签 | 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)


推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 容器管理与容器监控influxDB
    容器管理与容器监控-influxDB什么是influxDBinfluxDB安装(1)下载镜像(2)创建容器(3 ... [详细]
  • Harmony 与 Game Space 达成合作,在 Shard1 上扩展 Web3 游戏
    旧金山20 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
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社区 版权所有