认识
微服务是一种软件架构风格,其中应用程序被构建为一组小型服务,每个服务都运行在独立的进程中,可以通过轻量级机制(通常是 HTTP API)进行通信。每个服务都专注于执行一个单独的业务功能或一组相关的业务功能,并且可以独立地进行部署、扩展和维护。
与传统的单体应用程序相比,微服务架构提供了更高的可伸缩性、更好的灵活性、更高的可靠性。由于每个服务都是独立的,因此可以独立地进行部署,这使得开发人员可以更快地进行迭代和部署新功能。此外,由于每个服务都是独立的,因此可以更容易地进行故障排除和维护。
微服务通过拆分和解耦提升系统灵活性,但需要成熟的 DevOps 和分布式系统管理能力。选择时需权衡业务规模、团队能力和运维成本,避免“为微服务而微服务”。对于初创项目,可从单体开始,随业务增长逐步拆分。
组成
服务拆分
将单体应用按业务功能拆分为多个独立服务(如用户服务、订单服务、支付服务)。
每个服务专注于单一职责,可独立开发、部署和扩展。
去中心化
数据管理分散:每个服务拥有自己的数据库(如 MySQL、MongoDB 等),避免共享数据库。
技术多样性:不同服务可用不同编程语言或框架实现(如 Spring Boot、Go、Node.js)。
轻量级通信
服务间通过 API(REST/gRPC)或异步消息(Kafka/RabbitMQ)交互。
通常采用 JSON/Protobuf 等通用数据格式。
独立部署
每个服务可单独部署和扩展,无需重启整个系统。
服务发现 | Service Discovery
服务发现有三个角色:「服务提供者」、「服务消费者」、「服务中介」。「服务中介」是联系「服务提供者」和「服务消费者」的桥梁。「服务提供者」将自己提供的服务地址注册到「服务中介」,「服务消费者」从「服务中介」那里查找自己想要的服务的地址,然后享受这个服务。「服务中介」提供多个服务,每个服务对应多个「服务提供者」。
注册中心 | Register Center
eureka
=
配置中心 | Configuration Center
WIP
构建
—— 该部分将介绍用于构建微服务架构的典型技术栈、常用组件、工具,以及相关问题的解决办法。
微服务架构典型技术栈有:
- 开发框架:例如,Spring Cloud、Micronaut、Quarkus(Java)、Go Micro 等等,不同的开发语言具有不同的生态系统。
- 服务通信:同步调用的 RESTful API、gRPC、Apache Thrift 等等,异步消息的 Kafka RabbitMQ RocketMQ 等等。
- 服务注册与发现:例如 Eureka、Nacos、Consul、Zookeeper 等等;
- 配置中心:例如 Spring Cloud Config、Nacos、Apollo、Consul 等等;
- API 网关:例如 Kong、Spring Cloud Gateway(路由、鉴权)、Apigee、Envoy 等等。
- 容错与熔断:Resilience4j、Sentinel、Hystrix、……
- 分布式事务:Seata、Saga Pattern、TCC(Try-Confirm-Cancel)、……
- 监控与日志:Metrics、分布式追踪、日志管理、……
- 容器编排:Kubernetes(服务部署、伸缩)。微服务架构通常与容器化技术(如 Docker)和容器编排工具(如 Kubernetes)一起使用,以便更轻松地部署和管理微服务。
- 服务网格:Istio(流量管理、安全)、Linkerd、Consul Connect、Kuma、……
- ……
性质
特点
- 松耦合:服务间依赖最小化,修改一个服务不影响其他服务。
- 高内聚:每个服务包含其业务逻辑、数据和接口。
- 自治性:团队可独立开发、测试和运维各自的服务。
- 容错性:通过熔断(Hystrix)、限流和降级机制提高系统稳定性。
- 可观测性:依赖日志(ELK)、监控(Prometheus)和链路追踪(Zipkin)快速定位问题。
优势
- 敏捷开发 | 小团队并行开发,加速迭代。
- 弹性扩展 | 按需扩展高频服务(如电商秒杀场景)。
- 技术灵活性 | 不同服务可采用最适合的技术栈。
- 故障隔离 | 单个服务故障不会导致整个系统崩溃。
挑战
- 分布式复杂性 | 需处理网络延迟、服务发现(Consul/Nacos)、负载均衡等问题。
- 数据一致性 | 跨服务事务需通过 Saga 模式或事件溯源(Event Sourcing)解决。
- 运维成本高 | 需 CI/CD、容器化(Docker/K8s)和自动化监控支持。
- 测试难度 | 需模拟服务依赖(如 Contract Testing)。
应用
需求变化快、团队规模较大的互联网应用(如 Netflix、Uber 等)。
需要快速迭代或部分功能高并发的系统。
长期维护的复杂项目,需逐步演进技术栈。
参考
Microservices – Wikipedia
DeepSeek / 介绍微服务