容器时代,难道这就是我们想要的未来?

简介:

容器时代,难道这就是我们想要的未来?

以下完整的对话记录,U 为提问者,P为Paul Biggar(Founder of CircleCI)。

U:Hi,我老板让我采访你,我听说你是个Web专家?

P:是啊,我现在专攻分布式系统。我刚从ContainerCamp和Gluecon回来,打算下周参加DockerCon。真的很兴奋,整个行业正朝着 - 让一切更简单,更可靠的方式前进。这就是未来!

U:Cool,我现在构建一个简单的Web应用程序 —— 一个使用Rails的普通CRUD应用程序,将会部署到Heroku的。给我提些建议?

P:Oh,不。这是老方式。Heroku已死 —— 没有人会再使用它了。你现在需要使用Docker。这才是未来。

U:Oh,好的。Docker是什么?

P:Docker是一种新的容器化的方式。就像LXC,但Docker也是一种打包形式、分发平台和工具,它可以让分布式系统的构建变得非常容易。

U:容器化 —— 那是什么?什么是LXE?

P:是LXC。你可以把它想成chroot的升级版。

U:什么是 cher-oot?

P:好,看看。Docker。集装箱。这就是未来。这就像虚拟化,但速度更快、更廉价。

U:Oh,就像Vagrant

P:不,Vagrant已死。一切都将会被容器化,这就是未来。

U:好了,所以我不需要知道虚拟化什么吗?

P:不,你仍然需要虚拟化,因为容器目前没有提供充分的安全保证。所以,如果你想在多租户环境中运行应用,你仍然需要沙箱。

U:好吧,我开始有点糊涂了。让我们一起回顾下。现在有一个像虚拟化一样的东西,被称为容器。我可以在Heroku上使用它吗?

P:嗯,Heroku提供了对Docker的支持,但我告诉你:Heroku已经死了。你需要在CoreOS上运行你的容器。

U:擦,那CoreOS是什么?

P:它是一个可以运行Docker的Host OS。该死的,你甚至都不需要Docker,可以直接使用rkt。

U:Rocket?

P:不,rkt。

U:没错,那就是Rocket。

P:不,现在已经叫rkt了。与Docker完全不同。这是另一种集装箱格式,不像Docker把东西都绑定在一起,所以它更可以随意组合。

U:那样很好?

P:当然这是很好的。组合是未来的趋势。

U:好,你如何使用它?

P:我不知道。估计还没人能玩转它。

U:好吧。那你接着刚才继续说下CoreOS?

P:它是一个可以使用Docker的Host OS。

U:什么是Host OS?

P:一个运行容器的主机操作系统。

U:运行我的容器?

P:是啊,你总得有运行东西的容器。就像你设置一个EC2实例,你把CoreOS放上去就可以了,随后运行Docker的守护进程,然后你就可以将Docker镜像部署上去。

U:其中哪一部分是容器?

P:所有。你可以把应用程序写为一个Dockerfile,然后在本地把它变成一个镜像,这样,镜像就可以被部署到任何Docker主机了。

U:啊,就像Heroku?

P:不,不是Heroku。我告诉过你了。Heroku死了。你现在使用的是Docker。

U:什么?

P:是啊,这真的很简单。查一查#gifee。

U:Gify?

P:“谷歌的基础设施”。你可以基于一些现有的工具,并通过使用容器,就可以拥有和谷歌相同的基础设施了。

U:我为什么不只使用谷歌的东西呢?

P:你认为这将是大约6个月可以完成的?

U:OK,没有云服务商提供类似的服务吗?我真的不想自己搞一套

P:嗯,亚马逊有ECS,但你得写烦人的XML。

U:OpenStack又是什么东西?

P:Ew。

U:Ew?

P:Ew。

U:我真的不想自建。

P:不,它真的很容易。您只需设置一个Kubernetes集群。

U:我需要一个集群?

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

U:我只有一个服务。

P:什么意思?你确实有一个应用程序,所以你必须至少有8-12个服务?

U:什么?没有,我只是一个应用程序。为什么有那么多服务?

P:不,看看微服务。这是未来。这就是现在我们所做的一切。你把你的整体应用程序分解成12个服务。每一个服务只做一件事情。

