🚀 Створення мікросервісів на Node.js: захоплюючий посібник для початківців

pic

Мікросервіси: NodeJS

Мікросервіси стали популярною архітектурою для створення масштабованих і гнучких застосунків. У цьому пості я проведу вас через процес створення простих мікросервісів з Node.js, Express і міжсервісної комунікації за допомогою HTTP-запитів. В кінці ви зрозумієте, як мікросервіси можуть працювати разом, створюючи модульні застосунки.

Що таке мікросервіси?

Мікросервіси — це архітектурний стиль, коли застосунки складаються з маленьких, незалежних сервісів. Кожен сервіс відповідає за конкретну бізнес-область і взаємодіє з іншими через API. Такий підхід дозволяє покращити масштабованість, ізоляцію від помилок і швидкість розробки, що робить його популярним вибором для сучасних застосунків.

Давайте розглянемо приклад, створивши два мікросервіси:

  1. Сервіс користувачів: Керує даними користувачів.
  2. Сервіс замовлень: Керує замовленнями та отримує деталі користувача з Сервісу користувачів.

Сервіс користувачів: Керування даними користувачів

Сервіс користувачів відповідає за обробку інформації про користувачів. Він надає можливість отримувати дані користувача за ID.

Ось код:

const express = require("express");  
const app = express();  
app.use(express.json());  
const users = [  
 { id: 1, name: "John Doe", email: "[email protected]" },  
 { id: 2, name: "Jane Smith", email: "[email protected]" },  
];  
app.get("/users/:id", (req, res) => {  
 const user = users.find((u) => u.id === parseInt(req.params.id));  
 if (!user) return res.status(404).json({ error: "User not found" });  
 res.json(user);  
});  
app.listen(3001, () => console.log("📡 User Service running on port 3001"));

📦 Сервіс замовлень: Отримання замовлень з даними користувача

Сервіс замовлень не лише керує замовленнями, але й отримує деталі користувача, звертаючись до Сервісу користувачів.

Ось код:

const express = require("express");  
const http = require("http");  
const app = express();  

const orders = [  
 { id: 1, userId: 1, item: "Laptop", amount: 1500 },  
 { id: 2, userId: 2, item: "Phone", amount: 800 },  
];  

app.get("/orders/:id", (req, res) => {  
 const order = orders.find((o) => o.id === parseInt(req.params.id));  
 if (!order) return res.status(404).json({ error: "Order not found" });  

 const options = { hostname: "localhost", port: 3001, path: `/users/${order.userId}` };  

 const request = http.request(options, (response) => {  
 let data = "";  
 response.on("data", (chunk) => (data += chunk));  
 response.on("end", () => {  
 res.json({ ...order, user: JSON.parse(data) });  
 });  
 });  

 request.on("error", () => res.status(500).json({ error: "Failed to fetch user details" }));  
 request.end();  
});  

app.listen(3002, () => console.log("📡 Order Service running on port 3002"));

🔗 Як вони працюють разом

Ось як ці мікросервіси працюють разом:

  1. Сервіс замовлень отримує замовлення за ID (наприклад, /orders/1).
  2. Потім він надсилає HTTP-запит до Сервісу користувачів, щоб отримати деталі користувача.
  3. Врешті-решт, він комбінує дані про замовлення та користувача в один відповідь.

Приклад відповіді з /orders/1:

{  
 "id": 1,  
 "userId": 1,  
 "item": "Laptop",  
 "amount": 1500,  
 "user": {  
 "id": 1,  
 "name": "John Doe",  
 "email": "[email protected]"  
 }  
}

🎉 Чому мікросервіси?

Мікросервіси пропонують безліч переваг порівняно з традиційними монолітними архітектурами, що робить їх дедалі популярнішим вибором. Ось детальний огляд:

1. Модульність = Простіше обслуговування

  • Кожен сервіс зосереджений на конкретній функції (наприклад, управління користувачами, обробка замовлень).
  • Менші кодові бази легше розуміти, оновлювати та налагоджувати.
  • Розробники можуть ізолювати та виправляти помилки або впроваджувати нові функції без впливу на всю систему.

2.

Незалежний розвиток для команд

  • Команди можуть володіти та розробляти конкретні сервіси незалежно, не перешкоджаючи одна одній.
  • Наприклад, одна команда може зосередитися на покращенні Сервісу замовлень, а інша — на Сервісі користувачів — без конфліктів!
  • Це сприяє співпраці, даючи командам можливість спеціалізуватися.

3. Швидші цикли розгортання

  • Кожен сервіс можна розгортати незалежно, зменшуючи ризик глобальних збоїв системи.
  • Якщо потрібно оновити один сервіс, не потрібно перезавантажувати весь додаток. 🚀
  • Безперервні цикли розгортання стають простіші для управління в малих, незалежних сервісах.

4. Масштабованість: плати тільки за те, що тобі потрібно

  • Сервіси можуть масштабуватися незалежно, в залежності від попиту.
  • Наприклад, якщо Сервіс замовлень отримує високий трафік, можна виділити більше ресурсів для нього без впливу на інші сервіси.
  • Це забезпечує економічно ефективне управління ресурсами. 💡

5. Свобода технологій

  • Кожен сервіс може використовувати різний технологічний стек чи мову програмування, якщо вони взаємодіють через API.
  • Наприклад, ваш Сервіс користувачів може використовувати Node.js, а Сервіс аналітики — Python.
  • Команди можуть вибирати інструменти, які найкраще підходять для їх завдань.

6. Ізоляція помилок

  • Помилка в одному сервісі не призведе до збою всього додатка.
  • Якщо Сервіс оплати не працює, решта додатка (наприклад, перегляд, додавання товарів до кошика) може продовжувати працювати.
  • Це робить ваш додаток більш стійким та покращує досвід користувача.

7. Легше впровадження нових функцій

  • Ви можете експериментувати з новими функціями в сервісі, не переживаючи, що це зламає весь додаток.
  • Сервіси можуть еволюціонувати та поступово замінюватися, що полегшує підтримку технологічного стеку в актуальному стані.

Готові до розробки? 🙌

Мікросервіси — ідеальне рішення для створення масштабованих, гнучких і стійких систем. Тому спробуйте — почніть з малого, і ви багато чого навчитеся!

Щасливого кодування! 🧑‍💻

Перекладено з: 🚀 Building Node.js Microservices: A Fun Beginner’s Guide

Leave a Reply

Your email address will not be published. Required fields are marked *