FinOps有望降低企业50%+的云成本! 了解详情
写点什么

微服务架构设计须避开工程师思维

  • 2016-03-13
  • 本文字数:1328 字

    阅读完需:约 4 分钟

在对微服务和微服务 API 进行设计的时候,开发者最好能站在用户的角度像一个设计师一样去设计规划,Nic Benders 在最近举行的 Microservices Practitioner Summit 峰会上如是说。正如红帽所说 API 应该是微服务的重点,然后通过“由外向内”的方法来构建微服务。

这里来介绍一下 Benders,他是 App 性能管理服务商 New Relic 公司的首席架构师,New Relic 也是一家从开发单体架构应用开始的公司,随着用户基数的不断增长,应用的功能设定也有所升级改版,更重要的是,服务的能力也在不断的提升。而正是因为这些方方面面的数据都在增长,导致更多的问题频繁出现。也正是基于这样一个大的背景下,New Relic 公司在经过几年的分析思考之后,决定从原来的单体架构模型迁移到微服务架构

正是在这个迁移到新架构的过程中,Benders 发现他们所犯下的最大错误就是被固有的“工程师思维模式”所局限了双眼。以数据层开始着手从内向外构建服务,然后通过业务逻辑将数据层往外迁移,这也就意味着 API 的设计工作接近尾声了。如果说真的是按照这个流程来执行的话,只能说制作这样一个 API 从业务逻辑上来说是有意义的,但是并不能满足庞大的用户需求。当然,在设计过程中也会有很多来自团队的不同声音和决策,部分决策当然会限制 API 的性能,同时也不能完全将用户的需求考虑进去。对此,Benders 坚持认为,API 的设计对产品起到了决定性作用,开发人员一定要像设计师那样去思考,而不仅仅是工程师。

When designing a system, you need to think like a designer。
对于系统的整体设计,要具备设计师那样的艺术思维。

使用这样的方法开始设计一个新的产品,同时兼顾要解决用户提出的问题,这样一款新产品如何解决用户问题,产品测试阶段还得和真实用户结合到一起才能最终得出解决方案。用户使用什么样的服务只是一个需求,跟开发者在开发这款服务时使用的什么样的模型根本就没多大关系,更重要的是在对 API 进行设计的时候使用了“由外向内”的设计方法,根据 API 的定义规则,实现对 API 的服务的支持则由开发者来决定的。Benders 将之与测试驱动开发( Test-Driven Development ,TDD)相比较,TDD 是在实现驱动之初就已经将测试程序写好了。

通常情况下,Benders 在设计 API 的时候,前期都会以写一些伪代码仿真程序来对抗 API 来开始,如果 API 运行不顺畅不兼容,届时再改变现有的参数和方法也来得及。另一个在他看来很有效的方法就是先写文档,简化和那些真正会使用这一 API 的用户之间的交流。

Benders 还指出,对系统的设计可以改变人们使用它的方式,而如果一个系统能够简化创建服务的流程的话,将有可能鼓励用户自行来创建更多的服务,系统能够更方便的集中报告日志,同时还能集中管理。设计决策并不是为了解决现有的问题,它同样也是一个引导长期使用服务的方法——更简单的完成任务,而其他人却很难完成。通过改变设计,开发者就可以鼓励用户按照一种特定的行为模式来使用新的服务。

最近 Anders Jensen-Waud 在写关于 Thinking Outside-In 方面的内容,有兴趣的可以看看:API 如何实现面向服务架构的最初承诺( How APIs Fulfil the Original Promise of Service-Oriented Architecture )。

查看英文原文: Don’t Think like an Engineer When Designing Microservices

2016-03-13 19:003216
用户头像

发布了 25 篇内容, 共 67407 次阅读, 收获喜欢 1 次。

关注

评论

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

计算机网络之IP协议与以太网

未见花闻

6月月更

GetX 状态管理从入门到入迷

岛上码农

flutter ios 前端 安卓 6月月更

接口测试使用Python装饰器

伤心的辣条

Python 程序人生 软件测试 自动化测试 接口测试

读《Software Systems Architecture》(13)—— Creating the Architectural Description

术子米德

架构师成长笔记

读《Software Systems Architecture》(14)—— Evaluating the Architecture

术子米德

架构师成长笔记

读《Software Systems Architecture》(23)—— Archiving Consistency Across Views

术子米德

架构师成长笔记

uni-app深入学习之模板运用【day4】

恒山其若陋兮

6月月更

js中的变量提升和函数提升

北洋

android 6月月更

在线文本保留中文提取过滤工具

入门小站

工具

读《Software Systems Architecture》(16)—— The Context Viewpoint

术子米德

架构师成长笔记

读《Software Systems Architecture》(21)—— The Deployment Viewpoint

术子米德

架构师成长笔记

盘点攻防演练中红队的主要工具(下)

穿过生命散发芬芳

6月月更 攻防演练

看板方法的定义、原则和实践

PingCode

读《Software Systems Architecture》(12)—— Producing Architectural Models

术子米德

架构师成长笔记

读《Software Systems Architecture》(20)—— The Development Viewpoint

术子米德

架构师成长笔记

在线JSON转TSV工具

入门小站

工具

读《Software Systems Architecture》(11)—— Using Styles and Patterns

术子米德

架构师成长笔记

读《Software Systems Architecture》(15)—— Introduction to the Viewpoint Catalog

术子米德

架构师成长笔记

读《Software Systems Architecture》(17)—— The Functional Viewpoint

术子米德

架构师成长笔记

红米 9A的自动化测试

IT蜗壳-Tango

6月月更

Java中检查字符串是否是有效日期

okokabcd

Java

GoLang简单易用的json value读取工具!还并发安全

Krysta

Go json 简单清楚 方便

数据库每日一题---第13天:寻找病患

知心宝贝

数据库 云计算 前端 后端 6月月更

linux之我常用的20条命令(之二)

入门小站

Linux

读《Software Systems Architecture》(24)—— Introduction to the Perspective Catalog

术子米德

架构师成长笔记

数仓开发人员的价值体现

奔向架构师

数据仓库 数据模型 6月月更

三点微服务标准化要素

阿泽🧸

微服务 6月月更

读《Software Systems Architecture》(18)—— The Information Viewpoint

术子米德

架构师成长笔记

读《Software Systems Architecture》(19)—— The Concurrency Viewpoint

术子米德

架构师成长笔记

读《Software Systems Architecture》(22)—— The Operational Viewpoint

术子米德

架构师成长笔记

读《Software Systems Architecture》(25)—— The Security Perspective

术子米德

架构师成长笔记

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
微服务架构设计须避开工程师思维_语言 & 开发_Jan Stenberg_InfoQ精选文章