2025技术预测|AI研究与应用|小红书、华为仓颉的AI实践 了解详情
写点什么

专访 Rafael Schloming:用于微服务开发人员的工作流程和部署模式

  • 2018-04-22
  • 本文字数:4353 字

    阅读完需:约 14 分钟

关键要点

  • 对于转变为微服务本身,人们实际上并不怎么关心他们真正关心的是提升特性的完成速度。为了让很多人应对一个问题,你需要把他们分成团队,因为人们不能在非常大的群体中有效地沟通。
  • 你可以将你的人组织成独立的、跨职能的、自给自足的特性团队,从头到尾都可以自主掌控一个完整的特性。如果你这样做,最终会打破这个庞大的整体过程,这是特性完成速度的控制因素。
  • 任何复杂的微服务系统都不能完成在本地进行实例化,因此托管的开发平台必须提供开发人员隔离和开发人员驱动的实时部署。
  • 像 Envoy 这样的服务 (mesh) 代理就是种好方法,它通过智能路由实现开发人员隔离,它还可以使用像金丝雀发布这样的技术来提供开发人员驱动的部署。像 Istio 和 Ambassador API 网关这样的项目针对 Envoy 提供了一个用户友好的控制计划。

InfoQ 最近与 Datawire 的技术总监和首席架构师 Rafael Schloming 坐下来,讨论了现代软件驱动组织所面临的挑战。虽然微服务的实现通常只是希望通过应用程序分解和解耦来提高速度,但是也有固有的开发人员工作流和部署需求得去满足。Schloming 在这里进一步阐述了这一点,并讨论了 Kubernetes 和 Envoy 服务代理 (与 Istio 和 Ambassador 一起) 如何能够满足这一需求。

InfoQ: 你最近的 QCon San Francisco 提出的一个关键前提是,组织如果要从单体大型应用转变为基于微服务的体系结构就得要打破它们的庞大的整体流程。你能再进一步解释一下吗?

Rafael Schloming: 对于转变为微服务本身,人们实际上并不怎么关心,他们真正关心的是提升特性的完成速度。为了提升特征的完成速度就必需做出改变,而微服务只是这种改变所产生的一个附属物罢了。

对于组织来说非常常见的一种情况是,当他们发展到一个临界点,增加再多的人也不会提升特性的完成速度。当这种情况发生时,通常是因为组织用于产出特性的结构和 / 或过程成为了瓶颈,而不是人员的数量。

当一个组织遇到这种障碍,开始调查为什么这些特性似乎花费的时间远远超出了合理的资源,答案往往是,每个特性都需要太多不同团队的协调。

这会发生在两个不同的维度上。你的人员可以按职能划分为团队:产品与开发、质保与运维。你的人员也可以按组件划分: 例如,前端与领域模型、搜索索引和消息通知。当单个特性需要跨多个不同的团队进行协调时,交付特性的控制因素是不同团队之间的沟通速度和效率。像这样组织结构的组织实际上是被一个庞大的整体过程所阻碍的,这个过程要求每个特性 (在某种程度上) 要有许多许多的组织来理解它。

InfoQ: 那么如何解决这个问题呢?

Schloming: 为了把很多人用在一个问题上,你需要把他们分成团队,因为人们不能在非常大的群体中有效地沟通。你这么做的时候,其实就是在做出一系列的权衡。你所营造的是每支团队内部具有高保真的沟通和协调,而团队之间是低保真和相对较差的协调。

为改进一个组织内的特性完成速度,您可以将你的人组织成独立的、跨职能的、自给自足的特性团队,可以从头到尾自主掌控一个完整的特性。这将以两种方式提高特性的完成速度。首先,由于不同的职能 (产品、开发、质保和运维) 都圈定于一个特性内,你就可以自定义该特性区域的流程了,例如,对于一个没有人正在使用的新特性,你的流程就不需要优先考虑其稳定性了。其次,由于该特性所需的所有组件都由同一个团队拥有,因此,要想赶紧推出一个特性,就可以进行更快速有效的沟通和协调。

