मराठी

स्कीमा स्टिचिंगद्वारे ग्राफक्यूएल फेडरेशनची शक्ती वापरा. अनेक सेवांमधून एक युनिफाइड ग्राफक्यूएल API कसे तयार करावे हे शिका, ज्यामुळे स्केलेबिलिटी आणि मेंटेनेबिलिटी सुधारेल.

ग्राफक्यूएल फेडरेशन: स्कीमा स्टिचिंग - एक सर्वसमावेशक मार्गदर्शक

आधुनिक ऍप्लिकेशन डेव्हलपमेंटच्या सतत विकसित होणाऱ्या लँडस्केपमध्ये, स्केलेबल आणि मेंटेन करण्यायोग्य आर्किटेक्चर्सची गरज सर्वात महत्त्वाची बनली आहे. मायक्रो सर्व्हिसेस, त्यांच्या मूळ मॉड्यूलरिटी आणि स्वतंत्र डिप्लॉयबिलिटीमुळे, एक लोकप्रिय उपाय म्हणून उदयास आल्या आहेत. तथापि, असंख्य मायक्रो सर्व्हिसेसचे व्यवस्थापन करणे गुंतागुंतीचे ठरू शकते, विशेषतः जेव्हा क्लायंट ऍप्लिकेशन्ससाठी एक युनिफाइड API सादर करण्याचा प्रश्न येतो. इथेच ग्राफक्यूएल फेडरेशन, आणि विशेषतः स्कीमा स्टिचिंग, महत्त्वाची भूमिका बजावते.

ग्राफक्यूएल फेडरेशन म्हणजे काय?

ग्राफक्यूएल फेडरेशन ही एक शक्तिशाली आर्किटेक्चर आहे जी तुम्हाला अनेक ग्राफक्यूएल सेवांमधून (जे अनेकदा मायक्रो सर्व्हिसेसचे प्रतिनिधित्व करतात) एकच, युनिफाइड ग्राफक्यूएल API तयार करण्याची परवानगी देते. हे डेव्हलपर्सना वेगवेगळ्या सेवांमधील डेटा क्वेरी करण्याची परवानगी देते जणू काही तो एकच ग्राफ आहे, ज्यामुळे क्लायंटचा अनुभव सोपा होतो आणि क्लायंट-साइडवर गुंतागुंतीच्या ऑर्केस्ट्रेशन लॉजिकची गरज कमी होते.

ग्राफक्यूएल फेडरेशनचे दोन प्राथमिक दृष्टिकोन आहेत:

हा लेख स्कीमा स्टिचिंग वर लक्ष केंद्रित करतो, त्याच्या संकल्पना, फायदे, मर्यादा आणि व्यावहारिक अंमलबजावणीचा शोध घेतो.

स्कीमा स्टिचिंग समजून घेणे

स्कीमा स्टिचिंग ही अनेक ग्राफक्यूएल स्कीमा एकत्र करून एकच, सुसंगत स्कीमा तयार करण्याची प्रक्रिया आहे. हा युनिफाइड स्कीमा एक दर्शनी भाग म्हणून काम करतो, जो क्लायंटपासून मूळ सेवांची गुंतागुंत लपवतो. जेव्हा क्लायंट स्टिच्ड स्कीमाला विनंती करतो, तेव्हा गेटवे हुशारीने विनंती योग्य मूळ सेवा(सेवांना) पाठवते, डेटा मिळवते, आणि परिणाम एकत्र करून क्लायंटला परत करते.

याचा असा विचार करा: तुमच्याकडे अनेक रेस्टॉरंट्स (सेवा) आहेत, प्रत्येक वेगवेगळ्या खाद्यप्रकारात विशेषज्ञ आहे. स्कीमा स्टिचिंग एका युनिव्हर्सल मेन्यूसारखे आहे जे प्रत्येक रेस्टॉरंटमधील सर्व डिशेस एकत्र करते. जेव्हा एखादा ग्राहक (क्लायंट) युनिव्हर्सल मेन्यूमधून ऑर्डर करतो, तेव्हा ऑर्डर हुशारीने योग्य रेस्टॉरंटच्या किचनमध्ये पाठविली जाते, जेवण तयार केले जाते आणि नंतर ग्राहकासाठी एकाच डिलिव्हरीमध्ये एकत्र केले जाते.

स्कीमा स्टिचिंगमधील प्रमुख संकल्पना

स्कीमा स्टिचिंगचे फायदे

स्कीमा स्टिचिंग मायक्रो सर्व्हिसेस आर्किटेक्चरचा अवलंब करणाऱ्या संस्थांसाठी अनेक आकर्षक फायदे देते:

स्कीमा स्टिचिंगच्या मर्यादा

स्कीमा स्टिचिंग अनेक फायदे देत असले तरी, त्याच्या मर्यादांबद्दल जागरूक असणे महत्त्वाचे आहे:

