微服务概述

时间:2025-05-15 15:48:39

什么是微服务

微服务是一个架构方案,属于分布式架构的一种。 微服务提倡将模块以独立服务的方式独立管理,整个项目依靠多个小型的服务(单独进程)同时运作来支撑,单个服务只关注自己的业务实现并且有专业的团队进行开发。服务之间使用轻量的协议进行消息传送,并且对于单个模块的升级不应影响其他服务,也不应该被其他服务感知。每个服务可以发布多个实例,所有的服务组建成一个网状的服务集群。

微服务带来的问题

即微服务的代价

  1. 将多少业务拆分到一个服务中,涉及到程序设计中颗粒度的问题,而且必然会产生冗余的问题。
  2. 服务在多机部署的时候,如何对每个服务的集群地址进行维护和管理。
  3. 服务之间必然存在数据的传输,如何实现服务之间的远程调用。
  4. 在多个服务存在集群部署的情况下,所有服务的健康状态如何感知。

微服务架构特征

  1. 单一职责:每个微服务项目都只负责本服务对应的业务功能,避免重复开发业务。
  2. 面向服务:每个服务都必须提供给其他服务可以访问的接口。
  3. 服务自治:服务所采用的技术甚至团队也独立管理,各个服务的数据和部署环境也是相互隔离的。
  4. 隔离性强:服务之间出现调用,如果被调用方出现问题不能引起调用方的额外异常,所以服务之间要相互隔离,做好容错、降级避免出现级联错误。

服务划分原则

  • 边界上下文。微服务的粒度不能大于领域驱动里的 Bounded Context(具体是什么 大家自行 Google),也就是一个业务域。
  • 单一职责,高内聚,低耦合。把因为相同原因变化的合在一起(内聚),把不同原因变化的分开(解耦)
  • 事务和一致性。对于两个重度依赖的功能,需要完成一个事务和要保证强一致性的,最好不要拆开,要放在一起。
  • 跟组织架构匹配。把同一个团队的东西放在一起,不同团队的分开。

微服务规约

  1. 在不同的微服务中,不能重复的开发相同的业务;
  2. 微服务数据独立,不能访问其他服务的数据库,这样也控制了服务的隔离;
  3. 微服务需要暴露自己的业务接口,供其他微服务调用;
  4. 服务提供者往往也是服务消费者

微服务核心组件

工具组件而非业务组件

注册中心、配置中心、网关、负载均衡器、消息队列、日志、监控、链路追踪、持续集成、分布式缓存、分布式搜索

注册中心

注册中心作为一个服务独立开启,称作服务端,所有开发的业务服务都称为客户端

  1. 客户端启动时,自动将本服务的信息注册到注册中心,留存到注册中心的“字典”中。
  2. 在进行服务调用的时候,服务消费方将请求注册中心获取服务提供者的地址列表,在列表中负载均衡的获取到一个服务进行调用。
  3. 为确保服务健康,每个客户端定时向服务端发送一次心跳,如果长时间心跳失败则将此服务定义为不健康的服务,注册中心将踢出此服务,在服务消费者进行服务列表拉取的时候就不会获取到此服务。

常见的注册中心:Nacos、Eureka、Zookeeper、Consul

配置中心

配置中心通过集中化管理各个微服务的配置信息,提供了一种更加灵活、动态的配置管理模式。

作用

集中管理配置:允许开发人员在一个中心位置管理所有服务的配置,避免了分散式配置带来的维护难题。
动态更新配置:支持不重启服务的情况下实时更新配置信息,提高了系统的灵活性和可用性。
环境隔离:可以针对不同的环境(如开发、测试、生产)定义不同的配置集,方便进行环境切换和管理。
版本控制与回滚:支持对配置的历史版本进行管理和回滚操作,有助于快速恢复错误配置导致的问题。
安全性:提供访问控制、加密等安全措施,保护敏感配置信息的安全。

功能

配置存储:存储各微服务的配置信息。
配置发布:向微服务发布最新的配置信息。
配置监听:微服务能够监听配置的变化,并在配置变更时自动刷新。
权限管理:限制谁可以查看或修改配置。
审计日志:记录配置的变更历史,便于追踪问题。

常见的配置中心:Nacos、SpringCloudConfig、Consul、ZooKeeper、Apollo

网关

作为系统的入口点,负责处理客户端请求并路由到合适的后端服务

作用

统一接入点:为所有客户端提供一个统一的访问入口,简化了客户端与服务间的通信。
请求路由:根据请求的URL路径或其他条件,将请求路由到相应的后端微服务。
负载均衡:通过在多个实例之间分配请求来平衡负载,提高系统的可用性和响应速度。
限流与熔断:防止系统过载,保护后端服务免受流量峰值的影响,并能够在服务不可用时快速失败或降级处理。
安全防护:实现认证、授权等安全措施,确保只有合法的请求能够到达后端服务。

功能

身份验证和授权:确保请求的安全性,只允许经过验证的用户访问特定资源。
协议转换:支持不同的通信协议,如HTTP到gRPC的转换。
日志记录:记录所有进出网关的请求和响应,便于问题追踪和审计。
缓存:对于某些不经常变化的数据可以进行缓存,减少对后端服务的压力。
跨域资源共享(CORS):管理跨域请求,确保安全性的同时满足前端开发需求。

常见的网关:SpringCloudGateway、Zuul