当你这样做的时候,你最终会打破这个庞大的整体过程,这是特性速度的控制因素,你创建了许多更小的过程,由你的独立的特性团队自己掌控。应运而生的是,这些独立团队会将其特性作为微服务交付。实际上,它是伴生而来的,这一点很重要。那些希望从微服务中直接获益的组织,如果不理解这些原则,就会导致许多小型组件团队的出现,并使他们的沟通问题恶化,从而加剧他们的问题。

InfoQ: 你曾提到,应用要经过原型、生产和关键任务这三个开发阶段,你能否解释一下它与这三个阶段的关系?

Schloming: 每个阶段代表了稳定和速度之间的不同的权衡。这反过来又会影响你如何最佳地执行交付特性所需的不同类型的活动: 产品、开发、质保和运维。

在原型开发阶段,人们非常重视在用户面前快速添加功能,而且由于没有现有用户,所以对稳定性的需求相对较小。在生产阶段,你通常要平衡稳定性和速度。你希望添加足够的特性来增加用户基数,但是你也需要足够稳定的东西来保持现有用户的满意度。在关键任务阶段,稳定是你的首要目标。

如果你的组织中的人员按照产品、开发、质保和运维这些边界来进行划分,那么就很难针对单个特性调整应用到每个活动的资源数量。这可以表现为,因为将新特性当成关键任务特性而遵循同样的过程,使新特性的进度变慢,或者,为了适应更快地发布新特性而频繁中断关键任务特性。

通过将你的人员组织成独立的特性团队,你可以使每个团队找到理想的稳定性和速度的折衷点,以实现其目标,而不需要为整个组织强制一个全局的折衷点。

InfoQ: 那次讨论中的另一个关键前提是,构建微服务的团队必须是跨职能的,并且能够以自助服务的形式访问部署机制,以及相应的平台属性,如监视、日志记录等。你能详述一下吗?

Schloming: 这里实际存在两个不同的因素。首先,如果你的团队拥有一个完整的特性,那么你们就得精于这个特性中的所有组件,从前端到后端,以及介乎之间的所有东西。第二,如果你的团队拥有从生产以运维的整个生命周期,那么你们就得精于与这些活动相关的所有不同的工程学,而不仅仅是支开发团队。

当然,这需要许多的专家,所以如何又使团队保持较小的规模呢?你需要找到一种方法,使你的特性团队能够利用组织中其他团队的工作成果,而不需要团队之间的沟通途径,从而进入特性开发的关键路径。这就是自助服务基础设施发挥作用的地方。通过提供一个自服务平台,特性团队可以从平台团队的工作中获益,而不需要打申请等别人照章行事。

InfoQ: 什么样的工具可以帮助实现自服务的部署,也可以对平台有所帮助?

Schloming: Kubernetes 为这类事情提供了一些伟大的原语——例如,你可以使用名称空间和配额使独立的团队能够在单个集群中安全地共存。然而,随着系统复杂度的增加,保持高效的开发工作流程是一个更大的挑战。作为开发人员,你的生产力很大程度上取决于你从运行的代码中获得反馈的速度。

单体大型应用通常只有数得过来的几个组件,你可以手动将它们连接到一起,在本地运行必要的系统,在开发过程中,你可以从运行的代码中得到快速的反馈。如果使用微服务,很快你就会发现走不下去了。这意味着,除了能够在生产中运行所有服务之外,你的平台还需要为开发人员提供一个高效的开发环境。这可归结为两个问题:

  1. 开发者隔离: 由于许多服务都在积极开发中,所以你不能让所有开发人员共享一个开发集群,否则所有的东西都会随时被中断。你的平台需要能够为纯粹的开发目的提供部分或全部系统的隔离副本。
  2. 开发人员 / 实时部署: 一旦你能访问系统的独立副本了,就需要想个方法,使你指尖新鲜出炉的代码能够尽快地与系统的其余部分一齐运行。从物理上讲,这就是一次部署,因为你其实就是在获取源代码,然后在一个生产副本上运行它。

