java架构师之路-如何去实现一个分布式定时任务?
需要一个全局协调器,记master。接下来就是要干活的应用服务器,记sl***e。定时器而且是分布式的,就要求每个服务器在指定时间都执行相同任务,而且实现对任务的管理如暂停,启动,停止等!甚至可以创建指定的定时器。还要保证任务执行的原子性!定时任务由master统一分发给每个sl***e!之后每个sl***e将处理结果返回给master。由master统一保存或是回滚!
实现的技术比较多:支持分布式的如zookeeper,系统信息交互的如netty,支持定时器的如quartz。
需要一个任务分发集群和一个任务执行集群,任务分发集群三台机器即可,任务执行集群依赖你的业务量。任务分发集群执行分发任务,按照一定的策略将任务分发给执行集群各个机器。需要解决任务重复分发问题,以及执行任务的server和分发任务的server挂掉的问题,总之就是两个集群的高可用。
解决重复分发问题,很简单,***用主从模式,这涉及选主操作,分发集群只有一台主server工作,其他server在主server挂掉后选主继续分发,选主使用zk非常方便。
执行集群中server挂掉后,其上任务需要重新分发给其他server,这个问题使用zk也是很方便可以解决
手机打字 细节就不写了
分布式任务本身涉及到分布式构架,基于不同的任务处理量和反应时间可以考虑 hadoop spark flink 等。 定时最好用serverless的scheduler 触发。
为方便大家的理解,先给大家讲一个真实的需求,这是我在第二家公司的一个项目,定时任务每天凌晨执行,需求很简单:把原始的业务数据,加工处理成待发送的短信。
原始数据:姓名-小明,所在地-北京,电话-13800000000,账单最后还款日期-2018年4月30日。
加工后的数据是:亲爱的小明,您的账单最后还款日期为2018年4月30日,请提前缴费。然后把需要把这条短信发送到13800000000这个手机号上。
定时任务框架里面,最有名的就是quartz了,相信大部分Java程序员都用过。
我们项目最开始也用的是quartz,只有一个服务器跑定时任务。但是待处理的数据越来越多,定时服务执行的时间也越来越长,终于有一天,定时任务从晚上跑到了第二天白天也没有跑完,耽误了短信的发送。
有人就有疑问了,能不能直接把定时服务部署多套不就行了。但是部署多套quartz的话,就会出现问题:待处理的任务有可能会被重复执行。
一般j***a程序员如果刚毕业进入公司工作,在公司里面最多会做到什么位置呢?
😂大半夜的悟空还不睡觉,还在加班忙着邀请我。那我也就赶紧从床上爬起来回答,不能辜负悟空的好意吧。
这个问题,每个程序员都会关心。但是,决定你最后能做到哪个位置的不只有公司,更多的因素在于自己。
刚毕业,一个J***a程序员。经验丰富,肯定谈不上。就算丰富,我坚信比例是非常非常低的。换个角度思考,如果刚毕业你经验超群,我想你没毕业前一定是个小人物了,起码在学校有一定知名度。肯定已经有无数大公司大平台抢着要你了。
言归正传,经验不足初入职场肯定是从基层码农做起了。一般项目经理都会安排一个老员工带你,一般都是前一周熟悉项目,遇到什么问题了,随时问带你的同事。他要是解决不了,可以问项目经理,有的项目经理和技术经理是一个职位。不是一个职位的话,那就问技术经理解决。
不过,在遇到问题前,一般建议最好是先自己解决。无论上网搜也好,看书也罢。这会对前期不会的技术大有好处。
如果自己从开始的问同事问百度,到最后的能独立解决问题。那么说明你自身的技术是处于一个快速成长的。当你不断的能自我解决疑难问题的时候,我想你的自信心与此同时会大大增强。有了自信,就有了解决更深更复杂问题的动力和干劲,这是一个良性循环!
当然,学习也分个人。学习能力强,自我驱动意识强的新员工,如果在短时间内能突破自我。这在领导眼里,其实是看得见的。一个得到领导赏识的有能力有潜力的技术人员,领导不可能不器重。也许半年一年内,你可能就会成为小组组长,再过半年你可能就会取代他的位置。慢慢的,随着经验的不断积累,你如果想当一枚架构师那也不是不可能的。或者说,你想转向管理层当部门经理都是可行的。
但是,事实的情况就是,如果你一直在一家公司待着,我恐怕这种飞速越级的概率非常渺小。
我的建议是,刚毕业去公司不要考虑公司太多因素。比如公司很小,公司***待遇不好之类的。你刚毕业,最好最好是从自身出发,关注公司的技术。是不是很全面,是不是很主流,是不是能对以后的职业带来帮助。这应该是你该考虑的。
J***a成长之路是一个漫长的过程,希望一步一个脚印,脚踏实地。不断地持久地学习新技术才能走向迎娶白富美的人生巅峰!
两个衡量标准,一个是自身的技术水平,第二个是公司规模。
如果技术可以,悟性也不错,在一到两个月基本可以胜任工作的前提下,会从带新人开始。带新人做项目,之后带几个人去做项目,这个阶段算是Teamlead,可能最快需要一到两年。再往后,要么做技术架构,要么去做pm,前者可以理解为技术顾问,负责提供技术层面的解决方案以及可行性,后者是项目负责人,直接负责项目的交付。
谢谢邀请。
我猜想你可能是想了解程序员的[_a***_]路线图,好在心里有个谱。
有几类可能性。
--> 1至2年的初级程序员 (打杂 加 小项目练手开始,从边缘业务向中心业务进发)
--> 几年的 中级程序员 (处理中心业务,主力程序员)
--> 几年的 高级程序员 (主力程序员,专攻 疑难杂症,系统框架的构建 与 优化)
--> 技术负责人 (Leader, 主管,经理) (相对独立负责1块或多块的业务,从0开始执行,至设计,至开发,至测试,至上线,至运维,可能都要参与其中)
--> 部门负责人(研发总监) (内联外联,管大的方向,管人,管事,协调***,与老板沟通,与各部门沟通)
--> 如果特别优秀,特别被老板认可,发若干股份给你,成为技术合伙人(CTO)
可能会是曲折前进,若干次转业,再回到程序员岗位
j***a程序员刚毕业进入公司,一般都是慢慢做项目,积累经验,刚毕业的到公司肯定会不适应,在学校学的,应用到实际项目会很吃力!
有些公司会有培训,针对所做的行业,当然了这些学校学不到,每个行业会有去不同,抓好机会!
做好简单项目以后,公司会给你慢慢接触大项目,甚至让你负责整个项目,所以说混到项目经理没问题,最后你也可以自己开公司,自己拉风投…