தமிழ்

ஸ்கீமா ஸ்டிட்சிங் மூலம் கிராஃப்க்யூஎல் ஃபெடரேஷனின் ஆற்றலைத் திறக்கவும். பல சேவைகளிலிருந்து ஒரு ஒருங்கிணைந்த கிராஃப்க்யூஎல் ஏபிஐ-ஐ உருவாக்கி, அளவிடுதல் மற்றும் பராமரிப்பை மேம்படுத்துவது எப்படி என்பதை அறிக.

கிராஃப்க்யூஎல் ஃபெடரேஷன்: ஸ்கீமா ஸ்டிட்சிங் - ஒரு விரிவான வழிகாட்டி

நவீன மென்பொருள் உருவாக்கத்தின் எப்போதும் மாறிவரும் சூழலில், அளவிடக்கூடிய மற்றும் பராமரிக்கக்கூடிய கட்டமைப்புகளின் தேவை மிக முக்கியமாகிவிட்டது. மைக்ரோசர்வீசஸ், அவற்றின் உள்ளார்ந்த மட்டுத்தன்மை மற்றும் சுயாதீனமான வரிசைப்படுத்தல் திறன்களுடன், ஒரு பிரபலமான தீர்வாக உருவெடுத்துள்ளன. இருப்பினும், பல மைக்ரோசர்வீஸ்களை நிர்வகிப்பது சிக்கல்களை அறிமுகப்படுத்தலாம், குறிப்பாக வாடிக்கையாளர் பயன்பாடுகளுக்கு ஒரு ஒருங்கிணைந்த ஏபிஐ-ஐ வெளிப்படுத்தும் போது. இங்குதான் கிராஃப்க்யூஎல் ஃபெடரேஷன், குறிப்பாக ஸ்கீமா ஸ்டிட்சிங், முக்கியப் பங்கு வகிக்கிறது.

கிராஃப்க்யூஎல் ஃபெடரேஷன் என்றால் என்ன?

கிராஃப்க்யூஎல் ஃபெடரேஷன் என்பது ஒரு சக்திவாய்ந்த கட்டமைப்பாகும், இது பல அடிப்படை கிராஃப்க்யூஎல் சேவைகளிலிருந்து (பெரும்பாலும் மைக்ரோசர்வீஸ்களைக் குறிக்கும்) ஒற்றை, ஒருங்கிணைந்த கிராஃப்க்யூஎல் ஏபிஐ-ஐ உருவாக்க உங்களை அனுமதிக்கிறது. இது டெவலப்பர்களை வெவ்வேறு சேவைகளில் உள்ள தரவுகளை ஒரே வரைபடமாக வினவ உதவுகிறது, வாடிக்கையாளர் அனுபவத்தை எளிதாக்குகிறது மற்றும் வாடிக்கையாளர் தரப்பில் சிக்கலான ஒருங்கிணைப்பு தர்க்கத்தின் தேவையைக் குறைக்கிறது.

கிராஃப்க்யூஎல் ஃபெடரேஷனுக்கு இரண்டு முதன்மை அணுகுமுறைகள் உள்ளன:

இந்தக் கட்டுரை ஸ்கீமா ஸ்டிட்சிங் மீது கவனம் செலுத்துகிறது, அதன் கருத்துக்கள், நன்மைகள், வரம்புகள் மற்றும் நடைமுறைச் செயலாக்கத்தை ஆராய்கிறது.

ஸ்கீமா ஸ்டிட்சிங்-ஐப் புரிந்துகொள்வது

ஸ்கீமா ஸ்டிட்சிங் என்பது பல கிராஃப்க்யூஎல் ஸ்கீமாக்களை ஒரே, ஒத்திசைவான ஸ்கீமாவாக இணைக்கும் செயல்முறையாகும். இந்த ஒருங்கிணைந்த ஸ்கீமா ஒரு முகப்பாக செயல்படுகிறது, அடிப்படை சேவைகளின் சிக்கலை வாடிக்கையாளரிடமிருந்து மறைக்கிறது. ஒரு வாடிக்கையாளர் தைக்கப்பட்ட ஸ்கீமாவுக்கு ஒரு கோரிக்கையை அனுப்பும்போது, கேட்வே புத்திசாலித்தனமாக கோரிக்கையை பொருத்தமான அடிப்படை சேவை(களு)க்கு வழிநடத்துகிறது, தரவைப் பெறுகிறது மற்றும் முடிவுகளை வாடிக்கையாளருக்குத் திருப்பித் தரும் முன் அவற்றை இணைக்கிறது.

