springcloud的微服务应以什么原则去拆分

145 阅读4分钟

首先要明确的是为什么拆分微服务

今天做项目想要拆分微服务时想到了这个问题,所以记录下,比喻微服务像是一个乐高积木,可以通过各种方式跟们组合在一起,他们之间有着某种联系,但不会因为失去一块积木而丧失整体框架的稳定性,所以为什么要拆分微服务就是以下的观点

  1. 独立部署和扩展: 拆分微服务可以使每个微服务都能够独立部署和扩展。这样,当某个服务需要更新或者需要更多资源时,只需更新或者扩展该服务,而不影响其他服务。
  2. 团队自治: 将系统拆分成微服务后,每个微服务可以由一个小团队独立开发、测试和维护。这种团队自治的结构有助于提高开发效率和灵活性。
  3. 业务边界清晰: 拆分微服务可以根据业务边界组织服务,使得每个微服务专注于一个特定的业务功能或者业务领域。这样的组织结构有助于理解系统的架构,提高可维护性。
  4. 技术栈的选择: 每个微服务可以选择适合自己业务需求的技术栈,而不必受到整体系统的技术选型的限制。这有助于灵活应对不同服务的需求。
  5. 容错和隔离: 微服务的拆分可以提高系统的容错性。如果某个微服务发生故障,其他微服务仍然可以正常工作。此外,微服务之间的隔离性也可以提高系统的稳定性。
  6. 可扩展性: 微服务架构使得系统能够更容易地进行水平扩展。通过独立部署和扩展每个微服务,可以更加灵活地应对系统的流量变化。
  7. 持续交付: 微服务架构有助于实现持续交付和持续集成。每个微服务可以独立发布,从而加快新功能的上线速度。
  8. 易于替换和更新: 由于每个微服务都是独立的,因此可以相对容易地替换或者更新某个微服务,而不会对整体系统产生太大影响。

那微服务以什么原则去拆分呢

比如说现在的项目我需要一个独立的用户系统,但是同时我还需要点赞,收藏,评论的功能,那这三个功能我需要重新开启一个项目吗,还是要放在用户系统里面去,因为我们要遵守以下的原则去拆分

  1. 业务边界: 拆分微服务时,首先应该考虑业务边界。每个微服务应该专注于一个明确定义的业务领域,并且应该包含该领域内所有相关的业务规则和数据。这有助于避免微服务过于复杂和混杂,提高了每个微服务的内聚性。
  2. 自治性: 每个微服务应该是自治的,即它应该能够独立开发、部署和运行。这有助于减少微服务之间的依赖,提高系统的可伸缩性和灵活性。
  3. 数据拆分: 考虑将系统中的数据存储拆分成微服务所需的数据。避免多个微服务共享相同的数据库,以减少耦合。可以采用微服务专有数据库、CQRS 模式等。
  4. 技术栈: 不同的微服务可以使用不同的技术栈,以满足其特定需求。这有助于选择最适合每个微服务的技术,并且可以根据需要进行独立的技术更新和升级。
  5. 团队组织: 微服务的拆分应该考虑到团队的组织结构。每个微服务应该由一个小团队负责,这有助于提高团队的自治性和效率。
  6. 通信和集成: 微服务之间的通信应该是轻量级和松散耦合的。可以使用异步消息传递、RESTful API 等方式进行通信。确保集成点少、清晰,并容易维护。
  7. 可观察性: 每个微服务应该具有良好的可观察性,包括日志、监控、度量等。这有助于快速检测和解决问题。
  8. 安全性: 考虑每个微服务的安全性需求,包括身份验证、授权、数据加密等。