如何将单体项目拆分成微服务

1、如何将单体项目拆分成微服务

如何拆分微服务?其实对不同的业务项目场景,对应有不同的拆分方案。需要项目人员详细的分析项目需求、团队现状、业务边界、业务逻辑等方方面面,拆分的粒度既不能过细,也不能过粗,需要把控好尺度。

如下为较为通用的拆分思路:

  • 从业务模型切入,根据业务边界进行拆分
  • 确保一个微服务团队对应一个开发小组或团队
  • 确保拆分之后所带来的收益大于拆分之前,否则不进行拆分
  • 考虑团队人员配置。在人员少的情况下,服务拆分的粒度不必过细

根据业务场景 ,总结出以下几点

  • 划分服务必须满团队开发需求,以业务为导向,明确业务界限,再进行划分
    • 对于项目来说,业务界限比较清晰的有这个几块:用户服务、商品服务、车厂服务、订单服务、支付服务、优惠券服务、推荐服务、消息服务等
  • 最大化的复用微服务,避免重复造轮子
    • 对于订单服务,支付服务、优惠券服务而言,它既可以支撑车厂出库需求,又可以支撑车品商城需求,二者代码有很多重复的地方,通过复用服务,减少了重复性的代码
  • 最小化地变更原有服务
    • 对于车品商城中的推荐功能而言,它相对较为独立,处于服务的下游,暂时只能被上游商品服务调用,只需要将相关的推荐代码取出来即可,并且也可为之后新业务提供推荐服务。
  • 确定基础公共服务与业务服务,并从原有项目中抽象公共服务。
    • 在项目中,除了业务相关的服务外,还有一些基础服务模块,如日志监控,权限检验,搜索服务等,这些也需要从原有的庞大项目中抽取出来,作为独立的微服务
  • 尽可能避免循环依赖,若出现循环依赖的情况,需要设计中间层做冗余处理。
  • 尽可能避免过度拆分微服务,必须结合实际业务场景做划分
    • 对于车场服务而言,如果进一步拆分车厂地图服务、车场详情服务、车场预约服务的话,会导致团队一进步拆分,而车场相关的功能是一个整体,需要成员紧密合作、一同完成需求开发、不适合进行更细粒度的拆分。此外,过度拆分微服务,会导致出现分布式问题,复杂度上升,带来不必要的技术成本。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将Spring Boot MyBatis单体项目转换为微服务项目可以按照以下步骤进行: 1. 代码拆分:根据业务功能,将原有的单体项目拆分多个独立的微服务模块。每个模块包含自己的业务逻辑、数据库表设计和接口定义。可以根据领域划分、功能划分或团队划分来拆分。 2. 服务注册与发现:引入服务注册与发现的组件,如Eureka或Consul,用于注册和管理微服务的实例。每个微服务都要注册到注册中心,并能够通过服务名进行发现。 3. 服务之间调用:原有的代码中可能存在服务之间的依赖关系,需使用远程调用技术进行重构。可选择使用Feign或RestTemplate等工具实现服务之间的调用。 4. 分布式事务管理:在原有的单体项目中,可能使用了本地事务进行数据库操作。在微服务架构中,为了保证数据的一致性,需要引入分布式事务管理器,如Seata或TCC-Transaction等。 5. 配置中心:引入配置中心,如Spring Cloud Config,用于管理各个微服务的配置文件。通过配置中心,可以动态修改微服务的配置信息,而无需重启微服务。 6. 熔断与限流:在微服务架构中,服务之间的调用更加频繁。引入熔断和限流机制,如Hystrix或Sentinel,可以有效地防止服务雪崩和过载。 7. 监控与日志:为了能够及时发现和排查问题,引入监控和日志系统,如Spring Cloud Sleuth和ELK,用于收集和分析微服务的运行日志和指标数据。 8. 部署与扩容:使用容器化技术,如Docker和Kubernetes,将微服务打包镜像,并进行自动化部署和扩容。可以根据实际业务负载情况,动态调整微服务的实例数量。 总之,将Spring Boot MyBatis单体项目转换微服务项目需要进行代码拆分、服务注册与发现、服务之间调用、分布式事务管理、配置中心、熔断与限流、监控与日志、部署与扩容等工作。这样可以使项目更加具有可扩展性、高可用性和灵活性,满足微服务架构的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值