Please enable JavaScript.
Coggle requires JavaScript to display documents.
微服务 - Coggle Diagram
微服务
DevOps实践
CD(持续集成):将代码从开发环境自动化集成到生产环境,保证代码随时可发布
容器化和编排:使用容器封装应用,利用编排技术管理容器的部署、扩展和运维
CI(持续开发):自动化集成开发人员代码的变更,持续构建并测试
基础设计即服务(IaC):使用代码来管理和配置基础设置,确保环境的一致性和可维护性
监控和日志管理:实时监控系统性能和健康状态,集中收集和分析日志
安全性:在开发、部署和运维过程中集成安全实践,保证系统安全
微服务架构基础
特征
专业化:每个服务只负责自己独立的功能
自主性:每个服务可独立选择技术栈、语言和框架
轻量级通信:服务之间采用轻量级通信机制,如http/REST、gRPC、消息队列、事件驱动等
独立性:独立的部署单元,每个服务有自己的代码库和数据库
单体架构vs微服务架构
单体架构
统一代码库
共享数据库
整体部署
模块之间高度耦合
缺点:部署变更风险高,任何微小的变更都要重新部署整个项目
微服务架构
独立代码库
独立数据库
独立部署和扩展
服务之间松散耦合:服务之间通过轻量级通信协议交互
缺点:需要解决服务之间通信和数据一致性,需要解决服务发现、配置管理和监控等问题,需要处理分布式系统固有问题
定义
一种软件架构风格,期中每个应用程序被设计成独立的服务,每个服务专注于自己的业务功能,并且可以独开发、部署和扩展
设计原则
单一职责:每个服务负责专一的功能
松耦合:服务之间依赖关系最小化,通过轻量级通信协议通信
高内聚:服务内各模块共同完成特有功能,避免将功能分散到多个服务
自主性:各服务自主选择语言和开发框架
独立部署:服务独立部署,可采用容器化技术和CI/CD工具
去中心化:去中心化治理,避免单节点控制,采用Devops文化,利用自动化工具
容错性:系统应具备自我修复能力,确保部分服务故障,系统仍然继续运行,采用熔断器、重试机制、超时机制等
安全性
概念:微服务架构中,安全性主要包括认证和授权、服务间通信安全、数据安全
认证和授权:OAuth2、JWT、API秘钥
服务间通信安全:TLS/SSl、mTLS
数据安全:加密存储、数据脱敏
服务发现
主要概念:服务注册、服务注销、服务发现
服务发现的过程:服务调用者通过服务注册中心获取目标服务器实例,然后调用服务
定义:微服务架构中各个服务实例是动态变化的(如扩容、缩容、故障恢复等),为了确保服务之间能通信,需要一种机制来跟踪和管理服务实例,就叫做服务发现
服务注册中心:etcd、Netflix Eureka、Consul
容错和恢复
容错机制
熔断机制:当服务故障或请求过长时,熔断器启动,将服务调用短路,防止进一步请求
重试机制:当服务调用失败,自动进行重试,以解决临时性故障
限流:限制一段时间内服务的调用次数,防止突发流量导致系统过载
降级:当某个服务不可用时,提供备选方案或服务降级处理
恢复机制
自动化恢复:系统自动检测和恢复故障服务,无需人工干预,常用方法:健康检测、自动重启、服务再平衡
日志和监控:通过日志和监控系统,及时发现和诊断故障
自动化部署和回滚:使用CI/CD工具,自动化部署和回滚
意义:微服务架构是由多个独立的服务组成,容错和恢复保证了系统的高可用性和稳定性
容错和恢复的工具:Kubernates、Istio、Resilience4j
数据治理
数据共享
事件驱动:通过事件通知机制共享数据,服务需要订阅其感兴趣的事件,使用场景:需要异步处理和共享数据的场景
数据复制:通过数据复制机制将数据同步到多个服务,使用场景:通常用于高性能访问共享数据的场景,如缓存服务
API机制:服务通过提供API接口供其它服务共享数据,使用场景:通常用于实时获取数据的场景
数据管理
多租户支持:支持不同租户的数据隔离和管理,使用场景:sass平台或多租户平台
数据版本控制:实现对数据版本控制,确保数据可追溯和可恢复,使用场景:常见历史数据可追溯和可恢复的场景,例如金融系统
分库分表:将数据分布到多个数据库和表里,使用场景:适用于大数据量和高并发场景,如电商平台
数据一致性
分布式事务:通过分布式事务协议确保服务的强一致性,使用场景:银行转账
Saga模式:将分布式事务分解为一系列局部事务,通过补偿机制处理失败情况,保证数据一致性,使用场景:要求数据一致性但可以有一定延迟,如订单处理
最终一致性:保证最终数据一致性,使用场景:不需要强一致性的场景,如点赞
API网管
基本功能:请求路由、请求聚合、协议转换、负负载均衡、限流和熔断
API网管实现:Nginx、Spring Cloud Dateway、Kong
概念:微服务架构的重要组件,充当客户端和后端服务之间的中介,负责请求路由、聚合和转换等功能
监控
基本要素:指标监控、日志监控、分布式监控、报警和通知
工具:Prometheus、Grafana,Jaeger、Zipkin
概念:监控是保证系健康运行和及时发现问题的关键手段,监控通常包括指标监控、日志监控、分布式监控等
日志管理
基本需求:集中收集、实时处理、可视化分析、数据持久化
工具:ELK、Graylog、Fluentd
概念:日志是诊断和调试的重要手段,微服务架构中服务众多,因此需要集中化的日志管理和分析
配置管理
基本要求:集中管理、动态更新(无需重载服务)、环境隔离、安全性
工具:Spring Cloud Config、Consul、etcd
概念:微服务架构中每个服务都有自己的配置,包括数据库连接信息、端口、第三方API秘钥等
服务通信
异步通信
消息队列:通过队列传递消息,队列实现服务之间的解耦,需要处理数据持久化、顺序和幂等性,使用场景日志收集、订单处理和通知服务
事件驱动架构:通过发布/订阅进行通信,服务之间通过事件通信,但数据一致性处理复杂,使用场景:处理大量事件的场景,如实时监控、数据流水线和用户行为分析等
定义:通过消息队列或事件驱动进行服务器间的异步交互,常见有RabbitMQ、Kafka和Aazon SQS
同步通信
HTTP/REST协议:基于http和restful通信,易用简单、网络开销大,性能低,缺乏强类型(数据验证和错误处理)
gRPC协议:基于HTTP/2和Protocol Buffers的高性能RPC框架,强类型,高性能(双向流和异步通信),但相对较复杂
定义:服务之间直接通信,常见有HTTP/REST协议、gRPC协议
部署和运维
运维策略
监控和度量:对系统各项指标监控,及时发现问题,工具:Prometheus、Grafana
日志管理:对日志进行集中收集和分析,帮助排查问题,工具:ELK、Graylog、Fluentd
分布式追踪:跟踪请求在整个服务架构的流转路径,找到性能瓶颈和故障点,工具:Jaeger、Zipkin
服务网格:用于处理微服务间通信的基础设施层,提供流量管理、安全、监控等功能,工具:Istio、Linkerd、Consul Connect
配置管理:集中管理微服务中的配置,支持动态更新或环境隔离,工具:Spring Cloud Config、Consul、Etcd
部署策略
容器编排:使用容器化编排技术对容器进行部署、管理和运维,相关 工具:Kubernetes、Docker Swarm、Apache Mesos
无服务器架构:利用供应商提供的无服务计算平台,按需执行代码,无需管理底层服务,相关工具:AWS,Azure、Google等运营商工具
容器化:将微服务打包成容器镜像,利用容器技术进行部署,相关工具:Docker、Podman
CI/CD:自动化代码构建、测试和部署,确保快速和可靠的发布,工具:Jenkins、Gitlab、CircleCI、Travis CI