AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

作者:Mika Yeap

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

    阅读完需:约 5 分钟

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

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


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


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


定制构建太多

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


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


复杂性不设限

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


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


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


定义太宽松

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


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


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


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


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

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

关注

评论 2 条评论

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

直播|镜舟 x Smartbi《后疫情下如何利用数据驱动企业逆势破局》

镜舟科技

数据库 镜舟数据库

稳定支撑千万级月活,华为日历背后的英雄

华为云开发者联盟

数据库 后端 华为云 企业号 1 月 PK 榜

SLS:基于 OTel 的移动端全链路 Trace 建设思考和实践

阿里巴巴终端技术

数据采集 Trace 移动端

软件测试/测试开发 | 接口测试之HTTP 协议讲解

测试人

软件测试 HTTP 自动化测试 接口测试 测试开发

MYSQL数据库主从配置

Jackey

MySQL 数据库

从指标到洞察力的普罗米修斯

宋小生

Prometheus 普罗米修斯 普罗米修斯监控

【iOS逆向与安全】系统推送服务(APNS)拦截

小陈

安卓 ios开发 逆向 iOS逆向 ios安全

书单 | 春节假期,我想把这几本书带回家!

博文视点Broadview

软件测试/测试开发 | 接口测试常用代理工具

测试人

软件测试 自动化测试 接口测试 charles 测试开发

TracedModule: 更友好的模型表示方案,模型训练到部署的桥梁

MegEngineBot

深度学习 开源 MegEngine 模型训练到部署

又一重要进展发布!OpenMMLab算法仓支持昇腾AI训练加速

华为云开发者联盟

人工智能 华为云 昇腾AI 企业号 1 月 PK 榜

逃不开的安迪-比尔定律,在智能机器人时代该如何破解?

优必选科技

人工智能 机器人 视觉处理

合作升级|Kyligence 跬智智能分析平台入选华为云联营商品

Kyligence

数据分析

架构实战营 - 模块 4- 作业

zealot0317

软件测试/测试开发 | 接口测试之HTTP、HTTPS 抓包分析

测试人

https 软件测试 HTTP 自动化测试 测试开发

用无线控制LED显示屏的10个特点

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

[原生1v1视频源码]社交市场趋于饱和,出海成为1v1语聊平台的新选择

山东布谷科技胡月

社交APP出海 视频社交APP开发 1v1交友app开发 一对一视频语音系统搭建

YonBuilder 应用构建教程之移动端扩展

YonBuilder低代码开发平台

【深入浅出Spring原理及实战】「源码调试分析」结合DataSourceRegister深入分析ImportBeanDefinitionRegistrar的源码运作流程

码界西柚

spring Spring Framework

报告下载 | DQMIS高端闭门论坛成果报告——《2022第六届数据质量管理国际峰会关于数据要素发展几点看法和建议》

数据质量管理智库

数据 数据治理 数据安全 隐私计算 数据要素

java 本地应用程序加载与修改properties配置文件

JefferLiu

logback 默认配置文件

JefferLiu

软件测试/测试开发 | 如何模拟真实使用场景?mock 技术来帮你

测试人

软件测试 自动化测试 接口测试 测试开发 Mock

百度安全入选权威报告《联邦学习与可信AI市场机会分析》典型厂商

百度安全

ChatGPT中文版重装上阵

felix

openai ChatGPT AIMODELMARKET

Mega 改进序列模型,引入移动平均捕捉时空依赖

Zilliz

计算机视觉

FL Studio2024中文版水果电音舞曲制作软件

茶色酒

FL Studio21 FL Studio2024

web 3d的开发技术方案选型

好孩子

web3d

震网(Stuxnet)病毒深度解析:首个攻击真实世界基础设施的病毒

华为云开发者联盟

安全 后端 华为云 企业号 1 月 PK 榜 震网

使用“宝塔一键迁移”工具,将单机版typecho博客系统迁移到京东云cvm云主机

京东科技开发者

服务器 京东云 安装宝塔 云迁移 企业号 1 月 PK 榜

软件测试/测试开发丨接口测试经典面试题:Session、cookie、token有什么区别?

测试人

软件测试 自动化测试 接口测试 测试开发

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