सॉफ्टवेयर सिस्टम के औद्योगिक विकास के लिए अंतिम उत्पाद की दोष सहनशीलता पर बहुत ध्यान देने की आवश्यकता होती है, साथ ही विफलताओं और विफलताओं के होने पर त्वरित प्रतिक्रिया की भी आवश्यकता होती है। बेशक, निगरानी विफलताओं और असफलताओं पर अधिक कुशलतापूर्वक और शीघ्रता से प्रतिक्रिया देने में मदद करती है, लेकिन पर्याप्त नहीं। सबसे पहले, बड़ी संख्या में सर्वरों पर नज़र रखना बहुत मुश्किल है - बड़ी संख्या में लोगों की आवश्यकता होती है। दूसरे, आपको इसकी अच्छी समझ होनी चाहिए कि एप्लिकेशन अपनी स्थिति की भविष्यवाणी करने के लिए कैसे काम करता है। इसलिए, हमें ऐसे बहुत से लोगों की आवश्यकता है जिन्हें हमारे द्वारा विकसित की जा रही प्रणालियों, उनके प्रदर्शन और विशेषताओं की अच्छी समझ हो। आइए मान लें कि भले ही आपको ऐसा करने के इच्छुक पर्याप्त लोग मिलें, फिर भी उन्हें प्रशिक्षित करने में बहुत समय लगता है।
क्या करें? यहीं पर कृत्रिम बुद्धिमत्ता हमारी सहायता के लिए आती है। लेख के बारे में बात की जाएगी
परिचय
विकसित सॉफ्टवेयर प्रणाली देर-सबेर परिचालन में आ जाती है। उपयोगकर्ता के लिए यह महत्वपूर्ण है कि सिस्टम विफलताओं के बिना काम करे। यदि कोई आपातकालीन स्थिति उत्पन्न होती है, तो उसे न्यूनतम विलंब से हल किया जाना चाहिए।
किसी सॉफ़्टवेयर सिस्टम के तकनीकी समर्थन को सरल बनाने के लिए, विशेष रूप से यदि कई सर्वर हों, तो आमतौर पर मॉनिटरिंग प्रोग्राम का उपयोग किया जाता है जो चल रहे सॉफ़्टवेयर सिस्टम से मेट्रिक्स लेते हैं, इसकी स्थिति का निदान करना संभव बनाते हैं और यह निर्धारित करने में मदद करते हैं कि वास्तव में विफलता का कारण क्या है। इस प्रक्रिया को सॉफ्टवेयर सिस्टम मॉनिटरिंग कहा जाता है।
चित्र 1. ग्राफाना मॉनिटरिंग इंटरफ़ेस
मेट्रिक्स एक सॉफ्टवेयर सिस्टम, उसके निष्पादन वातावरण, या भौतिक कंप्यूटर के विभिन्न संकेतक हैं जिसके तहत सिस्टम उस क्षण के टाइमस्टैम्प के साथ चल रहा है जब मेट्रिक्स प्राप्त हुए थे। स्थैतिक विश्लेषण में, इन मैट्रिक्स को समय श्रृंखला कहा जाता है। सॉफ़्टवेयर सिस्टम की स्थिति की निगरानी करने के लिए, मेट्रिक्स को ग्राफ़ के रूप में प्रदर्शित किया जाता है: समय X अक्ष पर है, और मान Y अक्ष के साथ हैं (चित्र 1)। एक चालू सॉफ़्टवेयर सिस्टम (प्रत्येक नोड से) से कई हज़ार मेट्रिक्स लिए जा सकते हैं। वे मेट्रिक्स (बहुआयामी समय श्रृंखला) का एक स्थान बनाते हैं।
चूंकि जटिल सॉफ्टवेयर सिस्टम के लिए बड़ी संख्या में मेट्रिक्स एकत्र किए जाते हैं, इसलिए मैन्युअल निगरानी एक कठिन कार्य बन जाती है। व्यवस्थापक द्वारा विश्लेषण किए गए डेटा की मात्रा को कम करने के लिए, निगरानी उपकरणों में संभावित समस्याओं की स्वचालित रूप से पहचान करने के लिए उपकरण शामिल होते हैं। उदाहरण के लिए, जब खाली डिस्क स्थान एक निर्दिष्ट सीमा से कम हो जाता है तो आप ट्रिगर को सक्रिय करने के लिए कॉन्फ़िगर कर सकते हैं। आप सर्वर शटडाउन या सेवा गति में गंभीर मंदी का स्वचालित रूप से निदान भी कर सकते हैं। व्यवहार में, निगरानी उपकरण पहले से हो चुकी विफलताओं का पता लगाने या भविष्य की विफलताओं के सरल लक्षणों की पहचान करने का अच्छा काम करते हैं, लेकिन सामान्य तौर पर, संभावित विफलता की भविष्यवाणी करना उनके लिए एक कठिन काम बना हुआ है। मेट्रिक्स के मैन्युअल विश्लेषण के माध्यम से भविष्यवाणी के लिए योग्य विशेषज्ञों की भागीदारी की आवश्यकता होती है। यह कम उत्पादकता है. अधिकांश संभावित विफलताओं पर ध्यान नहीं दिया जा सकता है।
हाल ही में, सॉफ्टवेयर सिस्टम का तथाकथित पूर्वानुमानित रखरखाव बड़ी आईटी सॉफ्टवेयर विकास कंपनियों के बीच तेजी से लोकप्रिय हो गया है। इस दृष्टिकोण का सार कृत्रिम बुद्धिमत्ता का उपयोग करके, विफल होने से पहले, प्रारंभिक चरण में सिस्टम के क्षरण की ओर ले जाने वाली समस्याओं का पता लगाना है। यह दृष्टिकोण सिस्टम की मैन्युअल निगरानी को पूरी तरह से बाहर नहीं करता है। यह समग्र रूप से निगरानी प्रक्रिया में सहायक है।
भविष्य कहनेवाला रखरखाव को लागू करने का मुख्य उपकरण समय श्रृंखला में विसंगतियों की खोज करने का कार्य है जब कोई विसंगति उत्पन्न होती है डेटा में इस बात की बहुत अधिक संभावना है कि कुछ समय बाद असफलता या विफलता होगी. एक विसंगति एक सॉफ्टवेयर सिस्टम के प्रदर्शन में एक निश्चित विचलन है, जैसे कि एक प्रकार के अनुरोध की निष्पादन गति में गिरावट की पहचान करना या क्लाइंट सत्रों के निरंतर स्तर पर सेवित अनुरोधों की औसत संख्या में कमी।
सॉफ़्टवेयर सिस्टम के लिए विसंगतियों की खोज करने के कार्य की अपनी विशिष्टताएँ हैं। सिद्धांत रूप में, प्रत्येक सॉफ्टवेयर सिस्टम के लिए मौजूदा तरीकों को विकसित करना या परिष्कृत करना आवश्यक है, क्योंकि विसंगतियों की खोज उस डेटा पर बहुत निर्भर करती है जिसमें यह किया जाता है, और सिस्टम को लागू करने के लिए टूल के आधार पर सॉफ्टवेयर सिस्टम का डेटा काफी भिन्न होता है। , नीचे यह किस कंप्यूटर पर चल रहा है।
सॉफ़्टवेयर सिस्टम की विफलताओं की भविष्यवाणी करते समय विसंगतियों की खोज के तरीके
सबसे पहले, यह कहने लायक है कि विफलताओं की भविष्यवाणी करने का विचार लेख से प्रेरित था
सभी मेट्रिक्स ग्रेफाइट का उपयोग करके सिस्टम से लिए गए हैं। प्रारंभ में, व्हिस्पर डेटाबेस का उपयोग ग्राफाना के लिए एक मानक समाधान के रूप में किया गया था, लेकिन जैसे-जैसे ग्राहक आधार बढ़ता गया, ग्रेफाइट अब सामना नहीं कर सका, जिससे डीसी डिस्क सबसिस्टम की क्षमता समाप्त हो गई। इसके बाद अधिक प्रभावी समाधान खोजने का निर्णय लिया गया. चुनाव पक्ष में किया गया
चित्र 2. मेट्रिक्स एकत्र करने की योजना
आरेख आंतरिक दस्तावेज़ से लिया गया है. यह ग्राफ्टाना (हम जिस मॉनिटरिंग यूआई का उपयोग करते हैं) और ग्रेफाइट के बीच संचार को दर्शाता है। किसी एप्लिकेशन से मेट्रिक्स को हटाना अलग सॉफ़्टवेयर द्वारा किया जाता है -
वेब समेकन प्रणाली में कई विशेषताएं हैं जो विफलताओं की भविष्यवाणी करने में समस्याएं पैदा करती हैं:
- ट्रेंड अक्सर बदलता रहता है. इस सॉफ़्टवेयर सिस्टम के लिए विभिन्न संस्करण उपलब्ध हैं। उनमें से प्रत्येक सिस्टम के सॉफ़्टवेयर भाग में परिवर्तन लाता है। तदनुसार, इस तरह, डेवलपर्स किसी दिए गए सिस्टम के मेट्रिक्स को सीधे प्रभावित करते हैं और प्रवृत्ति में बदलाव का कारण बन सकते हैं;
- कार्यान्वयन सुविधा, साथ ही वे उद्देश्य जिनके लिए ग्राहक इस प्रणाली का उपयोग करते हैं, अक्सर पिछले गिरावट के बिना विसंगतियों का कारण बनते हैं;
- संपूर्ण डेटा सेट के सापेक्ष विसंगतियों का प्रतिशत छोटा है (<5%);
- सिस्टम से संकेतक प्राप्त करने में अंतराल हो सकता है। कुछ कम समय में, निगरानी प्रणाली मेट्रिक्स प्राप्त करने में विफल हो जाती है। उदाहरण के लिए, यदि सर्वर अतिभारित है। तंत्रिका नेटवर्क के प्रशिक्षण के लिए यह महत्वपूर्ण है। अंतरालों को कृत्रिम रूप से भरने की आवश्यकता है;
- विसंगतियों वाले मामले अक्सर केवल एक विशिष्ट तिथि/माह/समय (मौसमी) के लिए ही प्रासंगिक होते हैं। इस प्रणाली में उपयोगकर्ताओं द्वारा इसके उपयोग के लिए स्पष्ट नियम हैं। तदनुसार, मेट्रिक्स केवल एक विशिष्ट समय के लिए प्रासंगिक हैं। सिस्टम का उपयोग लगातार नहीं किया जा सकता है, लेकिन केवल कुछ महीनों में: वर्ष के आधार पर चुनिंदा रूप से। ऐसी स्थितियाँ उत्पन्न होती हैं जब एक मामले में मेट्रिक्स का समान व्यवहार सॉफ़्टवेयर सिस्टम की विफलता का कारण बन सकता है, लेकिन दूसरे में नहीं।
आरंभ करने के लिए, सॉफ़्टवेयर सिस्टम के डेटा की निगरानी में विसंगतियों का पता लगाने के तरीकों का विश्लेषण किया गया। इस विषय पर लेखों में, जब शेष डेटा सेट के सापेक्ष विसंगतियों का प्रतिशत छोटा होता है, तो अक्सर तंत्रिका नेटवर्क का उपयोग करने का प्रस्ताव किया जाता है।
तंत्रिका नेटवर्क डेटा का उपयोग करके विसंगतियों की खोज करने का मूल तर्क चित्र 3 में दिखाया गया है:
चित्र 3. तंत्रिका नेटवर्क का उपयोग करके विसंगतियों की खोज करना
मेट्रिक्स के वर्तमान प्रवाह की विंडो के पूर्वानुमान या बहाली के परिणाम के आधार पर, चल रहे सॉफ़्टवेयर सिस्टम से प्राप्त विचलन की गणना की जाती है। यदि सॉफ़्टवेयर सिस्टम और तंत्रिका नेटवर्क से प्राप्त मेट्रिक्स के बीच बड़ा अंतर है, तो हम यह निष्कर्ष निकाल सकते हैं कि वर्तमान डेटा खंड विसंगतिपूर्ण है। तंत्रिका नेटवर्क के उपयोग के लिए समस्याओं की निम्नलिखित श्रृंखला उत्पन्न होती है:
- स्ट्रीमिंग मोड में सही ढंग से काम करने के लिए, तंत्रिका नेटवर्क मॉडल के प्रशिक्षण के डेटा में केवल "सामान्य" डेटा शामिल होना चाहिए;
- सही पहचान के लिए एक अद्यतन मॉडल का होना आवश्यक है। मेट्रिक्स में बदलते रुझान और मौसमी बदलाव से मॉडल में बड़ी संख्या में गलत सकारात्मकताएं पैदा हो सकती हैं। इसे अद्यतन करने के लिए, उस समय को स्पष्ट रूप से निर्धारित करना आवश्यक है जब मॉडल पुराना हो गया हो। यदि आप मॉडल को बाद में या पहले अपडेट करते हैं, तो, सबसे अधिक संभावना है, बड़ी संख्या में गलत सकारात्मक परिणाम सामने आएंगे।
हमें झूठी सकारात्मकताओं की लगातार खोज करने और उन्हें रोकने के बारे में भी नहीं भूलना चाहिए। यह माना जाता है कि वे अक्सर आपातकालीन स्थितियों में घटित होंगे। हालाँकि, वे अपर्याप्त प्रशिक्षण के कारण तंत्रिका नेटवर्क त्रुटि का परिणाम भी हो सकते हैं। मॉडल की झूठी सकारात्मकता की संख्या को कम करना आवश्यक है। अन्यथा, झूठी भविष्यवाणियाँ सिस्टम की जाँच करने के उद्देश्य से प्रशासक का बहुत सारा समय बर्बाद कर देंगी। देर-सबेर प्रशासक "पागल" निगरानी प्रणाली पर प्रतिक्रिया देना बंद कर देगा।
आवर्तक तंत्रिका नेटवर्क
समय श्रृंखला में विसंगतियों का पता लगाने के लिए, आप इसका उपयोग कर सकते हैं
चित्र 4. LSTM मेमोरी कोशिकाओं के साथ आवर्ती तंत्रिका नेटवर्क का उदाहरण
जैसा कि चित्र 4 से देखा जा सकता है, आरएनएन एलएसटीएम इस समय अवधि में विसंगतियों की खोज से निपटने में सक्षम था। जहां परिणाम में उच्च पूर्वानुमान त्रुटि (औसत त्रुटि) है, संकेतकों में एक विसंगति वास्तव में हुई है। एकल आरएनएन एलएसटीएम का उपयोग स्पष्ट रूप से पर्याप्त नहीं होगा, क्योंकि यह कम संख्या में मेट्रिक्स पर लागू होता है। विसंगतियों की खोज के लिए एक सहायक विधि के रूप में उपयोग किया जा सकता है।
विफलता की भविष्यवाणी के लिए ऑटोएनकोडर
चित्र 5. ऑटोएनकोडर ऑपरेशन का उदाहरण
ऑटोएन्कोडर्स को सामान्य डेटा पर प्रशिक्षित किया जाता है और फिर मॉडल को दिए गए डेटा में कुछ असामान्य पाया जाता है। बस आपको इस कार्य के लिए क्या चाहिए. बस यह चुनना बाकी है कि कौन सा ऑटोएनकोडर इस कार्य के लिए उपयुक्त है। ऑटोएनकोडर का वास्तुशिल्प रूप से सबसे सरल रूप एक आगे, गैर-लौटने वाला तंत्रिका नेटवर्क है, जो बहुत समान है
हालाँकि, ऑटोएनकोडर और एमएलपी के बीच अंतर यह है कि एक ऑटोएनकोडर में, आउटपुट परत में इनपुट परत के समान नोड्स होते हैं, और इनपुट एक्स द्वारा दिए गए लक्ष्य मान Y की भविष्यवाणी करने के लिए प्रशिक्षित होने के बजाय, ऑटोएनकोडर को प्रशिक्षित किया जाता है। अपने स्वयं के एक्स का पुनर्निर्माण करने के लिए। इसलिए, ऑटोएनकोडर अप्रशिक्षित शिक्षण मॉडल हैं।
ऑटोएन्कोडर का कार्य इनपुट वेक्टर X में विषम तत्वों के अनुरूप समय सूचकांक r0 ... rn को ढूंढना है। यह प्रभाव वर्ग त्रुटि की खोज करके प्राप्त किया जाता है।
चित्र 6. सिंक्रोनस ऑटोएनकोडर
ऑटोएन्कोडर के लिए चयन किया गया था
झूठी सकारात्मकता को कम करने के लिए तंत्र
इस तथ्य के कारण कि विभिन्न असामान्य स्थितियाँ उत्पन्न होती हैं, साथ ही विकसित होने वाले विसंगति का पता लगाने वाले मॉडल के लिए तंत्रिका नेटवर्क के अपर्याप्त प्रशिक्षण की संभावित स्थिति के कारण, यह निर्णय लिया गया कि झूठी सकारात्मकता को कम करने के लिए एक तंत्र विकसित करना आवश्यक है। यह तंत्र एक टेम्पलेट आधार पर आधारित है जिसे व्यवस्थापक द्वारा वर्गीकृत किया गया है।
झूठी सकारात्मकता को कम करने का मुख्य सिद्धांत एक ऑपरेटर की मदद से मानकों का एक डेटाबेस एकत्र करना है जो तंत्रिका नेटवर्क का उपयोग करके पाए गए संदिग्ध मामलों को वर्गीकृत करता है। इसके बाद, वर्गीकृत मानक की तुलना उस मामले से की जाती है जिसका सिस्टम ने पता लगाया है, और यह निष्कर्ष निकाला जाता है कि क्या मामला गलत है या विफलता का कारण बन रहा है। DTW एल्गोरिथ्म का उपयोग दो समय श्रृंखलाओं की तुलना करने के लिए सटीक रूप से किया जाता है। मुख्य न्यूनतमकरण उपकरण अभी भी वर्गीकरण है। यह उम्मीद की जाती है कि बड़ी संख्या में संदर्भ मामले एकत्र करने के बाद, अधिकांश मामलों की समानता और समान मामलों की घटना के कारण सिस्टम ऑपरेटर से कम पूछना शुरू कर देगा।
परिणामस्वरूप, ऊपर वर्णित तंत्रिका नेटवर्क विधियों के आधार पर, "वेब-समेकन" प्रणाली की विफलताओं की भविष्यवाणी करने के लिए एक प्रयोगात्मक कार्यक्रम बनाया गया था। इस कार्यक्रम का लक्ष्य, हमारे सॉफ़्टवेयर सिस्टम के लिए इस दृष्टिकोण की क्षमता का मूल्यांकन करने के लिए, पिछली विफलताओं के बारे में निगरानी डेटा और जानकारी के मौजूदा संग्रह का उपयोग करना था। कार्यक्रम की योजना नीचे चित्र 7 में प्रस्तुत की गई है।
चित्र 7. मीट्रिक स्थान विश्लेषण पर आधारित विफलता भविष्यवाणी योजना
आरेख में, दो मुख्य ब्लॉकों को प्रतिष्ठित किया जा सकता है: मॉनिटरिंग डेटा स्ट्रीम (मेट्रिक्स) में समय की असामान्य अवधि की खोज और झूठी सकारात्मकता को कम करने के लिए तंत्र। नोट: प्रायोगिक उद्देश्यों के लिए, डेटा डेटाबेस से जेडीबीसी कनेक्शन के माध्यम से प्राप्त किया जाता है जिसमें ग्रेफाइट इसे सहेजेगा।
विकास के परिणामस्वरूप प्राप्त निगरानी प्रणाली का इंटरफ़ेस निम्नलिखित है (चित्र 8)।
चित्र 8. प्रायोगिक निगरानी प्रणाली का इंटरफ़ेस
इंटरफ़ेस प्राप्त मेट्रिक्स के आधार पर विसंगति का प्रतिशत प्रदर्शित करता है। हमारे मामले में, रसीद सिम्युलेटेड है। हमारे पास पहले से ही कई हफ्तों का सारा डेटा है और विफलता की ओर ले जाने वाली किसी विसंगति के मामले की जांच करने के लिए इसे धीरे-धीरे लोड किया जा रहा है। निचली स्थिति पट्टी एक निश्चित समय पर डेटा विसंगति का समग्र प्रतिशत प्रदर्शित करती है, जो एक ऑटोएनकोडर का उपयोग करके निर्धारित किया जाता है। साथ ही, अनुमानित मेट्रिक्स के लिए एक अलग प्रतिशत प्रदर्शित किया जाता है, जिसकी गणना आरएनएन एलएसटीएम द्वारा की जाती है।
आरएनएन एलएसटीएम तंत्रिका नेटवर्क (चित्रा 9) का उपयोग करके सीपीयू प्रदर्शन के आधार पर विसंगति का पता लगाने का एक उदाहरण।
चित्र 9. आरएनएन एलएसटीएम खोज
एक काफी सरल मामला, अनिवार्य रूप से एक सामान्य बाहरी, लेकिन सिस्टम विफलता के कारण, आरएनएन एलएसटीएम का उपयोग करके सफलतापूर्वक गणना की गई थी। समय की इस अवधि में विसंगति सूचक 85-95% है; 80% से ऊपर की हर चीज़ (सीमा प्रयोगात्मक रूप से निर्धारित की गई थी) को एक विसंगति माना जाता है।
जब सिस्टम अपडेट के बाद बूट करने में असमर्थ था तो विसंगति का पता लगाने का एक उदाहरण। इस स्थिति का पता ऑटोएनकोडर द्वारा लगाया जाता है (चित्र 10)।
चित्र 10. ऑटोएनकोडर का पता लगाने का उदाहरण
जैसा कि आप चित्र से देख सकते हैं, पर्मजेन एक स्तर पर अटका हुआ है। ऑटोएनकोडर को यह अजीब लगा क्योंकि उसने पहले कभी ऐसा कुछ नहीं देखा था। यहां विसंगति 100% बनी रहती है जब तक कि सिस्टम कार्यशील स्थिति में वापस नहीं आ जाता। सभी मेट्रिक्स के लिए एक विसंगति प्रदर्शित की जाती है। जैसा कि पहले उल्लेख किया गया है, ऑटोएन्कोडर विसंगतियों का स्थानीयकरण नहीं कर सकता है। इन स्थितियों में ऑपरेटर को यह कार्य करने के लिए कहा जाता है।
निष्कर्ष
पीसी "वेब-कंसोलिडेशन" कई वर्षों से विकास में है। सिस्टम काफी स्थिर स्थिति में है, और दर्ज की गई घटनाओं की संख्या कम है। हालाँकि, विफलता होने से 5-10 मिनट पहले विफलता की ओर ले जाने वाली विसंगतियों का पता लगाना संभव था। कुछ मामलों में, विफलता की पहले से सूचना देने से "मरम्मत" कार्य करने के लिए आवंटित निर्धारित समय बचाने में मदद मिलेगी।
किए गए प्रयोगों के आधार पर अंतिम निष्कर्ष निकालना जल्दबाजी होगी। अब तक नतीजे विरोधाभासी रहे हैं. एक ओर, यह स्पष्ट है कि तंत्रिका नेटवर्क पर आधारित एल्गोरिदम "उपयोगी" विसंगतियों को खोजने में सक्षम हैं। दूसरी ओर, झूठी सकारात्मकता का एक बड़ा प्रतिशत बना हुआ है, और तंत्रिका नेटवर्क में एक योग्य विशेषज्ञ द्वारा पाई गई सभी विसंगतियों का पता नहीं लगाया जा सकता है। नुकसान में यह तथ्य शामिल है कि अब तंत्रिका नेटवर्क को सामान्य संचालन के लिए एक शिक्षक के साथ प्रशिक्षण की आवश्यकता होती है।
विफलता पूर्वानुमान प्रणाली को और अधिक विकसित करने और इसे संतोषजनक स्थिति में लाने के लिए कई तरीकों की परिकल्पना की जा सकती है। यह उन विसंगतियों वाले मामलों का अधिक विस्तृत विश्लेषण है जो सिस्टम की स्थिति को बहुत प्रभावित करने वाले महत्वपूर्ण मेट्रिक्स की सूची में शामिल होने और उन अनावश्यक मेट्रिक्स को त्यागने के कारण विफलता का कारण बनती हैं जो इसे प्रभावित नहीं करते हैं। इसके अलावा, यदि हम इस दिशा में आगे बढ़ते हैं, तो हम विशेष रूप से उन विसंगतियों वाले मामलों के लिए एल्गोरिदम को विशेषज्ञ बनाने का प्रयास कर सकते हैं जो विफलताओं का कारण बनते हैं। एक और तरीका है. यह तंत्रिका नेटवर्क आर्किटेक्चर में सुधार है और इस प्रकार प्रशिक्षण समय में कमी के साथ पता लगाने की सटीकता बढ़ रही है।
मैं अपने उन सहयोगियों के प्रति आभार व्यक्त करता हूं जिन्होंने मुझे इस लेख को लिखने और इसकी प्रासंगिकता बनाए रखने में मदद की:
स्रोत: www.habr.com