免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

Uwe Friedrichsen 关于功能服务设计与观测性的演讲

  • 2017-12-05
  • 本文字数:3302 字

    阅读完需:约 11 分钟

本文要点

  • 微服务的核心理念是支持应用模块独立和快速迭代的属性。这一点经常被实践者所忽略。
  • 监控和日志系统需要以反映当前软件架构的方式演进,这既有技术上的影响,也有认知上的影响。
  • 许多在传统软件工程教育中学到的关于如何功能划分的知识(例如,“不要重复造轮子”)在分布式系统,例如微服务系统中,并不行得通。
  • “微服务”术语本身在将来也许会消失,但是这种新的功能分解式的架构风格会持续下去。
  • 将一件事物标准化成一种通用的东西具有巨大价值,而碎片化、缺乏公平性和协作性会损害最终用户的利益。

在德国柏林举行的 microXchg 2017 大会上, Uwe Friedrichsen 发表演讲,讨论了“有弹性的功能服务设计”的核心概念以及如何创造可观测的系统。Friedrichsen 认为,要想开发高效的系统,微服务开发者必须:了解容错设计模式和缓存,但是不要试图使用它们来减缓基础设施很烂(过度耦合)的系统设计;理解领域驱动设计(Domain-Driven Design,DDD)和模块化;将组件的可替代性作为设计目标而不是复用性

Friedrichsen 是 codecentric 的 CTO,他首先讲到,软件开发的目标是实现商业价值,因此必须意识到,软件一定会运行在生产环境且必须保持高可用性。现代的各种架构风格,例如微服务,意味着现在一切都是分布式的,通常可能会形成至少一个局域网,因此系统异常是普遍发生且不可预测的。开发者必须了解系统弹性(resilience)的基本原理:


系统弹性的基本原理、概念和模式

开发者应该熟悉容错设计模式,例如断路器模式、隔离壁模式、超时重试模式。这些设计模式因 Michael Nygard 的《 Release It! 》一书而流行。缓存虽然也很有用,但是应该小心部署,而且不要仅仅是用来克服一些糟糕的系统设计,例如一个功能的生效需要一条经过涉及许多依赖服务的很长的路径。

Friedrichsen 提出了一系列微服务的设计基础(如下图所示),包括一系列聚焦高内聚、低耦合和相互分离的设计概念。这些设计原则非常重要,适用于各种系统。虽然这些原理早在 20 世纪 70 年代就已经被 David Parnas 很好地整理成文(PDF 链接),但直到现在它们还经常被误解。


Uwe Friedrichsen 服务设计的基础原则

领域驱动设计(Domian-Driven Design,DDD)是一个非常有用的工具,但是许多开发者过度聚焦于领域的静态关系模型,Friedrichsen 称之为“实体驱动设计(Entity DDD)”。但是,系统的动态表现通常更能说明业务活动、领域事件和数据流。

引用 Fred Brooks 的观点,Friedrichsen 针对开发者过去多年追求的软件复用性进行了讨论。Brooks 认为,创建一个可复用组件的工作量通常是创建一个适用单个情景的组件的工作量的三倍。这意味着,任何针对复用性的投入,只有在一个组件不修改就可以至少被使用 4 次,才算是值得的。


Friedrichsen 建议开发者应该放弃复用性,追求可替代性

微服务系统内所使用的通信方式,也会深深影响功能服务设计。Friedrichsen 建议,前期的架构选择应该谨慎,因为它会限制系统未来的可维护性和扩展性。

Friedrichsen 演讲的结论信息和核心卖点是,开发者和架构师在实现分布式系统(例如使用微服务架构的系统)时需要重新认知功能服务设计,因为这些系统的属性决定了它们会加倍暴露出我们过去多年所了解的设计缺陷,并造成更严重的影响。

InfoQ 采访了 Friedrichsen,与他深入讨论了设计有弹性的和可观测的服务所面临的挑战:

InfoQ: Uwe,当前那些实践微服务的组织所面临的最具挑战性的问题是什么?

Friedrichsen: 他们太看重微服务了。

“微服务”已经成为了一个非常流行的主流术语。每个使用 Spring Boot 或者类似东西的人,都声称在做微服务。不要误会:我并不是说 Spring Boot 有什么问题,但是编写一个单独的系统,暴露一些 HTTP 接口,并不意味着你编写了一个微服务。

