NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

评论

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

盘点2021 | 也无风雨也无晴-转行三年,再度出发

翊君

程序员 转行 人生修炼 盘点2021 盘点 2021

GBASE南大通用加入openGauss社区

openGauss

“千言”开源数据集项目全面升级:数据驱动AI技术进步

百度大脑

人工智能

7.3万字肝爆Java8新特性,我不信你能看完!(建议收藏)

冰河

程序员 java8 编程基础 Lamdba表达式 Stream API

书单 | 2021年度经典畅销佳作盘点!

博文视点Broadview

呼和浩特市等保测评公司在哪里?联系电话多少?

行云管家

等保 等级保护 等保测评

构建测试的体系化思维(基础篇)

BY林子

软件测试 测试思维

注意,你所做的A/B实验,可能是错的!

字节跳动数据平台

大数据 测试 AB 增长黑客

政法委多部门联防联控平台,重点人员联防联控平台建设

a13823115807

开源堡垒机是什么?开源堡垒机的优缺点是什么?

行云管家

开源 网络安全 堡垒机 开源堡垒机

关于 Apache Flink 和实时计算的最新动态、未来方向,你想知道的都在这里

Apache Flink

大数据 flink 编程 后端 实时计算

格创东智选择TDengine,实现海量数据实时全生命周期管理

TDengine

数据库 大数据 tdengine

云基华海正式加入openGauss社区

openGauss

性能提升一个数量级,Java大杀器来了!Java冷启动问题的成因与解决

华章IT

Java

Linux之目录结构

入门小站

邮储银行新一代个人业务核心系统国际汇款业务上线,openGauss核心应用再创新高度

openGauss

全新缓存组件,大幅加速云上飞桨分布式训练作业

百度开发者中心

飞桨

程序员非常实用的十个工具网站,值得收藏

AlwaysBeta

在线JSON转HTML,TABLE表格工具

入门小站

工具

微服务架构 | 如何让接口权限继续继承下去?

码农架构

Auth2 OAuth 2.0 SpringCloud Alibaba spring aop Java 开发

2021年我读过的52本书

SkyFire

c++ 个人成长 总结 读书 计算机

图解MongoDB集群部署原理(3)

Tom弹架构

谈B端产品技术团队的核心价值(1/100)

hackstoic

团队建设

MariaDB 到 MySQL 整库迁移(qbit)

qbit

MySQL MariaDB 数据导入 数据导出

linux学习零基础教学课程:Linux文件系统结构

侠盗安全

Linux 运维 运维工程师 云计算架构师

大数据SQL优化之数据倾斜解决案例全集

安第斯智能云

数据

鸿鹄元数正式加入openGauss社区

openGauss

深度揭秘openGauss分区表如何实现大数据量的快速转移

openGauss

多种网络设备的优缺点及网络故障的排除方法

恒生LIGHT云社区

故障 网络设备

荣获中国专利金奖!百度连续四年AI专利申请和授予量全国第一

百度大脑

人工智能

使用JDBC进行openGauss的读写分离及负载均衡

openGauss

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