首页 文章 精选 留言 我的
优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/KuaFuAI/blog/11044326

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

深入剖析如何设计订单超时自动取消的功能

我们在美团 APP 下单,假如没有立即支付,进入订单详情会显示倒计时,如果超过支付时间,订单就会被自动取消。 这篇文章,笔者想以架构师的视角,深入剖析如何设计订单超时自动取消的功能。 1 定时任务 首先,我们非常自然的想到定时任务的方案。 方案流程: 每隔 30 秒查询数据库,取出最近的 N 条未支付的订单。 遍历查询出来的订单列表,判断当前时间减去订单的创建时间是否超过了支付超时时间,如果超时则对该订单执行取消操作。 这种方案会间隔对数据库造成一定的 IO 压力,但工程实现相对简单。 网上有很多的定时任务实现策略,我们可以简单划分为单机版和集群版。 笔者曾负责过彩票订单、专车订单等业务,在这些业务场景里,都没有使用单机版定时任务。 因为业务系统都是集群部署,假如使用单机版模式,可能出现多台不同机器实例同时执行任务的风险。 虽然我们可以通过加锁的方式适当规避,从架构设计的角度但总是不够优雅。 接下来,笔者会介绍亲身经历的三种集群定时任务。 01、 Quartz + JDBCJobStore Quartz 是一款 Java 开源任务调度框架,它支持集群模式。 图中,Quartz 的集群模...

当事人复盘 GitLab 史上最严重的数据库故障

故事来源于当事人最近发表的回忆录相关节选。 GitLab 官网上还有当年这次事故的纪录,事件发生在 2018 年 2 月 1 日。 误删库原因 GitLab.com 使用的是 PostgreSQL,一主一备两个集群,分别是 db1.cluster.gitlab.com 和 db2.cluster.gitlab.com。当事人 发现 db2 集群无法从 db1 同步数据过来,再尝试了几种方法都不奏效后,就决定尝试重置 db2,也就是清空 db2 的数据目录。只是当事人操作在了主集群 db1 上,当他意识到问题时,300 GB 的数据只剩下 4.5 GB 了。 主库被误删,GitLab.com 只能立马下线了。 恢复过程 GitLab 官方提到有好几道防线,所以最后还是恢复了过来。不过就像一开始当事人回忆里提到的,差一点点就完蛋了。事实上 GitLab 设置的所有防线其实都被击穿了: 每天的自动备份不奏效,因为备份所用的 pg_dump 版本和 GitLab 的 PG 版本不一致,所以每次备份只产生了几个 bytes 的数据。 在 Azure 上的磁盘备份没有在数据库服务器上启用。 到 S...

相关文章

发表评论

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册