delegated(Java架构师之路-如何去实现一个分布式定时任务
发布时间: 2023-07-18

本文目录

Java架构师之路-如何去实现一个分布式定时任务

虽说有现成的框架可以实现,不过还是一步一步地说一下思路。

需求

为方便大家的理解,先给大家讲一个真实的需求,这是我在第二家公司的一个项目,定时任务每天凌晨执行,需求很简单:把原始的业务数据,加工处理成待发送的短信。

原始数据:姓名-小明,所在地-北京,电话-13800000000,账单最后还款日期-2018年4月30日。

加工后的数据是:亲爱的小明,您的账单最后还款日期为2018年4月30日,请提前缴费。然后把需要把这条短信发送到13800000000这个手机号上。

定时任务

定时任务框架里面,最有名的就是quartz了,相信大部分Java程序员都用过。

我们项目最开始也用的是quartz,只有一个服务器跑定时任务。但是待处理的数据越来越多,定时服务执行的时间也越来越长,终于有一天,定时任务从晚上跑到了第二天白天也没有跑完,耽误了短信的发送。

改造后的定时任务

有人就有疑问了,能不能直接把定时服务部署多套不就行了。但是部署多套quartz的话,就会出现问题:待处理的任务有可能会被重复执行。

应对这种问题,我们当时有两种处理方案:

方案一:定时服务只部署一套,但是定时任务的工作只是提取待处理的任务。

实际的业务处理服务集群化部署,然后由定式服务提取数据后,发送给业务处理服务器进行实际的处理。

方案二:这个是我当时自己想出的一个奇葩的方法,不过这个方案想明白了,对分布式定式服务的理解很有帮助!

  • 定时任务程序部署多套,并且多套环境都是独立的IP。每套程序定时将IP写入到数据中(一分钟对表update一次,并更新时间戳)。
  • 多套服务选举出一台主服务器。
  • 主服务器把所有的待处理任务,尽可能平均分配给每一台服务器。(IP和待处理任务对应上,也就是每一条待处理任务只能让分配的IP处理)
  • 处理任务的时候,只处理自己IP对应的任务。
  • 一台服务器挂了,主服务器负责把它的IP从数据库中抹掉(三分钟没有对表进行更新的IP,删除掉),并重新分配这个IP对应的待处理任务。
  • 主服务器挂了,重新选举出主服务器。

分布式定时任务框架

我只用过Elastic-job,所以只给大家介绍一下这个框架。

任务分片:把一个任务拆分成几个独立的任务,然后由分布式服务器分别执行一个或者多个子任务。比如还是上面那个需求,那么可以按照【所在地】拆分任务,北京的待处理数据是一个子任务,天津的待处理数据是第二个子任务。

Elastic-Job并不直接提供数据处理的功能,实际的数据处理还是需要自己写,Elastic-Job会将分片任务分配到各个运行中的作业服务器。

其实发现了没有,Elastic-Job做的工作,就是我那个主服务器做的任务分配的工作,把所在地=北京的,分配给服务器1处理,把所在地=天津的,分配给服务器2处理;甚至包括监控每台作业服务器是否存活,挂掉一台重新分配待处理任务,也都是Elastic-Job来做的。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。

区块链的共识机制是什么有哪些优缺点

共识机制用通俗的话讲就是制度,在中心化的世界里,不存在制度这一说。因为一家之言可以决定走势。

例如,你用支付宝时候你一定不会怀疑谁在记录每一笔交易。

支付宝就是中心,支付宝负责记账。

可是在去中心的世界里面,怎么用一套制度来管理这些离散的节点呢?

这种管理方式就称之为“共识机制”。

因此就有模仿我们人类社会的管理方式的共识机制。

第一种“按劳分配”就是我们说的POW模式。POW:全称Proof of Work,工作量证明。简单的说就是干的多,拿得多。我们现在挖矿的例如BTC,莱特等都是POW模式的币。算力越高、挖矿时间越长,你获得的货币就越多。优点比较公平,比较去中心化,缺点,所有节点都在工作计算一些没有实际意义的“数学题”,造成资源的浪费。

第二种“股权分配”就是我们说的POS模式。POS全称Proof of Stake,股权证明。简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度。可以简单理解成你把币放银行,一年给你利息,这个利息不是钱,是币。这种优点是减少资源浪费,看似比较公平,谁拥有的多存的时间长利息就多。很少有人质疑银行的分配制度。但是缺点在于,对于区块链,增大后入节点的难度,造成贫富分化“有钱的越来越有钱。”

国内一款山寨币量子币就是pos模式,未来eth也会走向pos。

第三种“人民代表大会制度”并不是每个人直接参与政务管理的竞争,每个人选出自己的代表让代表去管理。这种模式叫DPOS模式。DPOS:Delegated Proof of Stake,委任权益证明。中文名叫做股份授权证明机制(又称受托人机制),它的原理是让每一个持有DPOS币的人进行投票,由此产生N位代表 , 我们可以将其理解为N个超级节点或者矿池,而这N个超级节点彼此的权利是完全相等的。代表就是EOS和波场。优点是节约资源,缺点是不够去中心化,节点太多就是代表太多办事效率就低,节点少,容易作弊控制。失去去中心的优势。

在区块链中,工作量证明机制是必不可少的吗对此你怎么看

工作量证明意味着竞争

其他证明方式意味着其他形式的经济模式

例如股权证明意味着垄断

越复杂的证明方式看似解决问题很厉害,实际上或多或少执行存在经济上的难点

目前看工作量证明是简单普遍接受度高,符合竞争激励的经济模式

像美国这样的资本主义国家,每一届的总统执政方阵、政策都不一样,是如何保持稳定的

美国政府和国民的稳定靠的就是成熟的法律、三权鼎立的相互制衡制度,强大的军事力量以及丰厚的国民福利。

为什么美国各个州的法律不统一

谢邀。我简要说一下,有时间再更新。从建国史上来说,北美主权所有是根据当时欧洲各国奉行的神学契约原则所获得的,即任何基督教王室,只要发现了为所谓异教徒和野蛮人占领的土地,即有权宣布对其拥有主权。建国前,除了少数地盘是由英国动用国家力量争夺过来(比如争夺新阿姆斯特丹,也就是纽约),其余的本来就是私人财团经营殖民地,比如弗吉尼亚州就是弗吉尼亚公司经营。而州以下的社会基础结构,更是由移民前来,进行自组织,通过公共议事原则,根据本地地理条件,搞定定居点的建设,权力分配,公共事务决策,以及产业集合等等事务。用埃德蒙伯克的定义,美国的社会基本结构就是“自组织体”,独立战争更是被这位保守主义者定义成了维护自组织体的战争,以反抗宗主国税法和驻军。而独立战争的决策机构---大陆会议,从历史唯物论来说,本质上是自组织体代表--业主(Proprietary)阶级代表组成的决策机构,号召各自组织体联合起来,面对共同的敌人,由于同文同种和地理相近,开始形成一个短暂的共同体。而独立战争后,联邦初期,建立而来更多是作为一个代表机构来处理一些公共事务,此时更多还是邦联的状态。而在美国宪法之前的费城会议上,Patrick Henry为首的反联邦党人和联邦党人吵得不可开交(主要攻击对象就是汉密尔顿(他得到威高望重的华盛顿和来自弗吉尼亚州的

微信