微服务是一种将应用程序分解为多个小型、独立部署的服务的方法,每个服务都围绕特定的业务功能构建,并通过轻量级的通信机制(通常是 HTTP/RESTful API)进行交互。以下是微服务架构的核心知识点总结:
一、微服务的基本概念
1. 微服务架构
- 定义:微服务是一种架构风格,它将单个应用程序划分为一组小型服务,每个服务都运行在自己的进程中,并通过网络通信进行协作。
- 特点:服务独立、部署灵活、易于扩展、容错性高、支持多种技术栈。
2. 单体架构 vs 微服务架构
- 单体架构:将所有功能模块集成在一个应用程序中,部署和扩展困难。
- 微服务架构:将功能模块拆分为独立的服务,独立开发、部署和扩展。
二、微服务的设计原则
1. 服务划分
- 按业务功能划分:每个微服务都围绕一个特定的业务功能,如用户管理、订单处理等。
- 高内聚,低耦合:服务内部的模块高度内聚,服务之间尽量减少依赖。
2. 独立部署
- 独立运行:每个微服务可以独立开发、测试和部署。
- 无共享数据库:每个微服务应该拥有自己的数据库,避免跨服务的数据库共享。
3. 接口与通信
- 轻量级通信:微服务之间通过轻量级的通信协议进行交互,如 HTTP/REST、gRPC、消息队列等。
- API 网关:使用 API 网关集中管理微服务的外部访问,统一认证、限流、路由等。
4. 数据管理
- 数据库分离:每个微服务使用独立的数据存储,避免共享数据库。
- 分布式事务:采用最终一致性和补偿机制处理跨服务的事务,以避免复杂的分布式事务管理。
三、微服务的关键技术
1. 服务发现与注册
- 服务注册中心:使用工具如 Eureka、Consul、Zookeeper 实现服务的动态注册与发现,方便服务之间的互相调用。
- 客户端负载均衡:通过 Ribbon、Spring Cloud LoadBalancer 等工具实现客户端的负载均衡。
2. 配置管理
- 分布式配置管理:使用 Spring Cloud Config、Consul、Etcd 等工具集中管理配置文件,并支持配置的动态刷新。
- 环境隔离:根据不同的部署环境(开发、测试、生产)设置不同的配置。
3. 服务间通信
- 同步通信:使用 REST、gRPC 等实现服务间的同步调用,适用于实时性要求高的场景。
- 异步通信:使用消息队列(如 RabbitMQ、Kafka)进行服务间的异步消息传递,适用于松耦合的场景。
4. API 网关
- 功能:API 网关集中处理外部请求的路由、鉴权、限流、负载均衡、日志记录等。
- 工具:常用的 API 网关工具包括 Zuul、Spring Cloud Gateway、Kong、Nginx 等。
四、微服务的运维与监控
1. 日志管理
- 集中式日志管理:使用 ELK(Elasticsearch, Logstash, Kibana)或 Graylog 等工具收集和分析分布式服务的日志。
- 分布式追踪:通过工具如 Zipkin、Jaeger 实现分布式追踪,跟踪跨服务的请求路径和响应时间。
2. 健康检查与熔断
- 健康检查:定期检查微服务的运行状态,使用 Spring Boot Actuator、Consul Health Checks 等工具。
- 熔断器模式:使用 Hystrix、Resilience4j 等工具实现熔断机制,防止单个服务故障导致整个系统崩溃。
3. 自动化部署
- CI/CD:使用 Jenkins、GitLab CI、CircleCI 等工具实现持续集成和持续部署。
- 容器化:使用 Docker 将微服务容器化,简化部署流程。
- 容器编排:使用 Kubernetes、Docker Swarm 等工具实现微服务的自动化部署、扩展和管理。