對于“每個系統要有能力發現哪些是有效的請求,哪些是雪球無效的請求”,這里推薦一種方案:在該系統每個機器上新增一個進程:interface進程。Interface進程能夠快速的從socket緩沖區中取得請求,打上當前時間戳,壓入channel。業務處理進程從channel中獲取請求和該請求的時間戳,如果發現時間戳早于當前時間減去超時時間(即已經超時,處理也沒有意義),就直接丟棄該請求,或者應答一個失敗報文。
Channel是一個先進先出的通信方式,可以是socket,也可以是共享內存、消息隊列、或者管道,不限。
Socket緩沖區要設置合理,如果過大,導致及時interface進程都需要處理長時間才能清空該隊列,就不合適了。建議的大小上限是:緩存住超時時間內interface進程能夠處理掉的請求個數(注意考慮網絡通訊中的元數據)。