侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

微服务的代价非常容易被低估

技术  /  管理员 发布于 2星期前   55

在过去的几年里,我曾围绕微服务这个话题采访过数百个人,很多人都自豪地讲述了他们使用微服务架构开发项目的故事。然而,无需太多提问就可以看出他们发射了一枚大火箭,最后却只是干掉了一只老鼠。

微服务很难。每个接触过这类架构的人都有着痛苦的经历。终有一天,你会被复杂性淹没,而且你不得不对架构进行多次重构。我很纳闷,为什么这种架构对开发人员如此有吸引力?然后,我想起十年前自己也被这种框架所吸引。

大多人的共同经历是,他们不得不面对一个遗留下来的单体系统,而且整个代码库都是一团糟。遇到这种情况很令人沮丧。实现需要很长时间,编写测试很乏味甚至几乎不可能,理解代码也很困难,bug 堆积如山,部署也不可靠,每次代码变更都会引发问题。重构遗留代码似乎是不可能的,而且一想到这个问题就会让你觉得头疼,甚至彻夜难眠。

这个时候,微服务就会变得非常具有吸引力。那一刻,小型、可管理、分离的代码库会带给你极大的安全感和解脱感。

但是,使用微服务也是有代价的,而且往往容易被低估。

弊端1:无法正确切分领域

只有当你能够正确切分领域时,使用微服务才有效。然而,领域的划分非常艰难。你需要知道自己构建的是什么,但往往大多数时候我们并不是特别清楚。完全绑定到一个领域,会导致系统的灵活性降低,而这恰恰与你实际的期望背道而驰。

在切分领域时,有可能你还不清楚产品需求。将来难免会出现一个功能,迫使两个服务纠缠在一起,这就导致它们属于同一个领域,却还是分布式的。

弊端2:复杂性

虽然刚开始的时候,微服务的架构看起来非常简单。架构师非常确定这种架构不会被打破,而且对于团队来说,只需要维护一个小型代码库,感觉很舒服。然而到了部署服务时,情况就会发生变化。你需要协调一切。仪表板、监控系统、日志聚合器、部署、CI 作业、警报、文档……而且你引入这些服务只是因为你的架构有这种需求。你需要分布式队列、共享缓存、共享数据库、服务发现、多个负载均衡器、动态路由器、API 网关、中央配置服务器……

于是,代码泥沼变成了基础设施泥沼。优步这样的大公司经历过惨痛的教训后,终于意识到了这一点:

弊端3:过早优化

几十年来,我们将软件分割成了各种服务,只不过我们没有称它们为“微服务”。我们拆分应用程序主要有两个原因。

首先,这种拆分对组织来说有意义。

很明显,我们应该建立两个独立的团队分别负责客户关系管理工具和电子商务平台,尽管这两个平台有时候需要相互交流。这已经是一个面向服务的架构。为了实现销售产品的单一业务目标,我们需要两项服务。只不过我们从未称其为微服务架构。

其次,为了性能。

根据我的经验,受这个原因影响的软件只有1%。如果只有几百个用户,使用垂直扩展就可以了。我们开发的系统有数以万计的并发用户,这些用户与系统进行了大量交互,但我们仍然能够垂直扩展。

我们想要什么?

我们发现了一个问题:遗留系统这个巨大的泥潭。可惜微服务架构并不是解决这个问题的正确方法。你需要的是模块,正确的模块,因为模块使得我们很难越界,而且可以根据需要轻松、独立地部署模块。这个概念本身并不新颖,但很多人往往无法正确实施。

十年前,我想要模块,却采纳了微服务架构,现在是时候结束这种过度设计了。

转:

https://code-held.com/2022/07/28/microservices/

  • 上一条:
    Linux中负载的原理、负载高低和、CPU开销等场景浅析
    下一条:
    本站zongscan祝大家除夕快乐,2023有奔头
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 微服务的代价非常容易被低估(0个评论)
    • 数字证书之ssl证书格式的种类、证书转换、证书合并(0个评论)
    • Podman Desktop跟Docker Desktop的对比及优点浅析(0个评论)
    • podman和docker的比较和区别浅析(0个评论)
    • 最新访问谷歌Google镜像/学术/搜索_GitHub镜像/下载加速链接列表2022/12/29持续更新(0个评论)
    • 近期文章
    • zongscan祝大家2023元宵节快乐(0个评论)
    • 2023年国内最新注册苹果开发者账号之申请邓白氏编码流程步骤(0个评论)
    • 2023年国内最新注册苹果个人开发者账号及支付会员年费流程步骤(0个评论)
    • 在js中使用URL类用来解析处理URL的示例代码(0个评论)
    • js中动画事件:requestAnimationFrame、transitionend、animation...(0个评论)
    • Laravel 9.49版本发布(0个评论)
    • 在Laravel应用程序如何减少代码重复编写(0个评论)
    • 在laravel项目中提高安全性方式推荐:CSP内容安全策略(0个评论)
    • 在go语言中从值中获取常量名称代码示例(0个评论)
    • 在go语言中如何通过名称获得结构字段和值代码示例(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客