外贸平台自建站,上海个人建站,谷歌seo推广,网站一般采用的设计方案一、前置知识
1.1 负载均衡定义
负载均衡指的是将网络请求通过不同的算法分配到不同的服务器上的技术#xff0c;从而提升系统的性能。
1.2 负载均衡工具
负载均衡工具可以分分为客户端负载均衡工具和服务端负载均衡工具#xff0c;它们的区别如下。
表1-1 负载均衡工具…一、前置知识
1.1 负载均衡定义
负载均衡指的是将网络请求通过不同的算法分配到不同的服务器上的技术从而提升系统的性能。
1.2 负载均衡工具
负载均衡工具可以分分为客户端负载均衡工具和服务端负载均衡工具它们的区别如下。
表1-1 负载均衡工具分类[1]
维度客户端负载均衡工具服务端负载均衡工具决策位置客户端代码中实现中间层如Nginx、负载均衡器灵活性高支持自定义算法如业务哈希较低依赖中间层配置性能开销客户端需计算实例选择可能增加延迟额外网络跳转可能成为瓶颈容错性客户端需处理重试/降级中间层自动剔除故障节点服务发现强依赖注册中心如Eureka可静态配置或动态集成适用协议HTTP、gRPC、RPCHTTP、TCP、UDP
1.3 负载均衡算法
表1-2 负载均衡算法[2]
算法工作原理适用场景优点缺点轮询Round Robin按顺序依次分配请求如A-B-C-A-B服务器性能相近、无状态服务如静态资源简单公平易于实现忽略服务器负载差异性能不均时效率低加权轮询Weighted RR根据服务器性能分配权重如5:3:2高权重服务器获得更多请求服务器性能差异明显如新旧硬件混合按能力分配资源优化利用率需手动配置权重无法动态响应负载变化最少连接Least Connections优先选择当前连接数最少的服务器长连接服务数据库、视频流动态适应负载避免服务器过载忽略服务器处理能力差异加权最少连接Weighted LC结合服务器权重和当前连接数选择连接数/权重最小的服务器高性能异构集群如混合云环境兼顾性能与实时负载资源利用率高算法复杂需实时监控服务器状态源IP哈希IP Hash根据客户端IP计算哈希值固定分配到同一服务器需会话保持的应用如购物车、登录状态保证会话一致性服务器故障时关联用户受影响随机Random完全随机分配请求测试环境或简单负载场景实现简单无状态依赖分配不可控可能造成负载不均最快响应时间Fastest Response选择响应时间最短的服务器对延迟敏感的应用如金融交易提升用户体验需持续监控服务器响应时间一致性哈希Consistent Hashing哈希环映射请求服务器扩容/缩容时仅影响少量请求分布式缓存Redis集群减少节点变动的影响实现复杂度较高动态性能分配Dynamic Ratio根据CPU、内存等实时指标动态调整流量分配服务器性能波动大的场景精准匹配当前负载需高性能监控系统支持
二、Ribbon实战
2.1 项目结构
本项目使用Eureka作为注册中心使用方法参见Ereka实战。 图2-1 项目结构
服务列表如下。其中SpringCloudEurekaProductApplication02和SpringCloudEurekaProductApplication为product服务的实例创建步骤见IDEA中一个服务创建多个实例。 图2-2 服务实例
2.2 order模块新建以下代码
创建RestTemplate对象并添加LoadBalanced注解开启负载均衡。
Configuration
public class LoadBalanceConfig {BeanLoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}
创建控制器访问product服务。
RestController
RequestMapping(/loadBalance)
public class LoadBalanceController {Autowiredprivate RestTemplate restTemplate;RequestMapping(/test)public String test(){String url String.format(http://%s/loadTest, spring-cloud-eureka-product);ResponseEntityString forEntity restTemplate.getForEntity(url, String.class);return forEntity.getBody();}
}
2.2 product模块新建代码
RequestMapping
RestController
public class LoadBalanceController {// order在配置文件中设置Value(${order})private Integer order;RequestMapping(/loadTest)public String loadTest(){return 服务器 order;}
}2.3 运行
分别启动server、product、product02、order服务启动成功后访问注册中http://localhost:8080/结果如下图所示。 图2-3 注册中心
访问两次http://localhost:9003/loadTest分别得到以下结果。后面的数字是两个product服务激活的配置文件中配置的order的值分别为1和2。 图2-4 访问结果
三、总结
核心点就是创建RestTemplate然后添加LoadBalance注解使用RestTemplate对象方法时自动实现负载均衡。
参考
[1][2] 腾讯元宝