抖音三方码技术分享,百万用户直播秒杀

发布时间:2023-04-28 09:25:36

1.核心功能

•监控预警•EventBus 消息总线[1]•Redis 库存操作Lua

2.接口性能

集群1.5wtps

单机400tps

120w日活

3.抖音接口文档

https://developer.open-douyin.com/docs/resource/zh-CN/dop/develop/openapi/life-service-open-ability/life.capacity/tripartite.code/precreateorder

实现监控预警

企业微信机器人 webhook

protected void msgSend(String wxUrl, IAlertMsg msg, WxMsg wxRobotMsg) {  HttpHeaders httpHeaders = new HttpHeaders();  httpHeaders.setContentType(MediaType.APPLICATION_JSON);  httpHeaders.setConnection("Keep-Alive");  HttpEntity<String> httpEntity = new HttpEntity<>(JSONObject.toJSONString(wxRobotMsg), httpHeaders);  String reponseMsg = restTemplate.postForObject(wxUrl, httpEntity, String.class);  log.debug("{} >> {}", msg, reponseMsg);}
EventBus 介绍

事务拆分

Saga分布式事务[2]

阶段性重试

•XxLJob 重试

框架设计

抖音三方码技术分享,百万用户直播秒杀_分布式事务

Redis 库存处理

方案

•List 兑换码池•Set 导入去重•String 余额,总库存管理

local CDKey_QUEUE = KEYS[1]local CDKey_SET = KEYS[2]local CDKey_SCRIPT_TYPE = KEYS[3]local CDKeys_PARAMS = ARGVlocal retAddCDKey = 0local retGetCDKey = {}local function addCDKey()    for i, v in ipairs(CDKeys_PARAMS) do        local addOk = redis.call("SADD", CDKey_SET, v)        if addOk == 1 then            redis.call("LPUSH", CDKey_QUEUE, v)            retAddCDKey = retAddCDKey + 1        end    endendlocal function getCDKey()    local num = tonumber(CDKeys_PARAMS[1])    for i = 1, num do        local v = redis.call("RPOP", CDKey_QUEUE)        if type(v) == 'boolean' then        else            if v ~= nil then                table.insert(retGetCDKey, v)            end        end    end    if #retGetCDKey ~=0 and num ~= #retGetCDKey then        for i, v in ipairs(retGetCDKey) do            redis.call("LPUSH", CDKey_QUEUE, v)        end        retGetCDKey = {}    endendif CDKey_SCRIPT_TYPE == '0{yes}' then    addCDKey()    return retAddCDKeyelse    getCDKey()    return retGetCDKeyend
问题归纳

1.调用抖音验券界面限制

一张优惠券在核销时会暂时锁定订单,因此订单中的其他优惠券在解锁前会被核销 建议同一订单中的优惠券一起核销,肯定会报错。  或者一张一张验券

2.抖音调用服务提供商发券界口

偶尔,抖音不会调用[预订]优惠券界面创建订单操作,抖音不会调用[预订]优惠券界面创建订单操作
分享技术文章

凤凰架构[1]

•可靠事件队列

最终一致性的概念是 eBay 系统架构师 Dan Pritchett 在 2008 年在 ACM 发表的论文《Base: An Acid Alternative》本文总结了一种独立性 ACID 除了获得的强一致性,使用 BASE 实现一致性目标的途径。BASE 分别是基本可用性(Basically Available)、柔性事务(Soft State)与最终一致性(Eventually Consistent)的缩写。BASE 这个提法简直就是把数据库科学家热爱收缩的恶趣发挥到了极致,但也有 ACID vs BASE(酸 vs 碱)这个朗朗上口的梗,这篇论文的影响传播得足够快。作者在这里就不多说了 BASE 这是一个概念问题。虽然嘲笑它很有趣,但本文本身作为最终一致性概念的起源,系统地总结了分布式事务的技术手段,非常有价值。

我们将继续解释本章的场景例子 Dan Pritchett 提出的“可靠事件队列”的具体做法仍然是在交易过程中正确修改账户、仓库和业务服务中的数据 3-7 时序图列出了修改过程。

抖音三方码技术分享,百万用户直播秒杀_redis_02

因为关键词的上限,需要关注以上的朋友。小莫分享微信官方账号回复关键词抖音秒杀自取。

References

[1]EventBus 消息总线:http://rabbitmq.mr-ping.com/

[2]Saga分布式事务:https://cloud.tencent.com/developer/article/1839642[3]凤凰架构:https://icyfenix.cn

上一篇 Java5 并发学习
下一篇 Java 20和IntelliJ IDEA,一起让开发变得更轻松!

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题