原本是写一篇生活的博文,现在看来,只要把标题“代理重定向策略及其用户感受的分析”,就是一篇技术博文了。
顺手也发到了公司的博客上:代理重定向策略及其用户感受的分析 。
=========================== 割了吧 ===========================
大家会碰到类似这样的事情,比如,找你的租房中介负责人让处理一下空调坏了,中介负责人回答你说“我现在不负责你了 ,你去联系A。”你觉得这件事有些不爽,没办法,去联系A。说不定A又会说自己不负责了,让你联系B。
碰到这种“你去联系XXX”的情况,我想没有人会开心的。
如果这样的“重定向”形成了环,那么用户一直被“踢皮球”,不会得到处理。用户就要抓狂了!
PS:是不是想到了有关部门的处理方式,哈哈
作为客户,是体验差的问题;作为服务方,其实意味着客户的流失!
我们把这个问题,称为“事务转手”,服务方的负责人称为“代理”。“事务转手”的情况常常会有,“代理”如何处理才合理呢?
代理的处理方式及分析
1) 一杆到底
代理把问题提给接手的同学,处理完了,再把结果反馈给用户。
即代理“一杆到底”都处理了,用户不需要感知有转手这件事,体验最好。但问题是
- 每次这样的处理,多了一次传手,效率低。
- 如果每次都这么处理,事务便没有办法转交出去了,一直陷在里面。
2) 重定向用户到下一任去
重定向,即让用户去联系下一任。上文也提到可以会出现“踢皮球”的风险(这是一个不能接受的情况)。
另外,之前代理承诺了是负责该用户的,用户在要代理处理事务时,用户如果没有被事先告知代理有变化,那么之前代理承诺是没有变化的。所以,用户在要代理处理事务时,用户被重定向到A,代理并没有负责处理好(用户要做额外的联系工作,并不期望要做),这个“用户被重定向”是代理违背了自己的承诺!
PS: 这让我想到了“契约精神”!
上面2种处理方式很容易想到,但存在问题。从方法2的分析可以看出,一个关键点是“事先告知用户代理有变化”,展开说明如下:
- 如果事先告知了用户,那么用户应该去联系下一任,
- 如果没有事先告知了用户,那么这次处理用户不能被重定向。
结合上面的2点,得到了第三种处理方式。
3) 本次“一杆到底”处理;找出真正可以处理代理A并告知用户以后的事务已转交A
可以看出这次1方式和2方式的混合方式。能避免前两种方案中会有的问题:
- 只有第一次有传手,不会每次都效率低。
- 避免 代理无法转交业务的问题(方法1)。代理处理了这一次,以后不用再处理这个用户了,业务转交成功。
- 代理没有违背承诺。
- 避免“踢皮球”这样恶性情况!因为使用这种方式,本次事务一定会得到直接处理。
细心的你可能发现,这种方式代理的第二步骤是
找出真正可以处理代理A”并告知用户以后的事务已转交A
为什么不是
告知用户以后的事务已转交自己的下一任
原因是这样可以避免下面的情况:
用户会连续多次被告知业务交给了下一任(当次的事务会被直接处理),如果下一任也转交了任务。
总结
从上面给出的方法中可以看到,应该提前通知用户事务转交的事情,让用户早有准备。
# 即广播变化后的代理信息。
当然最好的情况还是避免告知用户转交这种情况的发生。可以方法有:
用户联系的是一个稳定信息比如服务中心(像10086),而不是某个直接某个代理。
# 即从一个中心获得代理信息,而不是直接联系代理。
当然服务中心本身的信息同样面临这个问题,即可以会变更转手,不能使用服务中心的方式(否则这是死循环的方法了)。这是个小概率事件,并且要慎重处理。
事务处理关心的指标
- 用户的体验:被重定向的次数、响应时间
- 系统成本:处理效率/所用的资源
后记
最近在看Paxos,代理问题看比较多,计算机的代理策略也一样。