如何利用 Varnish 進行 A/B 測試和功能推出?

如何利用 Varnish 進行 A/B 測試和功能推出?

今天,我們的網路層已經暴露在世人面前。我們希望在 Web 層前面添加 Varnish,以加速網站並減少對後端的呼叫。然而,我們有一些擔憂,我想知道大多數人如何處理這些問題:

  1. A/B 測試 - 如何測試每個頁面的兩個「版本」並進行比較?我的意思是,清漆如何知道要提供哪個頁面?是否以及如何在每個頁面上保存單獨的版本?

  2. 功能推出 - 您將如何設定一個簡單的功能推出機制?假設我想開啟一個新功能/頁面,只佔用 10% 的流量…然後再將其增加到 20%?

  3. 您如何處理程式碼部署?每次部署時都會清除整個清漆快取嗎? (我們每天都有部署)。還是你只是讓它慢慢過期(使用TTL)?

關於這些問題的任何想法和例子都是大大地讚賞!

答案1

A/B 測試 - 如何測試每個頁面的兩個「版本」並進行比較?我的意思是,清漆如何知道要提供哪個頁面?是否以及如何在每個頁面上保存單獨的版本?

您有多種選擇:

  • 只需將它們暴露在不同的 URL 上即可。
  • 繞過特定 URL 的快取。您可以透過返回pass來做到這一點vcl_recv。像這樣的事情:

    sub vcl_recv {
        if (req.url ~ "^/path/to/document") {
            return (pass);
        }
    }
    
  • 當您公開新版本時,明確清除快取。

功能推出 - 您將如何設定一個簡單的功能推出機制?假設我想開啟一個新功能/頁面,只佔用 10% 的流量…然後再將其增加到 20%?

我不確定是否有一種“簡單”的方法可以做到這一點。由於您可以C在檔案中放置任意程式碼,.vcl因此您可以添加一些邏輯來選擇隨機數,然後根據結果選擇適當的後端路徑。

您如何處理程式碼部署?每次部署時都會清除整個清漆快取嗎? (我們每天都有部署)。還是你只是讓它慢慢過期(使用TTL)?

對於重大更改,我們只需清除緩存,對於較小的更改,我們只是讓內容過期。

相關內容