मल्टीप्लेक्स वर्कर (एक्सपेरिमेंटल फ़ीचर)

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है किसी समस्या की शिकायत करें सोर्स देखें रात · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

इस पेज पर मल्टीप्लेक्स वर्कर के बारे में जानकारी दी गई है. इसमें, मल्टीप्लेक्स के साथ काम करने वाले कोड लिखने का तरीका बताया गया है और समाधान शामिल कर सकते हैं.

मल्टीप्लेक्स वर्कर, बेज़ल को एक ही वर्कर के लिए किए गए कई अनुरोधों को मैनेज करने की अनुमति देते हैं प्रोसेस. एक से ज़्यादा थ्रेड वाले वर्कर के लिए, 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, अगर दोनों सेट हों. मल्टीप्लेक्स वर्कर को बंद किया जा सकता है --noworker_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.