代理服务器(ProxyServer)的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站,是个人网络和服务商之间的中间代理机构,负责转发合法的网络信息,对转发进行控制和登记。
代理服务器作为连接与的桥梁,在实际应用中发挥着极其重要的作用,它可用于多个目的,最基本的功能是连接,此外还包括安全性、缓存、内容过滤、访问控制管理等功能。更重要的是,代理服务器是链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联(OSI)模型的对话层
实现代理服务器基本的Basic认证,主要是通过将原始的httprequestheader头和httpresponseheader头原样返回给浏览器
Basic认证是一种较为简单的HTTP认证方式,客户端通过明文(Base64编码格式)传输用户名和密码到服务端进行认证,通常需要配合HTTPS来保证信息传输的安全
Basic认证会在ResponseHeader中添加WWW-Authenticate标头,浏览器识别到Basic后弹出对话框Realm表示Web服务器中受保护文档的安全域
通过上面手动实现代理的方法,已对代理大体逻辑了解,那go是否已存在代理函数呢,答案是有的,直接利用httpUtil.NewSingleHostReverseProxy直接实现
负载均衡,英文名称为LoadBalance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如上面建立的Web服务器、FTP服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
随机负载是通过随机算法从服务器列表中随机选取一台服务器进行访问。由概率论可以得知,随着客户端调用服务端的次数增多,其实际效果趋近于平均分配请求到服务端的每一台服务器,也就是达到轮询的效果。
最终效果,访问本地http://localhost:,页面随机显示web1或web2内容
IP_HASH负载是根据请求所属的客户端IP计算得到一个数值,然后把请求发往该数值对应的后端。
所以同一个客户端的请求,都会发往同一台后端,除非该后端不可用了,所以IP_HASH能够达到保持会话的效果。
负载加权随机是在随机算法上,为HTTPSERVER添加权重,选择HTTPSERVER时,根据权重进行随机选择。
根据HTTPSERVERWERIGHT计算出权重所占数组的个数,权重较大的会占数组的个数均多,随机选择时,选中的概率较大。
最终效果,访问http://localhost:时,会有1比3的效果,因为现在设置权重是5和15
缺点:需要生一个数组切片用于对应HTTPSERVER列表,如果设置权重数值过大,会引起内存问题。
轮询负载是把来自用户的请求轮流分配给内部的服务器:从服务器1开始,直到服务器
N,然后重新开始循环
调整LoadBalanceServer列表,添加curIndex值用于计算当前是哪个HTTPSERVER
如在做实现时发现,结果和预想不一致,查看是否有浏览器默认请求,如"/favicon.icon"
平滑轮询加权是用于解决原先轮询加权存在的必须使用完权重较高的HTTPSERVER压力过大的缺点,平滑轮询加权只要保证在总权重次数内,HTTPSERVER只要能够出现它的权重即可,无需顺序执行权重较高的HTTPSERVER,再执行权重低的HTTPSERVER。
算法是通过给HTTPSERVER添加CURWERIGHT值,初始值为HTTPSERVERWEIGHT,然后通过命中权重的HTTPSERVER减去总权重,第二次请求将CURWEIGHT加上原始权重,依次执行,直到HTTPSERVERWEIGHT均为
0。
使用HTTP中的HEAD请求方式进行检查,优点仅返回HTTP头,不返回HTTPBODY,避免BODY内容过多,传输量较小。
最终检查效果,当关闭服务器时,标注HTTPSERVERSTATUS为DOWN,启动后标注为UP
普通加权轮询出错降权处理,为HTTPSERVER增加降权权重值FAILWEIGHT,FAILWEIGHT是由当前FAILWEEIGHT =WEIGHT*(1/FailFactor降权因子)得到,然后在获取服务器时真正的权重为WEIGHT-FAILWEIGHT,如果为0则代理此服务器为DOWN,在健康检查HTTPSERVER成功,则FAILWEIGHT直接设置为0
平滑加权轮询FAILOVER与普通轮询加权基本一致,只需在平滑加权方法里面得到真正的权重