怎么定义开发环境的服务消费策略
更新:HHH   时间:2023-1-7


这篇文章主要为大家展示了“怎么定义开发环境的服务消费策略”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么定义开发环境的服务消费策略”这篇文章吧。

关于rpc框架,简单介绍下springcloud的 ribbon。

springcloud的注册发现机制,当发现提供者有多个节点,会通过ribbon模块的指定负载策略来选择其中一个节点,这就是负载均衡

ribbon自己默认实现了很多种负载策略,前面先简单说下这些存在的常用的策略,最后重点说如何定义一个高效的dev环境负载策略。

ribbon代码jar包:

关于负载均衡算法的代码在

<dependency>
    <groupId>com.netflix.ribbon</groupId>
    <artifactId>ribbon-loadbalancer</artifactId>
    <version>2.2.5</version>
</dependency>

ribbon默认实现的负载均衡策略有:

    RoundRobinRule(轮训策略):当可用服务有 node1,node2,node3时候,ribbon会在缓存里面存在这三个节点信息,然后再消费时候按照顺序依次消费这个三个节点。这个策略也是ribbon默认的策略。

    BestAvailableRule(最佳可用策略):当可用服务有 node1,node2,node3时候,ribbon会在缓存里面存在这三个节点信息,然后依次调用三个节点,如果节点被忽略跳过,没有被忽略再去尝试请求节点,如果该节点的瞬间并发最小,则会使用该节点的服务。

        RandomRule(随机策略):当可用服务有 node1,node2,node3时候,ribbon会在缓存里面存在这三个节点信息,然后随机取出一个节点提供调用。随机算法也很简单,取可用节点的总数量值,然后用rand.next(可用节点总数量值)来获取一个小于总数量的整数值,然后从可用节点list内取出一个服务来调用。

       ZoneAvoidanceRule(百度翻译:区域回避策略):在可用节点集群的上层,如果存在一个机房集群,比如程序在阿里云的华东节点,北京节点均有部署,则可以使用这个策略,他会优先帮你筛选出一个可用的zone,然后再去选择一个可用的节点(这个策略应该很少用到吧,如果用到的话,应该运维会去做这个事情,我们的程序目前还只是在阿里云的华东2地区)。

    还有好多种策略,大家可以自行选择使用。

    重点来了

     对于开发人员有没有感觉开发微服务程序时候,效率变得很低。程序启动起来要花费十分钟左右,一不小心就会出现临时改端口,系统内存不足的情况。这其实对程序员是很痛苦的。

    我先说一下我们之前遇到的问题: 

  1. 开发需要把所有后端启动起来,一个注册中心,五个后端微服务,两个前端(如果开发一个,就启动一个)。这样本地开发机器需要启动最少七个程序(每个开发程序员拥有了服务端全代码的git权限)。

  2. 领导对每个程序员拥有全代码的权限有点敏感。

  3. 开发人员diss我,,程序吃内存导致电脑卡顿。

  4. 本地开发机器的服务不小心注册到公共开发环境,但是本地代码会有个别bug,开发环境的服务就会变得很诡异,一会好一会不好,使得产品经理总以产品不稳定理由来diss整个开发团队,搞得火很大。

这个问题其实已经验证影响开发人员的效率了,并且都在做一些无用功。所以就在想如果解决这个问题。

第一种:写一个启动脚本文件。一键启动所有的程序,时间降低到了三分钟,虽然时间减少了,但是对于开发人员的电脑卡顿,领导的敏感问题还是没有解决。

第二种:开发环境部署一套完整的服务,程序员各自开发自己的程序。所有本地开发机器的服务都注册到公共开发环境内。这时候,开发环境就是一个集群环境了。但是本地代码都是不稳定的,如果其他同事调用了你的服务,那很容易就影响了其他同事的进度了。这时候的消费者归纳为两种:开发环境,开发人员。提供者有三种:开发环境,当前开发人员,其他开发人员。所以对于开发环境他的消费优先级是开发环境》开发人员。对于开发人员他的消费优先级是当前开发人员提供的服务》开发环境提供的服务》其他开发人员提供的服务。这样就可以达到一种效果,当你使用测试环境的app,web系统,他始终消费的是开发环境的服务。相对很稳定,对于开发人员想要调试自己写的一个服务,只需要把对应点服务启动起来,本地调用服务的时候,发现注册中心只有开发环境的服务时候,直接消费。如果注册中心多个服务节点的话,优先去本地开发环境ip的服务,如果没有改服务,说明该服务其他同事本地也注册进去了,但是相对来说消费开发环境的服务会更靠谱一些,所以取开发环境服务。

这样就降低了启动时间,减少了因为程序多耗内存,领导敏感的事情了。

具体的代码实现:

声明一个policy

   实现该规则类,主要就是继承 AbstractLoadBalancerRule 类

以上是“怎么定义开发环境的服务消费策略”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注天达云行业资讯频道!

返回大数据教程...