இதை இப்படி நினைத்துப் பாருங்கள்: உங்களிடம் பல உணவகங்கள் (சேவைகள்) உள்ளன, ஒவ்வொன்றும் வெவ்வேறு உணவு வகைகளில் நிபுணத்துவம் பெற்றவை. ஸ்கீமா ஸ்டிட்சிங் என்பது ஒவ்வொரு உணவகத்திலிருந்தும் அனைத்து உணவுகளையும் இணைக்கும் ஒரு உலகளாவிய மெனு போன்றது. ஒரு வாடிக்கையாளர் (கிளையன்ட்) உலகளாவிய மெனுவிலிருந்து ஆர்டர் செய்யும்போது, ஆர்டர் புத்திசாலித்தனமாக பொருத்தமான உணவக சமையலறைகளுக்கு அனுப்பப்படுகிறது, உணவு தயாரிக்கப்பட்டு, பின்னர் வாடிக்கையாளருக்கு ஒரே விநியோகமாக இணைக்கப்படுகிறது.

ஸ்கீமா ஸ்டிட்சிங்கில் முக்கிய கருத்துக்கள்

ஸ்கீமா ஸ்டிட்சிங்கின் நன்மைகள்

ஸ்கீமா ஸ்டிட்சிங் மைக்ரோசர்வீசஸ் கட்டமைப்பை பின்பற்றும் நிறுவனங்களுக்கு பல குறிப்பிடத்தக்க நன்மைகளை வழங்குகிறது:

ஸ்கீமா ஸ்டிட்சிங்கின் வரம்புகள்

ஸ்கீமா ஸ்டிட்சிங் பல நன்மைகளை வழங்கினாலும், அதன் வரம்புகளைப் பற்றி அறிந்திருப்பது முக்கியம்:

ஸ்கீமா ஸ்டிட்சிங்கின் நடைமுறைச் செயலாக்கம்

Node.js மற்றும் graphql-tools நூலகத்தைப் (ஸ்கீமா ஸ்டிட்சிங்கிற்கான ஒரு பிரபலமான தேர்வு) பயன்படுத்தி ஸ்கீமா ஸ்டிட்சிங்கை எப்படி செயல்படுத்துவது என்பதற்கான ஒரு எளிமையான உதாரணத்தைப் பார்ப்போம். இந்த உதாரணம் இரண்டு மைக்ரோசர்வீஸ்களை உள்ளடக்கியது: ஒரு பயனர் சேவை (User Service) மற்றும் ஒரு தயாரிப்பு சேவை (Product Service).

1. ரிமோட் ஸ்கீமாக்களை வரையறுக்கவும்

முதலில், ஒவ்வொரு ரிமோட் சேவைக்கும் கிராஃப்க்யூஎல் ஸ்கீமாக்களை வரையறுக்கவும்.

பயனர் சேவை (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,
};

2. கேட்வே சேவையை உருவாக்கவும்

இப்போது, இரண்டு ஸ்கீமாக்களையும் ஒன்றாக இணைக்கும் கேட்வே சேவையை உருவாக்கவும்.

கேட்வே சேவை (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);

3. சேவைகளை இயக்கவும்

நீங்கள் பயனர் சேவை மற்றும் தயாரிப்பு சேவையை வெவ்வேறு போர்ட்களில் இயக்க வேண்டும். உதாரணமாக:

பயனர் சேவை (போர்ட் 4001):


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'));

தயாரிப்பு சேவை (போர்ட் 4002):


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'));

4. தைக்கப்பட்ட ஸ்கீமாவை வினவவும்

இப்போது நீங்கள் கேட்வே மூலம் (போர்ட் 4000 இல் இயங்குகிறது) தைக்கப்பட்ட ஸ்கீமாவை வினவலாம். இதுபோன்ற ஒரு வினவலை நீங்கள் இயக்கலாம்:


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

இந்த வினவல் "101" என்ற ஐடியுடன் உள்ள தயாரிப்பை மீட்டெடுக்கிறது மற்றும் பயனர் சேவையிலிருந்து தொடர்புடைய பயனரையும் பெறுகிறது, ஸ்கீமா ஸ்டிட்சிங் எப்படி ஒரே கோரிக்கையில் பல சேவைகளில் உள்ள தரவை வினவ உங்களை அனுமதிக்கிறது என்பதைக் காட்டுகிறது.

மேம்பட்ட ஸ்கீமா ஸ்டிட்சிங் உத்திகள்

அடிப்படை உதாரணத்திற்கு அப்பால், உங்கள் ஸ்கீமா ஸ்டிட்சிங் செயலாக்கத்தை மேம்படுத்தப் பயன்படுத்தக்கூடிய சில மேம்பட்ட உத்திகள் இங்கே:

ஸ்கீமா ஸ்டிட்சிங் மற்றும் அப்பல்லோ ஃபெடரேஷன் இடையே தேர்வு செய்தல்

