മലയാളം

സ്കീമ സ്റ്റിച്ചിംഗിലൂടെ ഗ്രാഫ്ക്യുഎൽ ഫെഡറേഷൻ്റെ ശക്തി പ്രയോജനപ്പെടുത്തുക. ഒന്നിലധികം സേവനങ്ങളിൽ നിന്ന് ഒരു ഏകീകൃത ഗ്രാഫ്ക്യുഎൽ എപിഐ നിർമ്മിക്കാനും, സ്കേലബിലിറ്റിയും മെയിൻ്റനബിലിറ്റിയും മെച്ചപ്പെടുത്താനും പഠിക്കുക.

ഗ്രാഫ്ക്യുഎൽ ഫെഡറേഷൻ: സ്കീമ സ്റ്റിച്ചിംഗ് - ഒരു സമഗ്രമായ ഗൈഡ്

ആധുനിക ആപ്ലിക്കേഷൻ ഡെവലപ്‌മെൻ്റിൻ്റെ എപ്പോഴും വികസിച്ചുകൊണ്ടിരിക്കുന്ന ലോകത്ത്, സ്കേലബിൾ ആയതും പരിപാലിക്കാൻ എളുപ്പമുള്ളതുമായ ആർക്കിടെക്ചറുകളുടെ ആവശ്യകത വളരെ പ്രധാനമായിരിക്കുന്നു. മൈക്രോസർവീസുകൾ, അവയുടെ സഹജമായ മോഡുലാരിറ്റിയും സ്വതന്ത്രമായ വിന്യാസശേഷിയും കാരണം, ഒരു ജനപ്രിയ പരിഹാരമായി മാറിയിരിക്കുന്നു. എന്നിരുന്നാലും, നിരവധി മൈക്രോസർവീസുകൾ കൈകാര്യം ചെയ്യുന്നത് സങ്കീർണ്ണതകൾക്ക് ഇടയാക്കും, പ്രത്യേകിച്ചും ക്ലയിൻ്റ് ആപ്ലിക്കേഷനുകൾക്ക് ഒരു ഏകീകൃത എപിഐ നൽകുന്ന കാര്യത്തിൽ. ഇവിടെയാണ് ഗ്രാഫ്ക്യുഎൽ ഫെഡറേഷനും, പ്രത്യേകിച്ചും സ്കീമ സ്റ്റിച്ചിംഗും പ്രസക്തമാകുന്നത്.

എന്താണ് ഗ്രാഫ്ക്യുഎൽ ഫെഡറേഷൻ?

ഒന്നിലധികം ഗ്രാഫ്ക്യുഎൽ സേവനങ്ങളിൽ നിന്ന് (പലപ്പോഴും മൈക്രോസർവീസുകളെ പ്രതിനിധീകരിക്കുന്നു) ഒരൊറ്റ, ഏകീകൃത ഗ്രാഫ്ക്യുഎൽ എപിഐ നിർമ്മിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്ന ശക്തമായ ഒരു ആർക്കിടെക്ചറാണ് ഗ്രാഫ്ക്യുഎൽ ഫെഡറേഷൻ. ഇത് ഡെവലപ്പർമാരെ ഒരൊറ്റ ഗ്രാഫ് എന്നപോലെ വ്യത്യസ്ത സേവനങ്ങളിൽ നിന്നുള്ള ഡാറ്റയെ ചോദ്യം ചെയ്യാൻ പ്രാപ്തരാക്കുന്നു, ഇത് ക്ലയിൻ്റിൻ്റെ അനുഭവം ലളിതമാക്കുകയും ക്ലയിൻ്റ് ഭാഗത്ത് സങ്കീർണ്ണമായ ഓർക്കസ്ട്രേഷൻ ലോജിക്കിൻ്റെ ആവശ്യകത കുറയ്ക്കുകയും ചെയ്യുന്നു.

ഗ്രാഫ്ക്യുഎൽ ഫെഡറേഷന് പ്രധാനമായും രണ്ട് സമീപനങ്ങളുണ്ട്:

ഈ ലേഖനം സ്കീമ സ്റ്റിച്ചിംഗിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നു, അതിൻ്റെ ആശയങ്ങൾ, പ്രയോജനങ്ങൾ, പരിമിതികൾ, പ്രായോഗികമായ നടപ്പാക്കൽ എന്നിവ പര്യവേക്ഷണം ചെയ്യുന്നു.

