当前位置: 首页 > news >正文

如何把项目改成微服务项目_微服务项目搭建,到底要不要聚合工程?

这是一个入门问题,做微服务项目,首先就是要搭建 Project,代码采用什么样的形式来组织,这是我们面临的第一个问题。 在传统的项目中,我们经常需要搭建聚合工程,这样可以方便的对项目进行分模块管理,降低维护难度。 微服务项目中,我们是否还需要继续这种开发方式呢?今天呢,我就结合自己在项目中的经验和大家简单聊一下,微服务项目中代码的组织形式。

1.开发模式

要搞清楚代码如何组织,首先大家要明白微服务架构到底是什么样子!

在微服务架构中,一个完整的项目被拆分成很多独立的微服务,例如一个电商项目,可能分为商品管理、商家管理、用户管理、交易管理、SEO 管理、App 管理、财务管理、系统管理等很多微服务。

这些微服务都是一个个独立的项目,由不同的团队负责开发维护。

不同的团队独立开发、独立维护、独立测试(看情况)、独立上线,这样可以有效提高项目的开发效率。

结合项目的实际情况,不同的团队甚至可以选择不同的技术栈,比如商品管理模块用 Java、交易管理可能用 Go、门户网站可能用 PHP 等等,从微服务架构上来说,这些都是支持的,这也是微服务的优势之一,即同一系统不必拘泥于同一种语言,当然在具体实践中,还需要结合团队的技术栈以及语言的特性来选择。

其实看到这里,你大概就明白了,聚合工程在这里还能不能用了!

2.要不要聚合工程

首先从整体上来说,也就是整个项目层面,我们不再需要聚合工程了。聚合工程可以让项目统一打包,解决项目中的依赖问题,还可以对依赖的版本进行统一管理,但是这些特性对微服务项目来说,其实并不重要。

假如商品管理模块用 Java、交易管理用 Go、门户网站用 PHP,那么这三个独立的微服务肯定是没有必要做成一个聚合工程的,你也没法聚合。当然这是一种比较极端的情况,即使不同微服务模块都是使用 Java 语言开发,那也没有必要聚合,因为不同的微服务实际上都是一个个独立运行的项目,由不同的团队开发维护,微服务的一大优势就是各个团队对独立开发,互不影响,如果搞个聚合工程,又把各个团队绑定在一起了。

但是不同的微服务之间,不可避免的要使用一些公共类库,这些可以统一打包上传到公司 Maven 私服上,然后不同的团队自行依赖即可,或者通过 git subtree 的方式来使用

这是从大的层面来说。具体到每一个微服务,聚合工程的优势还在,该用还是要用,例如在商品管理模块,聚合工程还是可以继续使用的。

3.为什么会有疑问

微服务中用不用聚合工程这个问题,本来是个很小的问题,但是为什么很多小伙伴会有疑问呢?

我说一下我了解到几种情况。

一种情况就是公司的微服务是在旧项目的基础上改造的,仓促上马,改来改去,面目全非,已经顾不上架构这些东西了,功能能实现就行了,这种时候甚至在大的层面就使用了聚合工程,结果不同团队开发起来,还是牵一发而动全身,如果有小伙伴也开发过这种项目,可能就会对聚合工程的使用产生疑问。作者有一个朋友在广州做某央企的项目,就是这种情况。

另一种情况可能是因为公司人少,微服务项目开发为了方便,也就从整体上做成了聚合工程,这样在项目人少并且工程量不大的情况下,修改起来非常方便。

总之,这个问题实际上也不能一概而论,结合项目的实际情况,选择适合自己的方案才是最好的。

4b372838f859ab45ca583d9a5daf1a45.png 5月31号晚8点,国际资深电商架构师姚半仙,将现场直播《蚂蚁金服金融核心系统分布式事务方案》 感兴趣的小伙伴,可以添加琳琳好友,免费获取听课名额。(琳琳微信:mkw-jiagoushi)

6415369dd64f5dfacd81515158ea9f32.png

相关文章:

  • cmd python封装成exe_将python代码打包成exe文件——pyinstaller模块用法
  • js不用reverse反转数组代码_反转数组而不使用Array.Reverse()
  • jsch设置代理_Springboot2(20)轻松搞定WebSocket
  • adb 输入回车命令_adb 常用命令
  • matlab向量与x正方向的夹角_高中数学:向量在几何中的应用
  • 怎么判断几行_孩子没有天赋怎么办?小陶虹的回答我点100个赞
  • 执行时间单位_排污许可申报之后环境管理台账及执行报告,你准备好了吗?
  • 人体一机竞技格斗机器人_2019中国智能机器人大赛在青岛举行
  • cad lisp 界址点号_CAD图纸多到打不完?没关系学会批量打印来多少都不怕
  • mysql 动态传入表名 存储过程_MySQL存储过程了解
  • zbbz 坐标标注lisp_CAD中还能这样快速标注尺寸?怪不得同事天天准时下班
  • zoom怎么解除静音_进入Zoom视频会议时为什么没有声音
  • rm删除级联目录的参数是_Linux:绝对路径和相对路径,cd 命令,rm 命令,history 命令详解...
  • 列表输出循环左移_python工厂第20层 多重列表2
  • 清空指令_python应用:linux常用指令
  • hexo+github搭建个人博客
  • C语言笔记(第一章:C语言编程)
  • es6要点
  • Git的一些常用操作
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • java多线程
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • sessionStorage和localStorage
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • vue脚手架vue-cli
  • Vue全家桶实现一个Web App
  • Zepto.js源码学习之二
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 入手阿里云新服务器的部署NODE
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #HarmonyOS:基础语法
  • (C++)八皇后问题
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (二)学习JVM —— 垃圾回收机制
  • (九)c52学习之旅-定时器
  • (论文阅读11/100)Fast R-CNN
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (十三)Flask之特殊装饰器详解
  • (小白学Java)Java简介和基本配置
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)关于多人操作数据的处理策略
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [Android] Android ActivityManager
  • [BJDCTF2020]The mystery of ip1
  • [BT]BUUCTF刷题第4天(3.22)