给CxO的微服务指南

文/Jim Highsmith & Neal Ford 译者/禚娴静

这是技术雷达系列文章的第四篇。在这一系列的文章中,技术雷达的作者们向企业领导者分享了他们对于那些推动业务差异化的技术问题和解决方案的洞见和经验。ThoughtWorks技术雷达由ThoughtWorks全球技术专家咨询委员会创建,它包含了对软件开发和业务战略有显著影响的技术趋势组合,2016年是技术雷达发布的第七年。

未来已经在这里,它只是分布不均。—— 威廉·吉布森

数字时代就在我们身边。将软件开发视为高成本开销而不是竞争力的企业将会举步维艰。为了参与并在这个数字世界中繁荣兴旺,企业必须学会适应我们这个时代的不确定性—更快地将新产品推向市场,快速而有效地改进当前的产品,并为客户提供有意义的数字体验。

为了实现这些目标,企业需要将敏捷性/适应性集成到三个领域:人、流程和技术。

人们需要适应试验和改变。以“迭代”的形式推进这一过程,并加强学习。技术,包括技术架构,需要支持快速地交付产品与服务。

技术的敏捷性不能被忽视——敏捷的团队和流程并不能弥补笨重的技术所带来的缺陷。

但作为一个高级管理人员,在这样一个充满了新技术的世界,你应该将注意力投注在哪里呢?

这个问题的答案被那些不停地讨论着看似神秘话题的技术人员们所掩盖。哪些神秘的话题需要得到管理层的注意呢?其中最重要的话题之一是微服务。原因如下所述:

微服务影响人、流程和技术:包括团队组织结构,流程和实践(如DevOps),以及重新调整架构以适应我们要解决的问题,而并非纯技术层面。微服务促进了每个领域的适应性。它值得管理层花时间去了解其潜在的贡献。

技术敏捷度

微服务架构风格的特性是由一组极小的服务组成,它们彼此独立且单独部署。微服务由Netflix这样的公司推广开来。每个服务包含一个离散的业务功能,它在技术上与其他服务相隔离,产生了类似乐高积木的效果:开发人员可以将服务切换为一个新的服务,而无需破坏其他服务。就像巨型的乐高模型可以由75,000块乐高组成,大型的数字应用程序也可以由这些受乐高思想启发的服务所构建。

这种架构有一些明显的好处。首先,每个服务与其他服务高度解耦,这意味着它们是自包含的。因此,一个服务中的技术更改(例如数据结构更改)不会影响另一个服务。服务仍然可以通过消息传递进行通信,但是任何一个服务都不允许修改另一个服务的实现细节。

第二,因为开发人员不需要共享基础设施,他们可以选用适合于该问题复杂度的技术栈来实现每一个服务。考虑到当今技术栈的复杂性,在同一应用程序中,使用简单工具处理简单问题和使用复杂工具处理复杂问题的能力使开发团队在增加了灵活性的同时也降低了成本。领导者重视能将复杂问题简化的技术专家。

第三,每个服务封装了业务功能,它更容易促成围绕特定问题域的团队,而不是通过作业功能分割的团队。例如,服务团队通常包括开发人员、业务分析师、DBA、运维人员和QA—即构建和部署服务所需的一切角色。这样一来便降低了协调成本。

“从功能性组织结构向产品或服务结构转变”是敏捷企业转型的一个日益增长的趋势。而微服务架构支持了这种趋势的变化。

最后,因为每个服务是相互隔离的,所以以服务组成的架构既快速又灵活。同时因为服务的业务范围很小,对服务的更改可以快速地发生,这为开发人员提供了新的高级功能。一旦架构师设计了一个小型独立服务的系统,其中应用程序由部署的多个服务之间的消息传递组成,多变量测试等操作就变得容易了。

例如,企业可能对他们网站的未来发展方向并不确定。因此他们设计了具有相似性但功能不同的两种服务,并向不同的用户组部署不同的版本,以获取结果从而推动未来的发展。像Facebook这样的公司也是通过使用这种类型的A / B测试进行试验来分析他们的用户。

标准化一直是IT组织降低成本的方式之一。不幸的是,它也降低了灵活性—标准化越多,灵活性越少。通过采纳微服务架构,架构师和开发人员可以使用更加多样化且能够紧密反映问题复杂度的技术栈来设计应用程序。

微服务架构风格与许多企业部署软件和分配IT资源的方式相反。许多架构风格的主要目标之一是有效地利用共享资源(操作系统、数据库服务器、应用程序服务器等)。由于资源的成本影响了底线,因此这些公司建立了软件架构以最大化共享资源。

