系统架构的演变历史
1. 单体架构
2. 垂直应用架构
3. 分布式架构
4. SOA(面向服务架构)
5. 微服务架构
微服务架构概述
微服务架构是一种将应用程序分解为一组小型、独立的服务的方法。每个服务负责完成单一的业务功能,并且可以独立开发、部署和扩展。这些服务通过轻量级的通信机制(如HTTP/REST或gRPC)进行交互。
微服务架构的核心要素
服务治理
-
服务注册与发现:服务在启动时向注册中心注册自己的地址,客户端通过服务发现机制获取服务实例的地址。
-
负载均衡:通过负载均衡器将请求分发到不同的服务实例,提高系统的可用性和性能。
-
容错与降级:当某个服务不可用时,可以通过熔断、限流等机制保护系统稳定。
-
配置管理:集中管理服务的配置信息,支持动态更新。
可观测性
-
日志:记录服务的运行状态和错误信息,便于问题排查。
-
监控:实时监控服务的性能指标,如响应时间、吞吐量等。
-
链路追踪:跟踪请求在各个服务之间的传递路径,帮助定位性能瓶颈和故障点。
-
告警:当监控指标超过阈值时,自动发送告警通知。
安全
-
身份认证:验证用户的身份,确保只有合法用户才能访问服务。
-
授权:根据用户的角色和权限控制其对服务的访问。
-
数据加密:对敏感数据进行加密处理,防止数据泄露。
-
API网关:作为系统的统一入口,提供安全防护、流量控制等功能。
微服务架构的基本概念与原理
服务
-
定义:服务是微服务架构中的基本单元,负责完成特定的业务功能。
-
特点:服务是独立的、可独立部署的,具有明确的边界和职责。
实例
-
定义:服务的一个运行实例,可以是一个进程或容器。
-
特点:实例可以独立启动、停止和重启,多个实例可以并行运行以提高系统的可用性和性能。
实例与进程的关系
-
关系:一个服务实例通常对应一个进程,但也可以是多个进程的组合。
-
区别:实例是服务的运行实体,而进程是操作系统的执行单元。
集群
-
定义:由多个服务实例组成的集合,共同提供服务。
-
特点:集群内的实例可以分布在不同的物理机或虚拟机上,通过负载均衡器进行请求分发。
常见的实例承载形式
-
容器:如Docker,提供轻量级的运行环境。
-
虚拟机:如VMware,提供完整的操作系统环境。
-
无服务器架构:如AWS Lambda,按需运行代码,无需管理基础设施。
有状态/无状态服务
-
有状态服务:服务实例保存了用户的会话状态或其他持久化数据。
-
无状态服务:服务实例不保存任何状态,每次请求都是独立的。
服务注册及发现
在代码层面如何调用一个目标服务的地址?
-
服务发现:客户端通过服务发现机制(如Eureka、Consul、Zookeeper等)获取目标服务的地址列表。
-
负载均衡:客户端从地址列表中选择一个实例进行请求,可以使用轮询、随机等策略。
服务实例上线及下线过程
-
上线:服务实例启动后,向注册中心注册自己的地址。
-
下线:服务实例停止前,从注册中心注销自己的地址。
流量的特征
统一网关入口
-
定义:API网关作为系统的统一入口,处理所有外部请求。
-
作用:提供路由、鉴权、限流、监控等功能。
内网通信多数采用RPC
-
定义:远程过程调用(RPC)是一种进程间通信方式,允许程序像调用本地函数一样调用远程服务。
-
优点:高效、易于使用,支持多种序列化协议(如JSON、Protocol Buffers)。
网状调用链路
-
定义:微服务架构中,服务之间通过复杂的调用链路进行交互。
-
特点:调用链路复杂,需要通过链路追踪工具(如Zipkin、Jaeger)进行监控和分析。
在实际应用中,选择合适的架构需要综合考虑业务需求、团队能力和运维成本等因素。微服务架构的核心要素包括服务治理、可观测性和安全,这些要素对于确保系统的稳定运行至关重要。