写点什么

微服务经济学:Phil Calçado 在 CraftConf 大会上强调要避免微单体陷阱

  • 2017-05-21
  • 本文字数:1583 字

    阅读完需:约 5 分钟

在匈牙利布达佩斯举行的 CraftConf 2017 大会上, Phil Calçado 呈现了“微服务经济学”的演讲。演讲的要点包括:在对单体应用进行改造时,“反康威定律”可以作为一个有用的应用架构指导工具,不过这有可能导致出现“微单体”(迷你单体),除非创建新服务的“交易成本”低于在已有单体或服务里添加新服务的成本;单体从“域经济”中获益(比如,增加新功能不需要实现新的部署流程),而微服务则从“伸缩经济”中获益,不过为了支持伸缩,需要额外的自动化成本(有时候需要在前期投入)。

来自DigitalOcean 的产品工程总监Calçado 将康威定律作为演讲开场白,讲述了他的团队在改造单体架构方面的经历。由Thoughtworks(以及 James Lewis )所提倡的“反康威定律”可以用于重组组织的结构,从而相应地改变软件应用的架构,一般会朝着更小的服务发展,比如“微服务”。不过,微服务的成功实施需要前期的投入,用于支持部署和解决众多的横切面(cross-cutting)问题。在后期,这些小型的服务可能变得难以维护,所以要小心谨慎。

Calçado 借鉴了企业管理领域的一些思考模式,他引用了 R.H. Coase 所著“企业的性质”一书的内容,将单体应用比作“企业”,将微服务比作“自由代理机构”:

当企业内部的整体交易成本低于外部自由代理市场的成本,企业才能得以生存。

……直到内部的交易成本与通过外部开放市场进行交换的成本等同,或者与重新组织一个企业的成本等同。

当一个组织开始向微服务架构迁移时,往单体里添加功能的“交易成本”要低于构建整个服务(包括所有相关的交付机制)的成本。反康威定律会让往单体添加功能的交易成本高过构建新服务的成本,不过 Calçado 建议最好还是想办法降低构建新服务的成本,让它们低于往单体或已有的服务里添加新功能的成本。

持续不断地往一个已有的微服务里添加功能会导致出现“微单体”,它们实际上就是小型的单体。

让“错误”的事情变复杂,这在一开始是没有问题的,不过如果能够将“正确”的事情简单化,它会将你带向卓越。

Calçado 在演讲的下一个小节剖析了微服务的交易成本,并引用了 Martin Fowler 的“ Microservices Prerequisites ”一文的内容,他基于自己的经验建议添加额外的四项前提:

  1. 快速调配(Fowler)
  2. 基本的监控(Fowler)
  3. 快速部署(Fowler)
  4. 易于调配的存储
  5. 访问边界,例如,一个暴露给客户端的新服务需要访问“边界”功能,如会话数据,还有可能要求处理横切面问题,如审计和速率限定
  6. 认证和授权
  7. 标准化的远程过程调用(RPC),例如,使用微服务底层框架,如 Twitter 的 Finagle 或 Netflix 的 Karyon (现在已经不建议使用),或者使用服务网格框架,如 Linkerd Envoy

Calçado 说单体从域经济上获益,而微服务则从伸缩经济上获益。例如,一旦配置好单体应用的部署流程,增加新的特性一般不会造成额外的成本。而对于微服务来说,创建新的服务一般意味着需要新的部署脚本或管道。这个就涉及到之前讨论的降低"交易成本"的话题,降低微服务迁移成本最有效的方式是减少增加单个服务的成本。

在演讲结束时,Calçado 提醒大家,没有必要在前期就知道所有降低交易成本的方式。业务的主要目标是为客户、用户和利益相关者带来价值,从 Calçado 的经验来看,开发团队在向微服务的迁移过程中要保持交付业务价值,一般需要遵循以下五个步骤:

  1. 试验——开发人员要经历架构问题,并尝试在单体之外构建服务。
  2. 检查清单和标准——标准化和文档化的手动构建服务流程。
  3. 拷贝和黏贴——通过拷贝代码来开始新服务的开发。
  4. 类库和工具——将上一步提到的代码拷贝封装成一系列类库和工具。
  5. 平台——微服务生态系统的支持平台,包括所有的要素。

Phil Calçado 的演讲幻灯片“微服务经济学”可以在 SlideShare 上找到,可以在 CraftConf 2017 的 Ustream 频道观看相关视频。

查看英文原文: The Economics of Microservices: Phil Calçado Recommends Avoiding ‘Microliths’ at CraftConf

2017-05-21 19:001329
用户头像

发布了 322 篇内容, 共 147.6 次阅读, 收获喜欢 148 次。

关注

评论

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

教师节:程序员的献礼方式

android 程序员 移动开发

新鲜出炉的Android面试题,确定不来看看吗?还有超详细的答案解析哦~

android 程序员 移动开发

是时候丢掉 onActivityResult 了 !

android 程序员 移动开发

效率提升百分之四十,AS模板也太好用了吧

android 程序员 移动开发

最接地气的Android面试总结心得

android 程序员 移动开发

探索Android开源框架之OkHttp源码解析

android 程序员 移动开发

数据的强一致性与弱一致性

android 程序员 移动开发

数组结构七:集合和映射(Set And Map)

android 程序员 移动开发

抽象工厂模式

android 程序员 移动开发

挑战全网!最全Android面试知识点梳理。收藏这一篇就够了!

android 程序员 移动开发

史上最全Java程序员必备辅助开发神器(2022年版),建议收藏!

Java高级开发

程序员 架构 开发工具 java;

新风向!成就了Android,热门框架排第一,你还是不够了解它

android 程序员 移动开发

来聊聊 Android Jetpack

android 程序员 移动开发

初识Lua

Changing Lin

11月日更

揭秘:如何化身BAT面试offer收割机?

android 程序员 移动开发

数据结构和算法学习指南

android 程序员 移动开发

未来大趋势!Flutter-VS-Kotlin-跨平台开发市场的最终霸主究竟花落谁家?你看好谁呢?

android 程序员 移动开发

数据结构(二), AVL平衡二叉树

android 程序员 移动开发

是面试官放水,还是公司太缺人?这都没挂,2021的字节跳动也太好进了吧

android 程序员 移动开发

我真的要做一辈子的程序员吗?

android 程序员 移动开发

换个姿势,带着问题看Handler

android 程序员 移动开发

探索 Flutter 异步消息的实现

android 程序员 移动开发

插件化框架解读之so-文件加载机制(四)

android 程序员 移动开发

数据的强一致性与弱一致性(1)

android 程序员 移动开发

我的Android 求职简历,二本渣校,靠这份简历拿下BATJ等15家大厂Offer!

android 程序员 移动开发

95后阿里P7晒出工资单:狠补了这个,真香...

Java高级开发

Java 程序员 面试 编程语言 阿里

春招总结!大厂淘汰率80%,面试难度极高

android 程序员 移动开发

最新Android面试题整理

android 程序员 移动开发

我的十年:2020金九银十必刷——小米

android 程序员 移动开发

最后再说一次!!不要在你的App启动界面设置SingleTask-SingleInstance

android 程序员 移动开发

有人说这是2021字节跳动-初级Android工程师的面经?吓到我了!我还是去搬砖吧!

android 程序员 移动开发

微服务经济学:Phil Calçado在CraftConf大会上强调要避免微单体陷阱_架构_Daniel Bryant_InfoQ精选文章