頁面規(guī)則是我們最常用的產(chǎn)品之一。它被數(shù)百萬用戶采用,用于配置從緩存到安全級別的所有內(nèi)容。它是Cloudflare的“If This Then That”邏輯。其中“If…”是一個URL,而“Then That”則將我們處理流量的方式更改為“區(qū)域”的特定部分。但這并非沒有局限性。
頁面規(guī)則只能在URL或URL模式上觸發(fā)。每個區(qū)域最多有125個頁面規(guī)則。頁面規(guī)則也很難調(diào)試。甚至“頁面”的概念現(xiàn)在聽起來也比較過時。
我們將用四種新的專用產(chǎn)品替換頁面規(guī)則,從而提供更多的規(guī)則配額、更多的功能和更細的粒度。這些產(chǎn)品可立即用于測試。頁面規(guī)則并未下架,但我們預計能夠很快正式開始報廢流程。
為什么要更改?
自推出以來的10年里,頁面規(guī)則已成為一款成熟的產(chǎn)品,并且被廣泛采用。僅在過去三個月中就部署了100萬個頁面規(guī)則。
頁面規(guī)則用于調(diào)整文件應緩存多長時間,用于覆蓋某些URL的區(qū)域范圍設置,用于創(chuàng)建簡單的URL重定向,用于選擇性地添加/刪除HTTP標頭。頁面規(guī)則就是如同多刀工具一樣的產(chǎn)品。
Photo by Andrey Matveev on Unsplash
與多刀工具和其他通用產(chǎn)品一樣,頁面規(guī)則在許多方面都做得很好,但在任何方面都不是同類產(chǎn)品中的佼佼者。這是普遍性的權衡。隨著我們公司不斷成長,我們的客戶會理所當然地提出更多要求。僅過濾URL已經(jīng)不夠了;用戶要求更多,而如今,我們也正在交付更多。
在過去的兩年里,我們一直致力于頁面規(guī)則的未來,并將數(shù)百條反饋提煉成共同的主題,例如:
1.我需要超過125個頁面規(guī)則
2.我需要能夠在URL以外的地方觸發(fā)頁面規(guī)則
3.我需要能夠在我的頁面規(guī)則中使用正則表達式
4.我很難理解不同的頁面規(guī)則之間是如何相互影響的
5.頁面規(guī)則難以調(diào)試
6.我想在頁面規(guī)則中執(zhí)行更多操作
分析這些主題后,我們得出結(jié)論,對頁面規(guī)則而言,最好的辦法是拆解它并創(chuàng)建新的離散產(chǎn)品,每個產(chǎn)品都可能是其相關領域的同類產(chǎn)品中的佼佼者。這種拆解還將提供有關互操作的更優(yōu)清晰度(緩存vs配置vs...),并使調(diào)試更簡單。
今天,我們宣布推出這些新產(chǎn)品:
1.Cache Rules:用于設置和調(diào)整“所有緩存”的專用產(chǎn)品。
2.Configuration Rules:用于設置及選擇性地啟用、禁用和覆蓋區(qū)域范圍設置的專用產(chǎn)品。
3.Dynamic Redirects:與“轉(zhuǎn)發(fā)URL”類似,但最高為11。根據(jù)訪問者的所在國家/地區(qū)、首選語言、設備類型或者使用正則表達式(取決于方案級別)等進行重定向。
4.Origin Rules:針對“該流量從Cloudflare離開后去往哪里”的專用產(chǎn)品。我們不僅在這種新產(chǎn)品中添加了主機標頭和解析覆蓋(僅限ENT),還通過使客戶能夠選擇性地覆蓋目標端口,利用另一個常見的Workers用例創(chuàng)建產(chǎn)品。此外,我們還添加了覆蓋服務器名稱指示(SNI)的功能。
所有這四種產(chǎn)品現(xiàn)在都可以通過儀表板、API和Terraform使用,并將與Transform Rules一起成為取代頁面規(guī)則的產(chǎn)品套件,最終實現(xiàn)發(fā)布頁面規(guī)則壽命終止公告。
對于這些產(chǎn)品發(fā)布,每一個都有專門的博客,其中詳細介紹了它們提供的功能和解決的問題。
執(zhí)行順序
這個新產(chǎn)品套件的主要優(yōu)勢之一是清晰。
頁面規(guī)則是一個黑匣子,流量進入,“事情發(fā)生”,流量出來。很難調(diào)試緩存、配置、標頭修改等之間的相互作用,并且它可能因區(qū)域而異,因為它完全是用戶定義的。
其每個“功能”具有離散、獨立的區(qū)域,從而更輕松地可視化HTTP請求的流程:
現(xiàn)在不再是單個頁面規(guī)則,我們可以看到,Origin Rules將最先運行,然后是Cache Rules,然后是Configuration Rules,最后是Dynamic Redirects。這意味著我們將先修改主機標頭,然后再調(diào)整緩存設置。我們將會先調(diào)整緩存參數(shù),然后再修改為特定流量啟用哪些設置。
我們已將這些新產(chǎn)品集成到流量序列儀表板元素中。
(對于同時使用頁面規(guī)則和這套新產(chǎn)品的區(qū)域:新產(chǎn)品將優(yōu)先于頁面規(guī)則。這意味著如果發(fā)生沖突,頁面規(guī)則將被覆蓋)。
我需要超過125個頁面規(guī)則
頁面規(guī)則的限制之一是如何在我們的后端架構(gòu)上存儲和執(zhí)行每個頁面規(guī)則。我們最多只能為每個區(qū)域提供125個頁面規(guī)則,超過此數(shù)字,就會出現(xiàn)性能下降—HTTP請求的延遲時間開始增加,因為評估它們與頁面規(guī)則需要的時間越來越長。為了克服這一限制,用戶將簡單的工作負載轉(zhuǎn)移到了Workers,或者將區(qū)域分成多個子域,每個子域都有125個頁面規(guī)則配額。這些都不是客戶的理想選擇。
為了克服這一限制,我們將所有替代產(chǎn)品構(gòu)建在閃電般快速的規(guī)則集引擎上,該引擎還運行Transform Rules、Custom Rules(WAF)、Bulk Redirects和API Shield等產(chǎn)品。
這使我們能夠為客戶提供更多的配額,因為該引擎的構(gòu)建規(guī)模遠遠超過每種產(chǎn)品125個規(guī)則。下表總結(jié)了這些新產(chǎn)品的前后影響,顯示了每個計劃的默認規(guī)則配額:
無法為這些新產(chǎn)品購買額外的規(guī)則。
這意味著Enterprise計劃中的區(qū)域現(xiàn)在至少有500條規(guī)則可以使用,而之前它們通過頁面規(guī)則擁有125條規(guī)則。對于企業(yè)來說,新產(chǎn)品的配額是可以協(xié)商的。Pro計劃區(qū)域從20個頁面規(guī)則變?yōu)?00個。結(jié)合規(guī)則集引擎提供的精細控制,這些更改讓客戶能夠以最細微的差別自定義其區(qū)域的流量。
在規(guī)則集引擎上構(gòu)建所有這些產(chǎn)品的另一個好處是可擴展性。目前有超過30種產(chǎn)品在規(guī)則集引擎上構(gòu)建和運行。上述每一種產(chǎn)品本質(zhì)上都是一個稱為“階段”的邏輯桶,其中包含一個針對該產(chǎn)品的規(guī)則集。每個階段都僅限于特定的操作和字段,例如字段cf.bot_management.score在http_request_transform中不可用,因為我們在執(zhí)行URL重寫時還沒有計算機器人分數(shù)。此外,僅允許執(zhí)行重寫操作。而在Origin Rules(http_request_origin)中,我們只允許操作route
當我們?yōu)闃?gòu)建在規(guī)則集引擎之上的產(chǎn)品創(chuàng)建新功能時,我們很容易在以后將該新功能擴展到其他產(chǎn)品。
例如,我們在今年早些時候向Transform Rules添加了一個新的“字段”http.request.accepted_languages。此前這僅在Transform Rules中可用。但是,由于兩種產(chǎn)品都在規(guī)則集引擎上構(gòu)建,因此可以輕松為Dynamic Redirects啟用此功能。這將允許客戶根據(jù)訪問者的語言偏好執(zhí)行URL重定向,從工程角度來看,我們的成本可以忽略不計,因為該字段已經(jīng)實現(xiàn)。
這也意味著,在將來,如果根據(jù)客戶請求為Cache Rules創(chuàng)建了一個新字段,例如http.request.super_cool_field,只需點擊一下,我們就可以為其他30種產(chǎn)品中的任何一種啟用此字段,而不必跨多個平臺重復工作。
簡而言之,我們在規(guī)則集引擎之上構(gòu)建的產(chǎn)品越多,我們移動的速度就越快,也就可以將更多的功能交到用戶手中。
單一用戶體驗
最重要的好處是一致性。上述每一種產(chǎn)品都有一個一致且可預測的API。一致且可預測的Terraform配置,以及儀表板中一致且可預測的用戶體驗。規(guī)則集引擎允許我們保持一切不變,除了“操作”。過濾保持不變,API保持不變,UI(大部分)保持不變,唯一的變化是“…then”,即規(guī)則的操作部分。
這可以確保一點,作為用戶,當您在儀表板周圍單擊設置新區(qū)域時,您不必了解每個單獨的產(chǎn)品頁面以及如何導航它。您需要學習的唯一部分是該產(chǎn)品的獨特之處及其操作:
最后,當我們添加新產(chǎn)品時,可以輕松擴展Terraform提供程序以支持它。在這個項目中,這種一致的體驗一直是我們的目標,并將在未來繼續(xù)存在。
馬上試試吧
我們正在用一套新的產(chǎn)品取代頁面規(guī)則,每個產(chǎn)品都是同類產(chǎn)品中的佼佼者,并將更多的能力交到我們用戶的手中。在每篇專門博客中閱讀有關新產(chǎn)品的更多信息。然后,親自嘗試一下吧!