然而,共享资源有一个缺点。无论开发人员如何有效地构建与这些服务器的隔离,都会出现对这些资源的竞争。有时组件由于依赖管理而互相干扰,有时由于两个组件争用某些资源(例如CPU)而产生问题。这就不可避免地会导致共享组件以并不期望的方式进行交互。

容器和解耦

在软件交付中,有两个关键的技术“环境”:开发人员工作的开发环境,以及IT运维人员管辖范围的部署环境。传统情况下,在这两个环境之间移动代码充满了技术错误,冗长的时间延迟以及组织层面的沟通不畅。

几年前,一些有趣的事情发生了:Linux对于大多数企业足够友好,Linux的变体在商业上免费—但是这不足以影响技术架构。

接下来,开源的创新与敏捷开发技术的结合鼓励了开发人员创建各种工具,将许多繁琐的运维手工操作自动化。这被许多人称为DevOps革命。

这场革命使得开发团队和IT运维人员通过使用Puppet、Chef和Docker等高级工具更加紧密地联系在一起。意外地,Linux的变体允许免费操作,开发人员可以在不受干扰的情况下将其组件部署到一个原始的操作系统。一整个可能的错误类别就突然消失了,因为组件之间能够相互解耦。

如果开发人员可以构建他们自己的现实环境,他们必须减少与运维部门的协调,也就减少了组织间的摩擦。用程序启动类生产环境的能力消除了测试、集成、共享环境下的资源竞争、以及一系列其他问题。

21世纪的架构敏捷度

在治理方面,微服务架构风格有其他的好处。传统的做法是,企业架构师定义了组织的共享技术栈,以最大化项目间的资源使用,同时最大程度地减少支撑成本。例如,一个大型企业可能将Java和Oracle标准化以作为其主要开发平台。如果每个人都使用Oracle,那么该企业的一切都可以存储在一个工业强度的数据库中。

规范化治理有一个缺点—通常,为了标准化的某一目的,团队必须使用并不太理想的工具。与此同时,还有一个潜在的更微妙的缺点。例如,考虑一个已经选择在特定消息队列上标准化的大型企业。在评估需要此共享基础设施的所有项目时,企业架构师会找出最复杂的场景,并选择一个适合这种复杂度的工具来处理它们。

然而,许多项目并不具备这个最复杂的场景。但因为每个项目必须共享相同的基础设施,所以每个团队都得承担其他团队的最大复杂度。这种情况也发生在数据库层。许多项目只需要几个记录的简单数据存储,并不需要复杂的查询功能,但最终都使用了具有工业强度的数据库服务器,只因为这个企业的标准如此。

容器化技术解决了这个问题,因为它远离了共享基础设施—每个项目都部署在自己原始的、容器化的环境中。因为不存在共享的动力去选择工具,所以每个项目刻意选择更适合自己的工具。

当然,如果企业架构师允许每个项目选择自己的技术栈,那么会存在一些严重的缺点。我们经常看到一个称之为““Goldilocks治理”(企业架构师选择几个技术栈—简单、中等和复杂,并根据规模分配新项目)的实践,它适用于高度解耦的环境。这些知识是可迁移的,该公司仍然可以从中受益,但是却可以远离那些由于疏忽大意而将问题过于复杂化的行为。

为什么我们会谈到这儿?

Eric Evans的《领域驱动设计》一书对微服务架构发展产生了巨大的影响。它介绍了一种将大问题空间分解为领域或重要实体(如客户和订单)及其关系(客户下订单)和行为的技术。领域定义的一部分是有关边界上下文的概念:每个领域形成一个围绕实现细节的封装层。

例如,如果分析人员识别了一个Customer领域,那么它存在于自己的边界上下文中。在Customer的上下文中,开发人员知道所有的实现细节:类结构,数据库模式等。

但是,其他边界上下文(如Orders)不能看到这些实现细节。虽然领域可以为了协调的目的互相发送消息,但是任何一个领域都不能穿透另一个领域的边界上下文。因此,在一个边界上下文中的开发人员可以自由地更改实现,而不必担心破坏其他领域。

微服务中的容器是领域驱动设计(DDD)中边界上下文的物理表现:每个容器代表了一层封装,以防止实现细节干扰系统的其他部分。边界上下文提供的隔离展示了结构化软件架构的不同方式。

在过去,设计架构主要围绕技术架构:架构模式、库、框架等。例如,分层架构在许多组织中是很常见的:

