黄色网站入口国产美女,精品国产欧美另类一区,国产一区二区美女自慰,日日摸夜夜添无码国产

選擇你喜歡的標簽
我們會為你匹配適合你的網址導航

    確認 跳過

    跳過將刪除所有初始化信息

    您的位置:0XUCN > 資訊 > 技術
    新聞分類

    Let's Encrypt 證書簽發(fā)限速機制的技術優(yōu)化與演進

    技術 PRO 稿源:虞大膽的嘰嘰喳喳 2025-04-07 06:25

    Let's Encrypt 為 5.5 億個網站提供?TLS 證書,每小時要簽發(fā) 34 萬個證書,為避免濫用簽發(fā)證書,使用了限速功能(rate limiting)。

    最近 Let's Encrypt 官方分享了相關的技術演化,非常值得學習,需要說明的是 Let's Encrypt 并沒有幾個專職的開發(fā)工程師,所以整優(yōu)化時間也非常長。

    1:2015 年,Let's Encrypt 開始提供免費證書,最初基于域名進行限速,key = label + eTLD 頂級域,比如?http://new.blog.example.co.uk?申請證書,那么 key 就是?http://example.co.uk。

    為了實現(xiàn)限速功能,Let's Encrypt 在?MariaDB?授權表中(authorizations table)中存儲證書簽發(fā)信息(包括域名、日期等關鍵字段),限速的時候在特定時間窗口掃描符合條件的行數。

    2:2019年,證書簽發(fā)越來越多,Let's Encrypt新增了 6 個限速標準,本意是為了減少證書的請求,減少對系統(tǒng)的保護,但由于對授權表的大量掃描,負載反而標高了。

    這種技術方案很快就遇到瓶頸了,是使用現(xiàn)有的方式優(yōu)化索引,還是設計專用的表?需要在性能、復雜性和長期可維護性之間取得平衡。

    3:2021年底的時候,MariaDB 使用主從的架構,限速功能的讀取就路由到了從庫,雖然減低了主庫的負載,但高峰時間會出現(xiàn)主從的延遲,導致限速功能會受到影響。

    4:最初限速功能設計的比較粗暴,一旦用于觸發(fā)了速率限制,就會好幾天無法申請證書,就算擴大限制串口時間,這一問題還是會存在,這種解決方案非常不靈活而且具有破壞性。

    2022年 Let's Encrypt 開始使用令牌桶(token-bucket)的解決方案,就是動態(tài)調整頒發(fā)證書的頻率,而且一旦受限,API會返回 Retry-After 信息,告訴用戶多久再去簽發(fā)證書。

    5:2023年,限速帶來的負載會極大影響 MariaDB 可靠性了,授權表比其他表的讀取多出一個數量級,Let's Encrypt 評估了多種技術方案,但大多行不通。

    比如雖然授權表的舊記錄可以刪除,但 MariaDB 刪除性能很差,而且刪除數據的時候,InnoDB 存儲引擎需要維護索引、外鍵、事務日志,導致刪除操作開銷非常大,特別在高并發(fā)環(huán)境下刪除更慢了。

    Let's Encrypt 在非授權表中通過?PARTITION?命令來清除分區(qū)表舊數據,但對于授權表卻行不通,因為它使用了?ON DUPLICATE KEY UPDATE?機制,而分區(qū)表要求要求主鍵必須包含在分區(qū)鍵中,兩者不兼容。

    另外授權表的索引非常大,甚至比數據表本身還大,內存占用非常大,導致數據庫壓力太大,不得不經常刪除舊數據。

    2023 年底,Let's Encrypt 決定徹底重構限速系統(tǒng)!

    6:Redis?替換 MariaDB

    為什么選擇 Redis 呢,結合限速系統(tǒng),它有幾個優(yōu)勢,首先?Redis 支持高并發(fā)、高吞吐、低延遲。

    其次限速存儲的數據是暫時的,過一段時間就可以刪除,而 Reids 的 TTL 機制可以主動清除舊數據,從而 Reids 存儲的數據比數據庫少了非常多。

    最后?Redis 支持原子性,也不會產生數據競爭,通過?SETNX?命令可以原子且不會重復寫入,再加上 Pipeline 功能,可以一次性讀取和更新多個鍵,可以說限速功能特別適合使用 Redis,簡單、靈活、高效!

    7:GCRA

    有了 Redis,Let's Encrypt 最后采用GCRA(Generic Cell Rate Algorithm)算法進行限速,它最早用于電信網絡流量控制。

    上述提到的令牌桶算法相對來說有幾個缺點,第一它的滑動窗口是固定的,如果某個桶的token沒有消耗完,則后續(xù)也無法使用,顯得不太公平,其次在具體實現(xiàn)上不是特別高效和優(yōu)雅,比如需要考慮桶更新的并發(fā)問題,存儲和計算效率并不高。

    而 GCRA 可以優(yōu)雅解決這兩個問題,僅需維護最近請求的 TAT 時間點,并用突發(fā)容忍度(burst tolerance)控制并發(fā),當請求時間 >= TAT,則允許請求,且 TAT 更新為當前時間;如果請求時間 + 突發(fā)容忍度 >=TAT,則也允許請求,TAT 更新為當前時間, 突發(fā)容忍度減一。

    好處是什么呢?能夠平滑的控制簽發(fā)證書的時間,而突發(fā)容忍度是為了避免并發(fā)帶來的問題,最后只需要維護一個 TAT ,存儲和計算效率更高。

    8:效果

    最后效果肯定非常好,比如數據庫的延遲大大減少了,而且即使流量很大的情況,整體負載也很平穩(wěn),下圖就是各個表改造前后的延遲情況對比,值越小越好。

    再比如數據庫操作也更加監(jiān)控了,下圖可以看出數據庫操作非常平穩(wěn)。

    8:思考

    最后說說給我的幾個啟示,很多技術解決方案并不是一蹴而就的,首先不能因為改造影響現(xiàn)有業(yè)務,其次也不能立刻就去改造,必須思考成熟,考慮效率、可維護性、可擴展性,最終就是一個平衡。

    具體技術上,Let's Encrypt 選擇了一個很好的存儲和計算系統(tǒng),再加上優(yōu)雅的算法,最終讓核心業(yè)務能夠平穩(wěn)支撐!

    0XU.CN

    [超站]友情鏈接:

    四季很好,只要有你,文娛排行榜:https://www.yaopaiming.com/
    關注數據與安全,洞悉企業(yè)級服務市場:https://www.ijiandao.com/

    圖庫
    公眾號 關注網絡尖刀微信公眾號
    隨時掌握互聯(lián)網精彩
    贊助鏈接