Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 代码发布 › 单体优先的微服务架构

单体优先的微服务架构

Eswlnk的头像
Eswlnk
2022-12-20 18:40:14
单体优先的微服务架构-Eswlnk Blog
智能摘要 AI
文章总结了关于微服务架构在新项目中的应用经验。作者指出,几乎所有的成功微服务系统都来自大型单体项目的拆分,而一开始就采用微服务架构的项目往往面临诸多问题。因此,建议在新项目初期优先采用单体架构,待系统复杂性增加后再转向微服务。原因在于微服务增加了管理和维护成本,且初期难以准确界定服务边界。常见的策略包括从单体逐步剥离微服务或先构建单体再重构成微服务系统。尽管存在不同观点,多数人仍推荐“单体优先”,特别是在缺乏微服务经验的情况下。作者强调,由于当时微服务尚处早期阶段,具体选择应根据项目需求和团队经验灵活调整。

当听说有团队在使用微服务架构时候,我注意到了一些规律:

  1. 几乎所有成功应用微服务的系统,都来自于一个过大单体项目拆分而来。
  2. 几乎所有我听到过一开始就选择使用微服务架构的系统,并从 0 构建,最终的结果都有一系列严重的麻烦。
单体优先的微服务架构-Eswlnk Blog

这些规律在我同事中产生了长期的讨论:你不应该在新项目之初就采用微服务架构,即使你坚信该应用未来会因业务演进而变得巨大无比。

微服务是一种有用的架构,但是即使是这种架构的拥趸也不得不承认,使用这种架构需要付出额外的成本,这意味者只有更复杂的系统值得使用这种架构。这种代价的本质是管理这些服务所带来的基本开销。所以这就是单体优先架构策略的依据, 架构师应在构建新系统时先采用单体架构做设计,即便在项目后期使用微服务架构更有价值。

第一个原因是经典的 Yagni 原则 (译者注:”You Aren’t Gonna Need It” 的缩写,意在避免过度设计)。当你开始一个新的应用程序时,你如何确定这个应用的特性是用户有价值的?一个成功的软件可能背后的设计很糟糕,很难拓展,但是总比一个设计卓越但是没有价值的系统好。正如我们现在所认识到的,通常判断一个软件和想法是否有用的最好方法,是构建一个简单的版本,看看它的跑起来效果如何。在第一个阶段,你需要优先考虑速度(以及反馈的周期时间),因此微服务的成本是一个累赘,应该被避免。

从微服务开始的第二个问题是,它们只有在服务之间建立良好、稳定的边界时才能正常工作——这本质上是厘清正确的限界上下文的任务。因为任何服务之间的功能重构都比在一个庞然大物的单体中要困难得多。不幸的是,即使是在熟悉的领域工作的经验丰富的架构师,也很难在一开始就确定边界。通过先构建一个单体应用,你可以在微服务设计刷上一层糖浆之前(译者注:比喻微服务的一些额外设施),找出正确的边界是什么。它还为你提供了缓冲时间来开发细粒度服务所需的基础设施。

据我所知,践行单一优先策略有不同的方式。比如,仔细的从逻辑上设计为一个类似单体系统的整体,注意内部的模块化设计,包括 API 边界和数据的存储方式。做好这一点,再来开发微服务的系统。然而,如果我听过很多这样的成功案例,我会觉得这种方法更合适,实际很难做到。

一种更常见的方法是从一个庞然大物开始,然后逐渐从边缘剥离微服务。这种方法可能会在微服务体系结构的核心留下一块巨大的庞然大物,但是大多数新开发都是在微服务中进行的,只是这一块庞然大物是相对不变的。

另一种常见的方法是先开发一个单体系统,再用一套新的微服务系统完全替换单体结构。很少会有人认同这种办法,然而建造作为献祭架构的单体系统是有好处的(译者注:一种设计方法,先做简单的原型系统,再用新的系统代替,其实就是重写)。不要害怕建造一个你会丢弃的庞然大物,特别是如果一个庞然大物可以让你很快地进入市场。

还有,我遇到的其他方法是从几个粗粒度的服务开始,这些服务要比你预期的要大。使用这些粗粒度的服务来习惯处理多个服务,同时享受这样一个事实:粗粒度减少了你必须不得已进行服务间重构的数量。然后,随着边界稳定下来,就会分解为更细粒度的服务。

虽然我接触的大多数人倾向于“单体优先”的策略,但这不是绝对的。相反的观点认为,从微服务开始构建新的系统,可以让你适应在微服务环境中开发的节奏。要以足够模块化的方式构建单体系统,以便将其轻松分解为微服务,需要花费很多甚至太多的编程规则。从微服务开始,你可以让每个人从一开始就习惯在独立的小团队中进行开发,并且在需要的时候,通过服务边界将团队分开可以更容易地扩大开发工作。对于那些更有可能尽早获得足够稳定边界的系统来说,这尤其可行。尽管证据不多,但我觉得你不应该从微服务开始,除非你有在团队中构建微服务系统的大量经验。

我觉得我还没有足够的例子来明确如何决定是否使用“单体优先”策略。毕竟,这是微服务的早期阶段(译者注:这篇文章发布在2015),可供学习的业界案例相对较少。因此,任何人在这些问题上的建议都需要保持开放性,无论观点的提出者如何信誓旦旦。

本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
微服务架构
0
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
如何编写简洁代码?
上一篇
Java安全中JEP290在RMI的实现及绕过低版本JDK限制
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 「日志记录」逆向必应翻译网页版API实现免费调用
  • 「代码分享」第三方平台VIP视频解析API接口
  • 「至臻原创」某系统网站登录功能监测
  • 「开发日志」在Vue3中如何为路由Query参数标注类型
  • 「其他分享」分享一个在Tun模式下可用的脚本
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

「代码分享」通过PHP微信扫描关注公众号
2023-09-03 11:36:19
「代码分享」Vue项目配置 webpack-obfuscator 进行代码加密混淆
2022-10-20 22:27:49
「代码发布」k8s 网络转发问题记录
2022-08-16 16:16:25

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 0.956 秒   |  SQL查询 20 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