原文地址:Go面试看这里了~(十六)
1、常用负载均衡算法?
负载均衡建立在现有网络结构上,提供一种廉价、有效、透明的方法扩展网络设备和服务器带宽,增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性,本质上是将大批量的网络请求分摊到多个操作单元上进行执行,操作单元指的是像web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务,大白话来说就是请求太多,将其分摊到多台服务器处理,之后来看下实现负载均衡常用的几种算法,介绍如下:
-
轮询法:将请求按顺序轮流地分配到后端服务器上,均衡地对待后端的每一台服务器,不关心服务器实际的连接数和当前的系统负载。
-
加权轮询法:各服务器配置不一样,有些性能好,处理请求多, 有些性能较差,处理请求较少,其抗压能力不同,因此按顺序分配服务器会导致性能好的服务器无法发挥最大作用,性能差的服务器压力太大,给性能好的服务器分配较高权重,性能差的服务器分配较低权重则可很好的解决此问题。
-
随机法:通过随机算法从服务器列表中随机地选取一台服务器进行访问,随着客户端调用服务器次数增加到一定数量级别,每台服务器的平均访问次数跟轮询法的次数相近,也就是说趋近于轮询法。
-
加权随机法:根据后端机器的配置和系统的负载分配不同的权重,按权重进行随机选取,与加权轮询法相似。
-
源地址哈希法:根据请求来源地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号,采用源地址哈希法进行负载均衡,同一源地址的请求,当服务器列表不变时,每次都会映射到同一台服务器进行访问。
-
最小连接数法:根据服务器当前的连接情况进行负载均衡,当请求到来时,会选取当前连接数最少的一台服务器来处理请求,由此也可根据服务器CPU占用率,也就是单位时间内处理请求的效率高低等进行服务器选择。
2、多台服务器session怎么存储?
-
mysql使用memory存储引擎,设计数据表(sessionid、sessionValue 、过期时间),重写session_set_save_handler方法。
-
Redis存储。
3、TCP如何确保可靠性?
-
数据包校验,发送方计算校验和,接收方结算校验和,进行对比。
-
应答机制,seq序列号与ack确认号。
-
超时重传机制,发送后启动定时器,进行重传。
-
连接管理,三次握手和四次挥手。
-
对失序数据包重排序。
-
流量控制和拥塞控制,使用滑动窗口协商大小。
至此,本次分享就结束了,后期会慢慢补充。
以上仅为个人观点,不一定准确,能帮到各位那是最好的。
好啦,到这里本文就结束了,喜欢的话就来个三连击吧。
扫码关注公众号,获取更多优质内容。