×

delegated

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

jnlyseo998998 jnlyseo998998 发表于2022-09-19 20:43:10 浏览57 评论0

抢沙发发表评论

本文目录

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为首的反联邦党人和联邦党人吵得不可开交(主要攻击对象就是汉密尔顿(他得到威高望重的华盛顿和来自弗吉尼亚州的麦迪逊的支持),最后在美国宪法第十修正案上取得了妥协。

The powers not delegated to the United States by the Constitution, nor prohibited by it to the States, are reserved to the States respectively, or to the people.

译文:宪法未授予合众国、也未禁止各州行使的权力,由各州各自保留,或由人民保留。从这里开始,确立了联邦立法权和州立法权的界限。当然这种立法思路,受到亚当斯的共和体制论述的影响也是很大的。确立了联邦制,明确提出了新的中央政府即联邦政府与州政府行使权力所遵循的四条基本原则。联邦制的确立,改变了过去邦联时期政治关系无序的状态,使国家权力的运作步入正轨。但是,联邦制不是一成不变的,而是随着社会的发展而变化的。联邦制的演化经历了三个时期:联邦政府与州政府的权力相对平衡时期,即联邦初期,实质上在公共议事上,各州自治程度不亚于邦联时代。。在1798年发生的美国历史上第一次宪法范围内有组织的州权运动,就具有捍卫宪法权利的性质。这一年,联邦党人约翰·亚当斯总统颁布了《归化法)、《客籍法》、《敌对外侨管制法》和《惩治叛乱法》、肯塔基和弗吉尼亚州议会分别作出了激烈反应。由杰斐逊起草的肯塔基决议案(1798 年)和麦迪逊(这时已经脱离联邦党阵营了)起草的弗吉尼亚决议案(1799年),宣布上述四项法令违宪,并且提出州对联邦国会的法令有宣布“无效”权(null and void)。而更激烈的在于,约翰·卡尔霍恩鼓动下宣布州在其辖境内享有国会法令“废止权”(nullification)。但是,在杰斐逊时期,出乎意料地常年运用搁置法案, 不予签署使之无效的总统,并实质上将州权主义者的声称的权力,大部分否定掉。联邦政府权力扩大时期和联邦政府集权化时期:最重要的就是联邦法律的解释权,这也是南北战争法理上最实质性的争夺,而南方各州是使用“分离权”来进行议价。而联邦主义者做出了很多立法措施,比如第十四修正案写了:凡出生或歸化於美國並受其管轄之人,皆為美國及其所居之州之公民。無論何州,不得制定或執行損害美國公民特權或豁免權之法律;亦不得未經正當法律手續使任何人喪失其生命、自由或財產;並不得否定管轄區內任何人法律上平等保護之權利。本质上是要将第十三修正案的适用范围推广:美國境內或屬美國管轄區域之內,不准有奴隸制度或強迫勞役之存在。但因犯罪而被判強迫勞役者,不在此限。故而,此时联邦架构的三权分立体系,开始取代中央-地方的二元议事,但是这是宪法解释权的问题,即使在这个框架下,各州法的民事上的议事优先依然存在。这种向联邦政府倾斜的权力再分配,实质上是中央政府与地方政府政治关系的重新调整,以期利用联邦政府的权力调控州政府力所不能及的社会关系和经济关系,从而保障社会政治的安定和经济的持续发展。尤其是在很多争议性的公共事务中,最高院的判例在普通法体系下,对于州内的事务也会有指导性影响。尤其是南部社会长期存留的传统问题上,现今增补法案和最高院判例起了相当大的作用而事实上各州在初期也先后开始建立州宪法。比如最早的是佛蒙特州,第一部宪法于1777年通过,并且是北美第一部成文宪法,这部宪法一直延用到1791年佛蒙特作为第十四个州加入联邦(这段时间佛蒙特称为“佛蒙特共和国”,Republic of Vermont)。现行的佛蒙特州宪法是1793年通过的,并在其后进行过几次修订,最近一次修订是在1995年。这样由于以上机制的存在,美国州内很多民事立法就是开始很明显的趋于不同。