Tiefes Verständnis der monolithischen Architektur

Tiefes Verständnis der monolithischen Architektur

In einer monolithischen Architektur wird die gesamte Anwendung als eigenständige ausführbare Datei oder Codebasis erstellt. Zu den Hauptkomponenten dieses Architekturmusters gehören die Front-End-Benutzeroberfläche, die Geschäftslogikschicht und die Datenspeicherschicht. Lassen Sie uns in einige der Schlüsseltechnologien und Frameworks eintauchen, die in dieser traditionellen Architektur verwendet werden.

1. Front-End-Technologie

In einer monolithischen Architektur besteht das Frontend normalerweise aus HTML, CSS und JavaScript. Zu den gängigen Frontend-Frameworks gehören:

  • Vue.js: Zum Erstellen interaktiver Benutzeroberflächen.
<template>
  <div>
    <p>{
   
   { message }}</p>
    <button @click="updateMessage">Update Message</button>
  </div>
</template>

<script>
export default {
      
      
  data() {
      
      
    return {
      
      
      message: "Hello, Vue.js!",
    };
  },
  methods: {
      
      
    updateMessage() {
      
      
      this.message = "Updated Message!";
    },
  },
};
</script>
  • React: Eine von Facebook entwickelte JavaScript-Bibliothek zum Erstellen von Benutzeroberflächen.
import React, { useState } from 'react';

function App() {
  const [message, setMessage] = useState("Hello, React!");

  const updateMessage = () => {
    setMessage("Updated Message!");
  };

  return (
    <div>
      <p>{message}</p>
      <button onClick={updateMessage}>Update Message</button>
    </div>
  );
}

export default App;
  • Angular: Ein von Google verwaltetes Front-End-Framework, das leistungsstarke Modularisierungs- und Komponentisierungsfunktionen bietet.
import {
    
     Component } from '@angular/core';

@Component({
    
    
  selector: 'app-root',
  template: `
    <div>
      <p>{
     
     { message }}</p>
      <button (click)="updateMessage()">Update Message</button>
    </div>
  `,
})
export class AppComponent {
    
    
  message = 'Hello, Angular!';

  updateMessage() {
    
    
    this.message = 'Updated Message!';
  }
}
2. Back-End-Technologie

Das Backend der monolithischen Architektur ist für die Abwicklung der Geschäftslogik und die Interaktion mit der Datenbank verantwortlich. Hier sind einige gängige Backend-Frameworks:

  • Spring Boot: Ein Java-basiertes Framework zum Erstellen eigenständiger Spring-Anwendungen in Produktionsqualität.
@RestController
public class MessageController {
    
    

  private String message = "Hello, Spring Boot!";

  @GetMapping("/message")
  public String getMessage() {
    
    
    return message;
  }

  @PutMapping("/message")
  public void updateMessage(@RequestBody String newMessage) {
    
    
    message = newMessage;
  }
}
  • Django: Ein High-Level-Webframework für Python, das eine schnelle Entwicklung und Wartbarkeit vereinfacht.
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods

message = "Hello, Django!"

@require_http_methods(["GET"])
def get_message(request):
    return JsonResponse({
    
    "message": message})

@csrf_exempt
@require_http_methods(["PUT"])
def update_message(request):
    global message
    new_message = request.POST.get("new_message")
    message = new_message
    return JsonResponse({
    
    "message": message})
  • Express.js: Node.js-basiertes Framework zum Erstellen von Web- und Mobilanwendungen.
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;

let message = 'Hello, Express.js!';

app.use(bodyParser.json());

app.get('/message', (req, res) => {
    
    
  res.json({
    
     message });
});

app.put('/message', (req, res) => {
    
    
  const newMessage = req.body.newMessage;
  message = newMessage;
  res.json({
    
     message });
});

app.listen(port, () => {
    
    
  console.log(`Server is running on port ${
      
      port}`);
});
3. Datenbanktechnologie

In einer monolithischen Architektur verwendet die Datenspeicherschicht normalerweise eine relationale Datenbank oder eine NoSQL-Datenbank. Zu den gängigen Datenbanktechnologien gehören:

  • MySQL: ein relationales Open-Source-Datenbankverwaltungssystem.
CREATE TABLE messages (
  id INT PRIMARY KEY AUTO_INCREMENT,
  content VARCHAR(255)
);

INSERT INTO messages (content) VALUES ('Hello, MySQL!');

SELECT * FROM messages;
  • MongoDB: Eine dokumentenorientierte NoSQL-Datenbank, die Daten im JSON-Format speichert.
db.messages.insertOne({
    
     content: 'Hello, MongoDB!' });

db.messages.find();
  • PostgreSQL: Ein leistungsstarkes relationales Open-Source-Datenbanksystem.
CREATE TABLE messages (
  id SERIAL PRIMARY KEY,
  content VARCHAR(255)
);

INSERT INTO messages (content) VALUES ('Hello, PostgreSQL!');

SELECT * FROM messages;

