NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

面向服务的开发:Rafael Schloming 关于构建微服务的经验分享

  • 2017-11-27
  • 本文字数:2538 字

    阅读完需:约 8 分钟

San Francisco QCon 大会上,Rafael Schloming 提出了“面向服务的开发”,他认为,想迁移到微服务的组织必须要寻求一种方法来打破单一的开发过程,而不仅仅是试图打破传统的系统架构。将新成立的微服务团队看作是内部的“衍生品(spinoffs)”,他们具有团队边界,并且鼓励他们自给自足和自我管理,除此之外,这些团队必须得到有效工具的支持,以便在生产中调试、部署和监测服务。

Schloming 是 Datawire 的 CTO 和首席架构师,演讲开始时,他问了听众一个问题,将一个庞大的系统迁移到基于微服务的应用程序时,他们遇到的第一个难题是什么。常见的回答有:“如何分解一个大型系统?”、“如何用微服务构建我的应用程序?”以及“我需要怎么样的基础架构才能使我在微服务中受益?”。根据他 2013 年在 Datawire 开发微服务应用程序的经验,Schloming 说,最重要的问题也是通常最容易被忽略的问题是“如何分解一个大型系统?”,因为开发过程对于建立和保持开发速度来说至关重要。

在开发应用程序或服务时,应用程序的交付生命周期可以划分为三个阶段:原型(prototyping)阶段、生产(production)阶段以及关键任务(mission critical)阶段。在原型阶段,维护高速的功能交付通常要容易得多,因为在这个阶段产品稳定性不那么重要。当产品交付从生产阶段转移到关键任务阶段时,为了提高稳定性往往会牺牲速度。对于应用程序中的所有组件来说,使用单一交付过程是十分低效的,因为这样做往往会导致在单一稳定性与速度间侧重点的不同(总是要牺牲其中的一项)。

以基于微服务的系统开发一个应用程序时可以使用多个流程:每个微服务产品团队都可以根据当前该过程在交付生命周期中的阶段而选择合适的流程。微服务可能是一个分布式的开发架构,但是它们也可以使用分布式的开发工作流,该工作流由各种的同步开发过程组成,并且具有不同的速度与稳定性间的侧重程度。然而,采用这种工作方式需要组织的变革以及技术的改变。

站在组织的角度来看,创建一个围绕产品开发自给自足、自治的软件团队是颇有裨益的。然而,从单一过程到微过程的转变需要训练、交流和代理(delegation)。微服务产品团队中的每个人都将经历完整的开发生命周期(从本地编码到通过持续交付将代码部署到生产,再到监测应用程序),这个过程需要额外的训练。最终,这种变化意味着专家有机会成为多面手,从而使得整体系统以及各项操作的实现更加完善。

在产品团队中,人们可能不会使用同一种语言,但是如果这种冲突处理得当的话,它会成为协作的来源。组织内的一个小团队可能把握着整个系统的重要部分,自治是一个组织在快节奏的市场环境中有效规模化的唯一方法。团队应该努力确保他们不需要依赖其他团队来实现自己的目标,这其中包括消除对中心化架构和运营团队的依赖(即使依赖一个提供自助访问架构的“平台团队”通常情况下是有好处的)。

Schloming 认为,要想实现微服务的组织变革,最好的方法是把每一个产品团队都看作是一个商业衍生品。就像现有的开发团队可能会使用诸如 Twilio Stripe 这样的第三方服务一样,产品团队也应该使用同样的方式与内部服务进行集成。

关于微服务的技术实现,Schloming 概述了产品交付生命每个周期阶段的目标。原型阶段的目标:工具以及用户的快速反馈;生产用户以及增长(production users and growth)阶段的目标:不影响用户的前提下增加新功能;以及关键任务阶段的目标:保证稳定性。这样通常会形成一个并行的单一平台(基于微服务的)工作流,该工作流可以随着产品的成熟而转换。可以使用 Docker Kubernetes Envoy 服务代理作为底层平台组件,这个实例就展示了产品生命周期中每个阶段的技术挑战。

在原型阶段,要在生产过程中获得组织对实验性项目的投资是很有挑战性的(例如,进行 A/B 测试或者 canarying 的试验)。除此之外,从技术上来说,在本地运行微服务也是具有挑战性的。克服这一问题的策略是提供自助服务供应(provisioning)和开发容器,这些容器可以通过连续的交付流水线部署到远程环境中。Schloming 给出了一个使用 Datawire 创建的开源工具( forge.sh telepresence )的例子。forge.sh 用于创建一个轻量级的开发环境,它是产品构建和相关依赖关系的单一数据源。telepresence 用于代理远程的 Kubernetes 集群。通过这种方式可以使本地开发的应用程序 (以及相关的调试工具) 与远程服务进行交互,就好像它在集群中运行一样。

对于交付生命周期的生产用户和增长阶段,核心挑战是度量用户对实验性功能的影响 (并认识到在速度和稳定性之间的侧重点),以及测试新特性和降低软件缺陷的影响。使用多版本部署可以克服这些问题,通过 canarying 添加新特性(将其部署为新服务),并随着所观测的用户指标的升高,逐渐增加流量。Envoy,是一个第7 层(应用层)代理,它是由Matt Klein 和Lyft 工程团队构建并运行的,它可以用于解决上述问题,因为所有的流量都可以通过这个代理进行路由和控制。在过去的6 个月里,由于 Istio (它使用 Envoy 作为服务网格数据平面)和其它“服务网格(meshes)”的出现,人们对这个概念越来越感兴趣了。

