当前位置: 首页 > news >正文

网站建设预计费用wordpress建站和使用

网站建设预计费用,wordpress建站和使用,杭州建设招聘信息网站,我有域名和服务器找人建设网站前言 本文为SpringCloud的学习笔记#xff0c;如有错误#xff0c;希望各位高手能指出#xff0c;主要介绍SpringCloudLoadBalancer的基本概念和实战 文章目录 前言什么是LoadBalancer负载均衡分类服务端负载均衡客户端负载均衡服务端负载均衡和客户端负载均衡的优缺点 常见…前言 本文为SpringCloud的学习笔记如有错误希望各位高手能指出主要介绍SpringCloudLoadBalancer的基本概念和实战 文章目录 前言什么是LoadBalancer负载均衡分类服务端负载均衡客户端负载均衡服务端负载均衡和客户端负载均衡的优缺点 常见负载均衡策略为什么要学习Spring Cloud LoadBalancer如何使用项目搭建使用随机策略使用Nacos的负载均衡策略策略自定义策略IP Hash为例编写自定义策略类封装自定义负载均衡全局配置自定义负载均衡配置类 缓存 什么是LoadBalancer ❀ LoadBalancer是一种流量分发机制专业中文叫法“负载均衡”这种流量分发可以通过软件或者硬件来实现服务端系统资源的均衡利用提高整体系统的高可用和性能。 负载均衡分类 ※ 负载均衡可以分为服务端负载均衡和客户端负载均衡 对于服务器端负载均衡被称为反向代理 对于客户端负载均衡则称为正向代理 服务端负载均衡 顾名思义服务端负载均衡就是在服务器层面实现流量分发如下图所示 实现服务器端负载均衡的均衡器有Nginx、HAProxy、F5等 客户端负载均衡 在知道服务器负载均衡后客户端负载均衡也容易理解这是在客户端就直接实现流量分发也就是说在客户端就知道请求去往何处如下图所示 客户端负载均衡有Ribbon、SpringCloudLoadBalancer 服务端负载均衡和客户端负载均衡的优缺点 服务端负载均衡 优点 简化客户端逻辑客户端无需了解服务实例的具体细节只需要请求负载均衡器即可。可动态调整负载均衡策略通过配置负载均衡器能够根据实际情况动态调整请求的分发规则。提供更好的可扩展性负载均衡器可与其他服务治理组件整合如服务注册中心、服务发现等。减轻客户端压力负载均衡器可以在后端服务器之间平均分发请求降低单个服务器压力。 缺点 单点故障负载均衡器本身可能成为系统的单点故障当负载均衡器出现问题时会导致整个系统不可用。 需要独立的负载均衡器搭建和管理一个独立的负载均衡器需要额外的成本和维护工作。 中心化决策负载均衡的决策是集中在负载均衡器无法根据客户端的具体状态和需求做出决策。 客户端负载均衡 优点 根据状态选择 可以根据客户端的状态和需求进行负载均衡策略选择。 分散决策分散了负载均衡的决策可以更加灵活地适应不同的场景需求。 提供更好的容错能力当某个服务实例故障时客户端可以自动切换到其他可用实例。 缺点 客户端复杂性增加客户端需要实现负载均衡算法和服务发现逻辑增加了客户端的复杂性。 全局视图的欠缺没有全局视图可能导致不同客户端之间的实例选择不一致进而影响系统整体性能和一致性。 客户端资源消耗每个客户端需要额外的资源来处理负载均衡逻辑可能导致资源浪费。 综合来看服务端负载均衡更适用于大型系统和复杂架构可以提供统一的处理策略和更好的可扩展性。而客户端负载均衡则更适用于轻量级系统和简单架构可以提供更灵活和定制化的负载均衡策略。 常见负载均衡策略 轮询Round Robin轮询策略就是按照顺序把每个请求分发给服务端依次循环。适用于后端服务器性能相近且每个服务器处理时间相近的情况随机选择Random把请求随机发给后端服务器适用于后端服务器性能相近且每个服务器处理时间相近的情况但无法保证请求均与分发最少链接Least Connections最少连接策略将请求分发给当前连接数最少的后端服务器可以确保后端服务器连接均衡需要维护连接计数器。需要注意的是“最少连接数”只是一个估计值在千变万化的网络环境下连接数也在变化。IP 哈希IP Hash根据客户端IP地址进行哈希计算根据哈希值将请求发送到对应服务器上。这种策略可以用于确保来自同一客户端的请求都会被发送到后端服务器适用于会话保持的情况。加权轮询Weight Round Robin给每个后端服务器分配一个权重值然后按照权值比例来分发请求这种策略可以用来处理服务器性能不均衡的情况。加权随机Weigh Random与加权轮询类似但是按照权重值来随机选择后端服务器。这也可以用来处理后端服务器性能不均衡的情况但是分发更随机。最短响应时间Least Response Time根据后端服务器的响应时间情况分发请求到响应时间最短的服务器。这样可以确保客户端或者最快的响应适用于低延迟的应用。 为什么要学习Spring Cloud LoadBalancer 作为早期版本中SpringCloud内置的负载均衡器Ribbon在SpringCloud 2020.0.0中已经被移除可以在 https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2020.0-Release-Notes中进行查看更新日志。 取而代之的是SpringCloud官方提供的Spring-Cloud-LoadBalancer负载均衡 但Spring Cloud LoadBalancer中仅提供了三种负载均衡策略轮询、加权、自定义Nacos的负载均衡算alibaba自定义 可以通过Spring Cloud LoadBalancer的配置类LoadBalancerClientConfiguration查看底层配置 Configuration(proxyBeanMethods false ) ConditionalOnDiscoveryEnabled public class LoadBalancerClientConfiguration {private static final int REACTIVE_SERVICE_INSTANCE_SUPPLIER_ORDER 193827465;public LoadBalancerClientConfiguration() {}BeanConditionalOnMissingBeanpublic ReactorLoadBalancerServiceInstance reactorServiceInstanceLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {String name environment.getProperty(loadbalancer.client.name);return new RoundRobinLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);} // 以下忽略...... }这段代码中reactorServiceInstanceLoadBalancer()方法的返回类型ReactorLoadBalancer T 就是策略的实现接口具体实现类如下图所示 值得我们注意的是在这个方法中默认返回了RoundRobinLoadBalancer这个类也就说SpringCloudLoadBalancer默认使用轮询策略。 如何使用 在项目中添加Spring Cloud OpenFeign、注册中心Nacos、在添加Spring Cloud LoadBalancer则会在接口调用时直接使用SpringCloudLoadBalance。 项目搭建 我们先构建一个多模块项目SpringCloud-LoadBalancer-demo具体过程省略详情可以到这篇文章下查看《Nacos 注册中心介绍与实操》 在Provider子模块中我们创建一个简单controller类 RestController RequestMapping(/user) public class UserController {Autowiredprivate ServletWebServerApplicationContext servletWebServerApplicationContext;RequestMapping(/getid)public String getId(RequestParam Integer id){return servletWebServerApplicationContext.getWebServer().getPort()-provider-id;} }随后我们启动两个相同的Provider服务并注册到Nacos中 对于Consumer我们需要建立sevice接口和controller类controller类调用service接口的方法该方法会在注册中心中通过负载均衡默认轮询获取服务端信息然后将请求发送到指定服务端请求数据。 Sevice代码 Service FeignClient(nacos-provider) public interface UserService {RequestMapping(/user/getid)String getId(RequestParam(id) Integer id); //RequestParam(id) 不能省略必须全部带上 }RestController RequestMapping(/user) public class UserController {Autowiredprivate UserService userService;RequestMapping(/getid)public String getId(RequestParam(id) Integer id){return userService.getId(id);} }启动类添加注解EnableFeignClients SpringBootApplication EnableFeignClients // 开启OpenFeign public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}}那么接下来启动Consumer验证底层默认策略是否为轮询 会发现在我们没有配置负载均衡策略的时候每次访问都是两个服务端轮流使用 第一次访问 第二次访问: 使用随机策略 创建随机策略配置类不需要configuration注解 public class RandomLoadBalancerConfig {Beanpublic ReactorLoadBalancerServiceInstance reactorServiceInstanceLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {String name environment.getProperty(loadbalancer.client.name);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);} }细心的同学就已经发现了这个方法跟上面提到的LoadBalancerClientConfiguration .reactorServiceInstanceLoadBalancer()方法实现很像。这是因为官方文档中就是这么告诉我们如果要使用其他策略就需要这样做复制一下方法体修改返回的策略对象。 官方文档链接https://docs.spring.io/spring-cloud-commons/docs/current/reference/html/#spring-cloud-loadbalancer 当然如果只是写一个配置类还不够我们还需要到启动类全局配置或者服务类局部配置中去启用它 全局配置: SpringBootApplication EnableFeignClients // 开启OpenFeign LoadBalancerClients(defaultConfiguration RandomLoadBalancerConfig.class) public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}}这时再去访问http://localhost:8080/user/getid?id1时就会发现我们不断刷新它访问的值就完全随机了。不知道怎么做动态图不方便演示T_T 局部配置 Service FeignClient(nacos-provider) LoadBalancerClient(value nacos-provider, configuration RandomLoadBalancerConfig.class) public interface UserService {RequestMapping(/user/getid)String getId(RequestParam(id) Integer id); //RequestParam(id) 不能省略必须全部带上 }可能是SpringCloud版本问题局部配置不生效使用的任然是轮询策略做了解即可 使用Nacos的负载均衡策略策略 LoadBalancerClients(defaultConfiguration NacosLoadBalancerConfig.class) public class NacosLoadBalancerConfig {Resourceprivate NacosDiscoveryProperties nacosDiscoveryProperties;Beanpublic ReactorLoadBalancerServiceInstance reactorServiceInstanceLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {String name environment.getProperty(loadbalancer.client.name);return new NacosLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),name, nacosDiscoveryProperties);} }与其他两个官方儿子不一样Nacos的负载均衡器还需要额外数据信息 启动类添加注解 SpringBootApplication EnableFeignClients // 开启OpenFeign //LoadBalancerClients(defaultConfiguration RandomLoadBalancerConfig.class) LoadBalancerClients(defaultConfiguration NacosLoadBalancerConfig.class) public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);} }我们会发现Nacos中使用的不是轮询翻阅底层实现会发现他是权重策略所以为了验证这个我们到Nacos注册中心中去修改一下服务端权重 这个时候我们再去访问就可以发现它会大部分请求都使用53922这个端口的服务无动图不方便演示读者可以自己实操体验一下 局部配置NacosNacos策略是生效的可以自行测试 自定义策略IP Hash为例 要实现自定义策略需要三个步骤 编写自定义策略类封装自定义策略类全局或者局部使用自定义配置类 编写自定义策略类 回到我们下面这张图 不难发现ReactorLoadBalancer T 是我们负载均衡器的实现上层骨架这个就是设计模式中的“模板方法模式”所有人都必须按照骨架进行开发那么我们自定义策略类也需要如此但我们去实现的接口是他的子接口ReactorServiceInstanceLoadBalancer重写它的两个choose方法。 MyLoadBalancer实现 public class MyLoadBalancer implements ReactorServiceInstanceLoadBalancer {private static final Log log LogFactory.getLog(MyLoadBalancer.class);private final String serviceId;private ObjectProviderServiceInstanceListSupplier serviceInstanceListSupplierProvider;public MyLoadBalancer(ObjectProviderServiceInstanceListSupplier serviceInstanceListSupplierProvider, String serviceId) {this.serviceId serviceId;this.serviceInstanceListSupplierProvider serviceInstanceListSupplierProvider;}public MonoResponseServiceInstance choose(Request request) {// 提供备选服务列表ServiceInstanceListSupplier supplier (ServiceInstanceListSupplier)this.serviceInstanceListSupplierProvider.getIfAvailable(NoopServiceInstanceListSupplier::new);// 选择服务实例return supplier.get(request).next().map((serviceInstances) - {return this.processInstanceResponse(supplier, serviceInstances);});}private ResponseServiceInstance processInstanceResponse(ServiceInstanceListSupplier supplier, ListServiceInstance serviceInstances) {// 从备选列表中选择一个具体的服务实例ResponseServiceInstance serviceInstanceResponse this.getInstanceResponse(serviceInstances);if (supplier instanceof SelectedInstanceCallback serviceInstanceResponse.hasServer()) {((SelectedInstanceCallback)supplier).selectedServiceInstance((ServiceInstance)serviceInstanceResponse.getServer());}return serviceInstanceResponse;}private ResponseServiceInstance getInstanceResponse(ListServiceInstance instances) {// 实例为空if (instances.isEmpty()) {if (log.isWarnEnabled()) {log.warn(No servers available for service: this.serviceId);}return new EmptyResponse();} else { // 服务不为空// 获取Request对象ServletRequestAttributes attributes (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request attributes.getRequest();String ipAddress request.getRemoteAddr();System.out.println(用户IPipAddress);int hash ipAddress.hashCode();int index hash%instances.size();ServiceInstance instance (ServiceInstance)instances.get(index);return new DefaultResponse(instance);}} }代码看起来多但是你如果看一下官方两个亲儿子的源码就会发现其实只需要复制一下修改getInstance这段核心代码就可以了 封装自定义负载均衡 构建Config类使用同样配方进行封装 public class MyLoadBalancerConfig {Beanpublic ReactorLoadBalancerServiceInstance reactorServiceInstanceLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {String name environment.getProperty(loadbalancer.client.name);return new MyLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);} }全局配置自定义负载均衡配置类 启动类 SpringBootApplication EnableFeignClients // 开启OpenFeign //LoadBalancerClients(defaultConfiguration RandomLoadBalancerConfig.class) //LoadBalancerClients(defaultConfiguration NacosLoadBalancerConfig.class) LoadBalancerClients(defaultConfiguration MyLoadBalancerConfig.class) public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}}实际结果只会访问固定一个端口 缓存 Spring Cloud LoadBalancer在获取实例时有两种选择 1.即使获取每次从注册中心得到最新健康的实例效果好但是得一直询问系统开销比较大 2.缓存服务列表每次得到服务列表之后缓存一段时间这样能保证性能同时也能兼容一定的及时性 Spring Cloud LoadBalancer中默认开始缓存服务列表 Spring Cloud LoadBalancer默认缓存重要特性有两项 缓存的过期时间为35S缓存保存个数为256个 我们可以通过以下配置改变这些配置 Spring:cloud:loadbalancer:cache:ttl:35scapacity: 1024# enable: false # 开启缓存END 希望对你有帮助
http://www.hyszgw.com/news/81509.html

