微服务概述

什么是微服务

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

微服务带来的问题

即微服务的代价

  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


相关推荐
踏浪无痕8 小时前
JobFlow已开源:面向业务中台的轻量级分布式调度引擎 — 支持动态分片与延时队列
后端·架构·开源
踏浪无痕9 小时前
JobFlow 实战:无锁调度是怎么做到的
后端·面试·架构
喵个咪9 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:kratos-bootstrap 入门教程(类比 Spring Boot)
后端·微服务·go
再睡一夏就好10 小时前
深入Linux线程:从轻量级进程到双TCB架构
linux·运维·服务器·c++·学习·架构·线程
墨香幽梦客10 小时前
HA高可用架构选型:确保企业系统稳定运行的基石
架构
SmartBrain10 小时前
洞察:阿里通义DeepResearch 技术
大数据·人工智能·语言模型·架构
玖日大大11 小时前
LangGraph 深度解析:构建强大智能体的新一代框架
人工智能·语言模型·架构·langchain
studytosky11 小时前
Linux系统编程:深度解析 Linux 进程,从底层架构到内存模型
linux·运维·服务器·开发语言·架构·vim
天行健,君子而铎11 小时前
高性能、可控、多架构:教育行业数据库风险监测一体化解决方案
数据库·架构
全栈老石11 小时前
从硬编码到 Schema 推断:前端表单开发的工程化转型
前端·vue.js·架构