ஸ்கீமா ஸ்டிட்சிங் கிராஃப்க்யூஎல் ஃபெடரேஷனுக்கு ஒரு சாத்தியமான விருப்பமாக இருந்தாலும், அப்பல்லோ ஃபெடரேஷன் அதன் மேம்பட்ட அம்சங்கள் மற்றும் மேம்பட்ட டெவலப்பர் அனுபவம் காரணமாக மிகவும் பிரபலமான தேர்வாக மாறியுள்ளது. இரண்டு அணுகுமுறைகளின் ஒப்பீடு இங்கே:

அம்சம் ஸ்கீமா ஸ்டிட்சிங் அப்பல்லோ ஃபெடரேஷன்
ஸ்கீமா வரையறை இருக்கும் கிராஃப்க்யூஎல் ஸ்கீமா மொழியைப் பயன்படுத்துகிறது வழிகாட்டுதல்களுடன் ஒரு அறிவிப்பு ஸ்கீமா மொழியைப் பயன்படுத்துகிறது
வினவல் திட்டமிடல் கைமுறையான வினவல் பிரதிநிதித்துவம் தேவை அப்பல்லோ கேட்வே மூலம் தானியங்கி வினவல் திட்டமிடல்
வகை நீட்டிப்புகள் வரையறுக்கப்பட்ட ஆதரவு வகை நீட்டிப்புகளுக்கு உள்ளமைக்கப்பட்ட ஆதரவு
முக்கிய வழிகாட்டுதல்கள் ஆதரிக்கப்படவில்லை நிறுவனங்களை அடையாளம் காண @key வழிகாட்டுதலைப் பயன்படுத்துகிறது
விநியோகிக்கப்பட்ட கண்காணிப்பு கைமுறையான செயலாக்கம் தேவை விநியோகிக்கப்பட்ட கண்காணிப்புக்கு உள்ளமைக்கப்பட்ட ஆதரவு
கருவிகள் மற்றும் சூழல் அமைப்பு குறைந்த முதிர்ச்சியுள்ள கருவிகள் அதிக முதிர்ச்சியுள்ள கருவிகள் மற்றும் ஒரு பெரிய சமூகம்
சிக்கலானது பெரிய அமைப்புகளில் நிர்வகிக்க சிக்கலானதாக இருக்கலாம் பெரிய மற்றும் சிக்கலான அமைப்புகளுக்காக வடிவமைக்கப்பட்டது

ஸ்கீமா ஸ்டிட்சிங்கை எப்போது தேர்வு செய்வது:

அப்பல்லோ ஃபெடரேஷனை எப்போது தேர்வு செய்வது:

நிஜ உலக உதாரணங்கள் மற்றும் பயன்பாட்டு வழக்குகள்

ஸ்கீமா ஸ்டிட்சிங் உட்பட கிராஃப்க்யூஎல் ஃபெடரேஷனை எப்படிப் பயன்படுத்தலாம் என்பதற்கான சில நிஜ உலக உதாரணங்கள் இங்கே:

ஸ்கீமா ஸ்டிட்சிங்கிற்கான சிறந்த நடைமுறைகள்

ஒரு வெற்றிகரமான ஸ்கீமா ஸ்டிட்சிங் செயலாக்கத்தை உறுதிப்படுத்த, இந்த சிறந்த நடைமுறைகளைப் பின்பற்றவும்:

முடிவுரை

ஸ்கீமா ஸ்டிட்சிங்குடன் கூடிய கிராஃப்க்யூஎல் ஃபெடரேஷன், மைக்ரோசர்வீசஸ் கட்டமைப்பில் பல சேவைகளிலிருந்து ஒருங்கிணைந்த ஏபிஐ-க்களை உருவாக்குவதற்கான ஒரு சக்திவாய்ந்த அணுகுமுறையை வழங்குகிறது. அதன் முக்கிய கருத்துக்கள், நன்மைகள், வரம்புகள் மற்றும் செயலாக்க உத்திகளைப் புரிந்துகொள்வதன் மூலம், தரவு அணுகலை எளிதாக்கவும், அளவிடுதலை மேம்படுத்தவும், பராமரிப்பை மேம்படுத்தவும் நீங்கள் ஸ்கீமா ஸ்டிட்சிங்கைப் பயன்படுத்தலாம். அப்பல்லோ ஃபெடரேஷன் ஒரு மேம்பட்ட தீர்வாக உருவெடுத்தாலும், ஸ்கீமா ஸ்டிட்சிங் எளிமையான சூழ்நிலைகளுக்கு அல்லது இருக்கும் கிராஃப்க்யூஎல் சேவைகளை ஒருங்கிணைக்கும்போது ஒரு சாத்தியமான விருப்பமாக உள்ளது. உங்கள் நிறுவனத்திற்கு சிறந்த அணுகுமுறையைத் தேர்வுசெய்ய உங்கள் குறிப்பிட்ட தேவைகள் மற்றும் தேவைகளைக் கவனமாகக் கருத்தில் கொள்ளுங்கள்.