Railway ने GCP आउटेज का विवरण दिया और Google Cloud छोड़ने का फैसला किया
(blog.railway.app)- Railway ने Google Cloud आधारित प्लेटफ़ॉर्म चलाते समय us-west की कुछ मशीनों के क्रमिक रूप से रुकने और automatic failover के विफल होने की घटना झेली, जिसके कारण user workloads को बहाल करने के लिए manual response की ज़रूरत पड़ी
- अलग-अलग instances लगभग 10 मिनट तक offline रहे, और 16:40 UTC पर शुरू हुई घटना के बाद 20:53 UTC पर सभी workload failover और service recovery पूरी हुई
- Railway ने पिछले 18 महीनों में networking instability, Artifact Registry quota reduction, और support response से जुड़ी समस्याएँ झेलीं, जिसके बाद उसने अपना networking stack और अपना registry बना लिया
- जांच के दौरान CPU soft lockup और
kvm_wait,__pv_queued_spin_lock_slowpathstack traces दिखे, और Railway ने GCP guest तथा hypervisor interaction को संभावित मुख्य कारण माना - Railway ने Google Cloud सेवाएँ बंद कर अपने bare metal instances पर जाने का फैसला किया है; पहला instance पहले ही चालू किया जा चुका है और 2024 में पूरा migration करने की योजना है
us-west में हुई rolling outage
- Railway, Google Cloud Platform उत्पादों जैसे Google Compute Engine के ऊपर अपना application development platform चलाता रहा है
- 1 दिसंबर 2023 को 16:40 UTC से us-west fleet की कुछ मशीनें एक-एक करके unresponsive होने लगीं
- हर instance लगभग 10 मिनट तक offline रहा
- outage rolling तरीके से जारी रही
- automatic failover काम नहीं कर पाया, इसलिए manual failover करना पड़ा
- 20:53 UTC तक सभी workloads का failover सफल हो गया और service बहाल हो गई
- Railway ने जांच के बाद निष्कर्ष निकाला कि GCP guest के userspace-to-kernel memory transfer से जुड़ा interaction resource pressure की स्थिति में दुर्लभ रूप से softlock पैदा कर सकता है
18 महीनों में जमा हुई Google Cloud की समस्याएँ
- Railway ने पिछले 18 महीनों में Google Cloud से जुड़ी कई operational समस्याएँ झेलीं
-
networking instability
- 2022 में Google cloud products में लगातार networking interruptions हुईं
- Google तक कई बार escalation करने के बाद Railway ने अपना networking stack बना लिया
- यह stack resilient eBPF/IPv6 Wireguard network है और अभी सभी deployments को चलाता है
- इसके बाद networking समस्याएँ खत्म हो गईं
-
Artifact Registry quota
- Railway के अनुसार, 2023 में Google ने Artifact Registry quota को मनमाने ढंग से लगभग 0 के करीब घटा दिया
- image deployment throughput काफी कम हो गया और builds में देरी हुई
- इसके बाद Railway ने अपना registry product बनाया और registry throughput की समस्या भी खत्म हो गई
support response और bare metal migration का फैसला
- Railway का कहना है कि वह Google Cloud को सालाना कई मिलियन डॉलर चुका रहा था, लेकिन ऐसी स्थितियों में जहाँ Google की कार्रवाई Railway और दूसरे ग्राहकों के workloads को प्रभावित कर रही थी, उसे पर्याप्त response नहीं मिला
- संस्थापक ने संबंधित समस्याएँ X पर पोस्ट करने के बाद Google ने संपर्क किया, और Railway ने Google के VPs के साथ समस्या के कारणों पर चर्चा की
- Railway के अनुसार, Google का एक engineer GCP quota को मनमाने ढंग से बदल सकता था
- Railway के अनुसार, Google के VPs ने माना कि यह स्थिति स्वीकार्य नहीं है
- जून के बाद भी Railway retrospective, official response, और arbitrary quota changes रोकने वाली policy की मांग करता रहा है
- Railway के अनुसार, इसी दौरान Google ने बिना पूर्व चेतावनी ToS बदल दिया, जिससे Railway की लागत 20% बढ़ गई
- Google ने कहा था कि वह इस मुद्दे पर भी जवाब देगा, लेकिन Railway का कहना है कि अभी तक जवाब नहीं मिला
- Railway ने पिछली तिमाही में आंतरिक रूप से फैसला किया कि वह सभी Google Cloud सेवाएँ बंद करके अपने bare metal instances पर जाएगा
- पहला bare metal instance कुछ हफ्ते पहले चालू हो चुका है
- सभी instances का migration 2024 में किया जाना है
30 नवंबर और 1 दिसंबर की outage progression
- 30 नवंबर 2023 को 21:41 UTC पर Google द्वारा मशीन restart किए जाने के दौरान एक box offline हो गया
- Railway के पास ऐसी स्थितियों को detect और resolve करने वाला automatic system है
- उस box का failover सामान्य रूप से हो गया और कोई page नहीं गया
- 1 दिसंबर 2023 को 16:52 UTC पर एक box inaccessible होकर offline हो गया
- automatic failover के बाद भी वह सामान्य रूप से recover नहीं हुआ
- primary on-call engineer को बुलाया गया, और जांच के दौरान दूसरे boxes भी offline होकर वापस नहीं आए
- Railway ने boxes का manual failover शुरू किया
- हर host पर लगभग 10 मिनट का downtime हुआ
- जल्दी ही लगभग 12 boxes प्रभावित हो गए और कंपनी के लगभग आधे लोग runbook के अनुसार response में लग गए
- Google Cloud की automatic live migration जैसी serial log patterns की वजह से शुरुआत में यह माना गया कि Google का routine restart ही गलत तरीके से हुआ है
- Google की तरफ़ के प्रभारी को email भेजा गया, लेकिन तुरंत out-of-office auto-reply मिला
serial console logs में दिखे संकेत
- Railway ने सबसे पहले serial console logs की जांच की
- ये logs virtualized serial device के जरिए सीधे kernel से निकलते हैं
- logs में soft-locked CPU core और lock हुए CPU के stack traces दिखे
- उदाहरण के तौर पर
kvm_wait,__pv_queued_spin_lock_slowpathदिखे
- उदाहरण के तौर पर
- Railway ने इस तरह के logs और behavior आख़िरी बार पिछले साल दिसंबर में Google द्वारा शुरू किए गए restarts के समय देखे थे
- उस समय भी तीन boxes में यही पैटर्न दिखा था
- आगे की जांच में GCP की nested kernel virtualization और soft lockup से जुड़े threads से मेल खाते kernel errors मिले
- Google ने संबंधित bug को स्वीकार किया था, इसका उदाहरण Railway ने Kubernetes issue comment से दिया
- दूसरे user complaints के उदाहरण के रूप में Stack Overflow case 1, Stack Overflow case 2 दिए गए
- Railway ने कहा कि वह उन hosts पर अपनी virtualization का उपयोग नहीं कर रहा था, इसलिए
kvmऔर paravirtualization से जुड़े messages को उसने GCP hypervisor के साथ interaction करने वाले guest kernel code का संकेत माना - GCP ने मिलती-जुलती समस्या को reproduce नहीं किया जा सका के रूप में संभाला हुआ लगता है, लेकिन Railway का मानना है कि यह घटना उसी श्रेणी की है
अनुमानित कारण और mitigation steps
- Railway का मानना है कि GCP guest के userspace-to-kernel memory transfer में एक संभावित गंभीर interaction है, जो resource pressure की दुर्लभ स्थिति में softlock पैदा करता है
- अधिक विशेष रूप से, उसका मानना है कि paravirtualized memory management और hypervisor में pages के map और remap होने का तरीका कुछ खास resource pressure स्थितियों से जुड़ा है
- Railway ने यह भी समानता बताई कि लगभग सभी मिलती-जुलती reports GCP users से आई हैं
- Railway के अनुमान से यह बात भी मेल खाती है कि Google अधिकतर MMIO commands को userspace में handle करता है
- संदर्भ के लिए Railway ने Google Cloud blog और YouTube video दिए
- अगर यह आकलन सही है, तो CPU, memory, और IOPS metrics में सीमा से नीचे होने पर भी, undisclosed rate limits, thresholds, या conditions की वजह से boxes softlock हो सकते हैं
- उस समय मशीनें प्रकाशित resource limits के लगभग 50% स्तर पर थीं
- Railway ने manual reboot के बाद प्रभावित instances पर resource pressure घटाने के लिए कुछ internal services disable कीं, और इसके बाद instances स्थिर हो गए
users पर प्रभाव
- manual failover के दौरान हर मशीन पर प्रति host 10 मिनट का downtime हुआ
- कई users multi-service workloads चला रहे थे, इसलिए boxes के लगातार offline होने से downtime कई बार जुड़ सकता था
- Railway ने users से माफ़ी मांगी और कहा कि बेहतर reliability के लिए वह अपने bare metal पर migrate कर रहा है
1 टिप्पणियां
Hacker News की राय
हम 2 लोगों की छोटी software company हैं, और हमें भी कई सालों से Google Adwords की वजह से Google के साथ काफी समस्याएँ रही हैं। उदाहरण के लिए:
https://successfulsoftware.net/2015/03/04/google-bans-hyperl...
https://successfulsoftware.net/2016/12/05/google-cpa-bidding...
https://successfulsoftware.net/2020/08/21/google-ads-can-cha...
https://successfulsoftware.net/2021/05/04/wtf-google-ads/
अगर वे मूल लेखक जैसे व्यक्ति को भी, जो Google को बड़ी रकम चुकाता है, ठीक-ठाक support देने के इच्छुक नहीं हैं, तो हमारे जैसे छोटे business के लिए क्या उम्मीद बचती है?
कुल मिलाकर, मुझे लगता है कि पिछले कुछ सालों में GCP ने दिशा खो दी है। कुछ साल पहले तक compute, storage और bandwidth के price-performance के मामले में यह AWS से सार्थक रूप से बेहतर विकल्प था, और हमने अपने workloads के लिए detailed performance tests और cost modeling करके इसकी पुष्टि भी की थी
उस समय support भी बेहतरीन था। शुरुआत में खोला गया एक अस्पष्ट network issue ticket जल्दी escalate हुआ, अलग-अलग regions के engineers ने उसे handoff करके solve किया, और आखिरकार GCP की तरफ का change rollback किया गया। sales representative ने भी internal resources से जल्दी connect कराया, जिससे पूरा अनुभव सकारात्मक रहा
अब AWS ने price-performance में साफ तौर पर बराबरी कर ली है, और कई managed services में वह अब भी कई साल आगे है। दूसरी तरफ GCP support काफी खराब हो गया है; ज्यादातर cases शायद outsourced support providers के पास जाते हैं, और उन्हें असली GCP infra की visibility हमसे खास बेहतर लगती भी नहीं
sales experience भी बहुत खराब हो गया है और हमारा मौजूदा rep साफ तौर पर net negative है। हमने GCP में बड़ा investment किया है, लेकिन सुधार के संकेत नहीं दिख रहे, इसलिए हम GCP spend घटाने का काम सक्रिय रूप से कर रहे हैं। पहले मैं GCP advocate था, लेकिन अब किसी नए project को GCP पर डालने की सलाह देना मुश्किल है
यह सच है कि सभी cloud providers में समस्याएँ होती हैं। पिछले 2 सालों में काम के दौरान मैंने Keyspaces, Amazon Aurora, और App Runner से जुड़ी कई समस्याएँ खोजकर report कीं; सभी से performance degradation हुआ और AWS support ने गलत जगह खुदवाकर समय बर्बाद कराया
कई हफ्तों तक escalation के बाद ही project owners ने समस्याएँ मानीं, और उनमें से कुछ तो पहले से known issues थीं, फिर भी support team ने हमारा समय खराब करवाया। फिलहाल हम Keyspaces में बंधे हुए हैं, लेकिन अब EC2, EBS, S3 जैसी core services के अलावा कुछ इस्तेमाल नहीं करना चाहते। उससे बाहर जाना risky है
जब कोई company सभी logs के लिए CloudWatch इस्तेमाल करती दिखती है, तो लगता है कि शायद अनुभव की कमी के कारण उन्हें कई alternatives का पता नहीं है। फिर भी compute services भरोसेमंद हैं
GCP में एक compute instance नीचे चला गया, इस पर दोष देना हास्यास्पद है। मूल लेखक ने भी माना कि यह दुर्लभ घटना थी, लेकिन AWS में मैंने instances को force stop होते या पूरी तरह गायब होते अक्सर देखा है। 99.95% durability और 99.999% में बड़ा फर्क है
अगर वही architecture AWS पर चलाया होता, तो मेरे अनुभव के हिसाब से लगातार outages होते। AWS docs और मेरे अनुभव के अनुसार AWS के basic building blocks GCP की तुलना में बहुत कम stable हैं
वे शायद bare metal पर जाने की सोच रहे हैं, जिसका साफ फायदा यह है कि on-call engineer से सीधे कह सकते हैं कि किसी तरह इसे ठीक करो
[0] https://aws.amazon.com/compute/sla/
[1] https://cloud.google.com/compute/sla
Google Cloud Support के साथ, खासकर managed services के मामले में, मेरा काफी interaction रहा है, और समान scale के AWS usage में support experience हमेशा शानदार रहा, उसकी तुलना में ईमानदारी से कहूँ तो यह बहुत प्रभावशाली नहीं था
हालांकि Google Cloud में अगर किसी ने सचमुच अच्छी मदद की हो, तो उसकी खूब तारीफ करना अच्छा है। ऐसी चीजें जितनी दुर्लभ हैं, strong positive feedback देकर उन्हें reward दिलाने में कोई बड़ा बोझ भी नहीं है। मेरे साथ भी चार वाकई शानदार experiences हुए, और मैंने हर बार तुरंत TAM को message भेजा। उम्मीद है ऐसे लोगों को reward और promotion मिले
मैंने करीब 10 साल तक projects में GCP को बीच-बीच में इस्तेमाल किया है, और उस पर कई सफल businesses भी बनाए हैं। perfect नहीं था, लेकिन कुल मिलाकर मैं संतुष्ट हूँ
इसके उलट, Cloud Foundry का शुरुआती hosted version बनाने वाली team में AWS काफी इस्तेमाल किया था, और वहाँ वापस नहीं जाना चाहूँगा। वह endless chaos था
GCP में एक बहुत ही enterprise जैसा फीचर कभी टूट गया था, और यह साफ़ सामने आया कि वह फीचर उस समय तक कभी ठीक से काम ही नहीं कर पाया था। चुपचाप ठीक करने की कोशिश में downtime भी हो गया, और GCP के प्रतिनिधि कारण समझाने वाली call में बस बार-बार यही याद दिलाते रहे कि सब लोग NDA के तहत हैं
ऊपर की बात मान लेते तो regulated industries के लिए यह एक nightmare बन जाता
“1 दिसंबर सुबह 8:52 PST पर एक box offline हो गया और accessible नहीं रहा। और failover के बाद उसे अपने-आप वापस आना चाहिए था, लेकिन नहीं आया। primary on-call engineer को alert मिला और वह investigate कर रहा था, तभी एक और box offline हो गया और वापस नहीं आया”
यह बात समझ में नहीं आती। Machine restart हुई और catastrophic failure हो गया? VM कभी-कभी reboot होते हैं। लेकिन अगर उस scenario में पूरा configuration अपने-आप ढह जाने के लिए design किया गया था, तो AWS पर shift करें या फिर अपना colocation इस्तेमाल करें, मुझे तो पसंद नहीं आएगा
और लेख में कहीं भी नहीं कहा गया कि यह “catastrophic failure” था। पूरा Railway down नहीं हुआ था, लेकिन Railway एक deployment company है, इसलिए वह customer applications deploy करने के लिए compute resources resell करता है। इसलिए अगर एक VM down हो जाए और automatic failover न हो, तो उस machine पर service चला रहे खास customers के लिए downtime हो जाता है
लेख में भी लिखा है, “इन machines का manual failover करते समय प्रति host 10 मिनट का downtime हुआ। कई users multi-service workloads चलाते हैं, इसलिए boxes के एक-एक करके offline होने से यह downtime कई गुना बढ़ सकता है। सभी users से गहरी माफी”
दिलचस्प बात है कि मुझे लगने लगा है कि GCP में undocumented thresholds काफी आम लगते हैं
Cloud Run में भी मैंने ऐसा ही कुछ अनुभव किया। Documentation में scaling को control करने वाली CPU usage और concurrent requests की criteria से explain न होने वाले scaling events हुए थे
paid support के साथ काफी लंबी बातचीत के बाद पता चला कि request duration से जुड़ा एक अतिरिक्त criterion है, लेकिन जाहिर है, कोई भी उसे detail में explain नहीं कर पाया
लगता है अब यह यहाँ documented है: https://cloud.google.com/run/quotas#cloud_run_bandwidth_limi...
https://hacks.mozilla.org/2022/02/retrospective-and-technica...
यह वाकई बहुत frustrating experience लगता है। हालांकि जब VM के अंदर virtualization इस्तेमाल नहीं हो रही है, तो nested virtualization का इस issue से क्या संबंध है, यह थोड़ा confusing है। soft lock आम तौर पर progress न होने का एक broad signal होता है
MMIO instructions से जुड़ी comment भी इसी तरह उलझाने वाली है। अगर बात instruction emulation की है, तो यह कहाँ हो रही है, यह क्यों महत्वपूर्ण है, समझ नहीं आता। वैसे भी यह slow होगी और user space से बंधी होगी; अगर इसे fast चलना है, तो guest से बाहर निकलना ही बहुत कम होना चाहिए, और emulation तो और भी कम
लगता है author frustrate होकर हाल की घटना के बारे में अपनी समझ की सीमा में जो भी पकड़ में आ रहा है, उससे cause ढूँढने की कोशिश कर रहे हैं
“2022 में हमने Google cloud product में लगातार network transient failures झेले। Google को कई बार escalate करने के बाद थककर हमने अपना networking stack बनाया—यानी सभी deployments को चलाने वाला resilient eBPF/IPv6 Wireguard network। इसके बाद अचानक network problems गायब हो गईं”
मेरी समझ से VM के लिए network switch में program किए जाने वाले VLAN होते हैं, और VPC बनाते समय शायद VLAN ही बनता होगा; ऐसे में अगर underlying network unstable है, तो overlay UDP/WireGuard कैसे ज़्यादा stable हो सकता है, यह जानने की curiosity है
साथ ही, ऐसे customer के लिए अगर AWS पर इस problem का 1/10 भी हुआ होता, तो solution architects की फौज हर दो हफ्ते conference room में बैठकर architecture review करती और support engineer को call पर जोड़ती
material पुराना है, लेकिन अंदाज़ा लगाने में मदद करता है: https://www.usenix.org/conference/nsdi18/presentation/dalton
अपना network stack बनाते समय उन्होंने ऐसी optimizations को bypass किया, और WireGuard मूल रूप से unreliable UDP के ऊपर बना है, इसलिए शायद intermittent failures को बेहतर handle कर पाया