Rust में माइक्रोसर्विसेज़: आर्किटेक्चर, अभ्यास और कोड उदाहरण

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

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

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

परिचय: माइक्रोसर्विसेज़ के लिए Rust क्यों?



माइक्रोसर्विस आर्किटेक्चर आधुनिक वितरित सिस्टम के लिए एक मानक बन गया है। हालांकि, माइक्रोसर्विसेज़ को लागू करने के लिए प्रोग्रामिंग भाषा का चुनाव एक महत्वपूर्ण निर्णय है। Rust C/C++ के प्रदर्शन और मेमोरी सुरक्षा का एक अनूठा संयोजन प्रदान करता है, जो इसे उच्च-लोड वाली सेवाओं के लिए एक आदर्श उम्मीदवार बनाता है।



इस लेख में, हम लोकप्रिय फ्रेमवर्क Actix-web और Tokio का उपयोग करके Rust में माइक्रोसर्विस बनाने का तरीका समझेंगे। आप आर्किटेक्चरल सिद्धांतों, एसिंक्रोनस रिक्वेस्ट प्रोसेसिंग के बारे में जानेंगे और काम करने वाले कोड उदाहरण प्राप्त करेंगे।



Rust पर माइक्रोसर्विस आर्किटेक्चर



बुनियादी सिद्धांत



Rust पर माइक्रोसर्विस आमतौर पर निम्नलिखित घटकों के आसपास बनाई जाती है:

  • HTTP-सर्वर — इनकमिंग रिक्वेस्ट को संभालना (Actix-web, Warp, Axum)।
  • एसिंक्रोनस रनटाइम — कंकरेंसी का प्रबंधन (Tokio, async-std)।
  • बिजनेस लॉजिक — स्पष्ट सीमाओं वाले पृथक मॉड्यूल।
  • डेटा स्टोरेज — SQLx या Diesel के माध्यम से DB के साथ इंटरैक्शन।
  • इंटर-सर्विस कम्युनिकेशन — HTTP/gRPC या मैसेज क्यू (RabbitMQ, Kafka)।


प्रोजेक्ट संरचना



Rust पर माइक्रोसर्विस के लिए अनुशंसित संरचना:



my_microservice/├── Cargo.toml├── src/│   ├── main.rs          # एंट्री पॉइंट, सर्वर स्टार्टअप│   ├── routes/          # रूट परिभाषाएँ│   ├── handlers/        # रिक्वेस्ट हैंडलर│   ├── models/          # डेटा स्ट्रक्चर (DTO, एंटिटीज़)│   ├── services/        # बिजनेस लॉजिक│   ├── repositories/    # डेटा एक्सेस लेयर│   └── config/          # कॉन्फ़िगरेशन (env, फ़ाइलें)└── tests/               # इंटीग्रेशन टेस्ट


व्यावहारिक उदाहरण: URL शॉर्टनर सर्विस



URL को छोटा करने के लिए एक सरल माइक्रोसर्विस बनाने पर विचार करें। यह लंबे लिंक स्वीकार करेगा और छोटे आइडेंटिफ़ायर लौटाएगा।



चरण 1: प्रोजेक्ट सेटअप



एक नया Cargo प्रोजेक्ट बनाएँ और Cargo.toml में डिपेंडेंसी जोड़ें:



[package]name = "url-shortener"version = "0.1.0"edition = "2021"

[dependencies]actix-web = "4"actix-rt = "2"serde = { version = "1", features = ["derive"] }serde_json = "1"tokio = { version = "1", features = ["full"] }redis = { version = "0.23", features = ["tokio-comp"] }uuid = { version = "1", features = ["v4"] }dotenv = "0.15"env_logger = "0.10"log = "0.4"


चरण 2: डेटा मॉडल



रिक्वेस्ट और रिस्पॉन्स स्ट्रक्चर को परिभाषित करें:



// models/mod.rsuse serde::{Deserialize, Serialize};

#[derive(Debug, Deserialize)]pub struct CreateUrlRequest { pub url: String,}

#[derive(Debug, Serialize)]pub struct CreateUrlResponse { pub short_code: String, pub original_url: String,}

#[derive(Debug, Serialize)]pub struct ErrorResponse { pub error: String,}


चरण 3: सर्विस लेयर



स्टोरेज के लिए Redis का उपयोग करके बिजनेस लॉजिक को लागू करें:



// services/url_service.rsuse redis::AsyncCommands;use uuid::Uuid;

pub struct UrlService { redis_client: redis::Client,}

impl UrlService { pub fn new(redis_client: redis::Client) -> Self { Self { redis_client } }

pub async fn create_short_url(&self, original_url: &str) -> Result<String, String> { let short_code = Uuid::new_v4().to_string()[..8].to_string(); let mut conn = self.redis_client .get_multiplexed_async_connection() .await .map_err(|e| format!("Redis connection error: {}", e))?;

// Redis में सेव करें: key — short_code, value — original_url conn.set_ex(&short_code, original_url, 86400) // TTL 24 घंटे .await .map_err(|e| format!("Redis```

ब्लॉग

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