Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

माइक्रोसर्विस निगरानी में महारत: नेमस्पेस के साथ डेटा संरचना

माइक्रोसर्विस आर्किटेक्चर क्या है?

माइक्रोसर्विस आर्किटेक्चर एक सॉफ्टवेयर डिज़ाइन पैटर्न है जिसमें हम कई छोटे प्रोग्रामों को मिलाकर एप्लिकेशन लिखते हैं। इन प्रोग्राम्स को, जिन्हें माइक्रोसर्विस कहा जाता है, एक आम लक्ष्य के लिए मिलकर काम करते हैं। कुछ टीमों के लिए, एक बड़े के बजाय कई छोटे एप्लिकेशन लिखने में बहुत कम समय और प्रयास लगता है।

एक माइक्रोसर्विस-उन्मुख प्रोजेक्ट में छोटे एप्लिकेशन का एक नक्षत्र होता है, प्रत्येक अपना हिस्सा करता है, एक अलग प्रक्रिया में चल रहा होता है, और मानकीकृत इंटरफेस के माध्यम से बाकी के साथ संचार करता है। यह दृष्टिकोण टीमों को एक भाषा या फ्रेमवर्क के लिए प्रतिबद्ध हुए बिना प्रत्येक समस्या के लिए सबसे अच्छा टूल चुनने देता है। यह हमें अधिक विशिष्ट समूहों के बीच काम को विभाजित करने की भी अनुमति देता है।

मोनोलिथ से माइक्रोसर्विस तक

इस श्रृंखला के पहले भाग में, हमने मोनोलिथ के बारे में बात की। मोनोलिथ के साथ शुरू करना आसान है। हालांकि, विकास गति खराब होती है, मुख्य रूप से क्योंकि सब कुछ बहुत कसकर जुड़ा हुआ है। यहां तक कि एक छोटा कोड परिवर्तन हमें पूरे प्रोजेक्ट को रीबिल्ड और टेस्ट करने के लिए मजबूर करता है, जो निराशाजनक रूप से लंबे रिलीज चक्र की ओर ले जाता है।

हम मोनोलिथ से माइक्रोसर्विस तक कैसे जाते हैं? अमेज़न का मामला लें। कुछ समय पहले, वे मोनोलिथ के रूप में शुरू हुए और समय के साथ माइक्रोसर्विस पर स्विच हो गए। उनका प्रारंभिक डिज़ाइन ऐसा दिख सकता था:

बेशक, मैं यहां ओवरसिम्प्लीफाई कर रहा हूं, लेकिन मेरा मानना है कि मैंने अधिकांश बुनियादी बातों को कवर किया है। क्या होगा यदि उन्होंने शुरू से ही माइक्रोसर्विस पैटर्न का पालन करना चुना होता? वे फ़ंक्शन द्वारा एप्लिकेशन को विभाजित करते, प्रत्येक घटक को एक समस्या पर ध्यान केंद्रित करने देते।

उन्हें इंटर-सर्विस संचार के लिए इंटरफेस और प्रोटोकॉल को परिभाषित करने की भी आवश्यकता होती, आमतौर पर RESTful APIs जैसे हल्के तंत्र के साथ।

नेमस्पेस क्या हैं

माइक्रोसर्विस डिज़ाइन में चुनौतियों का एक अनूठा सेट होता है। मुख्य शायद इंस्ट्रूमेंटेशन और त्रुटि रिपोर्टिंग है। इसके बारे में सोचें, हम विभिन्न प्लेटफार्मों और भाषाओं में फैले दसियों या सैकड़ों घटकों की निगरानी कर रहे हैं। और हमें किसी तरह उन सभी पर नजर रखनी चाहिए, और साथ ही, बड़ी तस्वीर को खोने से बचना चाहिए। नेमस्पेस हमें ढीले-ढाले माइक्रोसर्विस के एक समूह को एक सुसंगत तस्वीर में केंद्रित करने में मदद कर सकते हैं।

AppSignal में, नेमस्पेस एकत्रित मेट्रिक्स के लिए कंटेनर हैं। AppSignal डिफ़ॉल्ट रूप से तीन नेमस्पेस का उपयोग करता है (web, background, और frontend), लेकिन हम कोड की कुछ पंक्तियों को जोड़कर अपने खुद के बना सकते हैं। हम देखेंगे कि वे आगे कैसे काम करते हैं।

