代理架构构造解耦分布式系统提升系统质量属性与高可用性此模式用于构造解耦的分布式系统系统中组件通过远程调用彼此交互代理负责组件之间的通信协调通常还具备日志、安全、路由、缓存、熔断等系统质量相关功能可保证系统高可用、高性能、容错性、安全等特性。技术案例架构技术案例架构包括 Nginx、Apache Server、HAProxy、Kong、云服务商的 SLB、Redis 集群代理、多网合一的短信平台、Spring Cloud Gateway、Ingress Gateway 等。代理架构在微服务系统中的作用软件系统之间很少直接连接调用通常通过增加一层代理来实现服务发现和路由功能代理架构是组成微服务系统中一种重要的架构。在分布式系统中代理架构的实现组件称为网关。代理架构的内部实现与基本功能代理架构自身的架构内部通常通过管道模式来实现路由、内容转化等基础功能和质量属性。其基本功能如下基本功能描述发现和路由允许后端系统注册服务到网关或者通过网关管理员配置后端系统服务。请求将根据配置路由到后端系统比如 /order 的请求将路由到 Order 微服务系统/pay 的请求将路由到 Pay 相关的微服务系统 /download 的路由到文件服务系统内容转化对调用或者响应的内容或者协议进行更改比如 HTTP 调用网关会自动在响应头里增加跨域信息。HTTP 调用通过 API 网关转化 Dubbo 泛化调用或者相反过程集成后端服务对外提供一个单点服务聚合了后端多个系统的功能使得代理后的应用看起来像一个应用。比如网关整合后端订单和支付系统对外提供 xxx.com/pay 和 xxx.com/oder 的 URI负载均衡当后端系统有多个可用实例的时候代理将请求路由到任意一台实例可以采取的路由策略有随机、轮训、基于负载、基于权重等策略此机制保证了后端系统的高可用、伸缩性以及高性能代理架构提升系统质量属性的具体功能代理架构提升了整个系统的质量属性可以将后端系统的公共质量要求统一交给代理实现具体质量功能如下质量功能描述错误恢复当后端某实例节点暂时不可用可以路由到可用的实例节点。当后端永久不可用可以给与客户端响应如提示客户端重定向到新的访问地址日志记录访问日志这些日志可以导出以作访问统计熔断网关禁止请求转发到后端以保护后端这适合后端系统已经崩溃限流网关只允许少量请求转发到后端系统以保护后端这适合后端系统已经超载降级网关对一些特定请求作降级处理以保护后端系统主要功能正常。比如某些耗费资源的请求将不在转发到后端系统或者忽略处理系统的次要功能比如电商系统取消积分查询保留订单查询缓存对相同的请求内容网关可以直接返回缓存的内容比如对于 HTTP GET 请求根据 URL 地址可以返回上次缓存的内容安全提供审计记录和查询网关也可以供防止黑客攻击功能、基于请求的用户验证功能等。对于 HTTP 网关基于 SSL 的 HTTP经过 HTTP 网关后解码后转化为明文 HTTP 调用后端 Web 服务而无需后端服务提供 SSL 功能灰度测试允许识别请求方把请求路由到测试系统。比如根据 HTTP 头里的某个标识判断灰度请求其他功能代理的内部架构是流水线因此通常网关可以自定义 Filter 来实现任何功能比如 Spring Cloud Gateway 允许扩展实现 AbstractGatewayFilterFactory熔断、限流、降级相关说明熔断、限流、降级将在高可用战术里详细描述。需要注意的是大多数熔断限流的生效逻辑都依赖业务自己特点因此需要网关后端系统自己完成或者专门的限流中间件而无需依靠网关。电信短信平台架构与微服务网关功能如下是一个电信短信平台的架构短信网关将根据不同的目的电信运营商把统一的短信内容转发到电信运营商并完成运行商各个协议的转化比如转化为电信的 SMGP 协议或者其他服务商自己的 HTTP 协议。微服务网关 API gateway 则提供了服务发现以及协议转化等功能系统 A 提供了 HTTP 服务允许手机 APP 通过代理网关访问系统 A也允许内部系统使用 Dubbo 协议通过代理网关访问系统 A。保证代理服务高可用的方法网关保证了其后端系统的高可用要保证代理服务自身的高可用通常需要部署多个代理服务实例节点并且前置一个高可用代理组件如下是使用云厂商的 SLB保证其后的 Nginx 和 Spring Gateway 高可用。其他方式还包括最简单的方式是安装守护进程在网关节点停止后自动重启。使用 Keeplived 自动将请求转向可用的节点Keepalived 基于 Linux 的一个内部协议让多台服务器共享一个虚拟 IPVIP实现故障自动切换。其他办法还包括让客户端重试为 DNS 服务提供多个地址客户端访问 DNS客户端通过 DNS 得到可用的代理服务器实例中的一个地址。提供给客户端多个代理服务器地址客户端访问其中一个失败可以重试另外一个代理服务。关于重试将在高可用战术中说明。
代理架构:构造解耦分布式系统,提升系统质量与高可用性
代理架构构造解耦分布式系统提升系统质量属性与高可用性此模式用于构造解耦的分布式系统系统中组件通过远程调用彼此交互代理负责组件之间的通信协调通常还具备日志、安全、路由、缓存、熔断等系统质量相关功能可保证系统高可用、高性能、容错性、安全等特性。技术案例架构技术案例架构包括 Nginx、Apache Server、HAProxy、Kong、云服务商的 SLB、Redis 集群代理、多网合一的短信平台、Spring Cloud Gateway、Ingress Gateway 等。代理架构在微服务系统中的作用软件系统之间很少直接连接调用通常通过增加一层代理来实现服务发现和路由功能代理架构是组成微服务系统中一种重要的架构。在分布式系统中代理架构的实现组件称为网关。代理架构的内部实现与基本功能代理架构自身的架构内部通常通过管道模式来实现路由、内容转化等基础功能和质量属性。其基本功能如下基本功能描述发现和路由允许后端系统注册服务到网关或者通过网关管理员配置后端系统服务。请求将根据配置路由到后端系统比如 /order 的请求将路由到 Order 微服务系统/pay 的请求将路由到 Pay 相关的微服务系统 /download 的路由到文件服务系统内容转化对调用或者响应的内容或者协议进行更改比如 HTTP 调用网关会自动在响应头里增加跨域信息。HTTP 调用通过 API 网关转化 Dubbo 泛化调用或者相反过程集成后端服务对外提供一个单点服务聚合了后端多个系统的功能使得代理后的应用看起来像一个应用。比如网关整合后端订单和支付系统对外提供 xxx.com/pay 和 xxx.com/oder 的 URI负载均衡当后端系统有多个可用实例的时候代理将请求路由到任意一台实例可以采取的路由策略有随机、轮训、基于负载、基于权重等策略此机制保证了后端系统的高可用、伸缩性以及高性能代理架构提升系统质量属性的具体功能代理架构提升了整个系统的质量属性可以将后端系统的公共质量要求统一交给代理实现具体质量功能如下质量功能描述错误恢复当后端某实例节点暂时不可用可以路由到可用的实例节点。当后端永久不可用可以给与客户端响应如提示客户端重定向到新的访问地址日志记录访问日志这些日志可以导出以作访问统计熔断网关禁止请求转发到后端以保护后端这适合后端系统已经崩溃限流网关只允许少量请求转发到后端系统以保护后端这适合后端系统已经超载降级网关对一些特定请求作降级处理以保护后端系统主要功能正常。比如某些耗费资源的请求将不在转发到后端系统或者忽略处理系统的次要功能比如电商系统取消积分查询保留订单查询缓存对相同的请求内容网关可以直接返回缓存的内容比如对于 HTTP GET 请求根据 URL 地址可以返回上次缓存的内容安全提供审计记录和查询网关也可以供防止黑客攻击功能、基于请求的用户验证功能等。对于 HTTP 网关基于 SSL 的 HTTP经过 HTTP 网关后解码后转化为明文 HTTP 调用后端 Web 服务而无需后端服务提供 SSL 功能灰度测试允许识别请求方把请求路由到测试系统。比如根据 HTTP 头里的某个标识判断灰度请求其他功能代理的内部架构是流水线因此通常网关可以自定义 Filter 来实现任何功能比如 Spring Cloud Gateway 允许扩展实现 AbstractGatewayFilterFactory熔断、限流、降级相关说明熔断、限流、降级将在高可用战术里详细描述。需要注意的是大多数熔断限流的生效逻辑都依赖业务自己特点因此需要网关后端系统自己完成或者专门的限流中间件而无需依靠网关。电信短信平台架构与微服务网关功能如下是一个电信短信平台的架构短信网关将根据不同的目的电信运营商把统一的短信内容转发到电信运营商并完成运行商各个协议的转化比如转化为电信的 SMGP 协议或者其他服务商自己的 HTTP 协议。微服务网关 API gateway 则提供了服务发现以及协议转化等功能系统 A 提供了 HTTP 服务允许手机 APP 通过代理网关访问系统 A也允许内部系统使用 Dubbo 协议通过代理网关访问系统 A。保证代理服务高可用的方法网关保证了其后端系统的高可用要保证代理服务自身的高可用通常需要部署多个代理服务实例节点并且前置一个高可用代理组件如下是使用云厂商的 SLB保证其后的 Nginx 和 Spring Gateway 高可用。其他方式还包括最简单的方式是安装守护进程在网关节点停止后自动重启。使用 Keeplived 自动将请求转向可用的节点Keepalived 基于 Linux 的一个内部协议让多台服务器共享一个虚拟 IPVIP实现故障自动切换。其他办法还包括让客户端重试为 DNS 服务提供多个地址客户端访问 DNS客户端通过 DNS 得到可用的代理服务器实例中的一个地址。提供给客户端多个代理服务器地址客户端访问其中一个失败可以重试另外一个代理服务。关于重试将在高可用战术中说明。