微服务的核心思想是支持应用模块独立和快速迭代。不幸的事,据我观察,大多数人定义一个微服务时,在这些理念上投入的精力太少了。

微服务是一种架构风格,能够帮助你快速前进。如果你所在的公司处在一个快速变化的市场,并且 IT 部门需要支持业务部门快速适应市场变化,你就需要让 IT 部门能够快速推进。

那些像微服务之类的炒作趋势的问题在于,人们经常尝试使用这些技术,即使这些技术对于他们的情况来说并不是一个恰当的方案。如果你的 IT 部门并不迫切需要变得更快,你也许并不需要微服务。你仍然可以使用 Spring Boot(毕竟,它很有意思),但是你不应该再称它为“微服务”。

InfoQ: Uwe,根据当前开发模式的变化趋势,你能推荐一种技术来鼓励开发者和架构师去思考功能服务设计吗?

Friedrichsen:如果我知道这样一种技术,我就会通过售卖它来赚取很多钱,变得很富有…但是,说良心话,我认为有三个因素,令开发者和架构师很难去思考功能服务设计到他们本来应该达到的程度:

1. 这太难了,真的是非常难。即使软件架构和设计已经发展了 40 多年,人们对此也是知之甚少。

许多人提到领域驱动设计(Domain Driven Design,DDD),它确实是一个很好的起点。但是,仅仅知道一些设计模式,与能够使用这些设计模式为你当前的业务难题创建一个合理的的设计,是完全不同的概念。特别是,当有产品经理或产品负责人经常坐在你旁边,催促你“更加多产”一点。

此外,我们在软件教育中学到的任何关于如何拆分功能的知识,例如,功能分解、“不重复造轮子”(DRY,Don’t Repeat Yourself)和创建可复用的功能,在类似微服务架构的分布式系统中并不可行。如果你使用这些最佳实践的设计,你会发现,最终的设计非常糟糕,会在生产环境严重困扰你。基本上,我们必须重新学习分布式系统的设计,并且根据我个人的观察,我们还需要学习如何正确地实现这一点。

2.IT 人员的真正问题是因为各种更吸引眼球的穿插概念忙的不可开交。

新的框架和编程语言,无休止的关于如何做这个和如何做那个的辩论,各种专家告诉你,如果你不做这个或者不做那个,你做什么都是错的。我们沉浸于各种吸引人的新的事物和观点。参加一场大会,阅读一本 IT 杂志,或者仅仅看看你 Twitter 时间线,你就会知道我的意思。所有这些看起来都比尝试学习如何做好设计更有趣。

3. 我们每 5 年集体失忆一次。

据我观察,我们每 5 年面临一代来自大学校园(或者其它地方)的开发者。从另一个方面,这意味着我们每 5 年集体失忆一次。这些新人不知道那些许多年前曾经为你打开眼界的演讲或者文章。他们不得不自己从各种拼凑的文章中重新学习所有这些知识。

在一些类似功能设计这样的“永恒”话题中,在 IT 领域,糟糕的现象是,“新”被认为是“有价值的”,而“老”被认为是“毫无价值的”。我们的业务在不断变化,不是么?什么知识能够经过 5 年,10 年,甚至 20 年还有价值呢?而且即使有一些人最终认识到并不是所有老的知识都是毫无价值的,我们仍然继续一遍又一遍讲述和遗忘同样的故事,而每年大量加入 IT 行业的新开发者对这些知识仍然是闻所未闻。

InfoQ: 您提到了 IT 行业人员的快速变化,那么微服务架构风格本身的前景如何呢?

Friedrichsen:坦率地讲:我也不知道。可能在大部分供应商、咨询顾问和那些喜欢用新潮的事物标榜自己的人炒作了其它新的术语之后,“微服务”术语本身最终会像其它炒作的术语一样沉寂。但是,架构风格会持续下去。事实上,这些风格在我们称之为“微服务”时其实并不是新的概念;它已经存在许多年了。它只是根据 IT 行业的进步做了一些更新,然后被称作“微服务”罢了。而且也许在下一次更新之后,这个架构风格会被称作不同的东西。

