“All in Cloud”之后,和你聊聊「云原生DevOps的Kubernetes技巧」 了解详情
写点什么

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

作者:Mika Yeap

  • 2021 年 8 月 10 日
  • 本文字数:1535 字

    阅读完需:约 5 分钟

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

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


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


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


定制构建太多

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


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


复杂性不设限

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


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


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


定义太宽松

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


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


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


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


2021 年 8 月 10 日 11:203136
用户头像

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

关注

评论 2 条评论

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

[TcaplusDB知识库]TcaplusDB机器下架介绍

tcaplus

数据库 nosql 腾讯云 TcaplusDB

[TcaplusDB知识库]单据受理-建表审批介绍

tcaplus

数据库 nosql 腾讯云 TcaplusDB

[TcaplusDB知识库]TcaplusDB运维单据有哪些?

tcaplus

数据库 nosql 腾讯云 TcaplusDB

[TcaplusDB知识库]单据受理-创建业务介绍

tcaplus

数据库 nosql 腾讯云 TcaplusDB NoSQL 数据库

推动数据安全战略落地 新思科技给出这些建议

InfoQ_434670063458

2021最新版阿里巴巴内部百亿级高并发系统(全彩版小册开源)

Java 架构 面试 后端 高并发

[TcaplusDB知识库]TcaplusDB机器初始化和上架

tcaplus

数据库 nosql 腾讯云 TcaplusDB

[TcaplusDB知识库]TcaplusDB常规单据有哪些?

tcaplus

数据库 nosql 腾讯云 TcaplusDB

[TcaplusDB知识库]集群管理操作介绍

tcaplus

数据库 nosql 腾讯云 TcaplusDB

AWE Asia 2021 | 百度AI+AR,塑造AR应用智能新体验

百度开发者中心

AI 最佳实践 方法论

ONES x 华发集团 | 多团队多项目的高效管理实践

万事ONES

项目管理 项目管理工具

智能,服务,生态:华为调制的AIOps,味道有何不同?

脑极体

[TcaplusDB知识库]如何查看TcaplusDB线上运行情况?

tcaplus

数据库 nosql 腾讯云 TcaplusDB

[TcaplusDB知识库]单据受理-表管理介绍

tcaplus

数据库 nosql 腾讯云 TcaplusDB

Zookeeper入门看这篇就够了

牧小农

zookeeper

Alibaba深夜自爆“Java核心架构笔记”,太牛了

Java 编程 架构 程序人生 编程语言

[TcaplusDB知识库]单据受理-创建游戏区介绍

tcaplus

数据库 nosql 腾讯云 TcaplusDB

[TcaplusDB知识库]单据受理-事务执行介绍

tcaplus

数据库 nosql 腾讯云 TcaplusDB

如何用一行代码使API提速几十倍

大伟

redis cache java

[TcaplusDB知识库]遇错不要慌!TcaplusDB事务错误排查解万难

tcaplus

数据库 nosql 腾讯云 TcaplusDB

[TcaplusDB知识库]TcaplusDB如何新增机型

tcaplus

数据库 nosql 腾讯云 TcaplusDB

乌镇大会第七年,挥别错的才能和对的相逢

脑极体

[TcaplusDB知识库]TcaplusDB进程启动

tcaplus

数据库 nosql 腾讯云 TcaplusDB

[TcaplusDB知识库]业务运维离不开TcaplusDB事务管理

tcaplus

数据库 腾讯云 TcaplusDB NoSQL 数据库

[TcaplusDB知识库]TcaplusDB日常巡检

tcaplus

数据库 nosql 腾讯云 TcaplusDB NoSQL 数据库

SOA架构概述

SOA开发者

Springboot学习路线汇总(升职加薪必备架构图)

Java spring 编程 架构 后端

[TcaplusDB知识库]TcaplusDB机型管理介绍

tcaplus

数据库 nosql 腾讯云 TcaplusDB NoSQL 数据库

从头到尾没有一句废话!阿里Redis神级手册,从基础到源码一次讲清

Java 架构 面试 程序人生 编程语言

四种主要网络IO虚拟化模型

hanaper

云短信服务孰优孰劣?博睿数据重磅发布云短信评测报告

博睿数据

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