摘要:
前言 什么是幂等性?一次和多次请求某一个资源,对资源本身所产生的的影响均与一次执行的影响相同。 幂等性是系统服务对外的一种承诺,承诺只要调用接口成功了,多次调用对系统的影响是一致的。 幂等性与重复提交比较 幂等性 更多使用的情况是第一次请求知道结果,但是由于网络抖动或连接超时等情况未进行正常返回,在 阅读全文
摘要:
前言 我们在平时工作中可能会有这样的需求,系统运行期间需要动态调整配置项,比如: 调整系统告警人 调整活动开关 调整降级开关 调整日志级别 ... 以上这些还不够,随着程序功能的日益复杂对配置的期望也越来越高,还需要满足: 实现分环境、分集群的管理配置 实现配置的灰度发布 配置的发布需要完善的授权机 阅读全文
摘要:
任务管理界面 (WEB) 支持在 WEB 界面 中对任务进行管理,例如:新增任务、编辑任务、启用/禁用任务、手动执行任务 等。 任务的属性包括: 任务名称 执行方式 SHELL HTTP 表达式(*/5 * * * *) 命令 超时时间(秒) 重试次数 重试间隔(秒) 执行结束是否通知 不通知 失败 阅读全文
摘要:
前言 我们在工作中经常会用到异步消息,主要使用两种消息模式: 消息队列 发布/订阅 消息队列:多个生产者可以向同一个消息队列发送消息,但是一个消息只能被一个消费者消费。 发布/订阅:一个消息可以被多个订阅者并发的获取和处理。 Kafka 和 RabbitMQ 都能满足如上的特性,那么我们应该如何选择 阅读全文
摘要:
前言 这篇文章是《关于分布式事务的理解》的后续篇:分布式事务之最终一致性实现方案。 还是那个电商需求,一个订单支付完成后的业务场景,有如下操作: 更改订单的状态为 “已支付” 扣减商品库存 给会员增加积分 创建出库单通知仓库发货 咱们使用 最终一致性方案 去实现它。 什么是最终一致性? 从字面上看就 阅读全文
摘要:
前言 根据使用者的反馈,回答关于开源项目:go-gin-api 中被频繁问到的两个代码写法问题。 以如下代码片段为例: 第 8 行,这种写法是什么意思? 第 11 行,为什么定义一个 i() 方法? 问题一 var _ Signature = (*signature)(nil) 这代码是什么意思? 阅读全文
摘要:
业务场景 电商业务 上图是一个电商系统,当一个订单支付完成后的业务场景: 更改订单的状态为 “已支付” 扣减商品库存 给会员增加积分 创建出库单通知仓库发货 想象一下,当订单支付完成后,个人积分延迟几分钟变更,这可以接受吗? 火车票购票 想想生活中火车票购票场景。 想象一下,当最后一张火车票同时被两 阅读全文
摘要:
前言 根据使用者的反馈,对开源项目:go-gin-api 新增两个小功能。 两个小功能都与语言包有关: 功能1:接口返回的错误信息支持中英文; 功能2:参数验证的错误信息支持中英文; 我的实现方式是在项目安装的时候,选择 语言,然后项目中根据选择的语言进行输出对应的中英文,如下图。 接口返回的错误信 阅读全文
摘要:
前言 在设计电商系统订单模块时,订单会涉及各种状态以及状态与状态之间的流转,可扩展性、可维护性 是我们需要关注的重点!本文分享一下我的技术方案。 如上图,使用 golang 实现上图的订单流转,同时当后续增加订单状态或订单事件时,可以进行快速完成。 目的 关于订单状态的处理,使用统一入口,提高程序的 阅读全文
摘要:
作用 编写格式化的 commit message 能够大大提高代码的维护效率。 比如: 可以提供更多的历史信息,方便快速浏览; 可以过滤某些 commit(比如文档改动),便于快速查找信息; 可以直接从 commit 生成 Change log; 用的什么规范? <type>(<scope>): < 阅读全文