當源站出現問題時如何使用戶的請求暫時可以得到響應
源站出現問題,不能給用戶返回請求的內容的時候,有什麼辦法使用戶仍然取到內容,雖然是過期的內容?
方法1:通過增加ats插件實現:
為了防止源站出現問題,如出現超時的情況,導致數據沒有正常返回,返回錯誤碼如502、504的時候,ats代理服務器會直接返回給用戶502、504,影響用於體驗,ats可通過增加插件功能實現當ats接收到源站返回的502、504時如果ats本地存在過期的緩存數據,則把過期的緩存數據暫時返回給用戶,在用戶看來是200的成功訪問。
方法2:通過ats自帶的處理機制:
如果源站不能給ats返回數據,如源站服務停掉了,機器宕掉了,則此時如果ats中有緩存則會返回TCP_REFRESH_FAIL_HIT/200 ,之後再次訪問一直為TCP_HIT/200 ,直到proxy.config.http.cache.max_stale_age這個緩存值到了,以後再次請求返回TCP_REFRESH_FAIL_HIT/502
records.config中的配置項:
proxy.config.http.cache.max_stale_age INT 604800
上面配置項的含義:在不能緩存該對象之前,舊對象能夠響應的最大時間(默認一周604800s)。
上述兩種方法達到預期效果的前提是:ats中有緩存且過期了
==========
在上面方法2的情況下測試:
下面為客戶端的部分響應頭信息的區別:
1. 服務器正常提供服務,正常響應(TCP_HIT/200):
Proxy-Connection: keep-alive
* Connection #0 to host 192.168.10.74 left intact
* Closing connection #0
2. 服務器stop下再次發送相同請求(TCP_REFRESH_FAIL_HIT/200):
* HTTP/1.1 proxy connection set close!
< Proxy-Connection: close
< Warning: 111 DLC-3.0
* Closing connection #0
3.上面2的基礎上再次發送多條相同請求(TCP_HIT/200):
Proxy-Connection: keep-alive
< Warning: 111 DLC-3.0
* Connection #0 to host 192.168.10.74 left intact
* Closing connection #0
4.服務器stop下當配置值604800s到了後,再次發送請求(TCP_REFRESH_FAIL_HIT/502):
Proxy-Connection: Keep-Alive
>
< HTTP/1.1 502 Connection refused
* Connection #0 to host 192.168.10.74 left intact
* Closing connection #0