相关文章:

  • 网站开发平台的定义优化大师的优化项目有哪7个
  • 宣城市建设监督管理局网站下载品牌电商网站
  • 做网站老板不发工资我拿尾款市场营销目标怎么写
  • 如何自建网站沈阳企业网站排名优化
  • qq空间域名抢注网站php网站后台制作
  • 武进网站制作公司网页设计有什么用
  • 网站开发代淘宝店铺装修网站商务通登陆不上
  • 专业网站制作公司地址h5商城网站模板下载
  • 企业为什么要网站建设360收录批量查询
  • 聊城网站那家做的好常熟seo关键词优化公司
  • 印度网站后缀crm平台系统
  • 响应式网站技术怎么创建个人微信公众号
  • 网站图片模板嘉禾手机网站建设
  • photoshop网站设计做seo需要会网站开发吗
  • 室内设计网站有哪些知乎网站 营销
  • 如何做网站seo优化长春做网站的公司有哪些
  • 电子商务的网站建设要求步骤中铁建设集团有限公司怎么样
  • 网站建设推广方案模版网站定制解决方案
  • 做一的同志小说网站如何在亚马逊开店流程及费用
  • 公司怎么做网站鞍山网站设计制作网站
  • 企业的网站设计漳州电脑网站建设
  • 网站的域名空间营销型企业网站有哪些类型
  • 龙江手机网站建设百度高级搜索首页
  • 重庆玖玺国际做网站网站收录查询爱站
  • 廉江网站建设wordpress上传到又拍云
  • 嘉兴百度seo搜索引擎优化培训免费咨询
  • 公司网站建设前期情况说明aws wordpress区别
  • 网站开发技术有包括重新做系统后怎么没有wordpress
  • 河北大良网站建设电子商务视觉设计
  • 苏州网站制作专业襄阳做网站找哪家公司