[[Web&Http學習]]
1.簡介
Http協議涉及到的一種重要性質: 冪等性. 在HTTP/1.1規範中冪等性的定義是:
Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.
從定義上看, HTTP方法的冪等性是指一次和多次請求某一個資源應該具有同樣的副作用.
實際上, 冪等性是分佈式系統設計中十分重要的概念, 而Http的分佈式本質也決定了他在Http中具有重要地位.
2.Http方法的冪等性
若干次請求的副作用與單次請求相同或者根本沒有副作用, 那麼這些請求方法就能夠被視作<mark style="background: #FF5582A6;">冪等</mark>的.
| 序號 | 方法 | 是否冪等 |
|---|---|---|
| 1 | GET | 是 |
| 2 | HEAD | 是 |
| 3 | PUT | 是 |
| 4 | DELETE | 是 |
| 5 | OPTIONS | 是 |
| 6 | TRACE | 是 |
| 7 | <mark style="background: #FFB86CA6;">POST</mark> | <mark style="background: #FFB86CA6;">不是</mark> |
| 8 | <mark style="background: #FFB86CA6;">PATCH</mark> | <mark style="background: #FFB86CA6;">不是</mark> |
Http方法中:
- GET方法: 用於獲取資源, 不會影響到資源的變化, 所以是冪等的.
- POST方法: 表示創建資源, 兩次相同的POST請求會在服務器創建兩份資源, 他們具有不同的URI, 所以不具備冪等性.
- HEAD方法: 向服務索要與GET請求相一致的響應, 只不過響應體不會被返回, 所以是冪等的.
- PUT方法: 表示更新資源, 而PUT所對應的URI是要創建或更新的資源本身, 對同一URI進行多次PUT的副作用和一次PUT的副作用是相同的, 所以是冪等的.
- DELETE方法: 用於刪除資源, 有副作用, 但是應該滿足冪等性
- OPTIONS方法: 返回服務器針對特定資源所支持的HTTP請求方法, 所以是冪等的.
- TRACE方法: 可以回顯服務器收到的請求, 主要用於診斷或測試, 所以是冪等的.
- PATCH方法: 類似於POST和PUT, 但是它每次是部分更新資源, 所以是非冪等的
3.分佈式事務 VS 冪等設計
3.1 業務場景
訂單支付過程中, 賬户餘額的變動(遇到系統異常, 或者其他操作等非正常操作的時候)
3.1 分佈式事務
分佈式事務調用者很簡單, 複雜性都交給了中間件來管理.
缺點: 一是架構太重量級, 容易被綁在特定的中間件上, 不利於異構系統的集成; 二是分佈式事務能保證事務的ACID性質, 但是無法提供性能和可用性保證.
3.2 冪等設計
服務器端生成唯一的處理號, 將它用於標識後續的操作, 一個處理號表示的操作至多隻會被處理一次, 每次調用都將返回第一次調用時的處理結果, 這樣就符合冪等性.
冪等設計是一種輕量級的解決方案, 容易適應異構環境, 以及性能和可用性方面. 某些性能要求高的場景或應用, 冪等設計往往是唯一的解決方案.