来源:https://juejin.cn/post/6844904054921887757
互联网抱负架构本文切磋了互联网公司的手艺架构,涉及DNS、负载平衡、长毗连、API网关、PUSH推送、微办事、散布式事务以及相关支持的根底办事。次要是为了进修,希望能够给各人一个参考。
整体架构APP、PC以及第三方等挪用方通过传统的域名解析办事LocalDNS获取负载平衡器的IP,APP能够通过HttpDNS的体例来实现更实时和灵敏精准的域名解析办事。
通过负载平衡器抵达同一接入层,同一接入层维护长毗连 。
API网关做为微办事的入口,负责协议转换、恳求路由、认证鉴权、流量控造、数据缓存等。
营业Server通过PUSH推送系统来实现对端的实时推送,如IM、通知等功用。
营业Server之间通过专有的RPC协议实现彼此挪用,并通过NAT网关挪用外部第三方办事。
域名解析 传统DNSDNS(Domain Name System)域名系统,一种散布式收集目次办事,用于域名与IP地址的彼此转换,可以使人更便利的拜候互联网,而不消去记住机器的IP地址。
DNS的解析过程如下:
客户端递归查询LocalDNS(一般是ISP互联网办事供给商供给的边沿DNS办事器)获取IPLocalDNS迭代查询获取IP,即不竭的获取域名办事器的地址停止查询HttpDNS挪动解析(HttpDNS)基于Http协议向DNS办事器发送域名解析恳求,替代了基于DNS协议向运营商Local DNS倡议解析恳求的传统体例,能够制止Local DNS形成的域名劫持和跨网拜候问题,处理挪动互联网办事中域名解析异常带来的困扰。
以腾讯云HttpDNS为参考,相较于传统LocalDNS的优势比照:
负载平衡为领会决单台机器的性能问题以及单点问题,需要通过负载平衡将多台机器停止程度扩展,将恳求流量分发到差别的办事器上面。
客户端的流量起首会抵达负载平衡办事器,由负载平衡办事器通过必然的调度算法将流量分发到差别的应用办事器上面,同时负载平衡办事器也会对应用办事器做周期性的安康查抄,当发现毛病节点时便动态的将节点从应用办事器集群中剔除,以此来包管应用的高可用。
收集负载平衡次要有硬件与软件两种实现体例,支流负载平衡处理计划中,硬件厂商以F5为代表,软件次要为LVS、NGINX、HAProxy。
手艺原理上分为L4四层负载平衡和L7七层负载平衡。
L4 vs L7L4四层负载平衡工做于处于OSI模子的传输层,次要工做是转发。它在领受到客户端报文后,需要领会传输层的协议内容,按照预设的转发形式和调度算法将报文转发到应用办事器。以TCP为例,当一个TCP毗连的初始SYN报文抵达时,调度器就选择一台办事器,将报文转发给它。尔后通过查发报文的IP和TCP报文头地址,包管此毗连的后继报文被转发到该办事器。
L7七层负载平衡工做在OSI模子的应用层,次要工做就是代办署理。七层负载平衡会与客户端成立一条完好的毗连并将应用层的恳求解析出来,再根据调度算法选择一个应用办事器,并与应用办事器成立别的一条毗连将恳求发送过去。
LVS转发形式LVS(IP负载平衡手艺)工做在L4四层以下,转发形式有:DR形式、NAT形式、TUNNEL形式、FULL NAT形式。
DR形式(间接路由)
改写恳求报文的MAC地址,将恳求发送到实在办事器,而实在办事器将响应间接返回给客户。要求调度器与实在办事器都有一块网卡连在统一物理网段上,而且实在办事器需要设置装备摆设VIP。
NAT形式 (收集地址转换)
调度重视写恳求报文的目的地址,按照预设的调度算法,将恳求分拨给后端的实在办事器;实在办事器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调渡过程。要求负载平衡需要以网关的形式存在于收集中。
TUNNEL形式
调度器把恳求报文通过IP隧道转发至实在办事器,而实在办事器将响应间接返回给客户,所以调度器只处置恳求报文。要求实在办事器撑持隧道协议和设置装备摆设VIP。
FULL NAT形式
在NAT形式的根底上做一次源地址转换(即SNAT),做SNAT的益处是能够让应答流量颠末一般的三层路由回到负载平衡上,如许负载平衡就不需要以网关的形式存在于收集中了。性能要逊色于NAT形式,实在办事器会丧失客户端的实在IP地址。
调度算法 轮询将外部恳求按挨次轮流分配到集群中的实在办事器上,它均等地看待每一台办事器,而不管办事器上现实的毗连数和系统负载。
加权轮询权值越大分配到的拜候概率越高,次要用于后端每台办事器性能不平衡的情况下,到达合理有效的天时用主机资本。
起码毗连将收集恳求调度到已成立的链接数起码的办事器上。若是集群系统的实在办事器具有附近的系统性能,接纳"最小毗连"调度算法能够较好地平衡负载
哈希将指定的Key的哈希值与办事器数目停止取模运算,获取要求的办事器的序号
一致性哈希考虑到散布式系统每个节点都有可能失效,而且新的节点很可能动态的增加进来,一致性哈希能够包管当系统的节点数目发作变革时尽可能削减拜候节点的挪动。
API网关API网关(API Gateway)是一个办事器集群,对外的独一入口。从面向对象设想的角度看,它与外不雅形式类似。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,能实现更高的吞吐量。Spring 5.0 推出的WebFlux反响式编程模子,特点是异步的、事务驱动的、非阻塞,内部就是基于Netty+NIO 或者 Servlet 3.1 Non-Blocking IO容器 实现的。
链式处置链式处置即通过责任链形式,基于 Filter 链的体例供给了网关根本的功用,例如:路由、协议转换、缓存、限流、监控、日记。也能够按照现实的营业需要停止扩展,但留意不要做耗时操做。
Spring cloud gateway (基于 Spring WebFlux)的工做机造大致如下:
Gateway 领受客户端恳求。客户端恳求与路由信息停止婚配,婚配胜利的才气够被发往响应的下流办事。恳求颠末 Filter 过滤器链,施行 pre 处置逻辑,如修改恳求头信息等。恳求被转发至下流办事并返回响应。响应颠末 Filter 过滤器链,施行 post 处置逻辑。向客户端响应应答。恳求限流恳求限流是在面临未知流量的情况下,避免系统被冲垮的最初一道有效的防线。能够针对集群、营业系统和详细API维度停止限流。
详细实现能够分为集群版和单机版,区别就是集群版是利用后端同一缓存如Redis存储数据,但有必然的性能损耗;单机版则在本机内存中停止存储(保举)。
常用的限流算法:计数器、漏桶、令牌桶(保举)
熔断降级办事熔断
当下流的办事因为某种原因突然变得不成用或响应过慢,上游办事为了包管本身整体办事的可用性,不再继续挪用目的办事,间接返回,快速释放资本。若是目的办事情况好转则恢复挪用。
熔断是为领会决办事雪崩,出格是在微办事系统下,凡是在框架层面停止处置。内部机造接纳的是断路器形式,其内部形态转换图如下:
办事降级
当负荷超出系统整体负载接受才能时,为了包管核心办事的可用,凡是能够对非核心办事停止降级,若是返回缓存内容或者间接返回。
办事降级的粒度能够是API维度、功用维度、以至是系统维度,但是都需要事前停止办事级此外梳理和定义。
实在场景下,凡是是在办事器负载超出阈值报警之后,办理员决定是扩容仍是降级。
营业隔离API网关同一了非营业层面的处置,但若是有营业处置的逻辑,差别营业之间就可能会彼此影响。要停止营业系统的隔离,凡是能够接纳线程池隔离和集群隔离,但关于Java而言,线程是比力重的资本,保举利用集群隔离。
PUSH推送动静推送系统 针对差别的场景推出多种推送类型,满足用户的个性化推送需求,并集成了苹果、华为、小米、FCM 等厂商渠道的推送功用,在供给控造台快速推送才能的同时,也供给了办事端接入计划,便利用户快速集成挪动末端推送功用,与用户连结互动,从而有效地进步用户留存率,提拔用户体验。
设备建连、注册、绑定用户流程
动静推送过程
在十分多的营业场景中,当营业发作时用户未必在线,也未必有收集。因而,在 MPS 中所有动静均会被耐久化。营业发作时,MPS 会测验考试做一次推送(第三方渠道推送或自建的TCP 毗连推送)。
自建渠道中,会通过查询缓存来判断用户的末端能否有 TCP 毗连,若是存在则推送,客户端收到推送动静后,会给办事端回执,办事端即可更新动静形态。若是推送失败,或者回执丧失,用户鄙人一次成立毗连时,会从头承受动静通知,同时客户端会停止逻辑去重。
微办事系统TODO另写一篇文章介绍,等待!
参考材料 http://www.linuxvirtualserver.org/zh/lvs1.htmlhttps://www.infoq.cn/article/Maglev-Vortex/https://www.cnblogs.com/mindwind/p/5339657.htmlhttps://blog.csdn.net/gaopeiliang/article/details/54864410https://www.jianshu.com/p/76cc8ba5ca91https://www.jianshu.com/p/cda7c0366089https://juejin.im/post/6844903775912607758近期热文保举:
1.1,000+ 道 Java面试题及谜底整理(2022最新版)
2.劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4.别再写满屏的爆爆爆炸类了,尝尝粉饰器形式,那才是文雅的体例!!
5.《Java开发手册(嵩山版)》最新发布,速速下载!
觉得不错,别忘了随手点赞+转发哦!





















还没有评论,来说两句吧...