डॉकर + अपाचे, मेमोरी उपयोग कैसे काम करता है?

मान लीजिए कि मेरे पास अपाचे द्वारा परोसी गई साइट पर चलने वाले 50 कंटेनरों के साथ एक डॉकर होस्ट स्थापित है ।

जैसा कि मैं समझता हूं कि प्रत्येक कंटेनर में अपाचे इंस्टेंस चल रहा होगा और आमतौर पर प्रत्येक अपाचे इंस्टेंस ~250 एमबी प्रति रैम का उपयोग करता है । अपाचे को तब प्रति बच्चे की प्रक्रिया में कुछ एमबी की आवश्यकता होती है ।

क्या मैं यह मानने में सही हूं कि प्रत्येक कंटेनर को पूर्ण अपाचे उदाहरण की स्मृति की आवश्यकता होगी? जैसे। 50 साइटों को 50 एक्स ~300 एमबी की आवश्यकता होगी?

या अपाचे स्मृति दक्षता में सुधार के लिए कंटेनरों के बीच स्मृति के कुछ हिस्सों को साझा करने में सक्षम है?

क्या डॉकर कुशल "मास" होस्टिंग के लिए उपयुक्त है (जैसे। बड़ी संख्या में साइटें जिनमें से प्रत्येक को कुछ संसाधनों की आवश्यकता होती है) जहां प्रत्येक साइट एक कंटेनर है? या यह केवल 50 साइटों की सेवा करने वाले एक अपाचे कंटेनर के लिए संभव होगा?

डॉकर अपाचे उदाहरणों के बीच अलगाव प्रदान करता है, जो कई कारणों से दिलचस्प हो सकता है (उदाहरण के लिए, यदि प्रत्येक वेबसाइट को एक अलग उपयोगकर्ता द्वारा प्रशासित किया जाता है), तो किसी अन्य सर्वर पर उदाहरणों के आसान स्थानांतरण की भी अनुमति देता है । यदि आपको इसकी आवश्यकता नहीं है तो संभवतः अपाचे के केवल एक उदाहरण के साथ आपके पास बेहतर प्रदर्शन होगा ।

अलगाव का मतलब है कि संसाधन उपयोग वर्चुअल मशीनों का उपयोग करने के समान ही होगा, सिवाय इसके कि आप वर्चुअलाइजेशन ओवरहेड, मेमोरी विभाजन ओवरहेड और ऑपरेटिंग सिस्टम ओवरहेड का भुगतान नहीं करते हैं । कहा जा रहा है, अपाचे मेमोरी उपयोग ज्यादातर सर्वर लोड पर निर्भर होना चाहिए, इसलिए यदि आप एक बड़े सर्वर को कई छोटे लोगों में विभाजित करते हैं तो आपको दस गुना बढ़ने की उम्मीद नहीं करनी चाहिए । साथ ही, चूंकि केवल एक कर्नेल है, डिस्क कैश कंटेनर के बीच साझा किए जाते हैं, इसलिए यदि आपका डिस्क एक्सेस पैटर्न दो उदाहरणों के बीच समान है तो आपको थोड़ा प्रदर्शन बढ़ावा मिलता है ।

अगर मैं आपके प्रश्न को समझ रहा हूं और चिंता यह है कि कंटेनर उदाहरणों के बीच स्मृति क्या साझा करने योग्य है, तो साझा पुस्तकालयों के लिए उस प्रश्न का उत्तर यह है कि यह निर्भर करता है ।

उद्धृत करना:

https://groups.google.com/d/msg/docker-user/wCDC_sXzbks/i1gjlgQbxWEJ

दूसरा लाभ यह है कि कॉपी-ऑन-राइट और पेज शेयरिंग कंटेनर की परवाह किए बिना होस्ट पर सभी प्रक्रियाओं पर लागू होते हैं । उदाहरण के लिए 1000 कंटेनर एक ही फ़ाइल को मेमोरी में मैप करते हैं (कहते हैं, एक लाइब्रेरी या निष्पादन योग्य फ़ाइल) केवल एक बार मेमोरी स्पेस का उपयोग करेगा । यदि वे स्मृति में लिखते हैं, तो केवल वे पृष्ठ जिन्हें वे लिखते हैं, कॉपी किए जाएंगे । इस दूसरे लाभ के लिए चेतावनी यह है कि फाइल सिस्टम को यह जानना होगा कि आपके कंटेनर उसी फाइल को मैप कर रहे हैं । वर्तमान में एयूएफएस स्टोरेज ड्राइवर (जो फाइल सिस्टम परत पर संचालित होता है) के लिए मामला है, लेकिन एलवीएम/डिवाइसमैपर ड्राइवर के लिए नहीं (जो ब्लॉक स्तर पर संचालित होता है और इसलिए लाभ नहीं होता है) । विकास के तहत जेडएफएस और बीटीआरएफएस ड्राइवरों को पेज कैशिंग से भी लाभ होगा । इसलिए मैं एक ऐसे परिदृश्य में उम्मीद करता हूं जहां आप हजारों कंटेनर चलाते हैं और वे बड़ी समान फ़ाइलों को मेमोरी में मैप करते हैं, वर्तमान में एयूएफएस ड्राइवर आपको बेहतर मेमोरी उपयोग देगा । लेकिन हमने इसे बेंचमार्क नहीं किया है ।