○ 是一套规范,而非框架web
○ 规范应该要有哪些功能组件,各组件间如何配合,共同完成什么事情算法
微服务规范spring
服务注册 : 服务提供者 将 IP、端口、访问协议 登记到 注册中心数据库
服务发现 : 服务消费者 从 注册中心 获取到较为实时的服务列表,根据访问策略进行访问编程
负载均衡 : 将请求压力分散到多个服务器,以提升服务的性能、可靠性缓存
雪崩效应 : 服务的扇出链路上,某个服务响应时间过长或不可用,致使该服务占用愈来愈多系统资源,进而引发系统崩溃服务器
○ 扇入 : 服务被调用的次数。扇入大,该服务复用性高,好事markdown
○ 扇出 : 服务调用其余服务的个数。扇出大,该服务业务逻辑复杂,不必定是好事架构
限流 : 限制请求服务提供者的数量 - 问题发生前app
熔断 : 上游服务为了保护下游服务,暂时切断对下游服务的调用 - 问题发生后
降级 : 返回兜底数据(默认值) - 问题发生后
熔断、降级 一般一块儿使用
链路追踪 : 对一次请求涉及到的多个服务链路进行 日志纪录、性能监控
对应用模块作垂直划分 - 【划分目标】业务之间尽可能互不影响
优势
实现 流量分担
能够针对不一样功能模块进行优化
方便 水平扩展
○ 水平扩展 : 增长服务器数量,扩充系统性能
○ 垂直扩展 : 提高单机处理能力
提升 容错率
提升 功能迭代效率
不一样服务可采用不一样的编程语言
缺点
Service-Oriented Architecture 面向服务架构
根据实际业务,将系统 水平、垂直 拆分红各自 独立布署 的模块,模块间相互独立
优势
缺点
注册中心 - Eureka - Nacos
客户端负载均衡 - Ribbon - Spring Cloud Loadbalancer
熔断器 - Hystrix - Sentinel
网关 - Zuul - Spring Cloud Gateway
配置中心 - Spring Cloud Config - Nacos
服务调用 - Feign - Dubbo RPC
消息驱动 - Spring Cloud Stream
链路追踪 - Spring Cloud Sleuth/Zipkin
分布式事务 - Seata
基于 AP 模式设计,使用二级缓存机制提升响应速度,可能致使服务发现缓慢问题,Eureka Server 30秒、Eureka Client 30 秒、Ribbon 30 秒
【原理】给 RestTemplate 添加拦截器,将服务名替换成 IP 地址
服务端负载均衡
客户端负载均衡
客户端拥有服务器地址列表,请求在客户端根据负载均衡算法选择一个服务器进行访问,注册中心仅负责
提供服务端地址
负载均衡算法在 客户端 运行
Ribbon
资源隔离 : 对每一个管理的资源都维护一个小型的线程池(舱壁模式),若是该资源对应的线程池已满,则发往该资源的请求马上被拒绝,而非排队,以加速失败断定
回退机制 : 当请求 失败、超时、被拒绝、断路器启动 时,运行回退逻辑
回退逻辑由开发人员定义,如 : 返回缺省值
跳闸机制 : 当某服务的错误率超过阈值,则中止请求该服务一段时间,以后进入自我修复阶段
超时时间应大于 Ribbon 的超时时间,避免 Ribbon 还在重试,但 Hystrix 已超时
自我修复 : 当断路器启动一段时间后,会自动进入半开状态(少许测试服务是否正常)
监控 : 近乎实时地监控运行指针与配置变化 - 成功、失败、超时、拒绝
Fegin = RestTemplate (简化HTTP请求发送) + Ribbon (客户端负载均衡) + Hystrix (熔断器)
○ 异步非阻塞,基于 Reactor 模型
○ 高可用 : 透过 Nginx 实现
反向代理
过滤器
鉴权
流量控制
日志输出
【默认】使用 Git 存储配置文档内容
配置文档命名规则
{application}-{profile}.yml
{application}-{profile}.properties
○ application 为应用名称
○ profile 为环境 - 开发、测试、生产
刷新
○ 屏蔽底层不一样 MQ 间的差别,下降学习、开发、维护 成本
○ 支持 RabbitMQ、Kafka
容许用户受权第三方应用访问他们存储在另外的服务提供者上的信息
○ Json Web Token
○【核心目的】防止窜改
中间使用 "." 分割
可选择使用 AP 模式 或 CP 模式
保护域值 : 健康实例数 / 总实例数
当保护域值低于设置时,说明健康实例很少,将把全部的实例(健康 + 不健康) 都返回给消费者
临时实例 : 由客户端发送心跳
持久实例 : 由 Nacos 发送心跳,且不会下线,仅作健康检测 - MySQL
领域模型
配置文档格式
可利用 Nacos 持久化数据
QPS : 当调用该资源的 QPS 达到阈值时,进行限流
QPS : 每秒钟请求量
线程数 : 当调用该资源的 线程数 达到阈值时,进行限流 - 适用业务运行时间长的状况
只有当 QPS >= 5,才会触发降级规则,时间窗口内拒绝请求,时间窗口后直接恢复