微服务概述

什么是微服务

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

微服务带来的问题

即微服务的代价

  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


相关推荐
掘金-我是哪吒16 分钟前
分布式微服务系统架构第131集:fastapi-python
分布式·python·微服务·系统架构·fastapi
开源架构师21 分钟前
JVM 与云原生的完美融合:引领技术潮流
jvm·微服务·云原生·性能优化·serverless·内存管理·容器化
金刚猿4 小时前
openfeign 拦截器实现微服务上下文打通
微服务·云原生·架构
lcw_lance4 小时前
技术中台-核心技术介绍(微服务、云原生、DevOps等)
微服务·云原生·devops
lcw_lance5 小时前
业务中台-典型技术栈选型(微服务、容器编排、分布式数据库、消息队列、服务监控、低代码等)
数据库·分布式·微服务
尽兴-7 小时前
Lambda架构与Kappa架构对比详解
hadoop·架构·kafka·lambda·kappa
boring_1117 小时前
从Aurora 架构看数据库计算存储分离架构
数据库·架构
CloudPilotAI9 小时前
“海外滴滴”Uber的Arm迁移实录:重构大规模基础设施
arm开发·架构·arm
互联网搬砖老肖11 小时前
Web 架构之会话保持深度解析
前端·架构