微服务和容器技术有风险,望君三思而后行

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文讲的是微服务和容器技术有风险,望君三思而后行,【编者的话】微服务和容器技术拥有令人兴奋的潜力,强烈建议客户开始研究这些技术。但是,这并不是说客户应该立即全面采用。上述技术领域的发展太快了,必须清晰地了解这些技术能干什么,不能干什么,才能够决定是否采用这些技术。
本文讲的是微服务和容器技术有风险,望君三思而后行 【编者的话】微服务和容器技术拥有令人兴奋的潜力,强烈建议客户开始研究这些技术。但是,这并不是说客户应该立即全面采用。上述技术领域的发展太快了,必须清晰地了解这些技术能干什么,不能干什么,才能够决定是否采用这些技术。毕竟,生产环境不是拿来做研发试验的竞技场。

XebiaLabs 是一家提供大规模持续集成和 DevOps软件的公司。我们公司经常与客户讨论新近出现的开发风格、应用架构和运行时平台,内容涉及它们的优势以及带来的挑战。最近一段时间,讨论的焦点集中在:

我个人认为微服务和容器拥有令人兴奋的潜力,强烈建议客户开始研究这些技术。但是,这并不是说客户应该立即全面采用。

上述技术领域的发展太快了,必须清晰地了解这些技术能干什么,不能干什么,才能够决定是否采用这些技术。毕竟,生产环境不是拿来做研发试验的竞技场。

根据客户和合作伙伴的研究,我们自己的使用体会(在我们公司内部,容器的使用已经很普遍)以及  Google和eBay等公司的经验教训 ,我们提出了六个准则,帮助你判断是否要采用这些新技术。

1. 业务真的需要

在采用微服务或者容器技术之前,需要搞清楚一个最根本的问题:业务当中是否真的存在一个现有技术或手段无法解决的问题?

微服务和容器是比较新的技术,发展快速,但离成熟阶段还有距离。必须仔细权衡采用上述技术为团队和组织带来的好处和风险。

曾经担任Etsy公司主任工程师的 Dan McKinley 一篇博客 中说得好:

问问自己:不用任何新技术,能够解决掉现在的问题吗?这个设问有助于你搞清楚一种情况,有人非常渴望使用新技术,但问题的解决实际上并不需要用到这种新技术。如果是这样,应当坚决停止采用新技术。
2. 技术实力够

如果微服务/容器确实能够解决其它方式无法解决的问题,接下来,要确保拥有专家水平的平台工程师资源。

这不光是指用到的大部分API和框架都是全新的。要让基于容器的平台在生产环境运转起来,需要解决一系列后续问题:优化网络,选择存储策略,备份和失效恢复,安全,等等。

3. 愿意“边做边学”

目前,在生产环境中应用微服务和容器技术时,会遇到很多问题,这些问题都没有现成可用的答案。即使工程团队实力足以应对这些挑战,在应用这些技术之后的几年内,需要不停地实验和学习。

例如,最初选择的某些API和框架变化巨大,没有提供向后兼容保证,甚至完全废弃了。有些不适合业务情景或者不成熟的API和框架,需要推倒重来。从运维过程到应用交付模式的最佳实践,都得自己来。

4. 微服务 != 容器

我们与有平台/运维背景的客户,或者那些听过Docker或者其它技术并且想深入了解的客户交流时,发现他们认为微服务和容器是“同一枚硬币的两面”,用了这个技术就必须用另外一个技术。

我同意容器会引导用户交付更小而不是大型一体的应用(虽然,我也看到很多几 GB 大小的容器镜像)。然而,反之并不成立:应用程序采用微服务架构,并不意味着一定要使用容器作为底层的运行时技术。

实际上,如果要把已有的应用程序“微服务化”,而且不能完全重头再来,那么就更有不用容器的理由了。坚持使用已有的运行时平台(在服务器上很容易运行几十个或者几百个微服务进程,无需把这些进程封装为容器),相当于从“改变方程式”中消除了容器这个最大的变量,从而降低项目的风险。

5. 处理微服务之间的依赖

我们经常听到把微服务定义成一个“独立部署的单元”。从实践的角度看,如果设计的微服务不依赖任何其它组件就能成功地运行,这当然很好。但在大多数实际用例中,“没有任何微服务是一个孤岛”:一个服务可以启动,独自响应 API 调用;但在用户真实使用情景中,往往需要几个服务的协调和配合。

