服務治理 - ACL機制,禁止上游調用

背景

服務調用的鏈路中,如果下游想要禁止某一個上游的調用(上游調用不合理,或者服務治理上的其他考量),需要平臺上有相關功能

定義

ACL是以server端視角進行配置的
如A調用B的方法b,如果B不希望A可以調用方法b,則當A嘗試調用時,框架會進行阻止。
當框架因為ACL規則而阻止A的client進行調用時,框架拋出對應異常

實體名稱

upstream:上游
downstream:下游
methodName:方法名

上游可以根據需要更加細化,比如包含cluster名稱等

實現

配置ACL,寫配置

即用一個分布式服務框架,如zk等,寫一個特定key
如/ACL/upstream/downstream/methodName

值為0或者1
為1則代表downstream的methodName方法禁止被upstream調用

配置生效,讀配置

框架上用middleware,切面等方式(我是以py的django框架為基礎,其他語言也有自己的框架),該中間件的處理在upstream調用下游的時候

比如upstream在調用downstream的方法methodName的時候,
會去訪問分布式配置的key “/ACL/upstream/downstream/methodName”

如果為1,代表被下游禁止,則拋異常,業務層自行處理
如果為0,代表正常調用,則走后續的middleware,切面,調用rpc等

思考

1.為什么不在下游加一個上游列表開關,調用的時候再禁止?

快速失敗更好,反正都不讓調用,為何不直接在上層就禁止掉,更快且更省帶寬

2.適用場景

ACL控制畢竟屬于寫少讀多的場景,配置幾次,一直會被讀
不至于說頻繁的禁止再恢復

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容