虽然在其他一些重要方面这有着非常大的不同。如果你部署的生产环境要遵循严格的政策和周密的程序: 例如,得经过测试、金丝雀部署, 等等。而针对这些开发人员的部署, 可以专注于速度,不必在安全和程序上那么严格,这样可以带来巨大的生产力: 例如, 只运行上次失败过的测试, 而不是整个套件, 不需要等待 git commit 和 webhook, 等等。

InfoQ: 你能不能更深入地解释一下这些问题,以及如何解决它们?

Schloming: 对于开发人员隔离,有两种基本策略:

  • 复制整个 Kubernetes 集群。
  • 使用共享的 Kubernetes 集群,但是为了隔离则复制单个资源 (如 Kubernetes 服务、部署等),然后使用请求路由访问目标的代码。

几乎任何一个系统都会发展到同时需要这两种策略的地步。

为了实现开发人员的隔离,你需要确保你的所有服务都能够进行多版本的部署,你需要一个七层路由器,再加上相当数量的胶水模块将其全部连接到基于 git 的安全高效的工作流中。对于多版本的部署,我看到人们有很多进行模板化的做法,从 sed 到 envsubst 再到更高级的工具,如 Helm ksonnet Forge 。对于七层路由器, Envoy 是一个很好的选择,它非常容易使用,并且可以在诸如 Istio Ambassador API 网关(添加更友好的控制平面)的项目中使用。

对于开发人员 / 实时部署,有两种基本策略:

  • 在 Kubernetes 集群中运行你们的代码,并优化构建 / 部署时间。
  • 在本地编译并运行你们的代码,然后将来自远程 Kubernetes 集群的通信路由到你们的笔记本电脑,然后再从运行于你们笔记本电脑上的代码返回到你们的远程集群。

这两种策略都可以显著提高开发人员的生产力。像 Draft Forge 这样的工具都是针对第一种策略的,针对第二种策略有 kube-openvpn Telepresence 之类的工具。

有一件事是肯定的,为组装成一个可行的解决方案,仍然有很多需要 DIY 的东西。

InfoQ: 你提到了像 Envoy 之类的服务网格技术的好处,可以提供在可观察性和容错方面的跨服务通信 (“东西”通信)。那么入口通信(“南北”通信)呢?在这里使用类似的技术有好处吗?

Schloming: 是的。事实上,出于性价比考虑,我首先就会把 Envoy 之类的东西部署在那儿。通过在网络边缘部署 Envoy,你就有强大的工具来度量你的用户体验到的服务质量了,这是一个在你的开发工作流程添加金丝雀发布的关键构件,对于任何生产或关键任务服务都很关键。

InfoQ: 你认为明年的 Kubernetes 生态系统会如何发展? 你提到的一些工具是否会集成到这个平台中?

Schloming: 如果看到 Envoy 和 Kubernetes 之间的深度集成我丝毫不会感到惊讶。我最希望看到的当然是稳定性。Kubernetes 和 Envoy 都是技术的基础部分。它们一起提供了一个非常灵活和强大的平台的核心部分,但你要成为能充分利用它们的专家也确实得需要花上一段时间。

我认为,在更大的生态系统方面,我们将看到更多的项目,使非专家能够利用这些工具所能提供的一些好处。

InfoQ: 你还有什么想与 InfoQ 的读者分享的吗?

Schloming: Datawire 团队正在开发一系列开源工具,以改进 Kubernetes 开发人员的体验,因此我们一直都渴望得到社区的反馈。读者可以通过我们的网站、 Twitter 或者 Gitter 和我们联系,你可以经常在技术会议上找到我们的发言。

你可以在 InfoQ 上找到 Schloming 的 QCon San Francisco 2017 “微服务:面向服务的开发”演讲视频,同时还有一个对本次演讲的总结