例如,订单服务启动后,自己就能告诉用户有多少订单。但用户的操作包括浏览商品目录、选择商品、完成购买和跟踪订单的完成,这需要同时运行一批相互配合的服务。

如果希望用容器实现微服务,有几个框架提供了容器服务编排的功能,目的是处理容器之间的依赖和链接。这些框架包括 Kubernetes
Helios Marathon  和Fig(即  Docker Compose )。

当前,运行时/微服务依赖的管理,特别是虚拟化,还没有达到构建依赖的管理水平(因此,我们的很多客户有兴趣了解  XL Deploy  提供的依赖管理新特性)。遇到什么问题,都需要自己解决,至少要增强已有工具的功能才能解决。

6. 不光是hello world这样的应用

Docker特别流行的一个主要原因是它的上手体验非常棒。在容器中运行某种语言编写的示例程序(例如Hello World 程序)会有一个非常简单、有成就感的体验。接下来,要对容器做些定制也很容易。

然而,如果要在生产环境中用容器运行真实的应用程序,特别是还想把应用封装为微服务,遇到的挑战完全不同。构建自有PaaS平台就是一个工程上的挑战,除此之外,还有一系列与流程相关的问题需要解决。

我在 以前的一篇博客 中讨论了最重要的一些问题。在你研究微服务和容器技术时,要找到解决这些问题的方法。

总结

简言之,微服务和容器肯定是值得研究的技术之一(为了帮助客户应对本文提及的种种挑战,我们在 XL Test XL Release XL Deploy 中提供了一系列与微服务和容器相关的功能特性)。

在你决定采用微服务和容器技术之前,确保自己已经理解所面临的挑战,明白需要投入的时间和资源……最重要的是要保证:实际业务真的需要应用这些技术,为此付出的努力和承担的风险都是值得的。

原文链接:Before You Go Over the Container Cliff with Docker, Mesos etc: Points to Consider(翻译:柳泉波 校对:佚名

===========================

译者介绍
柳泉波,读书踢球喝茶写程序。

原文发布时间为:2015-04-19
本文作者:bnuhero
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:微服务和容器技术有风险,望君三思而后行
目录
相关文章
|
13天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
8天前
|
Cloud Native 云计算 Docker
云原生技术的崛起:从容器化到微服务架构
云原生技术的崛起:从容器化到微服务架构
|
13天前
|
监控 API 微服务
后端技术演进:从单体架构到微服务的转变
随着互联网应用的快速增长和用户需求的不断演化,传统单体架构已难以满足现代软件开发的需求。本文深入探讨了后端技术在面对复杂系统挑战时的演进路径,重点分析了从单体架构向微服务架构转变的过程、原因及优势。通过对比分析,揭示了微服务架构如何提高系统的可扩展性、灵活性和维护效率,同时指出了实施微服务时面临的挑战和最佳实践。
34 7
|
11天前
|
安全 持续交付 云计算
揭秘云计算中的容器化技术及其优势
揭秘云计算中的容器化技术及其优势
19 1
|
11天前
|
Cloud Native API 持续交付
云原生之旅:从容器到微服务的演进之路
【10月更文挑战第39天】在这篇文章中,我们将一起探索云原生技术的奥秘。通过浅显易懂的语言和生动的比喻,我们将了解云原生技术如何改变软件开发的世界。文章将带领读者从容器的基本概念出发,逐步深入到微服务架构的实践,揭示这些技术如何助力现代应用的快速迭代与可靠部署。准备好,让我们启程进入云原生的精彩世界吧!
|
11天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
13天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
13天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
13天前
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?
|
14天前
|
Kubernetes Cloud Native Docker
云原生技术探索:容器化与微服务的实践之道
【10月更文挑战第36天】在云计算的浪潮中,云原生技术以其高效、灵活和可靠的特性成为企业数字化转型的重要推手。本文将深入探讨云原生的两大核心概念——容器化与微服务架构,并通过实际代码示例,揭示如何通过Docker和Kubernetes实现服务的快速部署和管理。我们将从基础概念入手,逐步引导读者理解并实践云原生技术,最终掌握如何构建和维护一个高效、可扩展的云原生应用。
下一篇
无影云桌面