हमारे सभी माइक्रोसर्विसेस, चाहे वे एक-दूसरे के साथ संवाद क्यों न करें, एक प्रकार का दिल की धड़कन का इंटरफ़ेस प्रदान करते हैं ताकि किसी भी समय मॉनिटरिंग सिस्टम यह पता लगा सके कि यह कैसा है; स्वास्थ्य की सामान्य स्थिति और कुछ विशिष्ट विशिष्टताओं की तरह, आंतरिक डेटा के लिए चेकसम, जिसके साथ वे काम कर रहे हैं। यह मुख्य परिवहन के बारे में नहीं है: यहाँ RabbitMQ
और Redis
ठीक काम करते हैं।
और कभी-कभी यह प्रासंगिक डेटा निर्यात करने के लिए सबसे सरल ( HTTP ) इंटरफ़ेस प्रदान करने के लिए समझ में आता है। इस दिशा में भी सोचते हुए, लंबे समय में मैं पूरी तरह से कुंजी-मूल्य वाले जोड़े के भंडारण के लिए आंतरिक समाधान के पक्ष में Redis
से छुटकारा पाना चाहता हूं, जैसा कि हमने PubSub
साथ ठीक दो साल पहले किया था।
इसलिए, प्रत्येक नए microservice के साथ बाइक को फिर से स्थापित करने के बजाय, मैंने एक प्लग-इन लाइब्रेरी बनाने का फैसला किया, जो शून्य कोड ( config.exs
में तीन लाइनों को config.exs
) के साथ किसी भी आवेदन से मनमाना डेटा प्रदान करने की इस अपरिष्कृत समस्या को हल कर सकता है। यह एक सरल दिल की धड़कन ( HTTP 200 OK
), या वर्तमान विनिमय दरों की लंबी सूची हो।
समाधान डेव थॉमस के इस ट्वीट पर आधारित है।
पेन वजन में JSON एपीआई सर्वर
Camarero एक JSON API फ़ंक्शन को किसी मौजूदा एप्लिकेशन में जोड़ने के लिए, या यहां तक कि अधिक जटिल (पढ़ें: भारी) समाधान अवांछनीय होने पर खरोंच से JSON एपीआई को लागू करने के लिए तैयार-से-उपयोग समाधान है। नीचे दी गई तस्वीर दिखाती है कि कैसे एक विशिष्ट मामले में हम इसे कनेक्ट और उपयोग कर सकते हैं।

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

हां, कोई पकड़ नहीं है। एक लाख मान के साथ केवी-स्टोरेज के माध्यम से अनुरोध के लिए HTTP प्रतिक्रिया समय सबसे खराब स्थिति में कई दसियों माइक्रोसेकंड है।
कार्यान्वयन का विवरण
यह माना जाता है कि कैम्ब्रियो केवल लाइब्रेरी और कॉन्फ़िगरेशन फ़ाइल में तीन पंक्तियों को चालू करके एक रनिंग एप्लिकेशन से कनेक्ट होता है। यह कॉन्फ़िगर किए गए मार्गों को संसाधित करता है, नामित हैंडलर मॉड्यूल के निष्पादन को दर्शाता है। सबसे सरल कॉन्फ़िगरेशन इस तरह दिख सकता है:
config :camarero, carta: [Camarero.Carta.Heartbeat], root: "api/v1"
यह सब है, और इसलिए, शायद, यह स्पष्ट है: /api/v1
वेब सर्वर की जड़ है, एक heartbeat
मार्ग (मॉड्यूल के अंदर से कॉन्फ़िगर, उपसर्ग के बिना नाम डिफ़ॉल्ट रूप से) - Camarero.Carta.Heartbeat
हैंडलर के साथ। Camarero.Catering.route!
कॉल का उपयोग करके हैंडलर को गतिशील रूप से रनटाइम में भी जोड़ा जा सकता है Camarero.Catering.route!
।
संचालकों
एक हैंडलर एक मॉड्यूल है जो Camarero.Plato
व्यवहार को लागू करता है । इसमें मानक CRUD रिपॉजिटरी हेरफेर के तरीके शामिल हैं। आने वाले HTTP अनुरोधों के लिए एक हैंडलर के रूप में उपयोग करने के लिए, इस व्यवहार को लागू करने वाला कोई भी मॉड्यूल उपयुक्त है।
एक और भी बारीक Camarero.Tapas
: व्यवहार Camarero.Tapas
, जो एक प्रमुख / मूल्य जोड़ी के लिए प्रत्येक Camarero.Plato
कंटेनर के अंदर Camarero.Plato
प्रबंधन करता है। आमतौर पर आपको लाइब्रेरी का उपयोग करते समय उस गहरी खुदाई करने की आवश्यकता नहीं होती है।
डिफ़ॉल्ट कार्यान्वयन कंटेनर के रूप में %{}
मानचित्र का उपयोग करता है, और बहुत कॉम्पैक्ट दिखता है:
defmodule Camarero.Carta.Heartbeat do use Camarero.Plato end
यह शुद्ध, बिना रंग का, Heartbeat
मॉड्यूल है, जो डिफ़ॉल्ट रूप से लाइब्रेरी में शामिल है। प्रलेखन में कम तुच्छ उपयोग वर्णित हैं।
ठीक ट्यूनिंग
अपवाद के बिना, दोनों डिफ़ॉल्ट कार्यान्वयन ( Camarero.Tapas
और Camarero.Plato
) से सभी तरीकों को आसानी से पुनर्परिभाषित किया जाता है। उदाहरण के लिए, किसी मॉड्यूल के लिए एक कस्टम मार्ग और साथ ही एक कस्टम कंटेनर का उपयोग करने के लिए, आप निम्नलिखित कार्य कर सकते हैं:
defmodule Camarero.Carta.Heartbeat do use Camarero.Plato, container: %MyStructWithAccessBehaviour{} @impl true def plato_route(), do: "internal/heartbeat" end
वेब सर्वर कॉन्फ़िगरेशन
Camarero को काम करने के लिए एक Cowboy2 सर्वर और CowboyPlug की जरूरत है। यहाँ config.exs में एक विशिष्ट काउबॉय 2 सेटअप है:
config :camarero, cowboy: [port: 4043, scheme: :https, options: []]
कैमरेरो क्या दावा नहीं करता
यह पुस्तकालय किसी भी तरह से जटिल समाधानों के साथ प्रतिस्पर्धा करने का दावा नहीं करता है। यह इसमें नहीं है, और, लगभग निश्चित रूप से, कभी भी प्राधिकरण या प्रमाणीकरण नहीं होगा, अर्थात, हम इसका उपयोग केवल एक निजी क्लाउड के अंदर सेवाओं के लिए करते हैं।
सभी प्रसंस्करण मॉड्यूल उत्पन्न होते हैं, इसलिए, इंटरफ़ेस ओवरलोडिंग को छोड़कर, कोई अतिरिक्त ट्यूनिंग संभव नहीं है। ऐसा जानबूझकर भी किया जाता है।
लेकिन यह सभी बेंचमार्क में किसी भी एनालॉग से तेज है।
अच्छा त्वरित उत्तर है!