设计一个广告投放平台自动控盘的规则引擎系统
发表于|更新于|系统设计
20231109 开始写
文章作者: 柠芒技术博客
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 柠芒技术博客!
相关推荐

2022-06-29
设计一个几十万TPS的实时位置上报系统
有100w滴滴司机,司机每3s上报一次自己的位置。请你设计一个系统,能够实时将司机的位置存储进系统,并且能够给另外一个系统实时显示路径(每3秒刷新一次最新点),历史数据能够随时查询。 在脉脉上看到这个题目,挺多人讨论。刚好在前司早期也负责做过这块的东西,复刻一下以前的解决方案。 需求分析需求简单拆解可以分为明面上的需求: 位置上报(我之前负责的业务为1s一次上报) 业务实时路径查询 业务历时可查 以及需要解决存在问题和附加需求。 提交的数据怎么防止被恶意刷接口,影响数据准确? 接口响应时间必须要低,以支持几十万的请求。 需要为算法提供数据,以支持路径优化算法在未来变得更加高效。 需要为风控提供数据,以支持业务风控部门内部反作弊的需求。 距离计算,以提供给用户查询实时的距离有多少,以当前速度还需要多久送达。 所以就会多出几个有必要去解决的问题。 数据鉴权,防攻击脏数据 路径优化 路径反作弊 距离计算 技术方案在涉及点位上报前还有生成订单的环节。在生成订单时,订单的目标地址会被推送到算法路径规划的服务中,进行最短路径输出。在前司的业务场景中,因一个配送员存在顺路的情况...

2024-01-01
Singleflight:深入解析go缓存击穿方案
几乎所有的现代化面向web编程的系统都在关注高并发情况下如何降低下游服务的承接压力,go语言也不例外。go语言在并发方面的发力体现在很多个方面,如更轻量化的协程,原子性操作的atomic,抑制函数重复调用的singleflight等。在常规的业务开发中singleflight使用并不多见,本文将会详细介绍singleflight,以深入理解和探索singleflight更多的技术细节和适用场景。 设计原理singleflight 主要围绕着在高并发环境下对相同 key 的函数调用进行重复抑制。以下是其设计原理的核心要点: Group 结构: singleflight 使用 Group 结构表示一个函数调用的组。每个 Group 对应于一类工作,其中的函数调用可能会有重复的 key。 call 结构: call 结构用于表示一个正在进行中或已完成的函数调用。它包含一个 sync.WaitGroup 用于等待调用的完成,以及相关的结果和错误信息。 重复调用抑制: 在 Do 方法中,首先检查是否已经存在相同 key 的函数调用。如果存在,新的调用将等待已有调用完成...

2021-12-26
Go抽象语法树(AST)实用指南 (二)
grade == “四(3)班” && age > 10 AST 抽象语法树在表达式解析上面也有不错的表现。通常在规则引擎场景可以得到充分的发挥。比如一段表达式 1grade == 四(3)班 && age > 10 这个表达式,对于人来说是非常容易理解的。年级是四(3)班,年纪大于10。 但是计算机来说,传入一段字符串表达式,理解起来可能并不是这么容易。 好在Golang提供了表达式解析的能力,我们可以通过查看解析后的数据,理解ast如果解析这串表达式。 解析表达式1234567891011121314151617181920212223242526272829303132333435 0 *ast.BinaryExpr { 1 . X: *ast.BinaryExpr { 2 . . X: *ast.Ident { 3 . . . NamePos: - 4 . . . Name: "grade" 5 . . . Obj: ...



