什么时候都用微服务,只会害了你

大家好,我是鲏。微服务、DDD,想必后端方向的朋友们即使没有学过,也听说过它们吧。在没学习这些技术架构前,我们本能地认为它们是很高大上的,好像用了微服务、DDD 的项目就是牛 X 的项目,自己做了个微服务、DDD 的项目,就算是进阶了。

多学一个技术总是好的。事实上,入门这两种技术架构并不难,说简单一点,用个框架、分个目录也能实现。但是难的在于你如何根据实际的业务场景去选择对应的架构、如何合理划分服务和领域。

分享一位朋友风筝哥在工作中使用微服务架构的 “翻车经历”,希望能给大家一点启发,不要为了用技术而用技术。(晋级答辩除外)


先说结论,小项目还是别用微服务了,谁用谁难受啊!

这倒不是说搞微服务不好,主要是当项目较小、人手不多的情况下,搞微服务的开发、部署成本太大,一个人同时改几个微服务模块,模块之间还有调用关系,很容易搞的人心力交瘁。本来应该几个小时能搞好的东西,在微服务的加持下,各服务间来回一调用,弄个两三天一点不成问题啊。

微服务的好处有很多,从前几年开始,微服务便大行其道,加上容器化技术的流行。使得项目到了无微服务不欢的程度,不论大厂还是小厂,不论是互联网产品还是私有化项目,都要搞个微服务架构出来。

架构图一通天花乱坠,领导拍手称赞,甲方觉得牛掰。开发团队也是自信满满,能通过项目实践新的技术方案,技术栈又丰满了不少,何乐而不为呢。

我刚开始接触微服务的时候,也似把它当做银弹。一个系统,上来给它拆吧拆吧,变成几个服务,瞬间解耦了,每个服务还能抽离出来,给其他系统用。无非就是服务间调用麻烦一点儿嘛,但是 RPC 框架这么多,又封装的很简单,也就不算啥事儿了。

那时候我自己业余时间做的小产品不仅要前后端分离,还要搞俩微服务出来,这痴迷程度可见一斑。正因为大多数技术人都有这样的痴迷,才会有那么多不该拆分的服务被拆分出来,搞成微服务项目。

微服务的好处

微服务的好处肯定是有的,而且还不少,要不然也不至于这么流行。

模块化和高可用性

微服务将应用程序分解为小的服务单元,每个服务都专注于特定的业务功能。每个微服务都独立开发、独立部署、独立运行。一个服务可以有多个实例,就算某个服务的全部实例都挂掉了,也不会影响其他服务的功能。

比如一个电商系统,订单服务和通知服务独立部署运行,就算通知服务都挂了,那也不影响用户下单,只不过无法及时收到短信、应用内通知而已。

异构设计

正因为每个服务独立运行,所以微服务允许每个服务使用适合其需求的开发语言和技术栈。一个服务可以用 C++开发,另一个服务用 Go 开发,其他服务用 Java 开发,也是完全没有问题的,只要处理好服务间调用就可以了。

团队自治

每个微服务可以由一个小团队负责开发和维护,这种自治性可以提高团队的生产力和创造力。

更快的交付和上线时间

微服务的独立部署允许快速交付新功能和更新,减少了发布的风险和延迟。

这样一看,好处还真的不少呢。但是,千好万好,也抵不过人手不足这一条。只要人不够,上面提到的好处马上就会变成弊端。

人手不够,就不要微服务了

首先说说团队自治。一个人管2、3个模块,确实是自治了,自己治自己。当你一个人负责两个或更多模块的时候,你就能深刻的体会到。

当你同时修改这几个模块的时候,你要在本地将这几个服务启动、调试,如果公司不人道,给你配了台垃圾电脑,那连项目都别想痛痛快快的启动。

而且除了这几个服务外,如果没有公用的开发环境,你还要在本地跑着配置中心、注册中心、网关,痛苦加倍。

这时候你会在心里想,为什么要整个微服务,怎么这么想不开。

工期太紧,就不要微服务了

还有就是工期紧的项目。本来光搞业务就已经很紧张了,结果老板还要催着、赶着,那这种情况下建议还是不要微服务了。

