`

服务器负载均衡的基本功能和实现原理

阅读更多

负载均衡设备作为纵跨网络2-7层协议的设备,往往放置在网络设备和应用设备的连接处,对工程师在网络和应用基本知识方面的要求远高于其他设备,所以我们要在基本功能的理解上下更多的功夫。负载均衡设备还有另外一个称呼:4/7层交换机,但它首先是个2-3层交换机,这要求我们首先掌握2-3层的基本知识,然后才是本文介绍的内容。

服务器负载均衡有三大基本Feature:负载均衡算法,健康检查和会话保持,这三个Feature是保证负载均衡正常工作的基本要素。其他一些功能都是在这三个功能之上的一些深化。下面我们具体介绍一下各个功能的作用和原理。

在没有部署负载均衡设备之前,用户直接访问服务器地址(中间或许有在防火墙上将服务器地址映射成别的地址,但本质上还是一对一的访问)。当单台服务器由于性能不足无法处理众多用户的访问时,就要考虑用多台服务器来提供服务,实现的方式就是负载均衡。负载均衡设备的实现原理是把多台服务器的地址映射成一个对外的服务IP(我们通常称之为VIP,关于服务器的映射可以直接将服务器IP映射成VIP地址,也可以将服务器IP:Port映射成VIP:Port,不同的映射方式会采取相应的健康检查,在端口映射时,服务器端口与VIP端口可以不相同),这个过程对用户端是透明的,用户实际上不知道服务器是做了负载均衡的,因为他们访问的还是一个目的IP,那么用户的访问到达负载均衡设备后,如何把用户的访问分发到合适的服务器就是负载均衡设备要做的工作了,具体来说用到的就是上述的三大Feature

我们来做一个详细的访问流程分析:

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="图片_x0020_1" o:spid="_x0000_i1033" type="#_x0000_t75" alt="http://img1.51cto.com/attachment/201107/181416330.png" href="http://img1.51cto.com/attachment/201107/181416330.png" target="&quot;_blank&quot;" style='width:474.75pt;height:357.75pt;visibility:visible;mso-wrap-style:square' o:button="t"> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title="181416330"/> </v:shape><![endif]--><!--[if !vml]-->http://img1.51cto.com/attachment/201107/181416330.png<!--[endif]-->

用户(IP:207.17.117.20)访问域名www.a10networks.com,首先会通过DNS查询解析出这个域名的公网地址:199.237.202.124,接下来用户207.17.117.20会访问199.237.202.124这个地址,因此数据包会到达负载均衡设备,接下来负载均衡设备会把数据包分发到合适的服务器,看下图:

 

<!--[if gte vml 1]><v:shape id="图片_x0020_2" o:spid="_x0000_i1032" type="#_x0000_t75" alt="http://img1.51cto.com/attachment/201107/181501837.png" href="http://img1.51cto.com/attachment/201107/181501837.png" target="&quot;_blank&quot;" style='width:474pt;height:356.25pt;visibility:visible;mso-wrap-style:square' o:button="t"> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" o:title="181501837"/> </v:shape><![endif]--><!--[if !vml]-->http://img1.51cto.com/attachment/201107/181501837.png<!--[endif]-->

 

负载均衡设备在将数据包发给服务器时,数据包是做了一些变化的,如上图所示,数据包到达负载均衡设备之前,源地址是:207.17.117.20,目的地址是:199.237.202.124, 当负载均衡设备将数据包转发给选中的服务器时,源地址还是:207.17.117.20,目的地址变为172.16.20.1,我们称这种方式为目的地址NAT(DNAT)。一般来说,在服务器负载均衡中DNAT是一定要做的(还有另一种模式叫做服务器直接返回-DSR,是不做DNAT的,我们将另行讨论),而源地址根据部署模式的不同,有时候也需要转换成别的地址,我们称之为:源地址NAT(SNAT),一般来说,旁路模式需要做SNAT,而串接模式不需要,本示意图为串接模式,所以源地址没做NAT

我们再看服务器的返回包,如下图所示,也经过了IP地址的转换过程,不过应答包中源/目的地址与请求包正好对调,从服务器回来的包源地址为172.16.20.1,目的地址为207.17.117.20,到达负载均衡设备后,负载均衡设备将源地址改为199.237.202.124,然后转发给用户,保证了访问的一致性。

 

<!--[if gte vml 1]><v:shape id="图片_x0020_3" o:spid="_x0000_i1031" type="#_x0000_t75" alt="http://img1.51cto.com/attachment/201107/181543509.png" href="http://img1.51cto.com/attachment/201107/181543509.png" target="&quot;_blank&quot;" style='width:474pt;height:356.25pt;visibility:visible;mso-wrap-style:square' o:button="t"> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image005.png" o:title="181543509"/> </v:shape><![endif]--><!--[if !vml]-->http://img1.51cto.com/attachment/201107/181543509.png<!--[endif]-->

以上是单个数据包的处理流程。那么负载均衡设备是怎么选择服务器的呢? 这就是我们要介绍的第一个Feature:

负载均衡算法

一般来说负载均衡设备都会默认支持多种负载均衡分发策略,例如:

Ø  轮询(RoundRobin)将请求顺序循环地发到每个服务器。当其中某个服务器发生故障,AX就把其从顺序循环队列中拿出,不参加下一次的轮询,直到其恢复正常。

Ø  比率(Ratio):给每个服务器分配一个加权值为比例,根椐这个比例,把用户的请求分配到每个服务器。当其中某个服务器发生故障,AX就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

Ø  优先权(Priority):给所有服务器分组,给每个组定义优先权,将用户的请求分配给优先级最高的服务器组(在同一组内,采用预先设定的轮询或比率算法,分配用户的请求);当最高优先级中所有服务器或者指定数量的服务器出现故障,AX将把请求送给次优先级的服务器组。这种方式,实际为用户提供一种热备份的方式。

Ø  最少连接数(LeastConnection):AX会记录当前每台服务器或者服务端口上的连接数,新的连接将传递给连接数最少的服务器。当其中某个服务器发生故障,AX就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

Ø  最快响应时间(Fast Reponse time):新的连接传递给那些响应最快的服务器。当其中某个服务器发生故障,AX就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

以上为通用的负载均衡算法,还有一些算法根据不同的需求也可能会用到,例如:

Ø  哈希算法( hash):  将客户端的源地址,端口进行哈希运算,根据运算的结果转发给一台服务器进行处理,当其中某个服务器发生故障,就把其从服务器队列中拿出,不参加下一次的用户请求的分配,直到其恢复正常。

Ø  基于策略的负载均衡:针对不同的数据流设置导向规则,用户可自行编辑流量分配策略,利用这些策略对通过的数据流实施导向控制。

Ø  基于数据包的内容分发:例如判断HTTPURL,如果URL中带有.jpg的扩展名,就把数据包转发到指定的服务器。

 

继续看图分析,第二个用户207.17.117.21也访问www.a10networks.com,负载均衡设备根据负载均衡算法将第二个用户的请求转发到第二台服务器来处理。

 

<!--[if gte vml 1]><v:shape id="图片_x0020_4" o:spid="_x0000_i1030" type="#_x0000_t75" alt="http://img1.51cto.com/attachment/201107/181700753.png" href="http://img1.51cto.com/attachment/201107/181700753.png" target="&quot;_blank&quot;" style='width:474pt;height:356.25pt;visibility:visible;mso-wrap-style:square' o:button="t"> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image007.png" o:title="181700753"/> </v:shape><![endif]--><!--[if !vml]-->http://img1.51cto.com/attachment/201107/181700753.png<!--[endif]-->

 

<!--[if gte vml 1]><v:shape id="图片_x0020_5" o:spid="_x0000_i1029" type="#_x0000_t75" alt="http://img1.51cto.com/attachment/201107/182329890.png" href="http://img1.51cto.com/attachment/201107/182329890.png" target="&quot;_blank&quot;" style='width:474.75pt;height:357pt;visibility:visible;mso-wrap-style:square' o:button="t"> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image009.png" o:title="182329890"/> </v:shape><![endif]--><!--[if !vml]-->http://img1.51cto.com/attachment/201107/182329890.png<!--[endif]-->

假设在工作过程中,突然有一台服务器出现问题怎么办? 这就涉及到我们要介绍的第二个Feature:

健康检查

健康检查用于检查服务器开放的各种服务的可用状态。负载均衡设备一般会配置各种健康检查方法,例如PingTCPUDPHTTPFTPDNS等。Ping属于第三层的健康检查,用于检查服务器IP的连通性,而TCP/UDP属于第四层的健康检查,用于检查服务端口的UP/DOWN,如果要检查的更准确,就要用到基于7层的健康检查,例如创建一个HTTP健康检查,Get一个页面回来,并且检查页面内容是否包含一个指定的字符串,如果包含,则服务是UP的,如果不包含或者取不回页面,就认为该服务器的Web服务是不可用(DOWN)的。如下图所示,负载均衡设备检查到172.16.20.3这台服务器的80端口是DOWN的,负载均衡设备将不把后面的连接转发到这台服务器,而是根据算法将数据包转发到别的服务器。创建健康检查时可以设定检查的间隔时间和尝试次数,例如设定间隔时间为5秒,尝试次数为3,那么负载均衡设备每隔5秒发起一次健康检查,如果检查失败,则尝试3次,如果3次都检查失败,则把该服务标记为DOWN,然后服务器仍然会每隔5秒对DOWN的服务器进行检查,当某个时刻发现该服务器健康检查又成功了,则把该服务器重新标记为UP。健康检查的间隔时间和尝试次数要根据综合情况来设置,原则是既不会对业务产生影响,又不会对负载均衡设备造成较大负担。

 

<!--[if gte vml 1]><v:shape id="图片_x0020_6" o:spid="_x0000_i1028" type="#_x0000_t75" alt="http://img1.51cto.com/attachment/201107/181758934.png" href="http://img1.51cto.com/attachment/201107/181758934.png" target="&quot;_blank&quot;" style='width:474pt;height:357.75pt;visibility:visible;mso-wrap-style:square' o:button="t"> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image011.png" o:title="181758934"/> </v:shape><![endif]--><!--[if !vml]-->http://img1.51cto.com/attachment/201107/181758934.png<!--[endif]-->

 

 

<!--[if gte vml 1]><v:shape id="图片_x0020_7" o:spid="_x0000_i1027" type="#_x0000_t75" alt="http://img1.51cto.com/attachment/201107/181958387.png" href="http://img1.51cto.com/attachment/201107/181958387.png" target="&quot;_blank&quot;" style='width:474pt;height:357.75pt;visibility:visible;mso-wrap-style:square' o:button="t"> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image013.png" o:title="181958387"/> </v:shape><![endif]--><!--[if !vml]-->http://img1.51cto.com/attachment/201107/181958387.png<!--[endif]-->

 

假设是同一个用户继续访问,后续的连接会怎么处理呢? 看下图:

 

 

<!--[if gte vml 1]><v:shape id="图片_x0020_8" o:spid="_x0000_i1026" type="#_x0000_t75" alt="http://img1.51cto.com/attachment/201107/093104353.png" href="http://img1.51cto.com/attachment/201107/093104353.png" target="&quot;_blank&quot;" style='width:487.5pt;height:366.75pt;visibility:visible;mso-wrap-style:square' o:button="t"> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image015.png" o:title="093104353"/> </v:shape><![endif]--><!--[if !vml]-->http://img1.51cto.com/attachment/201107/093104353.png<!--[endif]-->

 

<!--[if gte vml 1]><v:shape id="图片_x0020_9" o:spid="_x0000_i1025" type="#_x0000_t75" alt="http://img1.51cto.com/attachment/201107/093143173.png" href="http://img1.51cto.com/attachment/201107/093143173.png" target="&quot;_blank&quot;" style='width:487.5pt;height:366pt;visibility:visible;mso-wrap-style:square' o:button="t"> <v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image017.png" o:title="093143173"/> </v:shape><![endif]--><!--[if !vml]-->http://img1.51cto.com/attachment/201107/093143173.png<!--[endif]-->

 

用户207.17.117.25之前发起的第一个连接是207.17.117.254003-199.237.202.127:80,负载均衡设备将该连接转发到了172.16.20.4,接着发起第二个连接207.17.117.254004-199.237.202.127:80,我们看到该连接还是转发到了服务器172.16.20.4,为什么呢?因为负载均衡设备配置了会话保持。

会话保持

会话保持用于保持会话的连续性和一致性,由于服务器之间很难做到实时同步用户访问信息,这就要求把用户的前后访问会话保持到一台服务器上来处理。举个例子,用户访问一个电子商务网站,如果用户登录时是由第一台服务器来处理的,但用户购买商品的动作却由第二台服务器来处理,第二台服务器由于不知道用户信息,所以本次购买就不会成功。这种情况就需要会话保持,把用户的操作都通过第一台服务器来处理才能成功。当然并不是所有的访问都需要会话保持,例如服务器提供的是静态页面比如网站的新闻频道,各台服务器都有相同的内容,这种访问就不需要会话保持。

负载均衡设备一般会默认配置一些会话保持的选项,例如源地址的会话保持,Cookie会话保持等,基于不同的应用要配置不同的会话保持,否则会引起负载的不均衡甚至访问异常。具体可参考本人的另一篇拙作:《不同应用环境下会话保持方式的选择》。

本文介绍了负载均衡的基本功能和实现原理,看起来并不难,但负载均衡涉及的知识其实非常的广泛,根据各个用户系统的不同,我们要熟悉不同的协议和应用流程,甚至涉及到某些开发语言和软件平台,否则在出现故障的时候,我们可能没有能力做出有效的判断,从这个意义上来说,一个负载均衡设备的工程师要掌握网络,应用和系统等各方面的知识,这些都要当作基础来积累。

wyl.

 

本文出自 “ADC技术博客” 博客,请务必保留此出处http://virtualadc.blog.51cto.com/3027116/615836

 

 

分享到:
评论

相关推荐

    基于labview的声卡数据采集系统与分析设计毕业论文

    基于labview的声卡数据采集系统与分析设计毕业论文

    Android Studio实现学生信息管理系统源码(高分项目).zip

    Android Studio实现学生信息管理系统源码(高分项目).zip个人经导师指导并认可通过的高分大作业项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 Android Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理系统源码(高分项目).zipAndroid Studio实现学生信息管理

    个人毕业设计 - 基于树莓派、OpenCV及Python语言的人脸识别.zip

    个人毕业设计 - 基于树莓派、OpenCV及Python语言的人脸识别.zip

    考虑时变压力角和时变齿侧间隙的直齿轮六自由度平移-扭转耦合非线性动力学程序,包括时域图,相图,FFT图,庞加莱图,分岔图 要想学好齿轮动力学,需要有扎实的齿轮动力学理论和非线性动振动理论 齿轮啮合

    考虑时变压力角和时变齿侧间隙的直齿轮六自由度平移-扭转耦合非线性动力学程序,包括时域图,相图,FFT图,庞加莱图,分岔图。 要想学好齿轮动力学,需要有扎实的齿轮动力学理论和非线性动振动理论。 齿轮啮合刚度建模是齿轮动力学求解的第一步。

    tdm64-gcc-10.3.0-2.exe.zip

    tdm64-gcc-10.3.0-2.exe.zip。资源来源于网络分享,如有侵权请告知!

    安卓项目源码Androidbroadcast电池电量显示源码

    安卓项目源码Android broadcast电池电量显示源码提取方式是百度网盘分享地址

    汽车中间件市场调研报告:2023年全球汽车中间件市场销售额达到了78亿美元

    汽车中间件市场调研报告:2023年全球汽车中间件市场销售额达到了78亿美元 在数字化转型的浪潮中,汽车中间件作为连接硬件与软件的关键桥梁,正引领着汽车行业的新一轮变革。随着全球汽车产业的快速发展,中间件市场规模持续扩大,展现出前所未有的增长潜力。然而,面对复杂多变的市场环境和不断涌现的新技术,企业如何精准把握市场脉搏,实现可持续发展?本文将深入探讨全球及中国汽车中间件市场的现状、趋势及竞争格局,为您揭示咨询的重要性。 市场概况: 根据QYResearch(恒州博智)的统计及预测,2023年全球汽车中间件市场销售额达到了78亿美元(约7803百万美元),预计2030年将达到156亿美元(约15630百万美元),年复合增长率(CAGR)为10.3%(2024-2030)。这一数据不仅彰显了中间件市场的强劲增长动力,也预示着未来巨大的市场空间。 技术创新与趋势: 随着自动驾驶、车联网等技术的不断发展,汽车中间件正面临着前所未有的技术挑战与机遇。新一代中间件需要具备更高的实时性、更低的延迟以及更强的数据处理能力,以满足复杂多变的汽车应用场景。同时,云计算、大数据、人工智能等技术的融合应用,将进

    毕设&课程作业_基于C#的Winform公司管理系统.zip

    计算机系毕业设计

    非常好用的黑莓文件管理器

    亲测可用与黑莓OS6和OS7的文件管理器,测试型号9788、9900、9981

    基于STM8单片机的2.4寸LCD 触摸屏触摸划线实验.zip

    基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助

    网络安全-渗透攻防知识点面试题整合

    超全知识点,用来学习都可以。

    2018平安产险数据建模大赛 驾驶行为预测驾驶风险.zip

    驾驶行为风险预测。2018平安产险数据建模大赛 驾驶行为预测驾驶风险Fork或借鉴请注明出处 @ChungKing . Thx比赛链接2018平安产险数据建模大赛 驾驶行为预测驾驶风险数据下载秩第五周 第六周 相关文章http://blog.51cto.com/yixianwei/2120336执照版权所有 (c) ChungKing。保留所有权利。根据MIT许可证授权。

    HTML5+Canvas漂亮的3D烟花2025跨年特效

    元旦烟花html

    大语言模型赋能自动化测试实践、挑战与展望(复旦大学 2024)PPT(54页).pptx

    在21世纪的科技浪潮中,人工智能(AI)无疑是最为耀眼的明星之一,它以惊人的速度改变着我们的生活、工作乃至整个社会的运行方式。而在人工智能的广阔领域中,大模型(Large Models)的崛起更是开启了智能技术的新纪元,引领着AI向更加复杂、高效、智能的方向发展。本文将深入探讨人工智能大模型的内涵、技术特点、应用领域以及对未来的影响。 一、人工智能大模型的内涵 人工智能大模型,顾名思义,是指具有庞大参数规模和数据处理能力的AI模型。这些模型通过深度学习算法,在海量数据上进行训练,能够学习到丰富的知识表示和复杂的模式识别能力。与传统的小型或中型模型相比,大模型在理解自然语言、生成高质量内容、进行跨模态信息处理等方面展现出前所未有的优势。它们不仅能够执行特定的任务,如图像识别、语音识别,还能进行创造性的工作,如文本生成、音乐创作,甚至在某些情况下展现出接近或超越人类的智能水平。 二、技术特点 海量数据与高效训练:大模型依赖于庞大的数据集进行训练,这些数据涵盖了广泛的主题和情境,使得模型能够学习到丰富的语义信息和上下文理解能力。同时,高效的训练算法和硬件加速技术,如TPU(Tensor Processing Unit)和GPU,使得大规模模型的训练成为可能。 自注意力机制与Transformer架构:许多领先的大模型采用了Transformer架构,特别是其自注意力机制,这种设计使得模型在处理序列数据时能够捕捉到长距离依赖关系,极大地提高了模型的表达能力和泛化能力。 多任务学习与迁移学习:大模型通常具备多任务学习的能力,即在一次训练中同时学习多个任务,这有助于模型学习到更通用的知识表示。此外,迁移学习使得这些模型能够轻松适应新任务,只需少量额外数据或微调即可。

    2020中国高校计算机大赛·华为云大数据挑战赛-热身赛.zip

    2020中国高校计算机大赛·华为云大数据挑战赛-热身赛队名无能万金油2020中国高校计算机大赛·华为云大数据挑战赛--热身赛热身赛Rank 7CSDN博客我的博客 (建议直接打开热身赛code.ipynb,里面有详细说明)比赛地址华为云大数据挑战赛--热身赛赛题说明热身赛题——交通流量预测随着电子信息和移动通信技术高速发展和不断融合,人工智能在各个领域都相继取得了巨大的突破,城市智能体也应运而生,而城市交通又是城市智能体的核心。交通流量数据既是城市交通中的基础数据,又是反应交通状况的重要指标之一,准确预测交通流量对城市交通具有重大意义。本题以交通流量预测为目标,邀请各个队伍以历史交通流量数据建立对应的算法模型,预测目标流量数据,通过预测值和真实值之间的对比得到预测准确率,以此来评估各队伍所提交的预测算法。要求lightgbm 2.3.0学习熊猫==0.24.2泡菜numpy全面质量管理scipy ==>1.1.0##数据在trian文件夹下:1月12日 ~2月8日 各路口数据train/01-12/chongzhi_beie

    使用Hadoop、Spark等实现的大数据平台项目.zip

    使用Hadoop、Spark等实现的大数据平台项目大数据项目集1. 基于Hadoop的离线用户行为日志分析(weblog)技术栈Hadoop豆 点击流数据处理 点击会话流模型构建 Hive明细表构建 用户行为指标分析2. 基于Akka实现RPC通信(akka_rpc)技术栈Akka 模拟Hadoop集群间通信 模拟Spark集群间通信 模拟Yarn通信3. 广告数据管理平台(dmp)技术栈Spark、Scala 广告日志ETL 报表统计 用户画像构建 广告标签统计 DMP结果入库HBase4. 基于Spark MLLib实现个性化推荐(mllib)技术栈Spark、ScalaMovieLens 数据模型构建 冷启动启动时用户随机对10部电影评分 切分数据集 ALS模型构建 模型评估 个性化推荐5. 基于Flink对CDN日志分析(flink-train)技术栈Flink、Scala 模拟Kafka生产者生成日志数据 CDN日志分析

    数据可视化大屏展示.zip

    数据可视化大屏展示维兹前言提到数据大屏,通常大家的印象就是各种图表、表格的数据展示,然后不断地轮询后端接口。对于前端开发者来说,更多的关注点在于布局问题、图表的兼容性问题以及窗口变化后图表样式问题。对于后端来说,主要考虑的是如何在不断的请求中减轻服务器的压力。但实际上,数据大屏的需求还远不止于此前端发布后应当可以作为应用直接运行,而不需要手动输入地址进行预览。 需要减轻服务器的压力,避免频繁的数据请求。 当前后端任何一方或双方都离线的情况下,数据仍能正常运行。 需要日志的存储,以便随时查看问题。 需要调用系统的能力和跨域调用API,以增加数据展示的灵活性。解决方案我采用了GO和lorca的方式来解决以上问题特征打包体积轻量,仅20MB。使用无头浏览器lorca,可自定义Chrome和JavaScript之间的交互。支持交叉编译到Windows和Mac系统。离线状态下也可以正常运行。可以运行本地服务,减轻服务器压力。编译速度快,运行性能优秀。依赖项该项目的依赖项如下Go 1.20+节点 14.8+整体方案演示下载对应的安装包

    DNAStar-个人学习

    仅限个人学习,禁止商业用途!

    cmn.txt的英文句子经过分词、转为小写处理得到的结果存放的文件

    cmn.txt的英文句子经过分词、转为小写处理得到的结果存放的文件

    基于PLC控制密码锁.doc

    基于PLC控制密码锁.doc

Global site tag (gtag.js) - Google Analytics