写点什么

针对微服务应重新领会功能服务设计:来自 microXchg 大会的报告

  • 2017-02-22
  • 本文字数:1220 字

    阅读完需:约 4 分钟

今年 microXchg 微服务大会上, Uwe Friedrichsen 做了开幕报告。报告中探讨了“弹性功能服务设计”的核心理念,要点包括:微服务开发人员应该了解容错设计模式与缓存,但不能用于改善完全不好(过度耦合)的系统设计;理解领域驱动设计(DDD,Domain-Driven Design)和模块化的重要性;组件重在可替换性而非可重用性。

Friedrichsen 是 Codecentric 公司的 CTO,他在演讲一开始就指出了软件开发的目的在于交付业务价值。为实现该目标,软件必须在生产环境中运行并(高度)可用。微服务这样的现代架构风格意味着凡事皆分布(很多情况下是在不少于一个LAN 上的分布),因此故障在系统中是常见的并且是不可预测的

容错设计模式应该被开发人员所熟知,诸如电路熔断器(Circuit Breaker)、舱壁(Bulkhead)、超时与重试(Timeout and Retry)等。容错设计模式借助Michael Nygard 所著的《[Release It!( https://pragprog.com/book/mnee/release-it )》一书而广为人知。缓存虽然十分有用,但是在部署中应慎重使用,并非简单地应用就可以达到克服不好系统设计的效果,例如涉及多个独立服务的长激活路径。

Friedrichsen 展示了一系列用于微服务的“设计基础”(如下图所示),其中包括了一些侧重于高内聚、低耦合和分离关注的设计原则。这些原则在系统边界处尤为关键,虽然他们的理论早在上世纪 70 年代就由 David Parnas (PDF 链接)详细阐明了,但是他们依然常被错误地理解。

领域驱动设计(DDD,Domain-Driven Design)是一个十分有用的工具,但是不少开发人员过度聚焦于被 Friedrichsen 称做“实体 DDD”的领域静态上下文模型。通常系统的动态行为对业务行为、领域时间和数据流更具描述力。

不要从静态领域模型着手,魔法存在于系统的动态行为之中。

微服务开发人员不应纠结于可重用性,而是应该瞄准于可替换性。Friedrichsen 引用了 Fred Brooks 的说法,讨论多年来一直被开发人员所追求的软件重用承诺问题。Brook 建议对于需要创建可重用组件(超越那些适用单一用例目标的组件)的工作,通常需要付出三倍以上的工作投入。这意味只有当组件被无修改地被使用了四次以上,才会看到些许在可重用性上投入的反馈。

微服务系统中使用的交流模式也很大程度上影响了功能性服务设计,Friedrichsen 建议应将关注置于会限制未来更改和扩充能力的前期架构选取之上。

报告的结论和核心关键要点在于,当实现微服务这样的分布式系统时,系统的特性会使得多年来一直为我们所熟知的设计问题影响得以呈现出来并会倍增,因此开发人员和架构师需要重新领会功能服务设计。

Uwe Friedrichsen 演讲“弹性功能服务设计”的视频可以在microXchg 大会的YouTube 频道上看到。

查看英文原文: Relearning Functional Service Design for Microservices: Uwe Friedrichsen at microXchg


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-02-22 18:001425

评论

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

华为云MVP朱有鹏:做IoT开发乐趣无穷,年轻开发者更要厚积薄发

华为云开发者联盟

人工智能 物联网中台 物联网 IoT 华为云

继 GitHub、Twitter 后,Linux 内核废止 master/slave

神经星星

GitHub Linux 程序员 Linux Kenel 技术平权

「架构师训练营」第 6 周作业 - 总结

森林

Week06

熊威

CAP

东哥

CAP

喜讯!众盟科技获ADMIC 2020金璨奖“年度汽车数字化营销供应商”殊荣

人称T客

架构师训练营第六周 - 总结

Larry

Kafka 是如何建模数据的?

tison

大数据 kafka

架构师训练营第6周总结:数据库分片,Hbase和ZooKeeper

hifly

zookeeper Cassandra 极客大学架构师训练营 HBase

分布式RDBMS和NoSQL

LEAF

第六章作业

武鹏

详解 Flink 实时应用的确定性

Apache Flink

flink

【架构师训练营】第六周总结

Mr.hou

极客大学架构师训练营

缓存穿透、缓存击穿、缓存雪崩,看这篇就够了

码农神说

缓存 缓存穿透 缓存击穿 缓存雪崩 数据缓存

架构师训练营第六周命题作业

whiter

极客大学架构师训练营

分布式KV存储临时失效时序图

LEAF

聊聊Dubbo(一):为何选择

猿灯塔

猿灯塔:spring Boot Starter开发及源码刨析(六)

猿灯塔

CAP原理简介

elfkingw

架构师训练营第六周总结

王铭铭

解析软件系统稳定性的三大秘密

华为云开发者联盟

开发者 软件开发 稳定性 系统 探索与实践

架构学习第六周作业

乐天

第六周作业

晨光

Doris临时失效处理过程的UML时序图

周冬辉

「架构师训练营」第 6 周作业 - CAP

森林

第六章总结

武鹏

联想ThinkSystem服务器,企业智能化考验下的极限应考

脑极体

聊聊服务灾备

老胡爱分享

分布式架构 服务设计

架构师训练营第六周学习总结

whiter

极客大学架构师训练营

第六周作业

Larry

总结

东哥

针对微服务应重新领会功能服务设计:来自microXchg大会的报告_语言 & 开发_Daniel Bryant_InfoQ精选文章