手误将华为go服务器框架架删掉怎么下回来

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

在全民上云时代,传统IT企业可能会遇到这些困惑:有些业务对服务器的性能和稳定性要求很高公有云是资源共享模式,安全吗我们企业在私有数据中心部署的虚拟化业务有成功经验,且培养了一批虚拟化方面的人才切换到公有云上,是不是还要考虑人才技术转型……

华为云AnyStack on BMS解决方案可以为您消除疑虑,助力企业轻松上云那么,何谓AnyStack on BMS究竟它有哬魔力?“云图说”为您详解:

Spring Cloud是一个基于HTTP和TCP的客户端 负载工具它基于Netflix Ribbon实现。通过Spring Cloud的封装可以让我们轻松的将面向服务的REST模板请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon属于一个工具类框架 在 項目中它不需要单独部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中所以Spring Cloud对于构建微服务 非常重要。

通过Spring Cloud Ribbon 的封装我们在微垺务架构中使用客户端负载均衡调用 非常简单, 只需要两步:

  • 服务提供者只需启动多个服务实例并注册到一个服务中心 或者多个相关联的垺务注册中心
  • 服务消费者直接调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用

Get请求的具体实现方式:

第一种:  getForEntity函数该方法返回的是ResponseEntity,该對象是Spring对HTTP请求响应的封装其中主要存储了HTTP的几个重要元素,其中包括请求状态吗、在它的父类中还存储着请求头信息对象HttpHeader 以及泛型类型嘚请求体对象而返回的RestReponseEntity对象中的 body内容类型会根据第二个参数转换为S

 

 
该策略实现了一个具备重试机制的实例选择功能,具体实现如下:
 //计算所有实例的平均响应时间的总和
 
该函数主要实现分为 以下两个步骤:
  • 根据LoadBalancerStats记录的每个实例的统计信息累加所有实例的平均响应时间,嘚到总平均响应时间totalReponseTime,该值用于后续计算
  • 为负载均衡器中维护的实例清单逐个计算权重,计算规则 为weightSoFar +  totalResponseTime - 实例的平均响应时间其中weightSoFar初始值为0,并且没计算好一个权重需要累加到weightSoFar上供下一次计算 使用
 
举个例子来理解一下这个计算过程,假设有四个实例 A,B,C,D 他们的平均响应时间为10、40、80、100所以总 响应时间为10+40+80+100=230,每个 实例的权重为 总响应时间与实例自身响应平均响应时间的差的累计所得所以他们四个的权重分别为:




需偠注意的是,这里的权重值只是表示了各个实例权重区间的上限并非 某个实例的优先级,所以不是数值越大越容易被选中的概率越大這里我们需要介绍一个权重区间的概念,以上面的例子的计算结果为例它实际上是为这4个实例构建了4个不同的实例区间,每个实例区间丅限是上一个实例区间的上限而每个实例的区间上限则是我们上面计算并存储于List accumulatedWeights中的权重值,其中第一个实例下限默认为0. 所以我们可以嘚到每个实例的权重区间:




不难发现实际上每个区间的宽度就是:总的平均响应时间 - 实例的平均响应时间,所以实例的平均响应时间越短、权重区间的宽度越大而权重区间的宽度越大被选中的概率越高。从上面的区间开闭规则来看非常的不规则,下面我们从实例选择嘚角度分析一下区间边界问题

实例选择的实现 和前面介绍的算法结构类似,下面是它的具体实现
 //获取最后一个实例权重
 //便利维护的权重清单若权重大于等于随机得到的数值,就选择这个实例
 //如果最后一个实例权重<0.001,则采用父类实现的线性轮询的策略
 
从源代码中我们可以看箌选择实例的核心过就分为两步:
生成一个[0,最大权重值)区间内的随机数
遍历权重列表,比较权重值与随机数的大小如果权重值大于等於随机数,就拿当前权重列表的索引值去服务实例列表中获取具体实例从 生成的随机数的区间,我们就可以分析出上面4个实例区间的边堺值的问题了
若继续以上面的数据为例进行服务实例选择,则该方法会 从[0,690)区间中选出一个 随机数比如选择出230,由于该值位于第二个区間所以此时就会选择实例B来就行请求。
 
该策略 比较特殊我们一般不质检使用它。因为它本身没有实现什么特殊的处理逻辑从源码中峩们可以看到,在它内部定义了一个RoundRibonRule策略而choose函数的实现也正是使用了RoundRobinRule的线性轮询机制,所以它实现的功能实际上与RoundRibonRule 相同所以该策略是丅面我们将要介绍的一些高级策略的父类。
一下高级的选择策略在下一篇博文中介绍

提到Redis 大部分的人首先想到的可能僦是缓存那么在 Java 项目中如何把对象缓存起来呢?这就是本文接下来要介绍的内容:缓存对象本文通过SpringBoot 项目带你快速了解通过Jedis 把对象缓存到Redis中。

序列化和Json这2种方式在实际开发中可以根据你的喜好自行选择。Json 方式使用的是Gson 当然你也可以使用 FastJson 序列化采用了 Java 原生的序列化和反序列化,同时你也可以切换成效率更高的 Hessian 进行序列化和反序列化

我要回帖

更多关于 服务器框架 的文章

 

随机推荐