സ്കീമ സ്റ്റിച്ചിംഗ് മനസ്സിലാക്കൽ

ഒന്നിലധികം ഗ്രാഫ്ക്യുഎൽ സ്കീമകളെ ഒരൊറ്റ, യോജിച്ച സ്കീമയിലേക്ക് ലയിപ്പിക്കുന്ന പ്രക്രിയയാണ് സ്കീമ സ്റ്റിച്ചിംഗ്. ഈ ഏകീകൃത സ്കീമ ഒരു മുഖംമൂടിയായി പ്രവർത്തിക്കുന്നു, അടിസ്ഥാന സേവനങ്ങളുടെ സങ്കീർണ്ണത ക്ലയിൻ്റിൽ നിന്ന് മറച്ചുവെക്കുന്നു. ഒരു ക്ലയിൻ്റ് സ്റ്റിച്ച് ചെയ്ത സ്കീമയിലേക്ക് ഒരു അഭ്യർത്ഥന നടത്തുമ്പോൾ, ഗേറ്റ്‌വേ ബുദ്ധിപരമായി അഭ്യർത്ഥനയെ ഉചിതമായ അടിസ്ഥാന സേവനത്തിലേക്ക്(സേവനങ്ങളിലേക്ക്) റൂട്ട് ചെയ്യുകയും, ഡാറ്റ വീണ്ടെടുക്കുകയും, ഫലങ്ങൾ സംയോജിപ്പിച്ച് ക്ലയിൻ്റിന് തിരികെ നൽകുകയും ചെയ്യുന്നു.

ഇങ്ങനെ ചിന്തിക്കുക: നിങ്ങൾക്ക് വ്യത്യസ്ത വിഭവങ്ങളിൽ വൈദഗ്ദ്ധ്യം നേടിയ ഒന്നിലധികം റെസ്റ്റോറൻ്റുകൾ (സേവനങ്ങൾ) ഉണ്ട്. ഓരോ റെസ്റ്റോറൻ്റിലെയും എല്ലാ വിഭവങ്ങളും സംയോജിപ്പിക്കുന്ന ഒരു യൂണിവേഴ്സൽ മെനു പോലെയാണ് സ്കീമ സ്റ്റിച്ചിംഗ്. ഒരു ഉപഭോക്താവ് (ക്ലയിൻ്റ്) യൂണിവേഴ്സൽ മെനുവിൽ നിന്ന് ഓർഡർ ചെയ്യുമ്പോൾ, ഓർഡർ ബുദ്ധിപരമായി ഉചിതമായ റെസ്റ്റോറൻ്റ് അടുക്കളകളിലേക്ക് റൂട്ട് ചെയ്യപ്പെടുകയും, ഭക്ഷണം തയ്യാറാക്കുകയും, തുടർന്ന് ഉപഭോക്താവിന് ഒരൊറ്റ ഡെലിവറിയായി സംയോജിപ്പിക്കുകയും ചെയ്യുന്നു.

സ്കീമ സ്റ്റിച്ചിംഗിലെ പ്രധാന ആശയങ്ങൾ

സ്കീമ സ്റ്റിച്ചിംഗിൻ്റെ പ്രയോജനങ്ങൾ

ഒരു മൈക്രോസർവീസസ് ആർക്കിടെക്ചർ സ്വീകരിക്കുന്ന സ്ഥാപനങ്ങൾക്ക് സ്കീമ സ്റ്റിച്ചിംഗ് നിരവധി ശ്രദ്ധേയമായ പ്രയോജനങ്ങൾ വാഗ്ദാനം ചെയ്യുന്നു:

സ്കീമ സ്റ്റിച്ചിംഗിൻ്റെ പരിമിതികൾ

സ്കീമ സ്റ്റിച്ചിംഗ് നിരവധി ഗുണങ്ങൾ നൽകുമ്പോൾ തന്നെ, അതിൻ്റെ പരിമിതികളെക്കുറിച്ചും അറിഞ്ഞിരിക്കേണ്ടത് പ്രധാനമാണ്:

സ്കീമ സ്റ്റിച്ചിംഗിൻ്റെ പ്രായോഗിക നടപ്പാക്കൽ

