इस पेज पर मल्टीप्लेक्स वर्कर के बारे में जानकारी दी गई है. इसमें, मल्टीप्लेक्स के साथ काम करने वाले कोड लिखने का तरीका बताया गया है और समाधान शामिल कर सकते हैं.
मल्टीप्लेक्स वर्कर, बेज़ल को एक ही वर्कर के लिए किए गए कई अनुरोधों को मैनेज करने की अनुमति देते हैं प्रोसेस. एक से ज़्यादा थ्रेड वाले वर्कर के लिए, Basel कम संसाधनों का इस्तेमाल करके उसी या बेहतर प्रदर्शन को पूरा कर सकें. उदाहरण के लिए, हर कर्मचारी की तय की गई प्रक्रिया के आधार पर, बेज़ेल में एक से ज़्यादा चार लोग काम कर सकते हैं. वही वर्कर प्रोसेस, जो अनुरोधों को साथ-साथ हैंडल कर सकती है. इसके लिए Java और Scala जैसी लैंग्वेज इस्तेमाल करती हैं. इससे, JVM वॉर्म-अप का समय और JIT कंपाइलेशन की बचत होती है समय, और सामान्य रूप से यह आपको एक ही तरह का है.
खास जानकारी
बेज़ेल सर्वर और वर्कर प्रोसेस के बीच दो लेयर होती हैं. कुछ लोगों के लिए
याद रखने के तरीके जो साथ-साथ प्रक्रिया भी चला सकते हैं, बेज़ल को WorkerProxy
से
कर्मचारी पूल. WorkerProxy
, वर्कर प्रोसेस पर अनुरोधों को फ़ॉरवर्ड करता है
request_id
के साथ-साथ, कर्मचारी अनुरोध को प्रोसेस करता है
और WorkerMultiplexer
को प्रतिक्रियाएं भेजता है. जब WorkerMultiplexer
एक जवाब मिलता है, तो यह request_id
को पार्स करता है और फिर जवाबों को फ़ॉरवर्ड करता है
सही WorkerProxy
पर वापस जाएं. नॉन-मल्टीप्लेक्स किए गए कर्मचारियों की तरह ही,
कम्यूनिकेशन स्टैंडर्ड इन/आउट की मदद से किया जाता है. हालांकि, यह टूल सिर्फ़
उपयोगकर्ताओं को दिखने वाले आउटपुट के लिए stderr
(नीचे देखें).
हर कर्मचारी के पास एक कुंजी होती है. Baze, कुंजी के हैश कोड (एनवायरमेंट से बना) का इस्तेमाल करता है
(वैरिएबल, एक्ज़ीक्यूशन रूट, और मेनेमोनिक) से पता चलता है कि
इस्तेमाल करने के लिए WorkerMultiplexer
. WorkerProxy
उसी तरह बातचीत करते हैं
WorkerMultiplexer
अगर दोनों का हैश कोड एक ही है. इसलिए, यह मानकर
सिंगल बेज़ल में एनवायरमेंट वैरिएबल और एक्ज़ीक्यूशन रूट एक जैसे होते हैं
शुरू करना, हर याददाश्त में सिर्फ़ एक WorkerMultiplexer
और एक हो सकता है
कर्मचारी की प्रोसेस. काम करने वाले लोगों की कुल संख्या. इनमें नियमित रूप से काम करने वाले लोग और
WorkerProxy
, अब भी --worker_max_instances
तक सीमित है.
मल्टीप्लेक्स के साथ काम करने वाले नियम लिखना
फ़ायदा पाने के लिए नियम की वर्कर प्रोसेस मल्टी-थ्रेड होनी चाहिए
मल्टीप्लेक्स वर्कर. Protobuf से नियमसेट को एक अनुरोध को पार्स करने की अनुमति मिलती है
हालांकि, हो सकता है कि स्ट्रीम में कई अनुरोध इकट्ठा हों. जब भी
वर्कर प्रोसेस, स्ट्रीम से अनुरोध को पार्स करती है. इसे
नया थ्रेड. क्योंकि अलग थ्रेड पूरा हो सकता है और इस पर स्ट्रीम में लिख सकता है
साथ ही, वर्कर प्रोसेस को यह पक्का करने की ज़रूरत होती है कि जवाब लिखे गए हैं
ऐटम तरीके से (मैसेज ओवरलैप नहीं होते). जवाबों में
मैनेज किए जा रहे अनुरोध का request_id
हिस्सा.
मल्टीप्लेक्स आउटपुट मैनेज करना
मल्टीप्लेक्स वर्कर को आउटपुट को मैनेज करने के बजाय, ज़्यादा सावधानी बरतनी होती है
सिंगलप्लेक्स वर्कर. stderr
को भेजी गई सभी चीज़ों को एक ही लॉग फ़ाइल में रखा जाएगा
एक ही तरह के सभी WorkerProxy
में शेयर किया जाता है,
एक साथ किए जाने वाले अनुरोधों के बीच किसी भी क्रम में लगाया जाता है. stdout
को रीडायरेक्ट करते समय
stderr
में बदलना अच्छा आइडिया है, उस आउटपुट को output
में इकट्ठा न करें
फ़ील्ड के तौर पर WorkResponse
का एक फ़ील्ड भी शामिल करना होगा, क्योंकि यह उपयोगकर्ता को टूटी-फूटी आउटपुट सामग्री दिखा सकता है.
अगर आपका टूल सिर्फ़ stdout
या stderr
को उपयोगकर्ता के लिए बनाया गया आउटपुट भेजता है, तो
मल्टीप्लेक्स वर्कर को चालू करने से पहले, उस व्यवहार को बदलने की ज़रूरत होगी.
मल्टीप्लेक्स वर्कर चालू किया जा रहा है
मल्टीप्लेक्स वर्कर, डिफ़ॉल्ट रूप से चालू नहीं होते हैं. रूलसेट मल्टीप्लेक्स चालू कर सकता है
supports-multiplex-workers
टैग का इस्तेमाल करके कर्मचारियों को
कार्रवाई का execution_requirements
(ठीक supports-workers
टैग की तरह
नियमित कर्मचारियों को सक्षम बनाता है). जैसा कि नियमित कर्मचारियों से बात करते समय होता है, एक कर्मचारी
कार्यनीति को या तो नियमसेट के स्तर पर निर्दिष्ट करना होगा (उदाहरण के लिए,
--strategy=[some_mnemonic]=worker
) या आम तौर पर रणनीति के लेवल पर (इसके लिए
उदाहरण, --dynamic_local_strategy=worker,standalone
.) कोई और फ़्लैग नहीं लगा है
ज़रूरी है और supports-multiplex-workers
की अहमियत
supports-workers
, अगर दोनों सेट हों. मल्टीप्लेक्स वर्कर को बंद किया जा सकता है
--noexperimental_worker_multiplex
को पार करके.
अगर संभव हो, तो मेमोरी को कम करने के लिए, नियमसेट को मल्टीप्लेक्स वर्कर का इस्तेमाल करने का सुझाव दिया जाता है और परफ़ॉर्मेंस में सुधार ला सकते हैं. हालांकि, फ़िलहाल मल्टीप्लेक्स वर्कर डाइनैमिक एक्ज़ीक्यूशन के साथ काम करता है, बशर्ते वे मल्टीप्लेक्स सैंडबॉक्सिंग लागू की जा सकती है. सैंडबॉक्स नहीं किए गए मल्टीप्लेक्स चलाने की कोशिश की जा रही है डाइनैमिक एक्ज़ीक्यूशन वाले वर्कर अपने-आप सैंडबॉक्स की सुविधा का इस्तेमाल करेंगे सिंगलप्लेक्स वर्कर के साथ शेयर किया जा सकता है.
मल्टीप्लेक्स सैंडबॉक्सिंग
मल्टीप्लेक्स वर्कर को कर्मचारी लागू करना. सिंगलप्लेक्स वर्कर सैंडबॉक्सिंग का काम अपने सैंडबॉक्स में हर वर्कर प्रोसेस को चला रहा है, तो मल्टीप्लेक्स वर्कर एकाधिक समानांतर अनुरोधों के बीच काम करने वाली डायरेक्ट्री को प्रोसेस करें. अनुमति देने के लिए की सैंडबॉक्सिंग की सुविधा जोड़ी है, तो वर्कर को सीधे इसमें लिखने के बजाय, हर अनुरोध में दी गई सबडायरेक्ट्री पर लिखना डायरेक्ट्री पर काम कर रहा है.
मल्टीप्लेक्स सैंडबॉक्सिंग की सुविधा के लिए, वर्कर को sandbox_dir
फ़ील्ड का इस्तेमाल करना होगा
WorkRequest
से कॉपी करें और उसका इस्तेमाल सभी फ़ाइलों के पढ़ने और लिखने के लिए प्रीफ़िक्स के तौर पर करें.
हालांकि, सैंडबॉक्स न किए गए फ़ील्ड में arguments
और inputs
फ़ील्ड का बदलाव नहीं हुआ है
अनुरोध करते हैं, तो असल इनपुट sandbox_dir
के सापेक्ष होते हैं. कर्मचारी को यह करना चाहिए
arguments
और inputs
में मिले फ़ाइल पाथ का अनुवाद करें, ताकि वे इसे पढ़ सकें
पाथ बदला गया है और sandbox_dir
से जुड़े सभी आउटपुट लिखे जाने चाहिए.
इसमें '.' जैसे पाथ शामिल हैं. साथ ही, बताई गई फ़ाइलों में मिलने वाले पाथ भी शामिल हैं
(जैसे कि "orgfile" आर्ग्युमेंट).
जब कोई वर्कर मल्टीप्लेक्स सैंडबॉक्सिंग की सुविधा के साथ काम करता है, तो रूलसेट इसका एलान कर सकता है
आप supports-multiplex-sandboxing
को जोड़कर
किसी कार्रवाई का execution_requirements
. इसके बाद, BaZ चैनल मल्टीप्लेक्स सैंडबॉक्सिंग का इस्तेमाल करेगा
अगर --experimental_worker_multiplex_sandboxing
फ़्लैग पास कर दिया जाता है या
वर्कर का इस्तेमाल डाइनैमिक एक्ज़ीक्यूशन के साथ किया जाता है.
किसी सैंडबॉक्स किए गए मल्टीप्लेक्स वर्कर की वर्कर फ़ाइलें अब भी
वर्कर प्रोसेस की वर्किंग डायरेक्ट्री. इस तरह, अगर कोई फ़ाइल
का उपयोग वर्कर को चलाने के लिए और इनपुट के रूप में दोनों पर किया जाता है, तो इसे दोनों
फ़्लैग फ़ाइल आर्ग्युमेंट के साथ-साथ tools
, executable
या
runfiles
.