最后一个阶段,关键任务软件阶段围绕防止软件功能和应用程序可观察性的倒退而进行。克服这一问题的策略包括定义服务水平目标(SLOs)和实现第7 层(应用层)的可观察性。SLOs 的创建和执行需要通过契约型服务级协议(Service Level Agreements,SLAs),并且需要在整个组织范围内进行应用。第7 层的可观测性可以通过 Envoy (或者类似的代理)进行实现,因为这个代理在网络堆栈层中运行,并且可以访问网络中的所有服务端到服务端的流量。

Schloming 在演讲的最后阶段总结道,当一个组织开始进行微服务迁移时,需要注意的是,除了分解整体架构之外,还应该优先对整体流程进行分解。将微服务产品团队组织为自给自足和自治的“衍生品”是有好处的。除此之外,组织必须创建相关工具来实现有效的面向服务的开发。

Rafael Schloming 主题演讲“面向服务的开发”(PDF,2MB)中的演示文稿可以在QCon SF 网站上进行访问。这个演讲的视频以及所有的演讲视频会由InfoQ 在接下来的几个月内整理出来,届时可以在相关网站进行访问。

查看英文原文: Service-Oriented Development: Rafael Schloming Shares Lessons Learned with Building Microservice

2017-11-27 18:001276

评论

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

初学大数据培训学习入门

小谷哥

唐刘:透明一切,是我们在复杂环境下与客户建立信任的最佳途径

PingCAP

TiDB

多云管理平台支持哪些平台?哪款比较火?

行云管家

云计算 多云 云管理

STM32L051测试 (二、开始添加需要的代码)

矜辰所致

stm32 STM32CubeMX 10月月更

OpenHarmony社区运营报告(2022年9月)

OpenHarmony开发者

OpenHarmony

快速上手SpringBoot

亮点

Java spring-boot 10月月更

算法基础(五)| 差分算法及模板详解

timerring

算法 10月月更 差分算法

leetcode 785. Is Graph Bipartite判断二分图 (中等)

okokabcd

LeetCode 数据结构与算法

MobPush iOS端常见问题

MobTech袤博科技

ios

从简历被拒到收割8个大厂offer,我只用了三个月

程序知音

Java 架构 java面试 后端技术 Java面试八股文

GitHub已置顶安排!Alibaba最终Guide版Java面试突击宝典+架构师系统进阶指南

Geek_0c76c3

Java 数据库 开源 程序员 开发

浅析+在Node中实现JWT鉴权机制!

CoderBin

前端 Node JWT Express 10月月更

大数据学习培训机构怎么去选择

小谷哥

翻遍GitHub,这份MySQL全面手册,受喜爱程度不输任何大厂笔记

Geek_0c76c3

Java MySQL 程序员 架构 面试

一文读懂 MySQL 索引

说故事的五公子

MySQL 数据库 索引

抖音后端123面开挂,全靠这份啃了58天的「Java进阶核心知识集」

Geek_0c76c3

Java 数据库 程序员 架构 面试

三翼鸟:智能的是产品,智慧的是生活

脑极体

前端培训学习的就业前景是什么样的

小谷哥

前端线下面授培训机构该怎么选择?

小谷哥

小程序运营怎么做?

源字节1号

软件开发 前端开发 后端开发 小程序开发

web前端技术培训学习好点

小谷哥

技术分享预告|DocArray x Redis 比快更快的向量搜索

Jina AI

人工智能 开源 算法 向量检索 神经搜索

阿里 DBA 首次公开 MySQL 调优笔记,GitHub上已经开始疯狂涨星

Geek_0c76c3

Java 数据库 开源 程序员 面试

来看看这份对标80W+年薪的Java进阶路线图,职业规划路线该怎么走一目了然!

Geek_0c76c3

Java 程序员 架构 面试

HummerRisk V0.4发布:新增云资源态势、资源拓扑、检测规则组、支持在 K8s 安装及大量功能优化

HummerCloud

云计算 云原生 态势感知 云安全 混合云

打破“双十定律”,华为云AI推动超级抗菌药Drug X研发加速

华为云开发者联盟

AI 华为云 药物研发 盘古大模型 企业号十月 PK 榜

web3 chainlink 预言机喂价、VRF

1_bit

智能合约 web3 chanlink

【LeetCode】仅执行一次字符串交换能否使两个字符串相等Java题解

Albert

LeetCode 10月月更

ShareSDK Android端权限说明

MobTech袤博科技

sdk Andriod

启科量子国产量子编程软件项目将启动开源计划

启科量子开发者官方号

人工智能 量子计算 量子模拟 Python. C++

LeetCode第一个错误版本使用JavaScript解题

大师兄

算法 前端 10月月更

面向服务的开发:Rafael Schloming关于构建微服务的经验分享_架构_Daniel Bryant_InfoQ精选文章