talk is cheap,show me your code
程序员是相信代码的,而且,程序员非常相信他写的简单的代码,但这个非常简单的代码没有按照程序员的预期执行,那么他就困惑了。
比如有个功能原来重试5次,现在发现重试5次不行了,时间需要延长(而且一个现实是类生产环境比较挫,需要的时间长,生产环境比较好,需要的时间短,此时不能用等待一个固定的时间方式来搞,而且应该用重试的逻辑来搞,但是这个次数要按最坏的情况预估),这个时候就需要把重试次数调整为20次。
嗯,你知道的问题的所在,你兴高采烈的修改了代码,然后替换了jar包,重启了服务,开始测试——你突然发现,你的修改竟然没有生效,还是老样子!!(黑人问号)
怎么肥事??
事情是这样的:
我们搞了多实例,但是如果多个实例连的同一个数据库,会导致这样一种结果,api部分会根据URL的不同执行不同,然而job一旦提交到数据库,谁先拿到这个job谁就先执行!!如果多个实例的代码不相同,可能会导致不可预期的现象,比如老的代码,比如你修改了一个东西,后来发现它没有生效,或者看到的现象很奇怪,根本的原因就是不同的代码在执行job。
总结: 我们现在还好,顶多有两个实例,然而,在微服务的领域,动不动就几十个实例,甚至几百个实例,它们的升级是怎么做到的呢??
卧槽,突然发现了一个秘密,为什么要有灰度发布,为什么要有蓝绿部署,为什么要有A/B测试!!
但是,假如其中一部分(类似灰度的那一部分),实例仍然很多肿么办??