Mikroservices in JavaScript: Architektur und Praxis von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten
Here is the translated HTML blog article in German, with all HTML tags, code, and URLs kept unchanged.

Einführung in die Microservice-Architektur in JavaScript

Microservice-Architektur ist ein Softwareentwicklungsansatz, bei dem eine Anwendung als eine Reihe kleiner, unabhängig bereitstellbarer Dienste aufgebaut wird. Jeder Dienst implementiert eine einzelne Geschäftsfunktion und kommuniziert über leichtgewichtige Protokolle (normalerweise HTTP/REST oder Nachrichtenwarteschlangen) mit anderen. JavaScript, insbesondere die Node.js-Laufzeitumgebung, ist dank seines asynchronen I/O-Modells, des riesigen Paketökosystems (npm) und der hohen Entwicklungsgeschwindigkeit ideal für die Erstellung von Microservices.

In diesem Artikel behandeln wir die wichtigsten Aspekte der Erstellung von Microservices in JavaScript: vom Architekturentwurf bis zur Container-Bereitstellung. Sie erfahren, wie Sie den Datenaustausch organisieren, Fehlertoleranz sicherstellen und ein verteiltes System testen.



1. Entwurf der Microservice-Architektur

Der erste Schritt ist die Zerlegung einer monolithischen Anwendung in Dienste. Jeder Microservice sollte seine eigene Datenbank (Database per Service) besitzen und vollständig autonom sein. Betrachten Sie ein Beispiel eines Online-Shops:

  • Dienst Benutzer — Registrierung, Authentifizierung, Profile.
  • Dienst Produkte — Produktkatalog, Preise, Lagerbestand.
  • Dienst Bestellungen — Erstellung und Verarbeitung von Bestellungen.
  • Dienst Zahlungen — Integration mit Zahlungsgateways.
  • Dienst Benachrichtigungen — Senden von E-Mails/SMS.

Für die Kommunikation zwischen den Diensten verwenden wir zwei Ansätze: synchron (REST/gRPC) für Anfragen, die eine sofortige Antwort erfordern, und asynchron (Nachrichtenwarteschlangen) für Ereignisse, die keine Blockierung erfordern.



2. Erstellen eines Microservices auf Node.js mit Express

Beginnen wir mit einem einfachen Microservice für die Benutzerverwaltung. Installieren Sie Express und eine Bibliothek für die Arbeit mit UUID:

npm init -ynpm install express uuid

Erstellen Sie eine Datei users-service.js:

const express = require('express');const { v4: uuidv4 } = require('uuid');const app = express();app.use(express.json());

const users = [];

// Create userapp.post('/users', (req, res) => { const { name, email } = req.body; const user = { id: uuidv4(), name, email }; users.push(user); res.status(201).json(user);});

// Get list of usersapp.get('/users', (req, res) => { res.json(users);});

// Get user by IDapp.get('/users/:id', (req, res) => { const user = users.find(u => u.id === req.params.id); if (!user) return res.status(404).json({ error: 'User not found' }); res.json(user);});

app.listen(3001, () => console.log('Users service running on port 3001'));

Führen Sie den Dienst aus: node users-service.js. Jetzt haben Sie einen funktionierenden Microservice mit einer REST-API. Dienste für Produkte und Bestellungen werden ähnlich erstellt (jeweils auf den Ports 3002 und 3003).



3. Asynchrone Kommunikation über RabbitMQ

Für Ereignisse wie "Bestellung erstellt" oder "Benutzer registriert" verwenden wir Nachrichtenwarteschlangen. Installieren Sie den RabbitMQ-Client:

npm install amqplib

Erstellen Sie ein Dienstprogramm zum Veröffentlichen von Nachrichten (event-bus.js):

const amqp = require('amqplib');let channel;

async function connect() { const connection = await amqp.connect('amqp://localhost'); channel = await connection.createChannel(); await channel.assertExchange('order_events', 'topic', { durable: true });}

async function publishEvent(routingKey, data) { if (!channel) await connect(); channel.publish('order_events', routingKey, Buffer.from(JSON.stringify(data))); console.log(`Event published: ${routingKey}`);}

module.exports = { publishEvent };

Veröffentlichen Sie nun im Bestelldienst (orders-service.js) bei der Erstellung einer Bestellung

Blogs

Buchempfehlungen