2012-02-12 18 views
8

1) वहाँ aws sdk अतुल्यकालिक मैं/बजाय धागा पूल के हे का उपयोग करता है जो के एक कार्यान्वयन है? मैं एक उच्च स्केलेबल वेब सेवा पर काम कर रहा हूं और प्रोफाइलिंग से पता चलता है कि सीपीयू अमेज़ॅन से नेटवर्क I/O के प्रबंधन के कई चक्र बर्बाद कर रहा है।क्या एसिंक I/O आधारित Aws जावा क्लाइंट है?

2) वर्तमान क्लाइंट Apache Http Client का उपयोग करता है, अगर मुझे एसिंच कार्यान्वयन नहीं मिल रहा है तो मैं इसे लागू करने के लिए अपने स्वयं के संस्करण को फोर्क कर दूंगा। मैं Jetty Http Client का उपयोग करने के बारे में सोच रहा था। जेटी और अपाचे पुस्तकालयों को मिश्रण करने के लिए यह खराब रूप है? क्या कोई बेहतर विकल्प है?

+1

_ "सीपीयू बोतल गर्दन अमेज़न करने के लिए सभी कनेक्शनों है" _ नहीं, यह एक (नेटवर्क) है (उत्पादन उपयोग अभी तक के लिए अनुशंसित नहीं) मैं/हे बाधा एक सीपीयू बाधा है, ** परिभाषा के अनुसार, ** सीपीयू में। –

+2

आप सही हैं कि नेटवर्क बोतल की गर्दन है लेकिन मैं उस नेटवर्क I/O पर CPU समय और धागे को बर्बाद नहीं करना चाहता हूं। एचप्रोफ रिपोर्ट से पता चलता है कि अधिकांश सीपीयू नमूने सॉकेट को मतदान में होते हैं। –

+2

अंतर यह है कि आप क्या हासिल करने की उम्मीद करते हैं। असिंक्रोनस I/O आपको सेवा विलंबता से नहीं बचा सकता है: यह आपके अनुरोध पर आपके अनुरोध की जादुई रूप से तेज़ी से एडब्ल्यूएस का संचालन नहीं करता है। हालांकि, आप प्रतीक्षा करते समय, अधिक सार्थक स्थानीय गणना कर सकते हैं। तो उस मामले के लिए एक थ्रेड पूल होगा। – phs

उत्तर

7

1) क्या aws sdk का कार्यान्वयन है जो थ्रेड पूल के बजाय एसिंक्रोनस I/O का उपयोग करता है?

मुझे नहीं पता कि, और यह आश्चर्यचकित होगा कि यह खोजना मुश्किल हो सकता है, अगर यह पहले से मौजूद होगा।

2) वर्तमान ग्राहक अपाचे HTTP क्लाइंट का उपयोग करता है, अगर मैं एक asynch कार्यान्वयन मैं इसे लागू करने के लिए अपने खुद के संस्करण कांटा होगा नहीं मिल रहा। [...] क्या कोई बेहतर वैकल्पिक है?

वहाँ वास्तव में एक बेहतर विकल्प है - AWS SDK for Java वर्तमान में Apache HttpComponents से Http Client संस्करण 4.x (यदि आप विरासत 3.1 संस्करण Javadocs से जुड़ा हुआ), जो आसानी से एक Async HttpClient भी प्रदान करता है का उपयोग करता है:

Async HttpClient एक HTTP/1.1 आज्ञाकारी HTTP एजेंट कार्यान्वयन httpcore NIO और HttpClient घटकों पर आधारित है। यह एक विशेष मॉड्यूल है जो अपाचे एचटीपी क्लाइंट विशेष मामलों के लिए है, जहां एक बड़ी संख्या में समवर्ती कनेक्शन को संभालने के लिए प्रदर्शन से कच्चे डेटा थ्रूपुट के संदर्भ में अधिक महत्वपूर्ण है। [जोर मेरा]

के रूप में बल दिया है, यह केवल संबंधित के लिए मदद की जानी चाहिए मामलों का उपयोग करता है, लेकिन (के रूप में प्रति your comment) आप एडब्ल्यूएस करने के लिए अनुरोध के हजारों भेजने हैं जिसका अर्थ है कि खुले अनुरोधों अप पाइल के लिए करते हैं , तो यह वास्तव में मदद कर सकता है।

+2

आखिरकार किसी ने पूछे गए प्रश्न का उत्तर दिया। धन्यवाद –

2

अतुल्यकालिक आईओ एक चांदी की गोली नहीं है - धागा प्रति कनेक्शन आमतौर पर तेजी से होता है (प्रवाह क्षमता के लिहाज से) और एक बहुत कोड के लिए आसान:

http://www.mailinator.com/tymaPaulMultithreaded.pdf

यह मेरे लिए लग रहा है अपने सीमित कारक है की तरह अमेज़ॅन के लिए आईओ, उन सभी कनेक्शनों की सीपीयू प्रोसेसिंग नहीं। तथ्य यह है कि आप सॉकेट को मतदान करने में बहुत सारे CPU समय देख रहे हैं, इस तथ्य के कारण कि वे ब्लॉक कहते हैं, केवल एक प्रोफाइलिंग आर्टिफैक्ट हो सकता है। (कुछ जांच करने के लिए: आप वास्तव में CPU उपयोग बाहर maxing रहे हैं?)

0

जावा 2.0 पूर्वावलोकन के लिए नए एडब्ल्यूएस एसडीके जून 2017 में announced था और इस सुविधा प्रदान करता है।

एसडीके अब वास्तव में गैर-अवरुद्ध I/O का समर्थन करता है। 1.11।एसडीके के एक्स संस्करण में पहले से ही सेवा क्लाइंट के एसिंक संस्करण हैं। हालांकि, वे सिर्फ थ्रेड पूल और ब्लॉकिंग सिंक क्लाइंट के चारों ओर एक रैपर हैं, इसलिए वे गैर-अवरुद्ध I/O (बहुत कम धागे के साथ उच्च समेकन) के लाभ प्रदान नहीं करते हैं। थ्रेड-प्रति-कनेक्शन मॉडल की सीमाओं और खराब संसाधनों के उपयोग के कारण, कई ग्राहकों ने गैर-अवरुद्ध I/O के लिए समर्थन का अनुरोध किया, इसलिए हम अपने async क्लाइंट में गैर-अवरुद्ध I/O के लिए प्रथम श्रेणी समर्थन की घोषणा करने से प्रसन्न हैं। हुड के तहत, हम गैर-अवरुद्ध HTTP कॉल करने के लिए नेटटी के शीर्ष पर बनाए गए एक HTTP क्लाइंट का उपयोग करते हैं।

अधिक जानकारी के लिए,

हालांकि, सचेत रहें:

012,
    पूर्वावलोकन में
  • वर्तमान में
  • जरूरत जावा 8
संबंधित मुद्दे