Zusammen bilden diese Technologien und Frameworks monolithische Anwendungen. Mit dem kontinuierlichen Wachstum der Geschäftsanforderungen und der Entwicklung der Technologie treten jedoch in der monolithischen Architektur nach und nach einige Probleme auf, von denen das Einzelpunktproblem am offensichtlichsten ist.

Der Kern eines Einzelpunktproblems besteht darin, dass es im gesamten System eine kritische Komponente oder ein kritisches Modul gibt und deren Ausfall zum Zusammenbruch des gesamten Systems führen kann. Dieses Problem ist besonders akut in monolithischen Architekturen, wo die gesamte Anwendung oft auf einer einzigen Datenbank, einem einzigen Dienst oder einer anderen Schlüsselkomponente basiert.

4. Datenbank-Einzelpunktproblem

In der traditionellen monolithischen Architektur ist die Datenbank ein gemeinsamer einzelner Punkt. Wenn die Datenbank ausfällt, kann das gesamte System nicht ordnungsgemäß funktionieren. Eine Möglichkeit, dieses Problem zu lösen, ist die Verwendung der Master-Slave-Replikation, die die Verfügbarkeit verbessert, indem identische Kopien der Datenbank auf mehreren Knoten verwaltet werden.

5. Single-Point-of-Service-Probleme

Ein weiterer einzelner Problempunkt kann bei Diensten in der Geschäftslogikschicht auftreten. Wenn ein Dienst abstürzt oder nicht mehr verfügbar ist, wird die Funktionalität der gesamten Anwendung beeinträchtigt. Der Einsatz von Lastausgleichs- und Fehlertoleranzmechanismen kann dieses Problem bis zu einem gewissen Grad lindern.

Single Point of Problem im Netzwerk
In einer monolithischen Architektur werden verschiedene Komponenten einer Anwendung typischerweise auf demselben Server ausgeführt. Daher können Serverausfälle oder Netzwerkprobleme zu einem kompletten Systemausfall führen. Durch die Einführung einer verteilten Architektur kann dieses Problem gelöst werden, indem verschiedene Teile der Anwendung auf verschiedene Knoten verteilt werden.

Um Single-Point-Probleme zu lösen, verfolgen viele Unternehmen eine Single-Point-Deployment-Strategie. Die Single-Point-Bereitstellung ist darauf ausgelegt, die Systemverfügbarkeit und -stabilität durch mehrere Instanzen oder Replikate zu erhöhen.

6. Containerisierungstechnologie

Containerisierungstechnologien wie Docker erleichtern die Bereitstellung an einem einzigen Punkt. Durch das Packen der Anwendung und ihrer Abhängigkeiten in Container können mehrere Instanzen problemlos auf verschiedenen Servern bereitgestellt werden, wodurch ein Single Point of Failure vermieden wird.

# Docker Compose示例配置文件
version: '3'

services:
  web:
    image: my-app
    ports:
      - "80:80"
    replicas: 3
7. Microservice-Architektur

Die Microservices-Architektur ist ein Entwurfsmuster für verteilte Systeme, das Einzelpunktprobleme löst, indem es Anwendungen in kleine, unabhängige Dienste aufteilt. Jeder Microservice kann unabhängig bereitgestellt und gewartet werden, was die Flexibilität und Skalierbarkeit des Systems erhöht.

// 微服务示例 - Node.js
const express = require('express');
const app = express();
const port = 3000;

app.get('/message', (req, res) => {
    
    
  res.json({
    
     message: 'Hello from Microservice!' });
});

app.listen(port, () => {
    
    
  console.log(`Microservice is running on port ${
      
      port}`);
});
8. Lastausgleich

Beim Lastausgleich handelt es sich um eine Technik zur Verteilung des Datenverkehrs auf mehrere Server oder Instanzen. Durch die Verwendung eines Load Balancers können Sie sicherstellen, dass der Datenverkehr gleichmäßig auf verschiedene Knoten verteilt wird, wodurch die Systemverfügbarkeit und -leistung verbessert wird.

# Nginx负载均衡配置示例
http {
    
    
  upstream backend {
    
    
    server app1.example.com;
    server app2.example.com;
    server app3.example.com;
  }

  server {
    
    
    listen 80;

    location / {
    
    
      proxy_pass http://backend;
    }
  }
}
9. Elastische Skalierung

Bei der automatischen Skalierung werden Systemressourcen automatisch an Verkehrsschwankungen angepasst. Je nach Auslastung des Systems kann die Anzahl der Instanzen automatisch erhöht oder verringert werden, wodurch die Elastizität und Stabilität des Systems verbessert wird.

# 弹性伸缩配置示例 - AWS Auto Scaling
AutoScalingGroup:
  Type: "AWS::AutoScaling::AutoScalingGroup"
  Properties:
    MinSize: 2
    MaxSize: 5
    DesiredCapacity: 3
    LaunchConfigurationName: !Ref MyLaunchConfiguration

Guess you like

Origin blog.csdn.net/qq_51447496/article/details/135413228