写点什么

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

评论

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

推荐系统提供web服务的2种方式(二十四)

Databri_AI

算法 推荐系统 web服务

2021最新一线大厂Java高级架构师面试题总结,上线3天获22w浏览量

Java 编程 程序员 架构 面试

程序员35岁以后就真的要返乡种田了么?如果没田种怎么办?|话题

花花

话题讨论 话题 话题王者 话题广场

云原生领域的一些技术展望

名白

容器 云原生 Service Mesh service

HarmonyOS学习路之开发篇——公共事件与通知(二)

爱吃土豆丝的打工人

HarmonyOS 通知事件

Hadoop 数据仓库建设实践(理论结合实践)

云祁

hadoop 数据仓库 7月日更

剑指“双碳”目标,浪潮云牵手中科谱光一起做「光谱捕手」

云计算

业务架构模块7 作业 王者荣耀商城异地多活

好吃不贵

业务架构

PowerShell 数组

耳东@Erdong

PowerShell 7月日更

“Windows 找不到文件...”,怎么处理?

Emotion

windows 系统 找不到系统文件 windows找不到文件

李某逆道而行闭关三月,直接四杀斩获阿里/腾讯/京东/百度等大厂offer

Java架构师迁哥

浅谈大数据建模的主要技术:维度建模

云祁

大数据 数据仓库 维度建模 7月日更

又曝出程序员删库跑路,业界何时能推出互联网企业和程序员之间的约束准则?|话题

三掌柜

话题讨论 话题 话题王者 话题广场

念念不忘,必有回响!6月更文活动的一些总结

编程三昧

程序员 程序人生 代码人生

话题讨论|你知道集群、分布式、微服务区别吗?

Emotion

分布式 微服务 话题讨论 集群 话题王者

极客时间-排位赛可视化工具

IT蜗壳-Tango

7月日更

🏆 【JVM性能调优】「对象内存分配」虚拟机参数调优分析

洛神灬殇

GC jvm调优 内存分配 7月日更

5分钟速读之Rust权威指南(三十四)面向对象

wzx

rust

Java入门到架构-优秀书籍

Java入门到架构

Java 架构 入门 书籍

党建百年,矛盾论指导架构设计

三石

架构设计

架构思考

zk

微信 架构 微信业务架构

网络攻防学习笔记 Day61

穿过生命散发芬芳

网络攻防 7月日更

Linux之tail命令

入门小站

Linux

(VMware)ubuntu 环境下搭建 docker 镜像私服

逸少

Docker 镜像仓库

CodeDay#7 启动 | 北京欢迎你

蚂蚁集团移动开发平台 mPaaS

小程序 webview 移动开发 mPaaS

为什么 FaaS 系统的复杂性不会随着规模的增长而指数增长?

朱峰 Ben

Serverless Faas

“懂行人”合力共建“强富美高”数字经济助力千载金陵的数字一跃

脑极体

在线HTML实体转字符串工具

入门小站

工具

Flink运行架构

五分钟学大数据

flink 7月日更

时间管理:通过折叠时间放大时间价值

石云升

读书笔记 时间管理 7月日更

低代码“三合一”模式,解决产品研发系统沟通问题!

优秀

低代码

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