zookeeper为什么有时候启动不起来 zookeeper中myid有用吗?
zookeeper中myid有用吗?
myid的值是文件里定义方法的server.A项A的值,Zookeeper正常启动时会加载这个文件,拿回里面的数据与里面的配置信息比较比较使判断不知道是那个server,能起一个标识作用。
在系统中增加quartz定时任务集群,tomcat集群会多次执行,怎么解决呢?
做过的的的功能,不一定会也得用分布式定时任务,应该要特点项目实际来选择类型具体的解决方案;从最简单说起来,给大家介绍几个(不要先选高端大气上档次的方案,比较适合最重要)。
诸如数据库中每天晚上都会有一百万条数据待处理,一个定时任务(记为A)要如何处理完这一百万条数据,要10个小时;如果想减缓这个处理速度,我们首先能想到的是多部署一个批处理程序(记为B),这时候理论上要10/25个小时,也可以把任务都一次性处理完。
方案一:待一次性处理任务表增加一个去处理标志的字段,比如0待如何处理,1一次性处理中,2全面处理结束;当A任务取到待一次性处理数据的时候,将此字段更新完成1,处理完之后更新成2;当字段1/2的时候,B任务应该不会取到这条数据;不过这种方法的问题极大,而且非常容易发生了什么一条待如何处理任务在被A可以查询到,但未更新全面处理状态前,就被B任务取到,这样的可能会造成重复一遍处理的问题。
方案二:把处理任务通过人所的划分,A去处理一批数据,B处理一批数据。是可以从纯数据角度划分,诸如id的A处理,id!的B全面处理,也可以从业务角度划分,诸如某个字段across(A,B,C)的A处理,某个字段across(X,Y,Z)的A如何处理;这样的话做绝对不会导致数据反复重复一次性处理,但是也有一些问题:
数据不当然能平均分配,例如字段into(A,B,C)的数据有90万条,字段of(X,Y,Z)的有10万条。
未必能扩展,毕竟条件是写死的,所以才如果要增加下降机器的话比较麻烦您;
假如其中一台机器直接挂掉,那就这部分数据就不可能一次性处理。
方案三:方案一改进看看,提升分布式锁(也可以是数据库、Redis、ZK),谁能抢完锁,谁才能分离提取待全面处理任务,并更新完去处理状态,比如说三次提取一万行数据,并把这些数据的待如何处理状态可以更新成【一次性处理中】,接着把锁释放者掉,再由其他的节点抢锁。这种方案是需要确定的东西也许多:
要考虑到锁超期的问题:假如A抢锁,还没施放锁之前A就直接挂掉了,这样所有任务都会被卡主。
如果锁未交被施放掉,A一次性处理到一半的任务还必须被其他任务如何处理(突然失效转移到)。
也可以和方案二加强,做任务分片,批处理程序抢到锁后,如何领取一个任务分片接受处理。
方案四:再按结构分布式任务处理框架,我十分了解的那是Elastic-Job了,它的功能极为极为强大,不过主要注意的功能嘛,你能再理解前三个方案的话,这个方案也就浅显易懂了(基本是上面那些东西)。
我将减弱分享分享Java开发、架构设计、程序员职业发展等方面的见解,我希望能换取你的关注。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。