軟體工程師的隨時待命 (On-Call) 生活:亞馬遜工作經驗分享
[音樂]
這篇文章將分享我在亞馬遜工作的經驗,特別是作為隨時待命 (on-call) 工程師的生活。這是一項具有挑戰性,但也充滿學習機會的工作。
什麼是隨時待命 (On-Call)?
加入亞馬遜已經大約五個月了,這週是我第二次擔任隨時待命工程師。對於不熟悉這個概念的人來說,隨時待命Essentially是一種輪值制度,負責處理團隊支援系統或服務可能發生的任何問題或緊急情況。可以把它想像成第一道防線,如果發生問題,你就是那個無論白天黑夜都要付費解決問題的人。
- 主要職責: 處理系統或服務的突發狀況。
- 工作性質: 輪值,需隨時待命。
- 重要性: 確保系統穩定運行。
隨時待命的挑戰
我記得之前打算拍攝我第一次隨時待命的影片,但當時壓力實在太大了,完全無法拍攝。我從早上工作到凌晨,每天都這樣,甚至沒有時間吃飯。
- 高壓環境: 可能面臨緊急情況和長時間工作。
- 時間壓力: 需要快速解決問題。
- 生活影響: 隨時可能被呼叫,影響作息。
其中一個最可怕的惡夢就是在洗澡或出門時接到電話。雖然壓力很大,但也是一個很好的學習經驗,可以真正了解幕後運作的原理。
第一次隨時待命的驚魂記
在我第一次隨時待命的時候,我們受到另一個團隊的內部阻斷服務 (DDoS) 攻擊,他們以每秒數十萬次的請求轟炸我們的服務,最終導致服務中斷了幾個小時。
- DDoS 攻擊: 突如其來的流量攻擊導致服務中斷。
- 根本原因不明: 至今仍不清楚攻擊的原因。
- 損失慘重: 造成了數百萬美元的損失。
臨危受命
在你的第一次隨時待命輪值中,通常會有一位「反向影子」(reverse shadow) 擔任後援,讓你在他們指導和支援下處理事情。然而,我的反向影子,原本應該是我的資深工程師,不幸生病了。幸運的是,我的經理是前任資深工程師,填補了反向影子的角色。
但由於問題的嚴重性,需要所有人都加入。最終,我們讓組織中的每一位資深工程師,甚至一些外部團隊的工程師,都在同一個電話會議中試圖解決這個問題。請記住,當時我加入團隊可能只有三個月的時間,而我的經理卻要我主導整個過程,並在所有這些資深工程師面前分享我的螢幕,試圖實作一個熱修復程式和程式碼。我真的很緊張,甚至忘記了基本的 Java 程式碼是如何運作的。
這可能是我經歷過最 stressful 的情況之一,我仍然對此有惡夢。但我確實學到了很多關於團隊服務的知識,總體來說這是一個很棒的學習經驗。
運營會議 (Ops Meeting)
每週我們都會舉行一個稱為運營會議的會議。這基本上是一個總結會議,由前一週的隨時待命人員提交一份文件,內容涵蓋了前一次的輪值情況。他們會審查任何重大事件,重點介紹重要事件,並分享關鍵的學習或收穫。會議的主要目標之一是將任何未完成但重要的工單交給下一個隨時待命的人員。
- 回顧與總結: 檢討過去一週的事件。
- 知識傳承: 分享經驗和學習。
- 任務交接: 確保重要任務不被遺漏。
處理支援工單
除了高優先級的問題外,作為隨時待命工程師,你還需要處理佇列中的支援工單。這些工單涵蓋範圍很廣,從小的錯誤和用戶回報的問題,到關於某些功能如何運作的問題。還有相當數量的運營維護,或者我喜歡稱之為「清潔工」的工作。這不是這份工作中最令人興奮的部分,但對於保持一切順利運行絕對是必要的。
- 多樣化的任務: 從修復錯誤到回答用戶問題。
- 日常維護: 確保系統正常運作的必要工作。
- 保持系統健康: 清潔工工作的重要性。
警報工單 (Alarm Tickets) 的挑戰
最常見的工單之一通常是警報工單,有時也是最難和壓力最大的。它們會在系統出現問題時觸發,例如服務關閉或錯誤率激增。通常一開始並沒有明確的答案,這就是它們棘手的原因。找出根本原因需要挖掘日誌、審查最近的程式碼更改、檢查管道,有時甚至需要聯繫其他團隊以獲取上下文。這有點像當偵探,你必須從不同的來源拼湊線索才能完全了解發生了什麼以及原因。
- 問題根源不明: 需要深入調查。
- 跨團隊合作: 可能需要與其他團隊聯繫。
- 考驗偵錯能力: 需要像偵探一樣分析問題。
團隊合作的重要性
當我遇到無法解決的問題時,我的經理幫助了我,他告訴我將工單重新轉發給另一個團隊。當你遇到客戶影響問題太久,而且不知道如何解決或減輕它時,你可以隨時隨地呼叫另一位隊友,甚至是你的經理來尋求幫助。
- 尋求幫助: 不要害怕向他人求助。
- 團隊合作: 共同解決問題。
- 資源共享: 利用團隊的知識和經驗。
持續學習與成長
從隨時待命的角度來看,我們的標準會議是我們分享前一天工作內容和計劃今天要做的事情的地方,但它們也是一個很好的機會來指出任何主要的阻礙或減慢我們速度的障礙。這個想法是,有人可能有見解或解決方案來幫助你解除封鎖。
- 團隊交流: 分享進度和遇到的問題。
- 集思廣益: 尋求團隊的幫助和建議。
- 共同成長: 互相學習和提升。
如何有效地提問
詢問問題是很常見也很受鼓勵的,特別是向資深工程師或團隊中的其他開發人員提問,但是這裡面也是有技巧的。你不想一直打擾他們,而沒有先試圖自己找出答案。提出好的問題是一項技能。目標是幫助他們幫助你,這樣你就不會浪費任何人的時間。例如,我從來不只是問「我該怎麼做?」。相反,我會解釋我到目前為止嘗試過的方法,並詢問我是否走在正確的軌道上。這樣他們就可以指引我正確的方向,而不必一步一步地指導我。這關乎於善用資源並表明你在尋求幫助之前已經付出了努力。
- 先思考再發問: 自己嘗試解決問題。
- 明確問題: 清楚地表達遇到的困難。
- 展示努力: 讓對方知道你已經嘗試過哪些方法。
平衡工作與生活
在亞馬遜工作,隨時待命是一個重要的組成部分。雖然壓力很大,但也是一個學習和成長的機會。透過團隊合作、有效溝通和持續學習,可以更好地應對隨時待命的挑戰,並在工作中取得成功。
- 高強度工作: 隨時待命工作負荷高。
- 生活調適: 學習平衡工作與生活。
- 享受生活: 工作之餘也要放鬆身心。