Node.js, graphql-tools ലൈബ്രറി (സ്കീമ സ്റ്റിച്ചിംഗിനുള്ള ഒരു ജനപ്രിയ ചോയ്സ്) എന്നിവ ഉപയോഗിച്ച് സ്കീമ സ്റ്റിച്ചിംഗ് എങ്ങനെ നടപ്പാക്കാം എന്നതിൻ്റെ ഒരു ലളിതമായ ഉദാഹരണത്തിലൂടെ നമുക്ക് കടന്നുപോകാം. ഈ ഉദാഹരണത്തിൽ രണ്ട് മൈക്രോസർവീസുകൾ ഉൾപ്പെടുന്നു: ഒരു യൂസർ സർവീസ്, ഒരു പ്രൊഡക്റ്റ് സർവീസ്.

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
    }
  }
}

ഈ ക്വറി ID "101" ഉള്ള ഉൽപ്പന്നത്തെ വീണ്ടെടുക്കുകയും, യൂസർ സർവീസിൽ നിന്ന് ബന്ധപ്പെട്ട ഉപയോക്താവിനെ ലഭ്യമാക്കുകയും ചെയ്യുന്നു, ഇത് ഒരൊറ്റ അഭ്യർത്ഥനയിൽ ഒന്നിലധികം സേവനങ്ങളിൽ നിന്നുള്ള ഡാറ്റയെ എങ്ങനെ ക്വറി ചെയ്യാൻ സ്കീമ സ്റ്റിച്ചിംഗ് അനുവദിക്കുന്നുവെന്ന് കാണിക്കുന്നു.

നൂതന സ്കീമ സ്റ്റിച്ചിംഗ് ടെക്നിക്കുകൾ

അടിസ്ഥാന ഉദാഹരണത്തിനപ്പുറം, നിങ്ങളുടെ സ്കീമ സ്റ്റിച്ചിംഗ് നടപ്പാക്കൽ മെച്ചപ്പെടുത്താൻ ഉപയോഗിക്കാവുന്ന ചില നൂതന ടെക്നിക്കുകൾ താഴെ നൽകുന്നു:

സ്കീമ സ്റ്റിച്ചിംഗും അപ്പോളോ ഫെഡറേഷനും തമ്മിൽ തിരഞ്ഞെടുക്കൽ

ഗ്രാഫ്ക്യുഎൽ ഫെഡറേഷന് സ്കീമ സ്റ്റിച്ചിംഗ് ഒരു മികച്ച ഓപ്ഷനാണെങ്കിലും, അതിൻ്റെ നൂതന ഫീച്ചറുകളും മെച്ചപ്പെട്ട ഡെവലപ്പർ അനുഭവവും കാരണം അപ്പോളോ ഫെഡറേഷൻ കൂടുതൽ ജനപ്രിയമായി മാറിയിരിക്കുന്നു. രണ്ട് സമീപനങ്ങളുടെയും ഒരു താരതമ്യം താഴെ നൽകുന്നു:

ഫീച്ചർ സ്കീമ സ്റ്റിച്ചിംഗ് അപ്പോളോ ഫെഡറേഷൻ
സ്കീമ നിർവചനം നിലവിലുള്ള ഗ്രാഫ്ക്യുഎൽ സ്കീമ ഭാഷ ഉപയോഗിക്കുന്നു ഡയറക്റ്റീവുകളുള്ള ഒരു ഡിക്ലറേറ്റീവ് സ്കീമ ഭാഷ ഉപയോഗിക്കുന്നു
ക്വറി പ്ലാനിംഗ് മാനുവൽ ക്വറി ഡെലിഗേഷൻ ആവശ്യമാണ് അപ്പോളോ ഗേറ്റ്‌വേയുടെ ഓട്ടോമാറ്റിക് ക്വറി പ്ലാനിംഗ്
ടൈപ്പ് എക്സ്റ്റൻഷനുകൾ പരിമിതമായ പിന്തുണ ടൈപ്പ് എക്സ്റ്റൻഷനുകൾക്ക് ബിൽറ്റ്-ഇൻ പിന്തുണ
കീ ഡയറക്റ്റീവുകൾ പിന്തുണയില്ല എൻ്റിറ്റികളെ തിരിച്ചറിയാൻ @key ഡയറക്റ്റീവ് ഉപയോഗിക്കുന്നു
ഡിസ്ട്രിബ്യൂട്ടഡ് ട്രെയ്‌സിംഗ് മാനുവൽ നടപ്പാക്കൽ ആവശ്യമാണ് ഡിസ്ട്രിബ്യൂട്ടഡ് ട്രെയ്‌സിംഗിന് ബിൽറ്റ്-ഇൻ പിന്തുണ
ടൂളിംഗും ഇക്കോസിസ്റ്റവും കുറഞ്ഞ പക്വതയുള്ള ടൂളിംഗ് കൂടുതൽ പക്വതയുള്ള ടൂളിംഗും വലിയ കമ്മ്യൂണിറ്റിയും
സങ്കീർണ്ണത വലിയ സിസ്റ്റങ്ങളിൽ കൈകാര്യം ചെയ്യാൻ സങ്കീർണ്ണമാകാം വലുതും സങ്കീർണ്ണവുമായ സിസ്റ്റങ്ങൾക്കായി രൂപകൽപ്പന ചെയ്തത്

