速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

评论

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

「编程模型」C++代码组织

顿晓

c++ 命名空间 namespace 代码组织 编程模型

第二周作业(Cache接口隔离优化)

吴建中

极客大学架构师训练营

架构师训练营 -week2- 总结

Geek_5a6ca3

极客时间架构课 Week02- 作业二:学习总结

yulyulcl

【架构师训练营】第二周作业

魔曦

极客大学架构师训练营

第二周--设计模式

Just顾

学习总结 - W2

Kun

极客大学架构师训练营

Week2 课后作业

Geek_165f3d

依赖倒置

架构师训练营第二次总结

+╮(╯▽╰)╭/>……

《架构训练营》week2 作业

任鑫

架构

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

坂田吴奇隆

万物互联=区块链+物联网

CECBC

AI 物联网 区块链技术 智能高效

架构师训练营第二周总结

毛叫

极客大学架构师训练营

架构训练营第二周作业

Gavin

架构训练营第二周总结

Gavin

第二周作业

架构师训练营第二周总结

allen

架构师训练营第二周心得

努力努力再努力m

极客大学架构师训练营

week2.课后作业

个人练习生niki👍

依赖倒置原则

第二周学习总结

iHai

极客大学架构师训练营

架构师训练营第二课作业

曾祥斌

架构师训练营 -Week 02 学习总结

华乐彬

【架构师训练营 - week2 -2】总结

早睡早起

架构师训练营第二周作业

努力努力再努力m

极客大学架构师训练营

week02 学习总结

Just顾

架构学习(二)作业

漫步跑小鸡

架构师训练营第二周总结

陌生人

【架构课笔记 - 第二周】编程方法演进与OOP

Nelson

架构

架构师训练营 Week 02 总结

Wancho

面向对象设计

架构师训练营第二章作业

JUN

week2.学习总结

个人练习生niki👍

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