Transcript for:
Node.js आर्किटेक्चर की समझ

हे एब्रिवन, विलकम बाक और विलकम टू एनदर वीडियो और नोट जेस सीरीज और इस वीडियो में हम देखने वाले हैं वोट टेस आर्किटेक्चर अफ नोट जेस इस वीडियो में हम देखने वाले हैं ताट नोट जेस का आर्किटेक्चर क्या होता है नोट जेस इंटरनली कैसे वर्क करती है और ये वीडियो सूपर डूपर इंपोर्टेंट है तो ये वीडियो बहुत बहुती जाधा इंपोर्टेंट है तो लेट साट विद वीडियो तो इस वीडियो में देखते हैं that Node.js का architecture कैसे काम करता है तो हमारा जो Node.js का architecture है हमारा जो Node.js का flow है वो start होता है एक client से तो ये कौन है ये client है client कौन होता है आप मैं एक client है एक user हमारे server का एक client होता है तो ये client क्या करता है ये client एक request करता है तो ये client क्या करता है ये client एक request करता है हमारे server को ये server किस में बना है ये server हमारा Node.js के उपर run कर रहा है Because हमारा server PHP भी हो सकता है, हमारा server Golang भी हो सकता है. But in this video we are talking about Node.js server. तो यहां से हमारा पूरा flow start होता है. Client, clients make a request to our server. अब क्या होता है, ठीक है? अब यहां से बहुत interesting है. तो यह जो request है, यह हमारे server में आती है. तो यह जो green box है, यह हमारा Node.js है. और हमारे पास एक request आ चुकी है. तो देखते हैं, note just इस request को कैसे handle करती है, तो सबसे पहले यहाँ पर काम आता है event queue का, ओके, तो जो भी हमारे पास request आते हैं, जितनी भी हमारे पास request आती हैं, वो सबसे पहले इस event queue के अंदर queue होती हैं, ओके, तो for example अगर user 1 ने एक request किया, वो किस में जाएगा, पहले event queue में ज तो जितनी भी हमारी request आएंगी, वो सारे कहा जाएंगी, वो हमारी event queue के अंदर queue होती जाएंगी, okay, line में लगती जाएंगी, अब क्या होता है, जैसे हमारे पास एक request आई, हमारे पास वो queue में लग गई, हमारे पास second request आया, हमारे पास third request आया, and उसके बाद यह request कहा जाती है, तो यह चलता रहता है, यह देखता रहता है that कोई request तो नहीं आई, and अगर queue के अंदर कोई भी request जाती है, तो यह उसको उठाता है, ओके, FIFO principle पे first in first out, ओके, तो यह नहीं कि जिस user ने सबसे पहले request किया था, उसकी request सबसे पहले उठाई जाएगी, और जो last में आना था, उसकी request लास्ट में उठाई जाएगी, तो यह जो event loop है, इसका काम क्या होता है, event queue के उपर watch करना, और एक-एक करके इन request को queue से हटाना, इस queue से pick up करना, अब यहाँ पर जब हम एक request को pick up करते हैं, जब हम इस queue में से एक request को pick up करते हैं, वो request दो तरीके की हो सकती है, तो वो दो तरीके कौन से है, वो है blocking operations, या फिर I can say blocking request, या फिर वो हो सकता है non-blocking operation, अब यह blocking operation और non-blocking operation क्या होता है, इसको हम बोलते है synchronous operations and asynchronous operations, तो blocking operations को हम बोलते है synchronous task, और non-blocking operations को हम क्या बोलते है asynchronous task, तो ये event loop क्या करती है, जैसे उसने इस queue में से एक request को उठाया, तो पहले वो देखती है that ये जो particular request है, क्या ये blocking operation है, या फिर ये एक non-blocking operation है, अगर वो एक non-blocking operation है, तो वो क्या करेंगे, उसको process कर देगी, event loop ने उसको उठाया, वो non-blocking था, उसको process किया, और user को response send कर दिया, and user खुश है, तो user ने request किया, request कहां गई, event queue के अंदर, event queue से कहां गई, event loop में, event loop में देखा that यह इसकी request बहुत simple request है, मतलब non-blocking operation है, तो इसने इसको process किया, और user को response send कर दिया, यहाँ पे done, लेकिन अगर वो एक blocking operation है, तो देखते हैं क्या होता है, तो blocking operations के case में, अगर वो एक blocking operation है, तो इस particular request को resolve करने के लिए, हम यह जो blocking operation है, तो हम कहां जाते हैं, हम जाते हैं thread pool के पास, thread pool एक pool है, जिसमें सारे threads हैं thread क्या होता है thread को तुम as a worker समझ सकते हैं एक worker जो तुम्हारे लिए कुछ काम करता है तो जिसे एक pool होता है जिसमें हम कुछ भी store कर सकते हैं तो thread pool is a pool of threads जिसके अंदर threads होते हैं और ये threads responsible होते हैं तुम्हारा blocking operation fulfill करने के लिए तो यानि कि एक thread assign होता है हर request को अगर वो एक blocking operation है कि वो इस काम को करेगा तो यहाँ पर मैंने क्या लिखा है, I said that I need a thread and a worker, तो यह blocking operation बोल रहा है, thread pool को, that मुझे ना एक thread चाहिए, मुझे एक worker चाहिए, ठीक है, तो यह thread pool क्या करेगा, यह देखेगा कि, यह अगर इसके पास कोई worker available है, limited होते हैं, तो यह check करेगा, that अगर इसके पास कोई worker available है, तो वो उसको काम पर लगा देगा, जब वो काम complete हो जाएगा, तो वो worker वापस thread pool में आके बैठ जाएगा और return कर देगा result ठीक है वह करेगा रिटर्न कर देगा रिजल्ट तो हमारे पास वह रिजल्ट वापस आएगा एंड हम यूजर को रिस्पॉंस सेंड कर देंगे तो यह था पूरा ऑपरेशन यह था पूरा आर्किटेक्चर नोट जेस का ठीक है एक रिकाप देता हूं तो हमारा कहां इवेंट लूप उठाती है अगर वह नोन ब्लॉकिंग ऑपरेशन है तो वह ऑन द स्पॉट मतलब उसको प्रोसेस करके हम वापस कर देते हैं अगर वह एक ब्लॉकिंग ऑपरेशन है, थ्रेड पूल के पास आते हैं, थ्रेड पूल क्या करते हैं, थ्रेड पूल के अंदर हमारे पास थ्रेड्स होते हैं, हमारे पास वरकर्स होते हैं, वो वरकर्स हमारे काम को फुलफिल करते हैं, और तब वो रिटर्न कर देते हैं, रि उसके बाद non-blocking operations के लिए हम उसको process करते हैं, हम उसको response send कर देते हैं, अगर वो एक blocking operation होता है, तो हम thread pool के पास आते हैं, हम अपने लिए एक worker assign करवाते हैं, और उससे हम काम करवाते हैं, हम अपने response को send कर देते हैं, ये पूरा node.js का architecture है, अब कितने workers होते हैं, अब यहाँ पर एक problem बताता हूँ, suppose तुमने जो अपना code लिखा वो blocking code था, अब वहाँ पर problem क्या होगी, तुम्हारे पास जो threads होते हैं वो limited होते हैं, तो यहाँ पर तुम्हारे सारे workers busy हो चुके, correct तुम्हारे पास कोई भी worker नहीं है, अब जब fifth user आएगा उसको wait करना पड़ेगा पहले तो कि कब एक worker free होगा, तो पहले चार workers, पहले चार users ने block कर लिये, correct? अब जब कोई भी worker free होगा, अगर suppose user 1 जो पहले आया था, उसका worker free हो जाता है, उसके बाद user 5 की जो execution है, जो processing है, वो start होगी, तो obviously, यानि कि इसमें scalability issues देख रहे हो, तो अगर बहुत जादा users आये तुम्हारे पास, और तुमने सारा जो code था, वो blocking operations के थूँ लिखा था, Because, पहला जो user आएगा ठीक है, पहले कुछ user को तुम handle कर लोगे, उसके बाद तो तुम्हारा server जो है, वो बहुत जादा wait करने लग जाएगा, बहुत जादा waiting time हो जाएगा, so it's not a good thing to write blocking operations, okay, so it's a good practice to always and always have non-blocking operations, ठीक है, अब code में चलते हैं, code में देखते हैं that क्या होता है ये blocking code है ना, मैं इसको zoom in कर देता हूँ, ठीक है, तो better clarity मिलेगी, तो यह जो दो lines है ना, code की, this one and this one, यह दोनों exactly same का हम कर रहे हैं, ठीक है, यह दोनों क्या करते हैं, exactly same का हम करते हैं, only difference क्या है, that यह synchronous है, ठीक है, इसको हम कहते हैं, that यह एक blocking request है, और यह asynchronous को हम क्या कहते हैं, that यह एक non-blocking request है, ठीक है, तो यह क्या है, non-blocking, कैसे, let us say मुझे ने एक file को read करना है तो मैं क्या बोलूंगा मैं बोलूंगा fs.read file sync sync का क्या मतलब हुआ that ये एक blocking request है ठीक है तो ये मैं क्या कर रहा हूँ मैं एक blocking request कर रहा हूँ तो यहाँ पर क्या होगा blocking ठीक है तो मैं इसको एक read file करना है तो let us say हम इस file को read करते हैं that is contacts.txt मुझे contacts.txt को read करना है and उसके अंदर मैं encoding दे दूँगा so I'll give the encoding to be UTF-8 done, and एक काम करते है console.log करते हैं console.log करते हैं हम result को और इसको मैं run करता हूँ, ठीक है तो इसको मैं run कर लेता हूँ, तो मैं इसको क्या बोलूँगा node file.js, तो मेरी वो जो file है वो read हुई और इसका result यहाँ पर आ गया ठीक है, तो मतलब execution कैसे हुई, उपर से start हुई, यहाँ पर मैंने अपनी thread को, मैंने अपने thread को block कर लिया, correct, मैंने अपना thread को यहाँ पर block कर लिया, and जैसे ही इसने यह काम किया, इसने read file sync किया ब्लॉक तो हमारा थ्रेड फ्री हुआ और वो थ्रेड हमारे पास वो थ्रेड का मतलब उसका जो रिजल्ट है वो हमारे पास यहां आ गया एंड एग्जिकेशन स्टार्ट हो गई लेट आ सेव मैंने पहले रिजल्ट को console.log किया फिर मैंने यहाँ पर बोला console.log 1 ठीक है एक काम करते हैं पहले हम यहाँ पर करते हैं तो मैंने यहाँ पर लिखा console.log 1 ठीक है उसके तो होना क्या चाहिए जब मैं इस प्रोग्राम को run करूँगा, पहले हमारे पास आना चाहिए 1, फिर हमारे पास आना चाहिए यह result जो file से हमने read किया, उसके बाद हमारे पास 2 console.log होना चाहिए, ठीक है, तो यह run करके देख लेते हैं, run किया, पहले क्या आया, 1, उसके बाद क है तो पहले तो यह हट जाएगा इसमें से हम सिंग्रम इसको हटा देंगे कर यहां पर यह क्या करता है कॉल बैक एक्सपेक्ट करता है जिसमें हमारे पास एक एरर होता है और हमारे पास क्या होता है यहां पर एक रिजल्ट रूप में नाम है तो उसको रन करके देख लेते हैं जाता है नोट किया पहले क्या या वन ठीक है यह वाला उसके बाद क्या आया तू because इसने block नहीं किया, ठीक है, and उसके बाद जब भी मेरे file का जो result है, जब भी वो ready हो गया, उसने मुझे वो console.log कर दिया, similarly अगर मेरे पास यहाँ पर बहुत सारे और भी task होते हैं, let us say मेरे पास 3 होता है, यहाँ पर 4 होता, तो वो क्या करता है, वो नीचे उस वह हमें जो रिजल्ट देता है वह हमें एसिंक्रोनिस्ट देता है वह हमें रिजल्ट कैसे देता है वह हमें रिजल्ट देता है एक कॉल बैक के अब कॉल बैक के थ्रू जो ब्लॉकिंग रिक्वेस्ट होती है बिकॉज उसने थ्रेड को अब यहाँ पर जो यह thread size होता है, मैंने क्या बताया था, that जो तुम्हारा thread size होता है, by default वो होता है 4, यानि कि by default तुम्हारे पास कितने workers होते हैं, तुम्हारे पास 4 workers होते हैं, क्या हम इस thread pool को बढ़ा सकते हैं, क्या हम इसका size बढ़ा सकते हैं, yes, you can increase the size, कितना बढ़ा सकते हैं, क्या हम इसको thousand कर सकते हैं, no, so यानि कि by default, तो default thread pool, इस साइज क्या होता है फॉर ओके इसको तो मैक्सिमम कितना लेकर जा सकते मैक्सिमम इट डिपेंड्स अपन मशीन टू मशीन ठीक है जो तुम सर्वर बाय कर रहा है जो तुम सर्वर रेंट आउट कर रहा है उसके अंदर कितने सीपीओ के रोज है उसकी ऊपर उतने तुम प्रेड बना सकते हो तो लेटर से अगर मेरा एट को और वीडियो है ओके है नोट जेस के अंदर हमारे पास एक मॉडियोल होता है जिसको हम बोलते हैं ओएस तो यहां पर तुम क्या कर सकते हैं तुम रिक्वाइयर कर सकते हो ओएस ठीक है ओएस यह ओएस क्या करता ना तुम्हारा ऑपरेटिंग सिस्टम हूं ओएस डॉट सीपी यूज डॉट लेटर से मैंने इसका लेंथ चाहिए मुझे इसके लेंथ चाहिए अब अगर मैं इसको तो मैं क्या बोल रहा हूँ, that मुझे बताओ os.cpus.length, मैं इसको run करूँगा, तो मेरा क्या आ रहा है, 8, इसका मतलब क्या है, that मेरे पास 8 CPUs हैं, correct, तो यानि कि मैं अपना maximum thread size 8 तक लेके जा सकता हूँ, okay, so this was all about architecture of Node.js, तो इस वीडियो का basic motive कहा था, that हमें non-blocking and blocking request को समझना Because if we write blocking request, then if all our threads are used, then after that, all the users will have to wait a lot. So this was all about architecture on Node.js. I hope that you got a very good clarity that how Node.js works. So basic, I mean, how Node.js works at the overview level. And we have to be very very cautious about this blocking and non-blocking operations. So that's all for this video. I hope you liked the video. तो अगर तुम्हें वीडियो अच्छा लगा, लाइक, सब्सक्राइब जरूर करना, और दो शेर इट विद योर फ्रेंट्स,