写点什么

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

作者:Mika Yeap

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

    阅读完需:约 5 分钟

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

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


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


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


定制构建太多

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


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


复杂性不设限

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


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


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


定义太宽松

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


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


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


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


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

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

关注

评论 2 条评论

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

【网络安全】详细记录一道简单面试题的思路和方法

H

网络安全

构建多架构镜像的最佳实践

xcbeyond

Docker arm docker image xcbeyond 1月月更

大白话讲解JDK源码系列:从头到尾再讲一遍ThreadLocal

慕枫技术笔记

后端 1月月更

🏆【Alibaba中间件技术系列】「RocketMQ技术专题」系统服务底层原理以及高性能存储设计分析

码界西柚

RocketMQ 阿里巴巴‘ Alibaba技术 Apache RocketMQ 1月日更

vue 作者在2022-2-7起宣布 vue3 正式作为默认版本

你?

22 Prometheus之Docker监控简述

穿过生命散发芬芳

Prometheus 1月月更

(1-18/18)推播式营销vs.集客式营销

mtfelix

300天创作 2022Y300P

模块六作业-拆分电商系统为微服务

曾竞超

「架构实战营」

Linux之cal命令

入门小站

在线XML转CSV工具

入门小站

工具

测试工程师的职场发展二三谈

老张

自动化测试 解决方案 职场发展

JavaScript 基本数据类型转换

编程三昧

JavaScript 前端 1月月更

微信业务架构分析 & 学生管理系统架构选型

AragornYang

架构训练营 架构实战营

【网络安全】干货|SQL注入攻击思路手法总结(上)

H

数据库 网络安全 SQL注入

kali权限提升之本地提权

喀拉峻

网络安全 信息安全 提权

ShardingSphere JDBC 分库实现多数据库源

Java 数据库 分库分表 Apache ShardingSphere

微信业务架构

「架构实战营」

低代码实现探索(二十九)混合式低代码

零道云-混合式低代码平台

《腾讯云原生在线技术工坊》实践体会

穿过生命散发芬芳

腾讯云 云原生 1月月更 实践体会

(1-19/19)市场和销售分别该怎么干

mtfelix

300天创作 2022Y300P

ReactNative进阶(三十):Component、PureComponent 解析

No Silver Bullet

​React Native 1月月更 Component

电商秒杀系统架构设计

AHUI

「架构实战营」

边缘化需求,闪电式切入

明道云

ReactNative进阶(二十八):ES6 Symbol 用法

No Silver Bullet

React Native symbol 1月月更

Go len() 函数是如何计算长度的?

宇宙之一粟

Go Go 语言 1月月更

关于jiami货币--《香帅中国财富报告》摘录(6/100)

hackstoic

投资

灵活管理客户、营销与流程的房地产解决方案

明道云

PDF 文件如何转成 markdown 格式

汪子熙

markdown PDF pdf.js 1月日更 1月月更

冬奥探秘:那些隐匿在冬奥中的“绿科技”

脑极体

第七周作业

lv

架构实战训练营第一周

刘帅

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