工期紧可能有几种情况。

作为乙方,给甲方的私有化项目

这种项目大多数以业务为主,对架构和性能要求往往没那么高,完全可以单体解决。如果采用微服务的话, 开发周期加长了不说,后期的维护成本会很大,尤其是不熟悉项目的人做后期维护。

着急上线验证市场的产品

这种情况下, 商业模式能跑通才是关键。也就是说,产品能不能活下来,还是个问题,有待验证。所以前期没必要再技术上过分投入,怎么快怎么来,怎么简单怎么来。如果产品真的能活下去,那将来再进行改造的话,也不是什么难事。毕竟活下来了,说明能赚钱了。有钱就有人、就有改造的资本了。

网络、部署环境有限制,就不要微服务了

在和朋友聊要不要用微服务的时候,有个朋友说,给国企或者ZF做的项目,能用单体就用单体吧。他说曾经给某个ZF部门做项目,项目是在自身产品功能上做一些定制化改造,微服务框架,有6、7个服务。

结果甲方那边网络完全是内网环境,系统有指定的国产系统,机器开的每一个端口都要报备、说明,部署有指定的部署平台,连 RPC 调用都有特殊的要求。

每次上线要在外部网络打包,然后用物理设备拷到内网,7、8个包,每一个包走一次部署流程,然后服务间调用是否成功也只能部署完之后才能测试。

本来1天能做完的事儿,3、4天都弄不完,每天都薅头发。

总结

作为程序员,追求技术进步那是必须的,所以说,微服务是我们每一个开发者都必须掌握的。但是,微服务也不是银弹,不能任何项目都无脑的使用。

当你有一天可以决定一个项目是用单体还是采用微服务框架时,不能一味的只从技术角度出发,要各方权衡,看有没有必要使用微服务框架。

水能载舟,亦能覆舟。微服务也是一样,合适的场景下如鲲鹏展翅,不合适的时候那就是洪水猛兽呀。

👇🏻 点击下方阅读原文,获取鱼皮往期编程干货

往期推荐

我们公司的官网上线了!

鱼皮的大学简历,仅供参考

几个测试接口的好工具,效率加倍~

我用过很多代码生成器,还是选了他

我敢打赌,这个架构你一定知道!

三分钟上手!一文看懂 Git 的底层工作原理

相关推荐

  • 寻宝 AI 时代,OSC 邀你来苏州轰趴!
  • 优先展示冒牌货且定向至恶意软件,网友:是时候摆脱Google了
  • JSDoc 真能取代 TypeScript?
  • 陶哲轩疯狂安利Copilot:它帮我完成了一页纸证明,甚至能猜出我后面的过程
  • “我有一个大胆的想法”?Meta AI 新技术让你的思维图像一览无余!
  • Stable Diffusion新玩法火了!给几个词就能生成动图,连动图人物的表情和动作都能随意控制
  • 你从来没见过的20种口味可口可乐,看看你爱上了哪一款
  • SpringBoot 接口签名校验实践
  • 快速掌握 9 种 UML 图,5分钟上手,附10张实操案例!
  • 成都周报 | 苹果CEO库克到访,高新区将设置200亿数字经济基金
  • 动图图解马尔科夫链、PCA、贝叶斯!
  • 倒计时 1 天!1024 程序员节全日程公开(附参会指南)
  • NVIDIA Jetson助力AI教育教学与视觉感知应用创新
  • B站数据质量保障体系建设与实践
  • DeepMind:大模型又曝重大缺陷,无法自我纠正推理,除非提前得知正确答案
  • H800/A800受限牵涉「云上算力」!美正酝酿新规管制云服务
  • GPT-4不知道自己错了! LLM新缺陷曝光,自我纠正成功率仅1%,LeCun马库斯惊呼越改越错
  • 220亿晶体管,IBM机器学习专用处理器NorthPole,能效25倍提升
  • 清华朱文武团队:开源世界首个轻量图自动机器学习库AutoGL-light
  • UC伯克利团队开源MemGPT大模型上下文内存管理方案;AgentLM、多模态Fuyu-8B、数学LLEMMA等专用大模型开源