2016年8月18日 星期四

[經驗分享] 如何避免搶資源?

先講實例:今天有多個任務需要執行,我們希望做個service能夠取得必須執行的任務



以上是架構圖,有多個client,當client有空的時候,就發送request 跟server 要資料,
這個架構看起來很美好,但是實際執行會發現,client常常會拿到同一個任務

why?

因為當多個client 同時執行時,DB的資料會在還沒被改動前就會被讀取數次,
那我們要怎麼避免這件事情發生?

ans: 讓DB只能被一個client存取

所以我修改了設計

可以注意到,原本單純server的地方被改成queue,也就是說所有的request 都會直接進queue,然後queue一次只允許一個client去取得任務,這樣的架構就可以避免同樣的任務被執行多次了

不過目前的架構也會造成許多client在排隊等queue執行完,不過目前這樣的架構已經可以符合我的需求,或許在未來會有其他更優化的架構吧~

沒有留言:

張貼留言