U:这似乎代价过高。

P:这是确保应用可靠的唯一途径。你可以想象下如果你的验证服务宕机了...

U:认证服务?我之前用的是Gem。

P:对的。使用gem。把它转变为一个项目,再封装一个RESTful API就可以了。当你的其它服务使用这个API的时候,它就会变得非常容器。最后你可以把这个项目放在容器中。

U:好了,现在我已经得到了几十个难以管理的服务,现在该怎么办?

P:Yeah,我提到的Kubernetes。它可以让你协调所有的服务。

U:交给Kubernetes进行调度?

P:是啊,你的这些服务并不是每时每刻都是可靠的,所以你需要有多个『副本』。Kubernetes就是让这些服务分布在你的集群的多台主机上,以保证服务的可靠性。

U:我需要一个集群呢?

P:是啊,为了可靠性。Kubernetes会帮你管理。Kubernetes是谷歌的一个开源项目,它有使用到etcd。

U:什么是etcd?

P:它是Raft的实现。

U:好了,什么是Raft?

P:它就像Paxos。

U:好,什么是Paxos?

P:Paxos就是没有人理解或使用的上世纪70年代老的分布式共识协议。

U:太好了,谢谢你告诉我。Raft是什么?

P:由于没有人理解Paxos,所以Diego....

U:哦,你认识他吗?

P:不,他在CoreOS工作。换句话说,因为Paxos太难了,Diego就在他的博士论文中发布了Raft。聪明的家伙。之后他写了etcd作为实现,Aphyr说,这不是狗屎。

U:什么是Aphyr?

P:Aphyr是那家伙昵称,“就叫我这个名字吧。” 你要知道,关于分布式系统和BDSM的人?

U:什么?你说BDSM?

P:是啊,BDSM。那在旧金山。每个人都向往分布式系统和BDSM。

U:嗯,OK。他写过Katy Perry的歌曲?

P:不,他写了一组博客文章有关如何在每个数据库发生故障时CAP。

U:什么是CAP?

P:CAP定理。CAP 理论说在一个系统中对某个数据不存在一个算法同时满足一致性,可用性和分区容忍性。

U:OK,所有数据库发生故障时CAP?这是什么意思?

P:就像Mongo。

