做公众号收入百万的这一年, 时间窗口模式 (Time Window Pattern) 来讲解 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 公众号相关 >

做公众号收入百万的这一年, 时间窗口模式 (Time Window Pattern) 来讲解

发表时间:2020-10-9

发布人:葵宇科技

浏览次数:40

年终总结

写了微信公众号一年啦, 想要总结一下这年的写作情况

这一年总共写了 40 篇文章, 最后有 221 位小伙伴关注了 codog代码狗

文章总结

这些文章里面有一些比较典型的文章, 下面我来列举一下:

第一篇写的文章: 还是母胎solo?不如用Builder Pattern 捏一个男/女朋友

阅读量/再看/赞赏最高的文章: 又催婚?别怪我亮出 Null Object Pattern

点赞数最高的文章: 杭州女子失踪案告破, 绞杀者模式(Strangler Pattern)来预防

阅读量次高文章: 不良PUA到底多可怕?状态模式来揭秘

再看次高文章: Strategy Pattern 教你秒变“神枪手”

赞赏次高文章:

设计模式分享

一聊天就洗澡? (Partial Response Pattern)部分响应模式让你抓住女神的点

女神变女友?Converter Pattern教你一键转换

互联网人35岁送外卖?Dirty Flag Pattern 竟“助纣为虐”!

空对象模式我是来源于<重构>这本书, 感兴趣的小伙伴可以买来看看, 非常感谢大家对 codog代码狗 的支持~

人员分析[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ohuWT4yU-1602244715016)(/assets/2020092404.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDiI66h8-1602244715018)(/assets/2020092405.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gaZ7BhX7-1602244715020)(/assets/2020092406.png)]

Time Window Pattern(时间窗口模式)

背景技术

数据是系统的基础,做应用系统常常需要将某些数据(比如网络爬虫解析的数据,云服务数据,老版本数据库等)拉取数据同步到目标数据存储中(比如关系型数据库,文档数据库等)用来做业务驱动,数据统计分析或者用作系统和业务监控依据,其中有很多种方式,比如源数据作为发送方触发消息驱动,目标数据作为接收方接收变更消息或者目标数据定时主动请求源数据提供的接口或者其他能获取变化信息的能力等

目前通过定时任务拉取数据的时候,有二种常见的同步方法:

一种是按照固定频率执行任务,每次执行失败就终止 记录失败时间,定时任务触发下次执行任务从上次失败时间开始,这种方法存在的问题是即使多次启动,可能仍然会因为各种原因重复失败,导致时间不向前进,极端情况可能会导致系统数据完全无法更新;

另一种是每个小时同步每个小时的数据,错误的就跳过或者记录下来,这种问题是数据能随时保持最新,但是可能会导致前一个任务的延迟导致后一个任务无法启动而无法同步数据或者由于极端情况导致机器宕机引起几个小时没有同步数据,造成数据丢失。

具体技术方案

  1. 抽象定时任务的概念,分为读取,处理和写入三个部分,其中读取的来源于网络,系统接口,文件,数据库或其他存储形式,处理主要是指对读取的数据进行过滤,分析,汇总等等生成待写入的数据,写入的一般操作是对处理后的数据结果进行存储或者用来触发通知,打印日志等

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mg7v1a72-1602244715021)(/assets/2020092400.png)]

  1. 主要流程是从配置表中读取开始时间,时间间隔和结束时间(如果为空取当前时间),首先判断开始时间加上本次同步时间间隔是否小于结束时间,如果不是,证明是任务还没有到启动的时间而被调度了(因为当前时间之后的数据还没有生成,如果不做这个判断,后面更新时间窗口可能会导致错失新产生的数据),如果符合条件,启动任务,先将时间段S 到 T 这段时间均分为N段,每段(T-S)/N 秒/分钟/小时/月/年,如果某个时间段失败了,记录下来相关的时间段,后续补偿,读成功的数据都并行处理,如果某条数据由于各种原因失败了就记录数据唯一标识或者这个数据序列化后的结果,后续补偿,处理成功的数据执行写入方法,写入方法需要是防重的或者是幂等的(常用的防重方法有查询已经存储主键数据进行过滤结合根据数据库主键插入判断异常,幂等方法有根据业务时间或者版本号等判断删除老数据,插入新的数据或放弃插入当前数据等),如果写入失败,也记录数据唯一标识或者这个数据序列化后的结果,后续补偿,最后如果整个时间段所有的数据都有了明确的处理结果,说明整个时间段的数据成功的都执行了写入方法,失败的时间段或者数据都有了记录表,推送开始时间前进一个时间间隔,为下次定时任务启动的时候做准备。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PJ4wusVC-1602244715022)(/assets/2020092401.png)]

  1. 补偿流程和报警流程主要是从上面的数据项失败记录表和时间段失败表取出等待补偿的数据,根据数据的补偿重试次数或者整个的等待补偿记录数量结合自定义的业务需求做出报警,通知管理员需要重点关注或者人为处理失败的情况,另外除了报警,主要是调用补偿程序(根据数据项补偿和根据时间段补偿)对失败单据进行补偿,如果补偿成功,删除失败记录,如果补偿失败,记录补偿次数,补偿时间等信息,作为报警依据,等待下次补偿,补偿程序依然需要防重或者幂等,可以多次调用,而不会产生不合理的数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KpwQVwzZ-1602244715022)(/assets/2020092402.png)]

相关案例查看更多