转自:https://blog.csdn.net/JMW1407/article/details/107342736
1.作用
应用的接入层通常需要承载大量的网络请求,然后再转发给软件负载均衡进行进一步的分发。 把跟客户端直连的服务器称为接入服务器,一个或多个接入服务器构成的接入层。
以web服务为例,访问域名的过程:DNS解析层(被转发到接入路由IP)、负载均衡层、业务层。
- 使接业务层专注于业务处理,降低业务层设计的复杂度;
- 接入层专注于消息转发,可以有效降低消息的丢失率,从而提高系统的稳定性;
- 接入层以较小的代价大幅提高用户接入体验。
2.技术方案
需要考虑的问题:负载均衡LB和高可用HA。
- 负载均衡:采用一定的分配算法将网络请求分发到后端的多个服务器,从而获得更高的性能。实现负载均衡功能的软/硬件称为 负载均衡器 。本文中的负载均衡特指将客户的http请求分发到后端的web服务器或应用服务器。
- 高可用:为了避免负载调度器的单点故障,部署多个负载调度器节点,通过并行或主从的方式同时工作。
- 会话保持:会话保持是指负载均衡器上的一种机制,通过会话保持,负载均衡器能够识别同一客户端多次请求的关联性,并能够将相关联的请求分配到同一台后端服务器上。
2.1 反向代理高可用方案
keepalived:一款用来检测服务状态存活性的软件,常用来做高可用。(通过ICMP协议实现的)。注意,此时DNS服务器只返回单个的ip
- 1)做两台nginx组成一个集群,分别部署上keepalived,设置成相同的虚IP,保证nginx的高可用;
- 2)当左边的nginx挂了,keepalived能够探测到,并将流量自动迁移到右边的nginx上,整个过程对调用方透明。
缺点:1)资源利用率只有50% 2)nginx仍然是单点介接入。
2.2 水平扩展 Linux Virtual Server
lvs:Linux Virtual Server,Linux虚拟服务器,使用集群技术,实现在linux操作系统层面的一个高性能HP、高可用HA、负载均衡服务器LB。
1)DNS轮询来线性扩展入口lvs层的性能,此时DNS通过轮询返回多个ip;
2)通过keepalived来保证高可用
3)通过lvs来扩展多个nginx
4)通过nginx来做负载均衡,业务七层路由(??什么意思)。
3.总结
https://www.jianshu.com/p/8cd069820f79
反向代理,负载均衡,限流,降级,熔断,防雪崩。
- 负载均衡:轮询,一致性哈希;
- 限流:服务降级的一种。实现计算好服务所能承受的阈值,一旦达到,则延迟处理,拒绝处理,或者部分拒绝处理等等。包括简单计数、滑动窗口、漏桶算法、令牌桶算法。【没仔细看原理】
- 降级:超时降级,失败次数降级,故障降级,限流降级。
- 服务熔断:对于目标服务的请求和调用大量超时或失败,这时应该熔断该服务的所有调用,并且对于后续调用应直接返回,从而快速释放资源,确保在目标服务不可用的这段时间内,所有对它的调用都是立即返回,不会阻塞的。再等到目标服务好转后进行接口恢复。//及时让服务下线,容灾策略。
服务间强依赖会导致雪崩,要做好熔断、隔离、限流,防止雪崩。