后台计划任务设计思路:

  1. 日志埋点处理,便于prd排查问题
  2. 2种主动job搭配规范(正向job、反查job)
  3. 1种消息接收的处理规范,重试机制,返回状态
  4. job开关维度
  5. 数据流图
  6. 线上暗job-便捷性-工具job
  7. 处理流水表的设计
  8. 分布式多副本考虑

一一说来

日志埋点处理,便于prd排查问题

prd环境由于会受到严格管控,因此不可能让你idea直接连接jvm instance调试,一般来说,都是需要通过查数据或者查日志来看有没有执行,执行有没有报错,怎样的报错

也就是说此时的日志信息越完善越好,并且人类看了需要显而易懂,不需要倒腾来倒腾去,这样的日志信息给到的话,对开发人员来说是最友好的

因此埋点很重要,日志信息要详尽,越详尽越好,比如搜索出来的List size这些信息都要有,而不光是错误日志,记住越详尽越好,每个if/else节点的记录都要有

上面是记录,也就是日志埋点要想尽,但是人类需要interface才能查看到这些日志信息,因此日志的搜索也很重要,如:kibana等,因此针对kibana设计日志格式也很重要,日志记录时就要考虑到查看的友好性,不要日志记了,就是不好查。。。就麻烦了

也可以是日志记录归记录,中间加个处理切分丰富日志的表示环节也可以,到查看端能更易且更丰富的表现形式。

避免由于日志不详尽导致需要重新发布程序才能细化查问题现象出现。

2种主动job搭配规范(正向job、反查job)

当需要和三方系统做对接时,一般是我方get/post请求到对方系统,这个调用方式我称为正向调用

如果出现网络不通、或者对方系统正在发布而500报错了怎么办?

如果调用结果返回的是部分完成状态怎么办?比如我方系统把订单post到三方做业务,对方系统可能做了半同步半异步拆分,导致返回的业务状态为:部分完成。

而我们的系统依赖于这个业务返回完整完成状态后才能进行后续操作,同时我们也不想重复post订单到对方系统时,怎么办?

这时引入反查job,专门用来定时到对方系统查询业务最新状态(此时依赖对方系统有这种业务查询api供我方调用)

也就是写2个job,管你是否存在网络问题啥的,统统能考虑的到(对方系统api需要提供+自身状态机的流转(如网络不通时就不应该让反查job查了,因为根本还没有post订单过去))

1种消息接收的处理规范,重试机制,返回状态

有时,对方系统会主动通知业务的状况,可能是一次性的也可能是对方系统用了定时器定期推送的

此时,就需要和对方对应好是怎样的通知机制了,多次通知,可能需要做幂等

也可能约定好我方系统返回怎样的json内容,对方将终止推送等等

此时幂等必须要做了,因为从设计角度讲,总是需要将外部系统设定为不可靠系统对待。

job开关维度

大点的系统,job肯定是很多的,不同模块都好多job,有的会考虑把所有相关的job都合并起来处理

我说的合并是指1个job里,捞出一个大的List集合,然后分别foreach item,再循环内部判断这个item需要执行怎样的子job

当然上述是1个维度

还有个维度,就是尽量拆分子job到独立job里,单独变化,单独执行,要开要关都独立进行,没有job层面的依赖性(当然,数据层面必须会存在依赖先后顺序)

这个时候一般来说会拆分job,这样上了prd,会很方便的stop、start、临时execute某个具体job,不会说由于突发业务,或者突发异常,导致执行大job而产生一大堆job跑,或者说需要改数据才行,不太方便

job拆分后,很可能越拆越细,如果后续拆到独立docker中跑某几个job,大job就得改,麻烦

数据流图

job一多,其实对开发本身就越来越混淆了,再加上正向、反查job、工具job等,以及状态机这种依赖,确实需要设计图用来记录,帮助开发人员理解这些job

流程图(也包括跨系统的流程图)+数据流图

线上暗job-便捷性-工具job

其实上了生产环境后,很多时候系统还不太完善,有些小工具job还是要做的,比如红冲这种,可能需要做成job,并且要job能接收参数,要能临时红冲某笔订单等

这些其实很常见

处理流水表的设计

针对每笔业务的变动、每个三方api请求的参数、以及返回的response,都要记录到流水表中记录下来,这个和普通日志埋点又有区别

  1. 日志埋点一般来讲不是结构化的,都是文本类型,对搜索不太友好
  2. 日志一般来讲,运维会在一定时间删除的,如:3个月
  3. 对重要数据的变动必须要记录到流水表中
  4. 流水表必须只insert,不update,不query的,因为表会越来越大;如果流水表不是mysql表,则另外的思路。
  5. 流水表关键信息是长时间完备的

分布式多副本考虑

谁家的prd不是2副本以上?

因此得考虑job的并发问题、xxl-job能较好的解决并发问题,小概率的高并发在job层面不太多,实在出现了,就分布式锁搞定。

job其实水也挺深,但是有了最佳实践,就会好很多,你说呢

