现在越来越多的组件都是集群化,任务化。我们接下来谈谈任务化的挑战和解决方案。
分布式任务的挑战
以前的进程都是常驻进程。ip都是固定的,如果想知道运行状态,可以说方案就很多很多。最简单的直接用jconsole去连接,jstat去看看。这个都是可行的方案。对于分布式任务,如何找出运行的ip就成了一个问题。一般的开源程序,都会带着管理界面,就是通过自带的任务界面去查看现在是在哪个机器上运行,然后再当做单独的进程进行管理。这个在给诊断调优上带来了很大麻烦,可能大家感觉这个似乎是没怎么麻烦,不就是多了一个步骤获取ip吗。下面我们开始按照生产的标准来操作一下。
- 客户发现程序运行没有满足条件。找运维开发。
- 运维开发根据客户描述,找到了分布式任务,一看任务分布在3个机器上。
- 然后根据任务的执行情况,运行状态等找出了可能有问题的2个。
- 再去申请机器的登录权限吧,毕竟机器的权限是个重要的点,赶紧申请。
- 申请审批下来,进了机器,发现,咦进程已经被管理程序发现异常,杀掉了,任务转移到其他机器了。
- 又开始第一步。运气好的话,这还是个死循环。
生成系统上的权限控制各位严格,不像自己搭建做demo,可以很快的用root等高级权限去登录机器。这个时间周期会发生很多情况了。我们再看另外一个情况。
- 客户发现程序运行没有满足条件。找运维开发。
- 运维开发一看,这是跑在一个大集群上的分布式任务啊,现在有6000台机器都在运行这个分布式任务。
- 然后一个一个找吧,看看哪个运行很慢,哪个指标不太正常,仔细看看,这个不太正常,但是也不确定是错