大家會碰到類似這樣的事情,比如,找你的租房中介負責人讓處理一下空調壞了,中介負責人回答你說“我現在不負責你了 ,你去聯系a。”你覺得這件事有些不爽,沒辦法,去聯系a。說不定a又會說自己不負責了,讓你聯系b。
碰到這種“你去聯系xxx”的情況,我想沒有人會開心的。
如果這樣的“重定向”形成了環,那麼使用者一直被“踢皮球”,不會得到處理。使用者就要抓狂了!
ps:是不是想到了有關部門的處理方式,哈哈
作為客戶,是體驗差的問題;作為服務方,其實意味着客戶的流失!
我們把這個問題,稱為“事務轉手”,服務方的負責人稱為“代理”。“事務轉手”的情況常常會有,“代理”如何處理才合理呢?
代理把問題提給接手的同學,處理完了,再把結果回報給使用者。
即代理“一杆到底”都處理了,使用者不需要感覺有轉手這件事,體驗最好。但問題是
每次這樣的處理,多了一次傳手,效率低。
如果每次都這麼處理,事務便沒有辦法轉交出去了,一直陷在裡面。
重定向,即讓使用者去聯系下一任。上文也提到可以會出現“踢皮球”的風險(這是一個不能接受的情況)。
另外,之前代理承諾了是負責該使用者的,使用者在要代理處理事務時,使用者如果沒有被事先告知代理有變化,那麼之前代理承諾是沒有變化的。是以,使用者在要代理處理事務時,使用者被重定向到a,代理并沒有負責處理好(使用者要做額外的聯系工作,并不期望要做),這個“使用者被重定向”是代理違背了自己的承諾!
上面2種處理方式很容易想到,但存在問題。從方法2的分析可以看出,一個關鍵點是“事先告知使用者代理有變化”,展開說明如下:
如果事先告知了使用者,那麼使用者應該去聯系下一任,
如果沒有事先告知了使用者,那麼這次處理使用者不能被重定向。
結合上面的2點,得到了第三種處理方式。
可以看出這個處理方式包含了1方式和2方式的内容。能避免前兩種方式中會有的問題:
隻有第一次有傳手,不會每次都效率低。
避免 代理無法轉交業務的問題(方法1)。代理處理了這一次,以後不用再處理這個使用者了,業務轉交成功。
代理沒有違背承諾。
避免“踢皮球”這樣惡性情況!因為使用這種方式,本次事務一定會得到直接處理。
細心的你可能發現,這種方式代理的第二步驟是
找出真正可以處理代理a”并告知使用者以後的事務已轉交a
為什麼不是
告知使用者以後的事務已轉交自己的下一任
原因是這樣可以避免下面的情況:
使用者會連續多次被告知業務交給了下一任(當次的事務會被直接處理),如果下一任也轉交了任務。
從上面給出的方法中可以看到,應該提前通知使用者事務轉交的事情,讓使用者早有準備。
# 即廣播變化後的代理資訊。
當然最好的情況還是避免告知使用者轉交這種情況的發生。可以方法有:
使用者聯系的是一個穩定資訊比如服務中心(像10086),而不是某個直接某個代理。
# 即從一個中心獲得代理資訊,而不是直接聯系代理。
當然服務中心本身的資訊同樣面臨這個問題,即可以會變更轉手,不能使用服務中心的方式(否則這是死循環的方法了)。這是個小機率事件,并且要慎重處理。
事務處理關心的名額
使用者的體驗:被重定向的次數、響應時間
系統成本:處理效率/所用的資源
這段時間在調研paxos,看了paxos相關論文。paxos包含了很多代理間的互動,觸發了生活中代理問題(由租房中介的事引起)的思考。
後面會整理出一系列paxos分享來