来源:https://juejin.cn/post/684490...互联网正规交易的理想架构及相关配套基础服务。主要是为了学习,希望能给大家一个参考。整体架构APP、PC、第三方调用者通过传统的域名解析服务LocalDNS获取负载均衡器的IP,APP可以通过HttpDNS实现更实时、灵活、准确的域名解析服务。通过负载均衡器到达统一接入层,统一接入层维护长连接。API网关作为微服务的入口,负责协议转换、请求路由、认证鉴权、流量控制、数据缓存等。业务服务器使用PUSH推送系统实现对端的实时推送,比如IM,通知等功能。业务服务器之间通过私有的RPC协议相互调用,通过NAT网关调用外部第三方服务。域名解析传统DNSDNS(DomainNameSystem)域名系统,一种分布式网络目录服务,用于域名和IP地址的相互转换,使人们无需记住本机的IP地址,更方便的上网.DNS解析过程如下:客户端递归查询LocalDNS(通常是ISP互联网服务商提供的边缘DNS服务器)得到IPLocalDNS迭代查询获取IP,即不断获取域名服务器的地址进行查询HttpDNS移动解析(HttpDNS)是基于Http协议向DNS服务器发送域名解析请求,取代传统的基于DNS协议向运营商LocalDNS发起解析请求的方式,可以避免域名劫持和LocalDNS带来的跨网访问问题,解决移动互联网服务中域名解析异常的问题。困扰。以腾讯云HttpDNS为参考,对比传统LocalDNS的优势:负载均衡为了解决单机的性能问题和单点问题,需要通过负载均衡横向扩展多台机器,将请求流量分发到在服务器上不同。客户端的流量首先会到达负载均衡服务器,负载均衡服务器通过一定的调度算法将流量分配给不同的应用服务器。同时,负载均衡服务器也会定期对应用服务器进行健康检查。节点从应用服务器集群中动态移除,保证应用的高可用。网络负载均衡主要有两种实现方式:硬件和软件。主流的负载均衡方案中,硬件厂商以F5为代表,软件主要有LVS、NGINX、HAProxy等。技术原理分为L4四层负载均衡和L7七层负载均衡。L4vsL7L4四层负载均衡工作在OSI模型的传输层,主要工作是转发。客户端收到消息后,需要了解传输层的协议内容,根据预先设置的转发方式和调度算法将消息转发给应用服务器。以TCP为例,当一个TCP连接的初始SYN报文到达时,调度器选择一个服务器并将报文转发给它。之后通过检查报文的IP和TCP头地址,保证本次连接的后续报文都转发给服务器。L7七层负载均衡工作在OSI模型的应用层,其主要工作是充当代理。七层负载均衡会与客户端建立一个完整的连接,分析应用层的请求,然后根据调度算法选择一个应用服务器,再与该应用服务器建立连接,将请求发送到那里。LVS转发模式LVS(IP负载均衡技术)工作在L4第4层以下,转发模式包括:DR模式、NAT模式、TUNNEL模式、FULLNAT模式。DR模式(直接路由)改写请求报文的MAC地址,将请求发送给真实服务器,真实服务器直接返回响应给客户端。要求调度器和realserver都有网卡连接在同一个物理网段,realserver需要配置VIP。NAT模式(NetworkAddressTranslation)调度器改写请求报文的目标地址,根据预设的调度算法将请求分配给后端真实服务器;当真实服务器的响应报文经过调度器时,报文的源地址被改写,然后返回给客户端,完成整个负载调度过程。要求负载均衡需要以网关的形式存在于网络中。TUNNEL模式下的调度器通过IP隧道将请求报文转发给真实服务器,真实服务器直接返回响应给客户端,所以调度器只处理请求报文。要求真实服务器支持隧道协议并配置VIP。FULLNAT模式是在NAT模式的基础上进行源地址转换(SNAT)。做SNAT的好处是响应流量可以通过正常的三层路由返回到负载均衡器,这样负载均衡器就不需要做网关的形式了。存在于网络中。性能不如NAT模式,真实服务器会丢失客户端的真实IP地址。调度算法round-robin将外部请求轮流分发给集群中的真实服务器,它对每台服务器都一视同仁,而不管服务器上的实际连接数和系统负载。加权轮询权重越大,分配的接入概率就越高。主要用于在各后端服务器性能不平衡时,合理有效地利用主机资源。LeastConnections将网络请求分派给建立连接最少的服务器。如果集群系统的真实服务器具有相似的系统性能,可以使用“最小连接”调度算法来更好地平衡负载。Hash对指定Key的哈希值与服务器数量进行取模运算,得到所需服务器的相同序列号。考虑到分布式系统的每个节点都可能出现故障,并且可能会动态添加新的节点,一致性哈希可以保证在系统中的节点数量发生变化时访问节点的移动最小化。API网关API网关(APIGateway)是服务器集群的唯一对外入口。从面向对象设计的角度来看,它类似于Facade模式。API网关封装了系统内部架构,对外提供REST/HTTP访问API。同时,它还有其他非业务相关的职责,如认证、监控、负载均衡、缓存、流量控制等。API管理API网关的核心功能是API管理。提供完整的API生命周期管理,包括创建、维护、发布、运行、下线等基础功能;提供测试、预发布、发布等多种环境;提供版本管理和版本回滚。API配置包括前端配置和后端配置。前端配置是指Http相关的配置,比如HTTP方法、URL路径、请求参数等,后端配置是指微服务的相关配置,比如服务名称、服务参数等。这样,通过API配置,完成前端Http到后端微服务的改造。全异步由于API网关主要处理网络I/O,通过非阻塞I/O和I/O复用,可以用少量线程承载海量并发处理,避免线程上下文切换,大大增加系统吞吐量,降低机器成本。常见的方案有Tomcat/Jetty+NIO+servlet3.1和Netty+NIO。这里推荐Netty+NIO,可以达到更高的吞吐量。Spring5.0推出的WebFlux反应式编程模型具有异步、事件驱动、非阻塞等特点。内部基于Netty+NIO或Servlet3.1Non-BlockingIO容器实现。ChainedprocessingChainedprocessing通过责任链模型提供基于Filter链的网关的基本功能,如:路由、协议转换、缓存、限流、监控、日志等。也可以根据实际业务需要进行扩展,但注意不要做耗时的操作。Spring云网关(基于SpringWebFlux)的工作机制大致如下:网关接收客户端请求。客户端请求与路由信息进行匹配,只有匹配成功的才能发送给相应的下游服务。请求经过Filter过滤链执行预处理逻辑,比如修改请求头信息。请求被转发到下游服务并返回响应。响应通过Filter过滤器链并执行后处理逻辑。以确认回应客户。请求限速请求限速是防止系统在未知流量面前不堪重负的最后一道有效防线。可以针对集群、业务系统和特定API维度限制流量。具体实现分为集群版和单机版。不同的是,集群版使用Redis等后端统一缓存来存储数据,但有一定的性能损失;单机版将数据存储在本地内存中(推荐)。常用限流算法:计数器、漏桶、令牌桶(推荐)熔断和降级服务熔断然后继续调用目标服务,直接返回,快速释放资源。如果目标服务更好,则恢复呼叫。熔断是为了解决服务雪崩,尤其是在微服务系统中,通常在框架层面处理。内部机制采用断路器模式,其内部状态转换图如下:服务降级当负载超过系统整体负载能力时,为保证核心服务的可用性,通常可以将非核心服务降级。如果返回缓存内容还是直接返回。服务降级的粒度可以是API维度、功能维度,甚至是系统维度,但需要提前梳理和定义服务等级。在实际场景中,通常是在服务器负载超过阈值告警后,管理员才决定扩容还是降级。服务隔离API网关统一了非业务层面的处理,但是如果有业务处理逻辑,不同的服务可能会相互影响。隔离业务系统,通常可以使用线程池隔离和集群隔离,但是对于Java来说,线程是比较重的资源,建议使用集群隔离。PUSH推送消息推送系统针对不同场景推出多种推送类型,满足用户个性化推送需求,并集成了苹果、华为、小米、FCM等厂商渠道的推送功能。在提供控制台快速推送能力的同时,还提供了服务端接入方案,方便用户快速集成移动端推送功能,保持与用户的互动,从而有效提高用户留存率和用户体验。设备连接、注册、用户绑定流程消息推送流程在很多业务场景中,业务发生时用户可能不在线或没有网络。因此,所有消息都持久化在MPS中。当有业务发生时,MPS会尝试进行推送(第三方渠道推送或自建TCP连接推送)。在自建通道中,会通过查询缓存判断用户终端是否有TCP连接,存在则推送。客户端收到推送消息后,会向服务器发送回执,服务器可以更新消息状态。如果推送失败或者回执丢失,用户会在下次连接建立时再次收到消息通知,客户端会进行逻辑去重。微服务系统TODO再写一篇介绍,期待!参考http://www.linuxvirtualserver...https://www.infoq.cn/article/...https://www.cnblogs.com/mindw...https://blog.csdn.net/高培...https://www.jianshu.com/p/76c...https://www.jianshu.com/p/cda...https://juejin.im/post/684490...近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!
