TypeScript पर माइक्रोसर्विसेज़: उन्नत स्तर की आर्किटेक्चर और अभ्यास

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: TypeScript माइक्रोसर्विसेज़ के लिए आदर्श विकल्प क्यों है

\n\n

आधुनिक वितरित आर्किटेक्चर के लिए डेवलपर को न केवल फ्रेमवर्क का ज्ञान चाहिए, बल्कि इंटरैक्शन पैटर्न, त्रुटि प्रबंधन और डेटा टाइपिंग की गहरी समझ भी आवश्यक है। TypeScript, अपनी सख्त स्थैतिक टाइपिंग और शक्तिशाली डेकोरेटर प्रणाली के कारण, विश्वसनीय माइक्रोसर्विसेज़ बनाने के लिए डी-फैक्टो मानक बन गया है। शुद्ध JavaScript के विपरीत, TypeScript कंपाइलेशन चरण में ही त्रुटियों को पकड़ने की अनुमति देता है, जो दर्जनों सेवाओं वाले सिस्टम के लिए महत्वपूर्ण है।

\n\n

इस लेख में, हम TypeScript पर माइक्रोसर्विस आर्किटेक्चर बनाने की उन्नत तकनीकों पर चर्चा करेंगे: NestJS पर आधारित मॉड्यूलर संरचना के आयोजन से लेकर Saga और CQRS ट्रांजेक्शनल पैटर्न के कार्यान्वयन तक। आप सीखेंगे कि RabbitMQ और gRPC के माध्यम से कुशल अंतर-सेवा संचार कैसे सेट करें, और प्रोडक्शन-समाधानों के लिए तैयार कोड टेम्पलेट प्राप्त करेंगे।

\n\n

1. NestJS पर माइक्रोसर्विसेज़ की आर्किटेक्चर: मोनोलिथ से वितरित सिस्टम तक

\n\n

NestJS Node.js के लिए एक प्रगतिशील फ्रेमवर्क है, जो ट्रांसपोर्ट और डेकोरेटर के अंतर्निहित समर्थन के कारण माइक्रोसर्विस आर्किटेक्चर के लिए आदर्श है। आइए देखें कि प्रोजेक्ट को सही तरीके से कैसे व्यवस्थित किया जाए।

\n\n

1.1. माइक्रोसर्विस की मूल संरचना

\n\n

प्रत्येक माइक्रोसर्विस को स्पष्ट सीमाओं के साथ एक पृथक मॉड्यूल होना चाहिए। न्यूनतम संरचना का उदाहरण:

\n\n
// user-service/src/main.ts\nimport { NestFactory } from '@nestjs/core';\nimport { MicroserviceOptions, Transport } from '@nestjs/microservices';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.createMicroservice<MicroserviceOptions>(\n    AppModule,\n    {\n      transport: Transport.TCP,\n      options: {\n        host: '0.0.0.0',\n        port: 3001,\n      },\n    },\n  );\n  await app.listen();\n}\nbootstrap();
\n\n

मुख्य बिंदु MicroserviceOptions का उपयोग और ट्रांसपोर्ट की सख्त टाइपिंग है। यह सुनिश्चित करता है कि प्रोटोकॉल बदलने पर (जैसे, TCP से Redis पर) कंपाइलर बताएगा कि कौन से पैरामीटर बदलने की आवश्यकता है।

\n\n

1.2. मॉड्यूलर संगठन और Dependency Injection

\n\n

प्रोडक्शन सिस्टम के लिए व्यावसायिक तर्क और बुनियादी ढांचे के कोड को अलग करना महत्वपूर्ण है। संबंधित घटकों को समूहित करने के लिए NestJS मॉड्यूल का उपयोग करें:

\n\n
// user-service/src/user/user.module.ts\nimport { Module } from '@nestjs/common';\nimport { UserController } from './user.controller';\nimport { UserService } from './user.service';\nimport { DatabaseModule } from '../database/database.module';\n\n@Module({\n  imports: [DatabaseModule],\n  controllers: [UserController],\n  providers: [UserService],\n  exports: [UserService],\n})\nexport class UserModule {}
\n\n

उन्नत अभ्यास - डेटाबेस क्लाइंट या मैसेज क्यू के डायनामिक कॉन्फ़िगरेशन के लिए फैक्ट्री प्रोवाइडर का उपयोग करना है।

\n\n

2. Saga और CQRS पैटर्न: वितरित लेन-देन का प्रबंधन

\n\n

माइक्रोसर्विस आर्किटेक्चर में पारंपरिक ACID लेन-देन का उपयोग नहीं किया जा सकता है। इसके बजाय, Saga पैटर्न (डेटा स्थिरता के लिए) और CQRS (पढ़ने और लिखने को अलग करने के लिए) लागू किए जाते हैं।

\n\n

2.1. TypeScript पर Saga-पैटर्न का कार्यान्वयन

\n\n

Saga स्थानीय लेन-देन का एक क्रम है, जहां प्रत्येक विफलता एक क्षतिपूर्ति कार्रवाई शुरू करती है। आइए ऑर्डर और भुगतान के साथ एक उदाहरण देखें:

\n\n
// order-service/src/sagas/create-order.saga.ts\nimport { Saga, ofType } from '@nestjs/cqrs';\nimport { Observable } from 'rxjs';\nimport { delay, map } from 'rxjs/operators';\n\nexport class CreateOrderSaga {\n  @Saga()\n  createOrder = (events$: Observable<any>): Observable<ICommand> => {\n    return events$.pipe(\n      ofType(OrderCreatedEvent),\n      delay(1000),\n      map(event => new ReserveInventoryCommand(event.orderId)),\n    );\n  };\n\n  @Saga()\n  handlePaymentFailure = (events$: Observable<any>): Observable<IComma                

ब्लॉग

पुस्तक अनुशंसाएँ