xxl-job的一些感悟与规范的更多相关文章

  1. Android 命名规范 (提高代码可以读性)

    android文件众多,根据名称来辨别用途很重要,因此命名要规范 这篇文章可参考:Android 命名规范 (提高代码可以读性) 刚接触android的时候,命名都是按照拼音来,所以有的时候想看懂命名 ...

  2. C#编程普通型计算器 经验与感悟

    先贴图: 这是用C# 语言编写的普通型计算器,功能基本模仿Windows8自带计算器程序(版本6.3,内部版本9600).支持加.减.乘.除.退格.清除.平方根.倒数.相反数.连续四则.连续等号.自动 ...

  3. Android 命名规范 (提高代码可以读性) 转

    转自:http://blog.csdn.net/vipzjyno1/article/details/23542617 刚接触android的时候,命名都是按照拼音来,所以有的时候想看懂命名的那个控件 ...

  4. 2018/2/14 设计模式学习笔记(一) 自己实现ArrayList,LinkedList和Iterator,以及在此过程中对于面向对象,面向接口,还有抽象类的一些思考感悟

    因为本人目前为止学习编程不过七个月,所以后面的感悟对于一些大神来说可能嗤之以鼻,但对于一些刚刚入门的萌新来说在理解面向对象的思想上,以及抽象类和接口应该怎么设计等方面应该还是会有所帮助的 首先我们定义 ...

  5. LM**项目开发感悟

    LM**项目开发感悟 经过一个多月的项目开发,自己主要负责服务端业务逻辑的实现.服务端采用纯servlet完成,自己是在已有的项目架构上进行编程,对于所使用的架构,自己还没有认真的研究过,但明白其用到 ...

  6. [转] Android 命名规范 (提高代码可以读性)

    Android命名规范编码习惯 刚接触android的时候,命名都是按照拼音来,所以有的时候想看懂命名的那个控件什么是什么用的,就要读一遍甚至好几遍才知道,这样的话,在代码的 审查和修改过程中就会浪费 ...

  7. Java游戏服务器成长之路——感悟篇

    又是一个美好的周末啊,现在一到周末,早上就起得晚,下午困了又会睡一两个小时,上班的时候,早上起来喝一杯咖啡,然后就能高效的工作一整天,然而到了周末人就懒散了,哈哈. 最近刚跳槽,到新公司已经干了有两周 ...

  8. jQuery编程规范与最佳实践(附带一些个人的笔记)

    加载jQuery-Loading jQuery 1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢.点击查看使用CDN的好处,点此查看一些主流的jQuery CDN地 ...

  9. Android 命名规范 (转)

    刚接触android的时候,命名都是按照拼音来,所以有的时候想看懂命名的那个控件什么是什么用的,就要读一遍甚至好几遍才知道,这样的话,在代码的审查和修改过程中就会浪费不少不必要的时间.如果就是我一个人 ...

随机推荐

  1. JetBrains Projector 体验

    先来一张最终效果图: JetBrains Projector 是 JetBrains 的"远程开发"解决方案,基于 Client + Server 架构,对标的是微软 VSCode ...

  2. Java中的集合List - 入门篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的集合List - 入门篇>,希望对大家有帮助,谢谢 简介 说实话,Java中的集合有很多种,但是这里作为入门级别,先简单介绍第一种 ...

  3. java例题_13 加上100再加上168的完全平方数问题

    1 /*13 [程序 13 根据条件求数字] 2 题目:一个整数,它加上 100 后是一个完全平方数,再加上 268 又是一个完全平方数,请问该数是多少? 3 程序分析:在 10万以内判断,先将该数加 ...

  4. 【工程应用一】 多目标多角度的快速模板匹配算法(基于NCC,效果无限接近Halcon中........)

    愿意写代码的人一般都不太愿意去写文章,因为代码方面的艺术和文字中的美学往往很难兼得,两者都兼得的人通常都已经被西方极乐世界所收罗,我也是只喜欢写代码,让那些字母组成美妙的歌曲,然后自我沉浸在其中自得其 ...

  5. shell字符串处理总结

    1. 字符串切片 1.1 基于偏移量取字符串 返回字符串 string 的长度 ${#string} 示例 [root@centos8 script]#str=" I Love Python ...

  6. [Fundamental of Power Electronics]-PART II-9. 控制器设计-9.4 稳定性

    9.4 稳定性 众所周知的是,增加反馈回路可能会导致原本稳定的系统变得不稳定.尽管原变换器传递函数(式(9.1))以及环路增益\(T(s)\)不包含右半平面极点,但式(9.4)的闭环传递函数仍然可能存 ...

  7. 201871030119-马桂婷 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客 2018卓越工程师班 这个作业要求链接 实验三 软件工程结对项目 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程:2.掌握Github协作开发程序的操作方法 ...

  8. 使用Power BI构建数据仓库与BI方案

    杀手级特性 今年Power BI的几大杀手级特性的GA,可以让其构建完整的数据仓库/数据湖和BI分析一站式方案. Power BI Premium Per User-超低的价格 Large datas ...

  9. [VSC] HTML打叹号无法自动提示默认框架

    一般的, 在 VSC 中编辑 HTML 文档时, 打一个叹号 '!', 就会提示, 可生成默认代码, 如: 采纳建议后, 是这样: 问题: 如果出现打叹号无法出现提示的情况, 首先, 请检查当前的语言 ...

  10. 【Scrapy(二)】Scrapy 中的 Pipline,Item,Shell组件

    Pipline: 1.爬虫项目与爬虫的区别与关联: 一个爬虫项目可以包含多个爬虫,如下图中爬虫项目firstspider 包含多个爬虫itcst 和爬虫itcast1 2.多个爬虫是公用一套Pipli ...