स्कीमा स्टिचिंगची व्यावहारिक अंमलबजावणी

चला, Node.js आणि graphql-tools लायब्ररी (स्कीमा स्टिचिंगसाठी एक लोकप्रिय पर्याय) वापरून स्कीमा स्टिचिंग कसे लागू करावे याचे एक सोपे उदाहरण पाहूया. या उदाहरणामध्ये दोन मायक्रो सर्व्हिसेस आहेत: एक युझर सर्व्हिस आणि एक प्रोडक्ट सर्व्हिस.

१. रिमोट स्कीमा परिभाषित करा

प्रथम, प्रत्येक रिमोट सेवेसाठी ग्राफक्यूएल स्कीमा परिभाषित करा.

युझर सर्व्हिस (user-service.js):


const { buildSchema } = require('graphql');

const userSchema = buildSchema(`
  type User {
    id: ID!
    name: String
    email: String
  }

  type Query {
    user(id: ID!): User
  }
`);

const users = [
  { id: '1', name: 'Alice Smith', email: 'alice@example.com' },
  { id: '2', name: 'Bob Johnson', email: 'bob@example.com' },
];

const userRoot = {
  user: (args) => users.find(user => user.id === args.id),
};

module.exports = {
  schema: userSchema,
  rootValue: userRoot,
};

प्रोडक्ट सर्व्हिस (product-service.js):


const { buildSchema } = require('graphql');

const productSchema = buildSchema(`
  type Product {
    id: ID!
    name: String
    price: Float
    userId: ID!  # Foreign key to User Service
  }

  type Query {
    product(id: ID!): Product
  }
`);

const products = [
  { id: '101', name: 'Laptop', price: 1200, userId: '1' },
  { id: '102', name: 'Smartphone', price: 800, userId: '2' },
];

const productRoot = {
  product: (args) => products.find(product => product.id === args.id),
};

module.exports = {
  schema: productSchema,
  rootValue: productRoot,
};

२. गेटवे सर्व्हिस तयार करा

आता, गेटवे सर्व्हिस तयार करा जी दोन स्कीमा एकत्र स्टिच करेल.

गेटवे सर्व्हिस (gateway.js):


const { stitchSchemas } = require('@graphql-tools/stitch');
const { makeRemoteExecutableSchema } = require('@graphql-tools/wrap');
const { graphqlHTTP } = require('express-graphql');
const express = require('express');
const { introspectSchema } = require('@graphql-tools/wrap');
const { printSchema } = require('graphql');
const fetch = require('node-fetch');

async function createRemoteSchema(uri) {
  const fetcher = async (params) => {
    const response = await fetch(uri, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(params),
    });
    return response.json();
  };

  const schema = await introspectSchema(fetcher);
  return makeRemoteExecutableSchema({
    schema,
    fetcher,
  });
}

async function main() {
  const userSchema = await createRemoteSchema('http://localhost:4001/graphql');
  const productSchema = await createRemoteSchema('http://localhost:4002/graphql');

  const stitchedSchema = stitchSchemas({
    subschemas: [
      { schema: userSchema },
      { schema: productSchema },
    ],
    typeDefs: `
      extend type Product {
        user: User
      }
    `,
    resolvers: {
      Product: {
        user: {
          selectionSet: `{ userId }`,
          resolve(product, args, context, info) {
            return info.mergeInfo.delegateToSchema({
              schema: userSchema,
              operation: 'query',
              fieldName: 'user',
              args: {
                id: product.userId,
              },
              context,
              info,
            });
          },
        },
      },
    },
  });

  const app = express();
  app.use('/graphql', graphqlHTTP({
    schema: stitchedSchema,
    graphiql: true,
  }));

  app.listen(4000, () => console.log('Gateway server running on http://localhost:4000/graphql'));
}

main().catch(console.error);

३. सर्व्हिसेस चालवा

तुम्हाला युझर सर्व्हिस आणि प्रोडक्ट सर्व्हिस वेगवेगळ्या पोर्टवर चालवावी लागेल. उदाहरणार्थ:

युझर सर्व्हिस (पोर्ट ४००१):


const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { schema, rootValue } = require('./user-service');

const app = express();
app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: rootValue,
  graphiql: true,
}));

app.listen(4001, () => console.log('User service running on http://localhost:4001/graphql'));

प्रोडक्ट सर्व्हिस (पोर्ट ४००२):


const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { schema, rootValue } = require('./product-service');

const app = express();
app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: rootValue,
  graphiql: true,
}));

app.listen(4002, () => console.log('Product service running on http://localhost:4002/graphql'));

४. स्टिच्ड स्कीमाची क्वेरी करा