എപ്പോൾ സ്കീമ സ്റ്റിച്ചിംഗ് തിരഞ്ഞെടുക്കണം:

എപ്പോൾ അപ്പോളോ ഫെഡറേഷൻ തിരഞ്ഞെടുക്കണം:

യഥാർത്ഥ ലോക ഉദാഹരണങ്ങളും ഉപയോഗങ്ങളും

സ്കീമ സ്റ്റിച്ചിംഗ് ഉൾപ്പെടെ, ഗ്രാഫ്ക്യുഎൽ ഫെഡറേഷൻ എങ്ങനെ ഉപയോഗിക്കാം എന്നതിൻ്റെ ചില യഥാർത്ഥ ലോക ഉദാഹരണങ്ങൾ താഴെ നൽകുന്നു:

സ്കീമ സ്റ്റിച്ചിംഗിനുള്ള മികച്ച രീതികൾ

വിജയകരമായ ഒരു സ്കീമ സ്റ്റിച്ചിംഗ് നടപ്പാക്കൽ ഉറപ്പാക്കാൻ, ഈ മികച്ച രീതികൾ പിന്തുടരുക:

ഉപസംഹാരം

ഒരു മൈക്രോസർവീസസ് ആർക്കിടെക്ചറിൽ ഒന്നിലധികം സേവനങ്ങളിൽ നിന്ന് ഏകീകൃത എപിഐകൾ നിർമ്മിക്കുന്നതിന് ഗ്രാഫ്ക്യുഎൽ ഫെഡറേഷനും സ്കീമ സ്റ്റിച്ചിംഗും ശക്തമായ ഒരു സമീപനം വാഗ്ദാനം ചെയ്യുന്നു. അതിൻ്റെ പ്രധാന ആശയങ്ങൾ, പ്രയോജനങ്ങൾ, പരിമിതികൾ, നടപ്പാക്കൽ ടെക്നിക്കുകൾ എന്നിവ മനസ്സിലാക്കുന്നതിലൂടെ, ഡാറ്റാ ആക്‌സസ് ലളിതമാക്കാനും, സ്കേലബിലിറ്റി മെച്ചപ്പെടുത്താനും, പരിപാലനം വർദ്ധിപ്പിക്കാനും നിങ്ങൾക്ക് സ്കീമ സ്റ്റിച്ചിംഗ് പ്രയോജനപ്പെടുത്താം. അപ്പോളോ ഫെഡറേഷൻ കൂടുതൽ നൂതനമായ ഒരു പരിഹാരമായി മാറിയിട്ടുണ്ടെങ്കിലും, ലളിതമായ സാഹചര്യങ്ങൾക്കോ നിലവിലുള്ള ഗ്രാഫ്ക്യുഎൽ സേവനങ്ങൾ സംയോജിപ്പിക്കുമ്പോഴോ സ്കീമ സ്റ്റിച്ചിംഗ് ഒരു മികച്ച ഓപ്ഷനായി തുടരുന്നു. നിങ്ങളുടെ സ്ഥാപനത്തിന് ഏറ്റവും മികച്ച സമീപനം തിരഞ്ഞെടുക്കുന്നതിന് നിങ്ങളുടെ പ്രത്യേക ആവശ്യങ്ങളും ആവശ്യകതകളും ശ്രദ്ധാപൂർവ്വം പരിഗണിക്കുക.