एक एप्लिकेशन उन सभी पर शासन करने के लिए

माइक्रोसर्विस घटक सेट करते समय, पहली बात यह है कि एक सामान्य एप्लिकेशन नाम और वातावरण कॉन्फ़िगर करें। इसलिए, AppSignal सभी एकत्रित मेट्रिक्स और अलर्ट को एक ही डैशबोर्ड पर प्रस्तुत करता है।

इन मानों को कॉन्फ़िगर करने का विशिष्ट विवरण भाषा और एकीकरण पर निर्भर करता है। उदाहरण के लिए, Ruby on Rails एप्लिकेशन को "नोज़ामा" नाम का उपयोग करने के लिए कॉन्फ़िगर करने के लिए:

# config/appsignal.yml production: active: true push_api_key: "YOUR APPSIGNAL API KEY" name: "Nozama"

जो Elixir एकीकरण कॉन्फ़िगर करने के समान है:

# config/config.exs config :appsignal, :config, active: true, name: "Nozama", push_api_key: "YOUR APPSIGNAL API KEY", env: "production"

Node.js में, दूसरी ओर, हम उपयोग करते हैं:

const { Appsignal } = require("@appsignal/nodejs"); const appsignal = new Appsignal({ active: true, name: "Nozama", apiKey: "YOUR APPSIGNAL API KEY", });

फ्रंटएंड JavaScript एकीकरण के लिए, हम @appsignal/javascript का उपयोग करते हैं:

import Appsignal from "@appsignal/javascript"; export default new Appsignal({ name: "Nozama", key: "YOUR FRONTEND API KEY", });

AppSignal इंस्टॉल और कॉन्फ़िगर करने पर जानकारी आप यहां पा सकते हैं:

  • नए एप्लिकेशन जोड़ना
  • एप्लिकेशन कॉन्फ़िगर करना

माइक्रोसर्विस में नेमस्पेस का उपयोग करना

आइए देखें कि हम प्रत्येक माइक्रोसर्विस को कोडिंग के बारे में कैसे जाएंगे। आइए बिलिंग सिस्टम से शुरू करें; हम इसके लिए Elixir और Phoenix का उपयोग करेंगे।

एक बार जब हम Phoenix एकीकरण सेटअप का पालन कर लेते हैं, तो हम कंट्रोलर पर काम करना शुरू कर सकते हैं। निम्न स्निपेट नेमस्पेस को billing पर सेट करता है:

# एक Phoenix कंट्रोलर में, हम नेमस्पेस इनिशियलाइज़ेशन चलाने के लिए प्लग का उपयोग करते हैं defmodule BillingPageController.PageController do use BillingPageController, :controller plug :set_appsignal_namespace defp set_appsignal_namespace(conn, _params) do # इस कंट्रोलर में सभी एक्शन को "बिलिंग" नेमस्पेस में रिपोर्ट करने के लिए सेट करता है Appsignal.Transaction.set_namespace(:billing) conn end # कंट्रोलर का बाकी हिस्सा ... end

डेटा डैशबोर्ड में दिखना शुरू हो जाना चाहिए एक बार माइक्रोसर्विस चल रही है और कंट्रोलर कुछ गतिविधि देखता है।

बेशक, बिलिंग हमें दूर नहीं ले जाएगी जब तक लोग कुछ खरीदते नहीं। यह एक समस्या है जिसे हम एक अलग माइक्रोसर्विस में निपटा सकते हैं। उसी पैटर्न का पालन करते हुए, हम एक बिल्कुल नया Phoenix एप्लिकेशन लिखेंगे जिसमें एक PayButtonController कंट्रोलर होगा जो ऐसे शुरू होता है:

defmodule PayButtonController.PageController do use PayButtonController, :controller plug :set_appsignal_namespace defp set_appsignal_namespace(conn, _params) do Appsignal.Span.set_namespace(Appsignal.Tracer.root_span(), "pay_button") conn end # कंट्रोलर का बाकी हिस्सा ... end

अब हमारे डैशबोर्ड में दो नेमस्पेस हैं। उसी नाम और वातावरण का उपयोग करने से यह गारंटी होती है कि PayButtonController का डेटा BillingPageController के साथ दिखाया जाता है, भले ही वे अलग-अलग मशीनों पर चल रहे अलग-अलग एप्लिकेशन हों।