在不久的将来,我们也许会看到一些微服务风格更加不同的特性。并不是每个人都需要一个“纯粹的”微服务风格的所有特性。许多人也许只会使用微服务风格的一部分特性来满足他们的需求。

但是,坦率地讲:最终如何,我也不知道。

Uwe Friedrichsen 的完整演讲视频《有弹性的功能服务设计》可以在InfoQ 查看。

关于采访嘉宾

Uwe Friedrichsen 是 codecentric AG 的 CTO,他专注于系统弹性、可扩展性以及 IT 行业发展前景。Uwe 从事 IT 领域多年,一直研究创新的想法和概念。你可以在技术大会或者他的文章、博文以及 twitter 消息中看到他分享的想法。

查看英文原文: Uwe Friedrichsen on Functional Service Design and Observability

感谢罗远航对本文的审校。

2017-12-05 16:491230

评论

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

pandas plot函数:数据可视化的快捷通道

快乐非自愿限量之名

pandas 数据可视化

云游戏平台塑造游戏发行商商业新格局

Ogcloud

游戏 云游戏 游戏发行 云游戏发行 云游戏平台

面试官:说说线程池的工作原理?

王磊

Java 面试

Digital Realty 在日本 NRT 园区设立第二座数据中心

财见

汽车软件市场迅猛扩张,Perforce Helix Core与Helix IPLM助力汽车软件开发的版本控制及IP生命周期管理

龙智—DevSecOps解决方案

汽车 汽车软件

2 月 Web3 游戏行业动态

Footprint Analytics

blockchain

龙智携全方位芯片解决方案亮相IIC Shanghai 2024,助力客户解决复杂的芯片研发挑战

龙智—DevSecOps解决方案

芯片开发 芯片研发

IT外包的三大优势对企业的发展有何影响?

Ogcloud

IT IT外包 IT外包公司 IT外包服务 IT外包企业

企业云服务器免费使用后会存在哪些隐患?

一只扑棱蛾子

云服务器 企业云服务器

AutoCAD 2019(cad2019)汉化激活版下载附cad产品密钥

Rose

cad2019 AutoCAD 2019

macos big sur 软件icons图标大全(新增至2719枚大苏尔风格图标)

Rose

macOS Big Sur icons图标

人工智能测试开发训练营 带你快速掌握AI测试开发技能,获得更好的职业机会和晋升空间

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

测试

软件测试学习笔记丨接口测试面试题

测试人

软件测试 面试题 测试开发

pd18虚拟机如何安装?哪里有Parallels 工具箱?

Rose

PD18虚拟机破解 Parallels 工具箱 Mac虚拟机安装 Parallels Desktop破解

IBM 宣布在 watsonx 上提供开源的 Mistral AI 模型

财见

深耕版本控制、代码质量与安全等领域,龙智荣获“Perforce 2023年度合作伙伴”奖项

龙智—DevSecOps解决方案

版本控制

云游戏发行是什么?云游戏发行的演进历程

Ogcloud

游戏 云游戏 游戏发行 游戏云化 游戏发行公司

『Java 语法基础』面向对象有哪些特性

EquatorCoco

Java JVM 语法 开发语言

Pandora飙升背后的ERC404 目前适合布局吗

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

客户说|从4小时到15分钟,一次分布式数据库的丝滑体验

阿里云数据库开源

阿里云 运维 polarDB PolarDB-X 识货

Touch bar pet for Mac(在macbook上养一只宠物)

Rose

Mac软件 电子宠物 touchbar 宠物桌面

大咖公开课 | 探索AI的边界:如何精准地测试人工智能

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

测试

如何避免MYSQL主从延迟带来的读写问题?

不在线第一只蜗牛

MySQL

AI+办公!5款超实用AI软件,一键生成PPT、视频、思维导图等!

彭宏豪95

人工智能 在线白板 AIGC 效率软件 AI生成PPT

Maple 2024 mac下载(含maple注册文件及破解工具)兼容m芯片

Rose

软件下载 Maple 2024 Maple数学软件 Maple 2024 mac破解

毫末贺翔:DriveGPT让通用感知实现“万物识别”、通用认知具备“世界知识”

Geek_2d6073

Uwe Friedrichsen关于功能服务设计与观测性的演讲_DevOps & 平台工程_Daniel Bryant_InfoQ精选文章