我們從最新的基礎設施升級中吸取的 4 個教訓
已發表: 2022-05-04基礎設施升級。 一個常見的任務,尤其是對於像我們這樣的 SaaS 公司,對吧?
好吧,我們的最新版本不是典型的軟件升級,因為我們對其進行了一些改動。
主要目標是將我們的軟件升級到最新版本,但這次我們在項目中增加了兩個步驟 - 減少客戶必須列入許可名單的 IP 數量並實現數據庫冗餘。
雖然大部分更新進展順利,但我們在此過程中也遇到了一些服務中斷。
在接下來的幾行中,我們將分享有關我們執行升級的原因、進展情況以及我們最大的學習進展的幕後信息。
讓我們開始吧!
為什麼我們首先執行升級及其包含的內容
我們了解我們的責任以及 NitroPack 在客戶業務成功中所扮演的角色。 這就是為什麼確保最佳性能、最高安全標準和 24/7 服務穩定性至關重要的原因。
定期升級我們的基礎設施是確保所有這些的眾多方法之一。 如前所述,此特定升級分為三個部分:
1.將我們的軟件更新到最新的穩定版本
作為基於雲的解決方案,NitroPack 為我們的 100,000 多個客戶站點所做的所有優化都是在我們的基礎架構上執行的。 目前,我們使用 100 多台服務器來運行該服務。 通過此更新,我們必須將協調我們的服務器機群的軟件升級到最新的穩定版本。
2. 減少客戶必須列入許可名單的 IP 數量
簡而言之,我們的 IP 許可列表過程對用戶不友好。
在更新之前,我們的客戶必須將 40 多個 IP 地址列入許可名單,這些 IP 地址為 NitroPack 向客戶站點提供的傳出流量(請求)提供服務。 最重要的是,這些 IP 不是固定的,這意味著當我們的一台服務器退役時,一個新的服務器會出現一個不同的 IP 地址。
這個生成新 IP 的過程要求我們的客戶定期將幾十個新地址列入白名單,以便 NitroPack 成功優化他們的網站。
更新後,我們的客戶只需要將三個固定的、永不更改的 IP 列入許可名單。
3.實現數據庫冗餘
長期以來,我們希望實現數據庫冗餘,因為它可以提高 NitroPack 網站和儀表板的整體性能,並且我們將能夠增強服務安全性。 此外,此更新將使我們能夠以零停機時間執行未來的數據庫升級。
考慮到這些目標,我們將過程分為兩個步驟,在兩者之間留出一天的時間,所以我們有很多喘息的機會:
第 1 步:(11 月 4 日):減少 IP 數量
第 2 步:(11 月 6 日):數據庫冗餘和服務器軟件更新
但並非一切都按照我們的預期進行。
什麼沒有按計劃進行
儘管我們做了充分的準備,但我們在所有三個更新中都遇到了一些意想不到的問題。 這是發生的事情:
問題 #1:IP 更新過程中的連接問題
11 月 4 日,我們計劃執行初步服務更新,旨在減少 NitroPack 傳出流量的 IP 地址數量。
Т他最初的版本有一個內部軟件錯誤,不允許我們的服務在某些情況下創建傳出連接。 不幸的是,這個問題只在我們的基礎設施遇到高峰流量情況時出現。 這就是為什麼我們在初始測試期間沒有在暫存環境中檢測到問題的原因。 連接問題導致 NitroPack 無法可靠地執行傳出優化,並且我們的一些客戶經歷了幾個小時的服務不穩定。

好消息是,我們的開發團隊通過更新 HTTP 客戶端的軟件,設法迅速緩解了這個問題。
問題 #2:數據庫備份花費的時間比估計的要長
當我們在 11 月 6 日開始處理數據庫冗餘時,我們很快發現它需要的時間比計劃的要長得多。 這迫使我們在一天后推送服務器軟件升級。
但這是出於好意。 首先,我們希望在備份數據庫時非常謹慎,這樣我們就可以毫無問題地執行冗餘。
問題 #3:服務器錯誤減慢了軟件升級過程
當我們在 11 月 7 日開始部署服務器軟件升級時,一小部分(不到 1%)的服務器開始拋出意外錯誤,最終導致無法部署更新並減慢了整個過程。 沒有辦法自己解決問題,我們被迫將其上報給我們的服務器提供商。
雖然這看起來像是一個小問題,但考慮到任務的規模,這個意外錯誤導致一小部分(不到 2%)的 NitroPack 客戶經歷間歇性的短暫服務停機。
問題 #4:意外的 502 CDN 錯誤導致服務不穩定
當我們認為我們已經完成升級時 - 我們的監控系統開始記錄頻繁出現的 CDN 錯誤,HTTP 狀態代碼為 502。
不幸的是,該錯誤影響了我們所有的客戶,導致 CDN 資源交付不穩定幾天。 在檢查了問題後,我們發布了一個軟件更新,永久修復了服務的不穩定性。
一旦 NitroPack 的一切工作正常,我們就召開了一次回顧會議,根據我們從這次基礎設施升級中獲得的經驗,回顧我們未來可以改進的地方。
我們正在採取的措施以確保將來不再發生同樣的問題
總的來說,我們為整個升級的進展感到自豪。 我們偶爾會遇到服務不穩定的情況,但這是可控的,我們成功避免了整個客戶群的整個服務停機。
然而,我們知道,拍拍自己的後背並完全專注於正確的事情不會推動我們作為一家公司和服務向前發展。
這就是為什麼我們要傳達我們將實施的改進,以便以更有效的方式執行未來的升級。 以下是要點:
可進行壓力測試的暫存環境
這將使我們能夠檢測僅在具有數万個請求的大容量情況下發生的錯誤。 例如,這將幫助我們提前識別 HTTP 客戶端和可重用連接問題,並且我們將能夠在不中斷的情況下執行 IP 更新。
更好的監控和警報系統
根據此次升級過程中出現的問題,我們能夠確定我們缺乏監控和警報的區域。 好消息是我們已經為這兩個區域進行了配置。
更好的跨團隊協作和更積極的客戶溝通
由於參與升級的各個團隊彼此之間的同步並不理想,我們覺得我們無法主動及時地與現有客戶溝通升級進度。 我們有我們的 status.nitropack.io 頁面,所以每個人都可以關注升級過程中發生的事情,但這還不夠。
下一次,我們將通過社交媒體、電子郵件、儀表板和網站等盡可能多的渠道傳達升級進度!
與我們的服務器提供商更好地協調
對於未來的更新,我們將努力與我們的服務提供商更好地協調,以確保及時解決意外問題。 這將幫助我們更有效地處理不可預見的服務器錯誤。
最後,我們要感謝所有客戶的耐心和理解。 您的信任是我們不斷改進服務的動力。
