FLAME पैटर्न: एप्लिकेशन की लचीली स्केलिंग के लिए एक नया दृष्टिकोण
- Serverless/FaaS(Function as a Service) लचीली स्केलिंग और उपयोग-आधारित भुगतान जैसे फायदे देता है, लेकिन व्यवहार में यह अधिक जटिलता भी पैदा करता है।
- अगर मौजूदा app code को functions में wrap करके अस्थायी app copies में चलाया जा सके, तो automatic scaling संभव हो सकती है।
- FLAME(Fleeting Lambda Application for Modular Execution) पैटर्न पूरे application को एक lambda की तरह मानता है और उसके modular हिस्सों को अल्पकालिक infrastructure पर चलाता है।
FLAME पैटर्न
- FLAME पैटर्न server management के बिना app code के खास हिस्सों के लिए demand-based, सूक्ष्म स्तर की लचीली स्केलिंग चाहता है।
- इसके लिए मौजूदा application को फिर से लिखने या proprietary runtime में आंशिक रूप से लिखने की जरूरत नहीं है।
- Elixir की flame library FLAME पैटर्न को implement करती है और इसमें Fly.io backend adapter शामिल है, लेकिन इसे किसी भी cloud पर इस्तेमाल किया जा सकता है जो app code चलाने के लिए API देता हो।
FLAME backend
- Fly.io infrastructure पर
FLAME.FlyBackendएक नई Machine boot करके लगभग 3 सेकंड के भीतर parent job से connect कर सकता है। - FLAME डिफ़ॉल्ट रूप से
LocalBackendऔरFlyBackendदेता है, लेकिन कोई भी host जो servers provision कर सके और app code चलाने के लिए API दे सके, FLAME backend की तरह काम कर सकता है। - Fly.io applications को Docker image के रूप में package करके चलाता है, इसलिए उसी image से नई Machine boot करना ही काफी है।
FLAME के बाहर Elixir
- Elixir FLAME मॉडल के लिए बहुत उपयुक्त है क्योंकि यह process supervision और distributed messaging जैसी सुविधाएँ बिना अतिरिक्त लागत के देता है।
- अगर किसी language में उचित concurrency primitives हों, तो यह पैटर्न वहाँ भी उपयोग किया जा सकता है।
- JavaScript applications में भी FLAME पैटर्न को implement करने के उदाहरण हैं, जहाँ modular execution को नई file में ले जाकर चलाया जाता है।
Background job processor के बारे में
- FLAME background job processor के भीतर अच्छी तरह काम करता है, लेकिन job library द्वारा job pool को scale करना एक अलग समस्या है।
- durability सुनिश्चित करने वाले jobs और elastic execution को अलग रखना महत्वपूर्ण है।
लचीली स्केलिंग के लिए pooling
- Elixir के FLAME implementation के जरिए elastic pool के runners को define किया जा सकता है, जिससे zero तक scale करना और अधिकतम concurrency limit वाले FLAME servers को लचीले ढंग से scale करना संभव होता है।
Process placement
- Elixir में state वाले application हिस्से process primitives के इर्द-गिर्द बनाए जाते हैं, और वे
FLAME.callयाFLAME.castमें wrap किए जाने पर अच्छी तरह काम करते हैं।
Remote monitoring
- जब parent runner को spin up करता है, तो runner को बिना काम के समय खुद idling manage करना चाहिए और parent node से connection टूटने पर सुरक्षित रूप से बंद हो जाना चाहिए।
GN⁺ की राय
इस लेख की सबसे महत्वपूर्ण बात यह है कि FLAME पैटर्न मौजूदा serverless/FaaS दृष्टिकोण की जटिलता को कम करते हुए application की elastic scaling को सरल बना सकता है। यह पैटर्न developers को मौजूदा code में बड़े बदलाव किए बिना केवल ज़रूरी हिस्सों को तेज़ी से scale करने में मदद करता है, और यही इसे cloud infrastructure का उपयोग करने वाले कई software engineers के लिए एक आकर्षक समाधान बना सकता है। FLAME पैटर्न खासकर Elixir जैसी languages में एक शक्तिशाली tool बन सकता है, और अन्य languages में इसके implementation की संभावना भी खोजी जा रही है, जिससे अलग-अलग development environments में इसके उपयोग की उम्मीद बढ़ती है।
1 टिप्पणियां
Hacker News राय
100 से अधिक Lambda functions से बने एक application को 4 साल तक संभालने के दौरान झेली गई पीड़ा और जटिलता के बारे में यह लेख serverless FaaS architecture की कमियों को अच्छी तरह दिखाता है.
लेख के लेखक के रूप में, वे उम्मीद करते हैं कि FLAME pattern को JavaScript, Go जैसी दूसरी भाषाओं में लागू करने की रुचि लोगों में पैदा होगी, और वे सवालों के जवाब देने के लिए तैयार हैं.
PiCloud service पहले ऐसा मॉडल इस्तेमाल करती थी जो jobs को transparently workers तक भेजता था, और इससे संकेत मिलता है कि ऐसा तरीका Elixir के अलावा दूसरी भाषाओं में भी समान रूप से लागू हो सकता है.
FLAME का उपयोग करने पर मौजूदा app code को function में wrap करके app की एक अस्थायी copy में चलाया जा सकता है, जो serverless environment में process fork करने जैसा है.
Windmill.dev source code स्तर पर abstraction unit पर विचार करता है, मुख्य functions और imports को parse करके arguments और dependencies निकालता है, और code को इच्छित runtime में चलाता है.
FLAME के साथ development और test runners local backend पर चलते हैं, इसलिए यह serverless environment में अच्छा local development experience देता है.
हर बार
Flame.callइस्तेमाल करने पर एक नया app process शुरू होता है और execution context की copy बनती है; यह scaling के लिए एक सरल समाधान है, लेकिन app startup time में जुड़ने वाली latency और memory usage पर विचार करना ज़रूरी है.Hacker News की headline capitalization पर आलोचना के साथ, serverless सिद्धांतों पर नहीं बल्कि serverless.com कंपनी के पुनर्विचार की आशा व्यक्त की गई है.
Inngest.com भी ऐसा ही तरीका देता है जिसमें मौजूदा code को serverless functions के रूप में इस्तेमाल किया जा सकता है, code की state को बाहर से manage किया जाता है, और monitoring तथा observability के महत्व पर ज़ोर दिया जाता है.
"Long Lambda" नाम का एक system बनाया गया ताकि अगर Lambda 15 मिनट से अधिक चल सके तो सारा काम Lambda में संभाला जा सके, और इसे local में run तथा debug भी किया जा सके.
यह सारांश हर comment के मुख्य बिंदुओं को संक्षेप में बताता है, और इसे शुरुआती software engineers के लिए आसानी से समझ आने वाले स्तर पर लिखा गया है. जहाँ background knowledge की ज़रूरत थी, वहाँ उसे न्यूनतम रखा गया है, और तटस्थ रुख बनाए रखते हुए विषय से भटका नहीं गया है.