आता तुम्ही गेटवेद्वारे (पोर्ट ४००० वर चालू असलेल्या) स्टिच्ड स्कीमाची क्वेरी करू शकता. तुम्ही अशी क्वेरी चालवू शकता:


query {
  product(id: "101") {
    id
    name
    price
    user {
      id
      name
      email
    }
  }
}

ही क्वेरी "101" आयडी असलेले उत्पादन मिळवते आणि युझर सर्व्हिसमधून संबंधित युझरला देखील मिळवते, हे दाखवते की स्कीमा स्टिचिंग तुम्हाला एकाच विनंतीमध्ये अनेक सेवांमधील डेटाची क्वेरी कशी करू देते.

प्रगत स्कीमा स्टिचिंग तंत्र

मूळ उदाहरणापलीकडे, येथे काही प्रगत तंत्रे आहेत जी तुमच्या स्कीमा स्टिचिंग अंमलबजावणीला वाढवण्यासाठी वापरली जाऊ शकतात:

स्कीमा स्टिचिंग आणि अपोलो फेडरेशन यापैकी निवड करणे

स्कीमा स्टिचिंग हा ग्राफक्यूएल फेडरेशनसाठी एक व्यवहार्य पर्याय असला तरी, अपोलो फेडरेशन त्याच्या प्रगत वैशिष्ट्यांमुळे आणि सुधारित डेव्हलपर अनुभवामुळे अधिक लोकप्रिय पर्याय बनला आहे. येथे दोन्ही दृष्टिकोनांची तुलना आहे:

वैशिष्ट्य स्कीमा स्टिचिंग अपोलो फेडरेशन
स्कीमा व्याख्या विद्यमान ग्राफक्यूएल स्कीमा भाषा वापरते डायरेक्टिव्हसह डिक्लेरेटिव्ह स्कीमा भाषा वापरते
क्वेरी नियोजन मॅन्युअल क्वेरी डेलिगेशनची आवश्यकता असते अपोलो गेटवेद्वारे स्वयंचलित क्वेरी नियोजन
टाइप एक्सटेंशन मर्यादित समर्थन टाइप एक्सटेंशनसाठी अंगभूत समर्थन
की डायरेक्टिव्ह समर्थित नाही एंटिटी ओळखण्यासाठी @key डायरेक्टिव्ह वापरते
डिस्ट्रिब्युटेड ट्रेसिंग मॅन्युअल अंमलबजावणीची आवश्यकता असते डिस्ट्रिब्युटेड ट्रेसिंगसाठी अंगभूत समर्थन
टूलिंग आणि इकोसिस्टम कमी परिपक्व टूलिंग अधिक परिपक्व टूलिंग आणि मोठा समुदाय
गुंतागुंत मोठ्या सिस्टममध्ये व्यवस्थापित करणे गुंतागुंतीचे असू शकते मोठ्या आणि गुंतागुंतीच्या सिस्टमसाठी डिझाइन केलेले

स्कीमा स्टिचिंग केव्हा निवडावे:

अपोलो फेडरेशन केव्हा निवडावे:

वास्तविक-जगातील उदाहरणे आणि उपयोग प्रकरणे

येथे काही वास्तविक-जगातील उदाहरणे आहेत की ग्राफक्यूएल फेडरेशन, स्कीमा स्टिचिंगसह, कसे वापरले जाऊ शकते:

स्कीमा स्टिचिंगसाठी सर्वोत्तम पद्धती

यशस्वी स्कीमा स्टिचिंग अंमलबजावणी सुनिश्चित करण्यासाठी, या सर्वोत्तम पद्धतींचे अनुसरण करा:

निष्कर्ष

स्कीमा स्टिचिंगसह ग्राफक्यूएल फेडरेशन मायक्रो सर्व्हिसेस आर्किटेक्चरमध्ये अनेक सेवांमधून युनिफाइड API तयार करण्यासाठी एक शक्तिशाली दृष्टिकोन प्रदान करते. त्याच्या मूळ संकल्पना, फायदे, मर्यादा आणि अंमलबजावणी तंत्र समजून घेऊन, तुम्ही डेटा ऍक्सेस सोपे करण्यासाठी, स्केलेबिलिटी सुधारण्यासाठी आणि मेंटेनेबिलिटी वाढवण्यासाठी स्कीमा स्टिचिंगचा फायदा घेऊ शकता. जरी अपोलो फेडरेशन एक अधिक प्रगत उपाय म्हणून उदयास आले असले तरी, स्कीमा स्टिचिंग सोप्या परिस्थितीसाठी किंवा विद्यमान ग्राफक्यूएल सेवा एकत्रित करताना एक व्यवहार्य पर्याय राहतो. तुमच्या संस्थेसाठी सर्वोत्तम दृष्टिकोन निवडण्यासाठी तुमच्या विशिष्ट गरजा आणि आवश्यकतांचा काळजीपूर्वक विचार करा.