[图1]传统的分层架构

在图1中,架构师沿技术层进行分离,使之在需要时可以很容易地替换一整层的内容。例如,如果开发人员需要更改持久机制,所有相关代码都会出现在持久层中。

那么开发人员多久更换一次整个持久层呢?几乎从不。但你的团队多长时间基于像Customer这样的概念工作呢?每天!

在图1分层架构中,Customer处于哪一层呢?其中部分在表示层、业务层、持久层等等。因此,项目架构上通用单元的变化在分层架构中并没有得到很好的支持,原因是通用的变更影响到了每一层。

如果不同层代表了开发团队的不同部分,其影响会更严重。例如,对Customer的更改可能涉及到用户界面、业务逻辑、持久层和其他特性。如果你的组织由开发人员、DBA、用户界面设计师和运维人员组成,而他们在相互隔离的HR部门下,那么进行常见更改的协调成本是巨大的。

微服务强调解耦和容器化,翻转了图1中的传统做法,使领域成为架构的主要元素,如图2所示。

图2:以领域为中心的架构

在图2中,分层结构仍然存在,但是其耦合边界是领域的边界,它将技术架构归入实现细节,并用领域对其进行封装。以技术为中心的组织单元中,员工与员工彼此隔离,要想在这样的组织中构建以领域为中心的架构是很难的。

许多技术人员在构建数字化企业中会遇到这样的问题:想要支持如移动应用等新举措,却被那些需要拆分的遗留系统所拖累。如今,这些企业越来越多地引入微服务作为这种拆分过程的关键战略。

Greenfield项目得益于DDD实践。通过DDD理解了他们的问题领域以及重要组件之间的接口所在。对于现有项目,更加模块化的系统会促使开发者解开事务性的泥球,并且可以在那些属于一起的组件和偶然耦合的组件之间做更清楚地区分。

团队

你还将遇到微服务对团队影响:一个架构风格是如何推动开发团队重组的。

1968年,梅尔文·康威对软件开发做了一个很有预见性的观察,被称为康威定律

设计系统的组织,其产生的设计等价于这些组织间的沟通结构。

康威定律对软件开发的意义是什么呢?你的设计反映了你的团队结构。企业常见的团队结构是由人力资源部门推动的,他们将职能类似的技术专家组织在一起。虽然这是一种符合逻辑的排序算法,但这种结构在设计自包含服务时效果不佳。

如我们认为的康威逆定律,现在许多公司在围绕业务领域组织跨职能团队,而不是围绕技术分层构建。例如,一个Customer服务可能包括一个业务分析师、开发人员、QA、UX、DBA和运维人员。

团队会在准备好之后再部署服务,而不是先构建一些东西传递到运维人员,使之包含在下一个巨大的发布中。许多选择微服务的公司使用持续部署,以尽快将变更投入生产环境中。

总结

企业高管可能会认为微服务是最新流行词而不予考虑,但那些了解这种架构影响的人可以获得实实在在的好处。微服务可以提高交付速度,增强灵活性,并提高效率。他们将工作进行重组,并与业务问题域保持一致,而不是技术域;从一组独立,更易于开发和维护的服务中创建业务应用程序;更好地匹配技术解决方案与业务问题的复杂程度;构建可以帮助重组现有遗留系统以及创建能够快速响应不断变化的业务条件的新产品和服务的自适应架构。

威廉·吉布森是正确的—许多公司已经将IT竞争力看作鲁棒性一个新的度量。对于这些企业来说,未来已经在这里了。其他还没有意识到这一点的公司可能会发现他们的未来已经受到了影响。

原文链接:https://www.thoughtworks.com/cn/insights/blog/cxo-guide-microservices

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容

  • 原文于2017年2月22日发表于思特沃克洞见 这是技术雷达系列文章的第四篇。在这一系列的文章中,技术雷达的作者们向...
    禚娴静阅读 193评论 0 1
  • 文/JimHighsmith&NealFord译者/禚娴静 这是技术雷达系列文章的第四篇。在这一系列的文章中,技术...
    踏浪听涛阅读 529评论 0 2
  • 前言 近年,SpringCloud俨然已经成为微服务开发的主流技术栈,在国内开发者社区非常火爆。我近来一直在...
    Java资讯库阅读 9,634评论 0 2
  • Java 微服务:基础 要真正理解 Java 微服务,就必须从最基本的东西开始:为人诟病的 Java 大型单体应用...
    杨恩铸阅读 346评论 0 1
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 123,894评论 2 7