अगला घटक अनुशंसा इंजन है। हम Express के साथ उत्पाद सुझाव दिखाने वाले API एंडपॉइंट को लागू करेंगे। हम Node.js में नेमस्पेस को ऐसे सेट करते हैं:

app.get("/", (req, res) => { const tracer = appsignal.tracer(); tracer.withSpan( tracer.createSpan({ namespace: "recommendations" }), (span) => { // मापने के लिए कोड यहां जाता है span.close(); } ); });

हम अब तीन नेमस्पेस तक पहुंच गए हैं।

मोबाइल और फ्रंटएंड टीमें डैशबोर्ड में त्रुटियों को लॉग करना चाह सकती हैं। AppSignal का JavaScript एकीकरण स्वचालित रूप से आने वाले डेटा को frontend नेमस्पेस के साथ असाइन करता है। लेकिन हम इसे ऐसे बदल सकते हैं:

try { // कोड जो विफल हो सकता है } catch (error) { // त्रुटि को संभालें // AppSignal को त्रुटि भेजें appsignal.sendError(error, {}, "Mobile"); }

थोड़ी देर बाद, डेटा Mobile नेमस्पेस में दिखना शुरू हो जाना चाहिए।

उदाहरण सादे JavaScript को दिखाता है, लेकिन यदि आप React या Angular जैसे फ्रंटएंड फ्रेमवर्क का उपयोग कर रहे हैं तो अतिरिक्त सेटअप चरणों की आवश्यकता हो सकती है।

वेबसाइट के लिए, आइए Ruby on Rails आज़माएं, एक बहुत प्रसिद्ध MVC फ्रेमवर्क जिसे AppSignal आउट-ऑफ-द-बॉक्स एकीकृत करता है। हम Rails कंट्रोलर को नेमस्पेस को homepage पर सेट करने के लिए निम्न स्निपेट के साथ शुरू करेंगे:

# Rails में हम अनुरोध शुरू होने से पहले नेमस्पेस बदलने के लिए before_action कॉलबैक का उपयोग करते हैं class HomepageController < ApplicationController before_action :set_appsignal_namespace def set_appsignal_namespace Appsignal.set_namespace("homepage") end # कंट्रोलर एक्शन ... end

अगला, हम वेबसाइट और मोबाइल एप्लिकेशन को डेटा सर्व करने के लिए API एंडपॉइंट का उपयोग कर सकते हैं। इसके लिए, हम Grape का उपयोग कर सकते हैं, Ruby के लिए एक हल्का REST API फ्रेमवर्क। इस बार, AppSignal कॉन्फ़िगर करने में थोड़ा अधिक काम लगता है।

config/appsignal.yml में Ruby एकीकरण कॉन्फ़िगर करने के बाद, जैसा कि हमने पहले किया था, आप इवेंट्स और मेट्रिक्स लॉग करना शुरू कर सकते हैं:

Appsignal.start_logger Appsignal.start

फिर, एरर हैंडलर चेन में AppSignal मिडलवेयर डालें:

require "appsignal" require "appsignal/integrations/grape" class API < Grape::API insert_before Grape::Middleware::Error, Appsignal::Grape::Middleware resource :search do desc 'return a product search' before do Appsignal.set_namespace("search") end get :product do # उत्पाद खोज तर्क end end end

अधिक उदाहरणों के लिए, Grape एकीकरण डॉक्स देखें।

तस्वीर को पूरा करने के लिए, हम Sidekiq पृष्ठभूमि जॉब के साथ समाप्त करेंगे। Sidekiq Ruby के लिए एक लोकप्रिय जॉब प्रोसेसर है और यह है कि हम इसे config/appsignal.yml कॉन्फ़िगर करने के बाद स्टैंडअलोन मोड में कैसे शुरू कर सकते हैं:

# config.ru require 'appsignal' Sidekiq.on(:startup) do Appsignal.start end Sidekiq.on(:shutdown) do Appsignal.stop('Sidekiq shutdown') end

AppSignal स्वचालित रूप से जॉब से डेटा को background नेमस्पेस में असाइन करता है। हम इसे अधिक विशिष्ट नेमस्पेस में बदलना चाह सकते हैं।

require 'sidekiq' require 'appsignal' class PlainOldRuby include Sidekiq::Worker def perform() Appsignal.set_namespace("urgent_background") # जॉब तर्क end end

स्टैंडअलोन एजेंट के साथ मेट्रिक्स एकत्र करना

स्टैंडअलोन एजेंट किसी भी Ubuntu, RedHat, या CentOS मशीन से संसाधन उपयोग मेट्रिक्स एकत्र करता है। हम एजेंट का उपयोग सैटेलाइट सर्वर की निगरानी के लिए कर सकते हैं जो माइक्रोसर्विस एप्लिकेशन को डेटाबेस, गेटवे, या मैसेज ब्रोकर जैसी सुविधाएं प्रदान करते हैं।

AppSignal में हम अपने स्वयं के Kafka सर्वर की निगरानी के लिए एजेंट का उपयोग करते हैं। एजेंट उन भाषाओं और फ्रेमवर्क पर कस्टम इंस्ट्रूमेंटेशन बनाने के लिए भी उपयोगी है जिन्हें सीधे समर्थन नहीं किया जाता है।

एजेंट के साथ शुरू करने के लिए, इंस्टॉलेशन निर्देशों का पालन करके इसे डाउनलोड और इंस्टॉल करें।

एक बार यह चल रहा है, हमें API कुंजी, एप्लिकेशन नाम, और वातावरण सेट करने के लिए कॉन्फ़िगरेशन फ़ाइल को संपादित करना होगा। बाकी माइक्रोसर्विस में उपयोग किए गए समान मानों का उपयोग करें ताकि सब कुछ एक डैशबोर्ड पर आ जाए।

# /etc/appsignal-agent.conf push_api_key = "YOUR APPSIGNAL API KEY" app_name = "Nozama" environment = "production" 

निष्कर्ष

नेमस्पेस कई प्रणालियों में वितरित डेटा को व्यवस्थित करने का एक शानदार तरीका है। वे हमें सूचनाओं को कॉन्फ़िगर करने और अलर्ट हैंडलिंग को ठीक करने की भी अनुमति देते हैं। यह देखने के लिए कि यह कैसे काम करता है, इस श्रृंखला के पहले भाग की जांच करें।

अतिरिक्त पठन:

  • नेमस्पेस के साथ आप क्या कर सकते हैं?
  • StatsD और AppSignal के स्टैंडअलोन एजेंट के साथ किसी भी सिस्टम की निगरानी
  • बेहतर होस्ट मेट्रिक्स और अलर्ट
  1. Android में SQLite का उपयोग करके डेटा कैसे सहेजें? Android में SQLite का उपयोग करके डेटा कैसे सहेजें?

    Android में SQLite का उपयोग करके डेटा सहेजना उदाहरण में जाने से पहले, हमें पता होना चाहिए कि Android में SQLite डेटाबेस क्या है। SQLite एक ओपन-सोर्स SQL डेटाबेस है जो डेटा को डिवाइस पर एक टेक्स्ट फ़ाइल में संग्रहीत करता है। Android बिल्ट-इन SQLite डेटाबेस कार्यान्वयन के साथ आता है। SQLite सभी रिलेशन

  1. पायथन Bokeh: डेटा विज़ुअलाइज़ेशन (लाइन, सर्कल, बार चार्ट) पायथन Bokeh: डेटा विज़ुअलाइज़ेशन (लाइन, सर्कल, बार चार्ट)

    Bokeh परिचय Bokeh वेब ब्राउज़र के लिए इंटरैक्टिव डेटा विज़ुअलाइज़ेशन लाइब्रेरी है। यह HTML/JS आउटपुट उत्पन्न करता है जिसे ब्राउज़र में देखा जा सकता है। 1. लाइन प्लॉट from bokeh.io import show from bokeh.plotting import figure p = figure(plot_width=300, plot_height=300, title=Line Plot) p.line([2,

  1. Ruby डेवलपर्स के लिए आवश्यक डेटा स्ट्रक्चर्स: एक व्यावहारिक गाइड Ruby डेवलपर्स के लिए आवश्यक डेटा स्ट्रक्चर्स: एक व्यावहारिक गाइड

    Arrays को समझना जब आप प्रोग्रामिंग के बारे में पढ़ना शुरू करते हैं तो एरे पहला डेटा स्ट्रक्चर है जिसके बारे में आप सीखते हैं। एरे मेमोरी के एक सन्निहित हिस्से का उपयोग करते हैं जहां ऑब्जेक्ट्स एक के बाद एक बिना अंतराल के संग्रहीत होते हैं। C जैसी निचले स्तर की प्रोग्रामिंग भाषाओं के विपरीत, Ruby आपक