关于受访者

Rafael Schloming 是 Datawire 的联合创始人和首席设计师。他是全球公认的消息传递和分布式系统专家,也是 AMQP 规范的规范作者。之前,Rafael 是 Red Hat 的首席软件工程师。

查看英文原文: Patterns for Microservice Developer Workflows and Deployment: Q&A with Rafael Schloming

2018-04-22 18:181294

评论

发布
暂无评论
发现更多内容

金九银十吃透这份Spring Boot实战文档,让你超过90%的Java面试者

Java 编程 架构 面试 springboot

阿里P8爆肝三月!最新出土SQL手册:收获不止SQL优化,抓住SQL的本质

Java 编程 程序员 IT 计算机

真香!在Github一夜爆火的面试题库,被各大厂要求直接下架

程序员小呆

Java 程序员 面试 架构师

微博评论高性能高可用计算架构

Imaginary

一口气面试7家大厂,已拿下4家offer,其实大厂没有你想象中难!

程序员小呆

Java 程序员 面试 架构师 资料

重学 Java 之 5种字符流读取方法

进击的王小二

java基础 字符流 java

反序列化漏洞复现总结

网络安全学海

黑客 网络安全 信息安全 WEB安全 安全漏洞

明道云APaaS在保险业中的应用场景例举

明道云

面对疾风吧,如何搭建高协同的精准告警体系?

阿里巴巴云原生

阿里云 产品 云原生 Arms 告警运维中心 告警体系

绝绝子!美团大牛吐血整理总结“消息队列核心知识笔记”是真的吊

进击的王小二

分布式 MQ 消息队列 java

索信达助力国有大行提升监管报送质量

索信达控股

大数据 数据治理 金融监管 金融行业 银行业

国家第一梯队!开物入选特色专业型工业互联网平台

百度大脑

人工智能 百度 智能云

直接霸榜Github!阿里内网流传P8大牛的“满级”分布式架构笔记,

程序员小呆

Java 程序员 面试 架构师

模块五作业

potti

架构实战营

山东移动用明道云赋能一线,打通业务创新最后一公里

明道云

Zookeeper配置详解

Regan Yue

zookeeper 配置 10月月更

Webrtc Rtp/rtcp (2)

webrtc developer

WebRTC rtp/rtcp

从Android系统架构学习设计模式

轻口味

android 架构设计原则 10月月更

用区块链技术打造AEO高信用国际贸易生态圈的创新实践

CECBC

WeTest自助压测1折起,最低1分钱参与Q币抽奖

WeTest

NFT商业落地中的思考:区块链

CECBC

服务业CRM软件能为你提供哪些服务?

低代码小观

企业管理 CRM 管理系统 管理工具 管理软件

极光笔记丨iOS 15推送新特性

极光JIGUANG

ios 消息推送 移动端

内卷把同事逼成了“扫地僧”,把 Github 上所有面试题都整理了一遍~ 足足 24W 字!

编程 程序员 IT 计算机 java

“区块链+物联网”融合 推动产业创新发展

CECBC

自定义View:几何变换实质与技巧

Changing Lin

10月月更

如何说孩子才肯听,怎么听孩子才肯说(上)

石云升

读书笔记 育儿 10月月更

架构实战营 设计微博系统中”微博评论“的高性能高可用计算架构

💤 ZZzz💤

架构实战营

健身房CRM软件帮你寻找更多客户

低代码小观

企业管理 管理系统 健身房 管理软件 行业

#1024我在现场# 征集线索引爆大奖!

InfoQ写作社区官方

1024我在现场 热门活动

实时监控:基于流计算 Oceanus ( Flink ) 实现系统和应用级实时监控

腾讯云大数据

流计算 Oceanus

专访Rafael Schloming:用于微服务开发人员的工作流程和部署模式_语言 & 开发_Daniel Bryant_InfoQ精选文章