写点什么

我们在构建微服务时犯过的最大错误

作者:Mika Yeap

  • 2021-08-10
  • 本文字数:1535 字

    阅读完需:约 5 分钟

我们在构建微服务时犯过的最大错误

在网上招致批评的最快方法就是撰写有关微服务的文章。每个人都有自己的观点。不管你是支持还是批判微服务。人们会找到你,并告诉你你错了。我很喜欢这样。我最近有幸就这个主题写了几篇热门文章。相应的评论都是滑稽和理智的完美结合。但它们对于识别真正的错误特别有用。


因为这能让我们面对现实:构建分布式系统可能会变得很复杂。公平地说,建造单体系统也是如此。但不同的是,我们大多数人选择了比分布式的复杂性更高的东西。任何有经验的开发人员或架构师都会告诉你,大多数人实际上不需要完全接受微服务。


我问过的所有人都建议将这两者相结合。并且只在绝对必要的情况下才需单独使用微服务。但我的团队没有这样,我当时没有这种智慧。所以我们抢先了一步。犯了书中提到的所有错误。以下是一些最令人震惊的错误示例。


定制构建太多

在微服务领域,服务之间的通信是一个大问题。有人会说这是最大的问题。这一切都要归究于分布式事务。在电子商务应用程序的经典示例中,创建新订单的过程可能会涉及到需在多个不同的服务中进行操作,比如订单服务、客户服务等。在单体应用中,只需一个函数调用即可。但是使用微服务,情况就不那么好了。你可以引入 Sagas 来处理多服务事务。但这会让你感到脊椎发冷。实现 Sagas 并非易事。


尽管如此,我们还是不太清楚。所以我们实现了基于编排的 Sagas 来解决这个问题。优势之处在于我们定制了每个服务用来通信和执行这些 Sagas 的消息代理。使用 Redis 流和 Go 自行构建。当然,最终结果很好,建造起来也非常有趣。但我们本可以用做这个的时间,搭建一个单体应用。开始就失败了。


复杂性不设限

这一点可以归结为经验:从技术上讲,有些地方是你不应该去的。给定一个特定的项目时间表和一个具有特定能力的团队,有些路径是你不应该探索的。我们的错误在于我们认为我们可以去任何微服务之神召唤我们的地方。


这是不正确的。不幸的是,这完全是错误的。在某种程度上,你会意识到,某些内容仅仅在 YouTube 主题演讲中听起来可行,但并不意味着在你的项目它们也是可行的。如果我们对我们愿意处理的复杂性设置了一个上限,我们就会为自己节省一些不必要的麻烦。我想你可以用另一种方式来表述这个错误,“我们给了自己太多的时间”。如果我们有一个更短的截止日期,这些麻烦将会自动消除。


话又说回来,这里有个很微妙的界限。如果复杂性限制设置的过低,你就会驾驶一架由筷子做成的飞机。但如果设置的过高,你就永远不会离开跑道。在这两种情况下,你都会完蛋。知道如何切馅饼通常来自经验。所以我建议你做出最好的猜测,然后在 Medium 上传播,以吸引更聪明的工程师的注意,他们会纠正你的错误。


定义太宽松

最后,有一件事可以解决我们的大部分问题。归根结底,分布式架构是用来解决问题的。所以,在决定使用它之前,你需要知道这个问题是什么,你还需要了解你的解决方案,以确定它们的匹配程度。这两个我们都不了解。


因为谁会在一开始时就花上几天的时间来定义问题呢?这种纪律很少见,尤其是在需要立即构建的环境中。现在,我知道,通过更关注实现,可以节省正确定义问题所“损失”的时间。换句话说,你花更少的时间构建错误的东西。浪费的时间会少很多。因此,明智的做法是确保你正在构建的东西是正确的。


