微服务是不是一种错误的方向
先说想法
这个标题并非一时兴起,也并非哗众取宠,而是我这段时间以来的思考。为什么会出现这样的想法?这还得从一个事实说起。
众所周知,微服务并不能提升整个项目的吞吐量,它的作用仅仅只是把项目按照一定的规则拆分成各种模块,然后每个模块都可以交给不同小组去开发。他解决的仅仅是大项目的团队协作问题。而真正能提升吞吐量的,除了程序本身的质量那就是负载均衡了,而且事实上微服务的架构中,每个服务都是以负载均衡的形式部署的,所以这里就有一个问题了:
如果仅仅是为了解决【大项目的团队协作问题】那么常规的模块化设计是不是也能做到?
现在由于maven的出现,再加上企业内部可以搭建私服,我们完全可以让每一个服务都以jar包的形式来开发。举个很简单的一个例子,比如有一个用户服务,订单服务,现在一般的做法是写一个聚合服务去调用这两个服务的接口,来实现业务逻辑的整合。
那如果把用户服务换成用户模块jar包、订单服务换成订单模块jar包,以jar包的形似传到私服,然后同样的写一个聚合服务,聚合服务把这两个jar包引入进来,是不是也能达到这样的效果?
如果需要负载均衡,那我们把这个聚合服务部署多个就好了,完全不影响。我完全想不到跟微服务比起来有什么坏处,如果有,欢迎大家指正。
微服务有什么缺点
- 耦合性太高,虽然开发和部署不会影响别的服务,但是你如果动了接口的出入参,那么其他服务就得同步升级了,而且是调用了这个接口的服务都要升级,又或者你需要为此单拎一个接口出来,做版本区分。
- 需要注册中心,项目会多出一个中间件,提升复杂度。
- 会消耗内网带宽,甚至是公网带宽,因为服务之间的调用都是通过网络完成的。
- 会出现分布式事务的问题,因为一个事务的操作可能会分布在不同的服务上执行。
如果用常规的模块化方案
- 虽然耦合也高,但是如果你动了接口的出入参甚至是接口名,别的服务是不需要立刻升级的,除非你是在改bug,但这是被业务逼着升级,因为不升级是有bug的,但他不会被技术逼得升级,因为模块只是被打成了一个jar包引入了其他模块里,无论你怎么变,已经部署在线上的别的模块里依然是用的你的老代码。
- 不需要注册中心
- 不会消耗多余的带宽资源
- 不需要分布式事务了
还是压力问题
一定会有人说,你把这么多模块都塞进一个服务里,那这个服务得部署多少台机器啊。
说到这里,就不得不从全局来看待问题了。我们可以看两张图(不好意思,有错别字,但是已经截图了就懒得改了,能看懂就行)
图1
图2
根据上面的两个图,我们是不是可以这么说,微服务在面对相同的流量时根本没有节约服务器的数量?反而还多了?
假如左边的聚合服务,他的业务量需要10台服务器才能支撑,右边的需要5台才能支撑,那么一共是15台。而微服务会导致A部署15台,B也部署15台,再加上两个聚合服务,一共需要32台以上。
当然了,这只是极端的情况,现实中可能A服务不需要处理这么多业务,他可以少部署一点,又或者B服务可以少部署一点。但无论怎么算,服务器都是多了。
如果采用jar包的形式,那么只需要15台就够了,10台用来部署左边的聚合服务,5台用来部署右边的聚合服务。
说到底
这其实就是以三方库的思想在设计模块化,如果有一个工具类叫用户管理,有一个工具类叫支付管理。当你需要开发登录功能的时候,只需要引入一个jar包,然后调用里面的某个方法就好了,当你需要开发支付功能的时候也一样,你不需要去学习dubbo,不需要去学习springcloud,甚至不需要去关注注册中心是否挂没挂,注册中心的url是多少,服务到底有没有正常发布,有没有正常被发现。你会不会觉得这样有什么不妥呢?
以上只是个人的一点浅薄见解,欢迎大家理性探讨。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【OpenTiny调研征集】共创技术未来,分享您的声音!
🎉 欢迎参与2025年 OpenTiny 开源社区用户调研征集 🎉 📣 调研背景 随着 OpenTiny 开源项目的不断发展,我们一直致力于为开发者提供高质量的 Web 前端开发解决方案。为了更好地满足用户需求,提升项目的实用性和易用性,我们决定发起一项用户调研活动,诚挚邀请您参与。 🔍 调研目的 了解用户需求:收集您在使用 OpenTiny 开源项目过程中的需求、问题和建议,以便我们更好地改进和优化。 提升用户体验:通过您的反馈,我们将找出项目中的不足,并努力提升项目的性能、稳定性和易用性。 促进社区发展:您的参与和建议将有助于 OpenTiny 开源项目的成长和发展,共同构建一个繁荣的开源社区。 📋 调研内容 您目前使用的开源项目。 您对OpenTiny 文档教程的诉求。 您对 OpenTiny 项目的期望和改进建议。 您希望我们在未来版本中增加或优化的功能。 💡 如何参与 填写问卷 :进入https://www.wjx.cn/vm/rsK8GO1.aspx (或扫描二维码)填写我们的调研问卷,分享您的想法和建议。 参与讨论:加入我们的开源社区[添加小助手:openti...
- 下一篇
DeepSeek满血版在IDEA中快的飞起
作者:沉默王二 有没有发现?不知不觉中,阿里已经完成了从电商巨头到硬核科技公司的蜕变。 第一个标志事件,一向挑剔的苹果宣布和阿里合作,一起为国行版 iPhone 提供 AI 技术服务。 第二个标志事件,DeepSeek R1 蒸馏了 6 个模型开源给社区,其中有 4 个来自阿里的 Qwen。 第三个标志事件,阿里云为开发者量身定制的通义灵码插件,也在第一时间集成了 DeepSeek-R1 满血版。 坐我旁边的同事体验了一早上,直言这是他用过最聪明的 AI 编码助手了,还不用充值购买 DeepSeek API 的 tokens(纯白嫖),强烈要求我写个手摸手的教程,给大家普及一下。 这就来。 01、安装通义灵码 在 IDEA 的插件市场中直接搜"通义灵码",当然你也可以敲拼音"TONGYI",都可以搜到。 然后点击 install 就可以安装了,支持 Java、Python、Go 等编程语言,VSCode 和 Visual Studio 也可以安装。 完成安装后,点击右侧边栏上通义灵码的小 icon 就可以打开和通义灵码的聊天窗口。 点击左下角的下拉菜单,还可以在 Qwen-2.5、De...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS关闭SELinux安全模块
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Hadoop3单机部署,实现最简伪集群
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker安装Oracle12C,快速搭建Oracle学习环境