U:我以为Mongo was web scale?(此处有梗http://www.mongodb-is-web-scale.com/是个Mongo网站)

P:没有其他人会这么做。

U:好了,那 etcd?

P:是啊, etcd是一个分布式key-value存储。

U:哦,就像Redis。

P:不,一点都不像Redis。etcd是分布式的。

U:好的,这是一个分布式 key-value存储。

P:Kubernetes设置一个使用etcd作为消息总线标准的5个节点集群。它结合了Kubernetes自己的服务,并提供一个非常弹性的业务流程体系。

U:5个节点?我有一个应用程序。我做这些该需要多少台机器啊?

P: 嗯,你将有大约12个服务,当然,你需要冗余副本,几个负载均衡的集群etcd,你的数据库和kubernetes集群。因此,需要运行50个容器。

U:擦!

P:没什么大不了!容器是非常高效的,所以你应该能够分发这些跨越在8台服务器上!是不是很神奇呢?

U:这就是把它的一种方式。而完成这一切,我就可以简单地部署我的应用程序?

P:当然。我的意思是,存储仍然是Docker和Kubernetes一个未解决的问题,并且网络也会有不少问题,但你基本上还没到那步!

U:我明白。好吧,我想我会努力得到他。

P:非常好!

U:感谢解释它。

P:没问题。

U:请允许让我再说复述一遍,看看是否我的理解是否正确的。

P:当然可以。

U:我只需要将我简单的CRUD应用程序分割成12个微服务,每个都有自己的API,每个微服务调用其中其他的API,而且弹性处理失败,并把它们放到Docker容器中。Docker容器又运行于CoreOS之上,并分布在集群的8台机器上,同时使用运行etcd的Kubernetes集群来调度他们,再解决『网络和存储』难题,然后我不断地提供每个微服务的多个冗余副本到我的集群。是不是这样?

P:是!是不是很炫酷?

U:我要用回Heroku。



本文作者:周峰

来源:51CTO

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
运维 负载均衡 网络协议
OSPF的主要特点与优势
OSPF的主要特点与优势
1166 0
|
人工智能 搜索推荐 物联网
Android系统版本演进与未来展望####
本文深入探讨了Android操作系统从诞生至今的发展历程,详细阐述了其关键版本迭代带来的创新特性、用户体验提升及对全球移动生态系统的影响。通过对Android历史版本的回顾与分析,本文旨在揭示其成功背后的驱动力,并展望未来Android可能的发展趋势与面临的挑战,为读者呈现一个既全面又具深度的技术视角。 ####
|
9月前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令——MongoDB索引的类型
本节介绍了MongoDB中索引的几种类型及其特点。包括单字段索引,支持升序/降序排序,索引顺序对操作无影响;复合索引,字段顺序重要,可实现多级排序;地理空间索引,支持平面与球面几何查询;文本索引,用于字符串搜索并存储词根;哈希索引,基于字段值散列,适合等值匹配但不支持范围查询。
237 1
微服务——MongoDB常用命令——MongoDB索引的类型
|
人工智能 自然语言处理 算法
人工智能与创意写作:未来文学的新篇章
本文探讨了人工智能在创意写作领域的应用及其对传统文学创作的影响。通过分析AI技术如何辅助作者生成文本、提升创作效率以及开拓新的文学形式,我们揭示了AI与人类作家之间的协作关系,并讨论了这种合作对未来文学作品风格和内容的可能影响。同时,文章也考虑了AI技术在文学创作中可能带来的挑战和伦理问题,为读者提供了关于科技与艺术融合的深入思考。
589 5
|
9月前
|
人工智能 算法 测试技术
推动大模型自我进化,北理工推出流星雨计划
北京理工大学提出SRA-MCTS(Self-driven Reasoning Augmentation with Monte Carlo Tree Search),一种通过蒙特卡洛树搜索增强大型语言模型推理能力的方法,专注于复杂代码生成任务。该方法让模型自主生成高质量中间推理路径,提升代码生成的准确性和多样性。实验表明,SRA-MCTS在多个基准测试中显著优于传统CoT方法,尤其在小模型上表现出强大自我改进能力。然而,方法仍存在小模型评估能力和MCTS超参数调整依赖人工经验等局限性,未来将探索更先进的评估模型和算法优化。
186 18
|
安全 Linux Shell
Linux中SSH命令介绍
Linux中SSH命令介绍
608 2
|
敏捷开发 数据可视化 API
6款高效的任务看板管理工具,哪款能提升团队协作效率
本文对比了六款流行的任务看板管理工具:板栗看板、Trello、Asana、Monday.com、ClickUp 和 Jira。从功能、易用性、价格等方面进行了详细分析,帮助用户根据团队规模、项目复杂度及预算选择最适合的任务管理工具。
6款高效的任务看板管理工具,哪款能提升团队协作效率
|
运维 监控 Linux
BPF及Linux性能调试探索初探
BPF技术从最初的网络数据包过滤发展为强大的系统性能优化工具,无需修改内核代码即可实现实时监控、动态调整和精确分析。本文深入探讨BPF在Linux性能调试中的应用,介绍bpftune和BPF-tools等工具,并通过具体案例展示其优化效果。
545 14
|
Web App开发 缓存 前端开发
拿下奇怪的前端报错(六):多摄手机webrtc拉取视频流会导致应用崩溃,从而无法进行人像扫描
本文介绍了一种解决手机摄像头切换导致应用崩溃的问题的方法。针对不支持facingMode配置的四摄手机,通过缓存和序号切换的方式,确保应用在特定设备上不会频繁崩溃,提升用户体验。
424 1
|
人工智能 安全 芯片
【通义】AI视界|谷歌 Tensor G5 芯片揭秘:1+5+2 八核 CPU,支持光线追踪
本文由【通义】自动生成,涵盖黄仁勋宣布台积电协助修复Blackwell AI芯片设计缺陷、苹果分阶段推出Apple Intelligence、OpenAI保守派老将辞职、英伟达深化与印度合作推出印地语AI模型,以及谷歌Tensor G5芯片支持光线追踪等最新科技资讯。点击链接或扫描二维码,获取更多精彩内容。