然而,我们没有。我们的弯路不仅花费了我们的时间和金钱。它们最终也是毫无意义的。我们建造并修复了我们不需要的东西。完成后,我们没有使用它们。在开发期间,我们还不如在办公室一直玩《英雄联盟》,这还能鼓舞士气。因此,很好地了解你的问题和解决方案并不是一个糟糕的想法。


话说回来,这其中的乐趣何在呢?在我看来,你也可能会浪费大量的时间去构建错误的东西,在这个过程中收集了经验来写文章,然后在网上抱怨。这对我们有用。我是说,我们还活着在讲述这个故事。


2021-08-10 11:203561
用户头像

发布了 497 篇内容, 共 336.8 次阅读, 收获喜欢 1927 次。

关注

评论 2 条评论

发布
用户头像
翻译太次,言而无物
2021-08-16 11:01
回复
用户头像
除了几个标题看得懂,内容阐述不知道在讲啥,这是翻译过来的,还是自己的原著,如果是原著怀疑作者是在打太极。
2021-08-15 10:23
回复
没有更多了
发现更多内容

学python,怎么能不学习scrapy呢,这篇博客带你学会它

梦想橡皮擦

12月日更

【量化】资产组合理论:鸡蛋不能放在一个篮子里

恒生LIGHT云社区

量化投资 量化

百度文库新一代文档阅读器!核心技术点全解析!

百度Geek说

大前端 文档 百度文库

信息网络向价值网络演进过程中产品形态的思考

拍乐云Pano

2021年财经中国年会暨第十九届中国财经风云榜

大咖说

直播 财经 财经峰会

Linux云计算架构师:Linux全套实战学习资料

侠盗安全

Linux linux运维 运维工程师 云计算架构师 linux电子书

鸿蒙智联设备开发,这五大法宝你应该拥有|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

高并发线下沙龙不容错过!

Qunar技术沙龙

高并发

企业管理升级,如何加速信息化转型?

雯雯写代码

企业管理 信息化

kubernetes系列随笔03:kubernetes的发展和设计思想

Geek_cd6rkj

Docker Kubernetes 声明式

网络协议之:基于UDP的高速数据传输协议UDT

程序那些事

TCP 网络协议 udp 程序那些事 12月日更

WebView秒开方案探索

得物技术

CSS JavaScript html webview 大前端

全网最全-混合精度训练原理

科技热闻

对话中国人寿:DevOps实践经验分享

龙智—DevSecOps解决方案

DevOps 中国人寿

Java开发框架Struts相关知识分享

@零度

struts JAVA开发

Android C++系列:Linux线程(四)线程同步

轻口味

android 28天写作 12月日更

测试 —— DevOps 快速交付的最大瓶颈

飞算JavaAI开发助手

全网最全-混合精度训练原理

科技热闻

喜报 | 旺链科技获批张江国家自主创新示范区专项发展资金!

旺链科技

区块链 数字经济 产业区块链

详解布隆过滤器的原理和实现

万俊峰Kevin

golang 微服务 微服务架构 布隆过滤器 go-zero

更好用的Web端H265播放技术架构

百度开发者中心

智能视频

大数据开发之Kafka 存储选型

@零度

大数据 kafka

聊聊Java底层那些事

码农参上

内容合集 签约计划第二季 技术专题合集 技术专区合集

字节码引用检测原理与实战

vivo互联网技术

编程语言 字节码编程 引用

给弟弟的信第5封|从高中到大学的体会

大菠萝

28天写作

华云大咖说 | 华云校园信创云解决方案

华云数据

华云数据

前端开发JS框架之jQuery的基础知识分享

@零度

大前端 ​jQuery

直播预告丨“Hello Ability:从页面跳转开始”周三晚不见不散

HarmonyOS开发者

HarmonyOS

元气部落盲盒芒趣一番赏盲盒app开发搭建

风行无疆

【Promise 源码学习】第十四篇 - 实现工具方法 promisify

Brave

源码 Promise 12月日更

关于RocketMQ事务方面Demo

我们在构建微服务时犯过的最大错误_文化 & 方法_InfoQ精选文章