转一篇我发在medium的文章,英文写的,下面我自己来翻译一下,也顺便补充一些技术细节:
https://medium.com/@snowmanjy/an-interesting-system-design-of-a-rule-engine-prototype-29255e87b377
大概是去年这个时间,八九月份的时候,我所在的team打算做一版新的报价系统,大家都领了任务,在做不同技术实现的POC,我正好跟组里老中哥们聊了聊,讨论了下主要的一些业务难点,其中有一个就是由于客户可以定制很多的(大的企业用户可能有成百上千个规则)定价规则Price rules,就产生了一个很有趣的问题:当你对报价单Quote里任何项目进行修改都有可能触发定价规则,而这些规则主要就是 if X条件满足 then do Y操作,规则导致的结果本身又可能对报价单进行修改,而这些修改又可能触发别的规则,所以就是一个不可预知的系列反应,然后另外还有一个难点就是有一个需求很有意思,我们就叫它砍价功能吧,场景就是说在报价的时候告诉客户你要买500个货物需要800块钱,但是客户说我只有700块钱你看我能买多少个货物,要记住这个功能同时还受定价规则的约束,并不一定是一个简单的倒推计算。
我们可以设想一下这个报价系统的前端应用,假设我在亚马逊或者淘宝店买衣服,全场满75块包邮,然后我选了80块的衣服准备结账(没有邮费),在结账时候有个优惠券输入框,