【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

针对微服务应重新领会功能服务设计:来自 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:001196

评论

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

5G之味,在烟火长沙

脑极体

5G

使用Terraform部署华为云和kubernetes资源

华为云开发者联盟

开发 华为云 华为云开发者联盟

[大厂实践] DoorDash基于eBPF的监控实践

俞凡

云原生 监控 ebpf 大厂实践

2023 IoTDB Summit:华润电力技术研究院副院长郭为民《新型时序数据库在智能发电领域的应用探索与展望》

Apache IoTDB

软件测试/测试开发/全日制 |使用Django构建高效的Web应用

测吧(北京)科技有限公司

测试

2024年CoinList上第一个项目Subsquid

币离海

Coinlist Subsquid SQD

MT7915: Demonstrating the glorious history of wireless communications

wallysSK

软件测试/测试开发全日制培训|Pytest跳过用例和失败重试

霍格沃兹测试开发学社

一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器

智趣匠

软件测试/测试开发/全日制 |Python全栈开发:构建跨平台、可移植的应用

测吧(北京)科技有限公司

测试

2024第十届上海国际智慧工地展览会

AIOTE智博会

智慧工地展览会 智慧工地展会 智慧工地展

软件测试/测试开发/全日制 |使用Socket.IO实现实时通信

测吧(北京)科技有限公司

测试

面试官:分布式锁最终解决方案是RedLock吗?为什么?

王磊

Java 面试

技嘉推出 GEFORCE RTX 40 SUPER 系列显卡

财见

让代码不再枯燥,变成你的快乐伙伴! -超过200+的python趣味编程系列-完整源码(保证可运行)+执行效果(持续更新ing)

顺顺顺

Python 游戏

敏捷监控与可观察性

FunTester

软件测试/测试开发/全日制|Pytest如何灵活地运行用例

霍格沃兹测试开发学社

左耳听风 - 我对技术的态度「读书打卡 day 02」

Java 工程师蔡姬

读书笔记 程序员 读书 左耳朵耗子

服务器比较常见几个的故障问题

德迅云安全_初启

系统存储架构升级分享 | 京东云技术团队

京东科技开发者

跨境电商通讯服务

ctsxiyou

通信 通讯

用友全球司库十问(九)|企业为什么需要银企直联?

用友BIP

全球司库

Databend 开源周报第 127 期

Databend

JavaScript 常见错误与异常处理

京东科技开发者

软件测试/测试开发/全日制|pytest如何标记测试用例

霍格沃兹测试开发学社

为什么建筑设计师选择网络渲染"效果图"

Renderbus瑞云渲染农场

云渲染 云渲染农场 效果图渲染

C 语言文件处理全攻略:创建、写入、追加操作解析

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

软件测试/测试开发/全日制 |解析Web应用中的日志与监控

测吧(北京)科技有限公司

测试

云渲染适合什么场景下使用?

Renderbus瑞云渲染农场

云渲染 渲染农场 动画渲染 效果图渲染

创业清华人丨 乔嘉林:破茧成蝶,时序数据库赋能工业物联网

Apache IoTDB

漫画IT | 关于你天天用的OS与Git

极狐GitLab

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