Dieser Artikel wurde von Huang Shancheng, einem leitenden Entwicklungsingenieur bei Bilibili, geteilt. Der ursprüngliche Titel lautete „Ten Thousands of Long-Term Message System“.
1. Einleitung
Im heutigen Zeitalter der digitalen Unterhaltung sind Sperrfeuer zu einem unverzichtbaren interaktiven Element auf Live-Übertragungsplattformen geworden.

Durch das Versenden von Nachrichten, Geschenken usw. können Benutzer ihre Gedanken, Kommentare und interaktiven Inhalte in Echtzeit auf dem Live-Übertragungsbildschirm anzeigen und so das Seherlebnis des Benutzers bereichern. In diesem Prozess sind lange Verbindungen erforderlich, um interaktive Informationen in Echtzeit an das Terminal zu übertragen.
Eine lange Verbindung ist, wie der Name schon sagt, ein Netzwerkdatenkanal, der während der Lebensdauer der Anwendung mit dem Server aufrechterhalten wird und die Vollduplex-Uplink- und Downlink-Datenübertragung unterstützen kann. Der größte Unterschied zum Kurzverbindungsdienst im Anforderungs-Antwort-Modus besteht darin, dass er dem Server die Möglichkeit geben kann, Daten in Echtzeit aktiv an Benutzer zu übertragen.
In diesem Artikel werden das Architekturdesign und die Praxis des von Bilibili basierend auf Golang implementierten Echtzeit-Messaging-Systems mit mehreren zehn Millionen langen Verbindungen vorgestellt, einschließlich des Framework-Designs des Dienstes mit langen Verbindungen sowie damit verbundener Optimierungen für Stabilität und Hochgeschwindigkeit Durchsatz.


2. Verwandte Artikel
- „ Die Entwicklung des Microservice-basierten API-Gateways von Bilibili von 0 auf 1 “
- „ Graphit Document Standalone 500.000 WebSocket Long Connection Architecture Practice “
- „ Technische Praxis der Baidu Unified Socket Long Connection-Komponente von 0 bis 1 “
- „ Tantans IM-Langverbindungstechnologiepraxis: Technologieauswahl, Architekturdesign und Leistungsoptimierung “
- „ IQiyi WebSocket Echtzeit-Push-Gateway-Technologie-Praxis “
- „ Die webseitige Instant-Messaging-Praxis von LinkedIn: Erzielen Hunderttausender langer Verbindungen auf einem einzigen Computer “
- „ Eine sichere und skalierbare Idee zur Implementierung eines Abonnements/Push-Dienstes basierend auf langen Verbindungen “
- „ Technische Praxisfreigabe der Echtzeit-Message-Push-Architektur von Meizu mit 25 Millionen langen Verbindungen “
- „ Exklusives Interview mit Meizu Architect: Erfahrung mit einem Echtzeit-Nachrichten-Push-System mit enorm langen Verbindungen “
3. Architekturdesign
3.1 Übersicht
Der Long-Connection-Service ist eine lange Verbindung, die von mehreren Geschäftsparteien gemeinsam genutzt wird.
Denn bei der Gestaltung müssen die Anforderungen verschiedener Geschäftsparteien und unterschiedlicher Geschäftsszenarien an langfristige Verbindungsdienste berücksichtigt werden. Gleichzeitig müssen auch die Grenzen langfristiger Verbindungsdienste berücksichtigt werden, um Eingriffe in das Geschäft zu vermeiden Logik und Auswirkungen auf die nachfolgende Iteration und Entwicklung langfristiger Verbindungsdienste.
Lange Verbindungsdienste werden hauptsächlich in drei Aspekte unterteilt:
- 1) Aufbau, Aufrechterhaltung und Verwaltung langer Verbindungen;
- 2) Downlink-Daten-Push;
- 3) Uplink-Datenweiterleitung (derzeit nur Heartbeat, keine tatsächlichen Geschäftsszenarioanforderungen).
3.2 Gesamtarchitektur

Die Gesamtstruktur des Langverbindungsdienstes ist in der Abbildung oben dargestellt. Der Gesamtdienst umfasst die folgenden Teile.
1) Kontrollschicht: Vorabanruf zum Verbindungsaufbau, hauptsächlich zur Überprüfung der Zugangslegalität, Identitätsüberprüfung und Routing-Kontrolle.
Hauptaufgabe:
- 1) Authentifizierung der Benutzeridentität;
- 2) Assembly-Daten verschlüsseln und legales Token generieren;
- 3) Dynamische Planung und Zuweisung von Zugangsknoten.
2) Zugriffsschicht: Kerndienst für lange Verbindungen, hauptsächlich verantwortlich für die Deinstallation von Zertifikaten, das Andocken von Protokollen und die Aufrechterhaltung langer Verbindungen.
Hauptaufgabe:
- 1) Zertifikate und Protokolle deinstallieren;
- 2) Verantwortlich für den Aufbau und die Aufrechterhaltung von Verbindungen mit Kunden sowie für die Verwaltung der Zuordnungsbeziehung zwischen Verbindungs-ID und Roomid;
- 3) Uplink- und Downlink-Nachrichten verarbeiten.
3) Logikschicht: Vereinfachte Zugriffsschicht, hauptsächlich für Geschäftsfunktionen mit langfristiger Verbindung.
Hauptaufgabe:
- 1) Online-Nummernmeldeaufzeichnungen;
- 2) Zeichnen Sie die Zuordnungsbeziehung zwischen jedem Attribut der Verbindungs-ID und jedem Knoten auf.
- 4) Nachrichtenverteilungsschicht: Nachrichten werden an die Zugriffsschicht weitergeleitet.
Hauptaufgabe:
- 1) Nachrichtenkapselung, Komprimierung und Aggregation werden an die entsprechenden Randknoten weitergeleitet.
5) Service-Schicht: Docking-Schicht für Geschäftsdienste, die einen Eingang für den nachgelagerten Nachrichten-Push bietet.
Hauptaufgabe:
- 1) Geschäfts-Push-Berechtigungen verwalten und kontrollieren;
- 2) Nachrichtenerkennung und Neuzusammenstellung;
- 3) Der Nachrichtenfluss wird gemäß bestimmten Richtlinien zum Schutz des eigenen Systems begrenzt.
3.3 Kernprozess

Lange Verbindungen bestehen hauptsächlich aus drei Kernprozessen:
- 1) Herstellen einer Verbindung : Initiiert durch den Client, zunächst über die Kontrollschicht, um das legale Token und die Zugangspunktkonfiguration des Geräts zu erhalten;
- 2) Halten Sie die Verbindung aufrecht : Hauptsächlich initiiert der Client regelmäßig Heartbeats, um sicherzustellen, dass die lange Verbindung aktiv ist.
- 3) Downlink-Push : Der Downlink-Push wird vom Business-Server initiiert und bestimmt die Verbindungskennung und den Zugriffsknoten anhand der entsprechenden Kennung. Über die Nachrichtenverteilungsschicht wird der Push an die entsprechende Zugriffsschicht gesendet Verbindung hergestellt und dann an den Client verteilt.
3.4 Funktionsliste
In Kombination mit dem Geschäftsszenario von Station B bietet Downlink-Daten-Push die folgenden allgemeinen Funktionen:
- 1) Nachrichten auf Benutzerebene: Sollen an bestimmte Benutzer gesendet werden (z. B. Senden von Einladungs-PK-Nachrichten an einen bestimmten Anker);
- 2) Nachrichten auf Geräteebene: Entwickeln und an bestimmte Geräte weiterleiten (z. B. Push-Client-Protokollberichtsanweisungen für nicht angemeldete Geräte);
- 3) Nachrichten auf Raumebene: Push-Nachrichten an die Verbindungen in einem bestimmten Raum (z. B. Push-Sperrnachrichten an alle Online-Benutzer im Live-Übertragungsraum);
- 4) Partitionsnachrichten: Push-Nachrichten an Räume in einem bestimmten Bereich (z. B. Pushen einer bestimmten Umsatzaktivität an alle Räume, die in einem bestimmten Bereich gesendet werden);
- 5) Bezirksweite Nachrichten: Push-Nachrichten an alle Plattformbenutzer (z. B. Push-Ereignisbenachrichtigungen an alle Online-Benutzer).
4. Hochdurchsatz-Technologiedesign
Da sich das Geschäft weiterentwickelt und ausdehnt, gibt es immer mehr Online-Nutzer und der Druck auf das langfristige Verbindungssystem nimmt zu, insbesondere bei der Live-Übertragung beliebter Ereignisse, beispielsweise während der S-Games, der Anzahl der Online-Nutzer Auf der gesamten Plattform wurden Dutzende Millionen erreicht, und der Nachrichtendurchsatz erreichte Hunderte von Millionen. Die durchschnittliche Verzögerung bei der Nachrichtenverteilung des Changlian-Systems beträgt etwa 1 Sekunde, und die Nachrichtenankunftsrate erreicht 99 % Maßnahmen, die Changlian ergriffen hat.
4.1 Netzwerkprotokoll
Die Wahl des richtigen Netzwerkprotokolls ist entscheidend für die Leistung eines Systems mit langen Verbindungen:
- 1) TCP-Protokoll : Es kann eine zuverlässige Verbindung und Datenübertragung bereitstellen und eignet sich für Szenarien, die eine hohe Datenzuverlässigkeit erfordern.
- 2) UDP-Protokoll : Es ist ein unzuverlässiges Protokoll, weist jedoch eine hohe Übertragungseffizienz auf und eignet sich für Szenarien, die keine hohe Datenzuverlässigkeit erfordern.
- 3) WebSocket-Protokoll : Es realisiert auch die bidirektionale Kommunikation ohne großen Overhead und wird eher auf der Webseite verwendet.
Die Zugriffsschicht ist in Protokollmodul und Verbindungsmodul unterteilt:
- 1) Protokollmodul : Interagiert mit bestimmten Protokollen der Kommunikationsschicht und kapselt die Schnittstelle und die logischen Unterschiede verschiedener Kommunikationsprotokolle.
- 2) Verbindungsmodul : Behält den Status langfristiger Geschäftsverbindungen bei, unterstützt die Anforderung von Uplink, Downlink und anderer Geschäftslogik, verwaltet die Verbindungsattribute und die Bindungsbeziehung zur Raum-ID.
Bezüglich Punkt 1) oben stellt das Protokollmodul auch eine einheitliche Datenschnittstelle zum Verbindungsmodul bereit, einschließlich Verbindungsaufbau, Datenlesen, Schreiben usw. Wenn in Zukunft neue Protokolle hinzugefügt werden, hat die Anpassung, solange sie im Protokollmodul erfolgt, keinen Einfluss auf die langfristige Geschäftslogik anderer Module.
Vorteil von:
- 1) Geschäftslogik und Kommunikationsprotokolle werden isoliert, um das iterative Hinzufügen von Kommunikationsprotokollen zu erleichtern und die Implementierungsschwierigkeiten der Kompatibilität mit mehreren Kommunikationsprotokollen zu vereinfachen;
- 2) Die Kontrollschicht kann basierend auf der tatsächlichen Situation des Clients bessere Kommunikationsprotokolle herausgeben.
4.2 Lastausgleich
Mithilfe der Lastausgleichstechnologie können Anforderungen zur Verarbeitung auf verschiedene Serverknoten verteilt werden, wodurch eine übermäßige Belastung eines einzelnen Knotens vermieden und die Skalierbarkeit und Stabilität des Systems verbessert werden.
Eine Langzeitverbindung fügt eine Kontrollschicht für den Lastausgleich hinzu. Die Kontrollschicht stellt eine http-Kurzverbindungsschnittstelle bereit und wählt dynamisch den geeigneten Zugangsknoten basierend auf der tatsächlichen Situation des Clients und jedes Randknotens sowie dem Proximity-Prinzip aus.
Die Zugriffsschicht unterstützt die horizontale Erweiterung und die Kontrollschicht kann Zuordnungsknoten in Echtzeit hinzufügen und reduzieren. Während des S-Spiels, als sich die Zahl der Online-Menschen mehreren zehn Millionen näherte, wurde jeder Zugangsknoten ausgeglichen und geplant, um sicherzustellen, dass die CPU und der Speicher jedes Knotens in einem stabilen Bereich lagen.
4.3 Nachrichtenwarteschlange
Der Nachrichten-Push-Link lautet: Das Unternehmen sendet den Push, schiebt ihn über die Serviceschicht an den Edge-Knoten und übermittelt ihn dann an den Client.
Die Serviceschicht verteilt die Nachricht in Echtzeit an jeden Edge-Knoten und muss sie an mehrere Edge-Knoten weiterleiten. Die Serviceschicht verarbeitet auch die Geschäftslogik, was sich stark auf den Nachrichtendurchsatz auswirkt.
Daher werden die Nachrichtenwarteschlange und die Nachrichtenverteilungsschicht hinzugefügt. Die Nachrichtenverteilungsschicht verwaltet die Informationen jedes Randknotens und überträgt Nachrichten, was die gleichzeitige Verarbeitungsfähigkeit und Stabilität des Systems verbessert und Leistungsprobleme durch Nachrichten-Push-Blockierung vermeidet.
4.4 Nachrichtenaggregation
Wenn es eine beliebte Veranstaltung gibt, kann die Zahl der Menschen, die gleichzeitig online sind, Dutzende Millionen erreichen, und eine Sperrnachricht wird an Dutzende Millionen Terminals verbreitet. Wenn jeder, der online ist, jede Sekunde eine Nachricht sendet, steigt die Anzahl der Nachrichten Es müssen 1 kW * 1 kW gesendet werden, was einer sehr großen Menge an Nachrichten entspricht. Zu diesem Zeitpunkt stehen die Nachrichtenverteilungsschicht und die Zugriffsschicht unter großem Druck.
Die Analyse ergab, dass diese Nachrichten alle aus demselben Raum stammen und zu Hot Rooms gehören, beispielsweise dem S-Spielzimmer. Die Anzahl der Zuschauer kann nicht reduziert werden, daher können wir nur viel Aufhebens um die Anzahl der Nachrichten machen. Der Push von Geschäftsnachrichten kann nicht reduziert werden, und die Anzahl der verbreiteten Nachrichten muss reduziert werden. Daher wurde über die Nachrichtenaggregation nachgedacht.
Bei Raumnachrichten wird die Nachrichtenaggregation nach bestimmten Regeln durchgeführt und stapelweise gepusht:

Nachdem die Nachrichtenaggregation online gegangen ist, wird der von der Nachrichtenverteilungsschicht an die Zugriffsschicht aufgerufene QPS um etwa 60 % reduziert, wodurch der Druck auf die Zugriffsschicht und die Nachrichtenverteilungsschicht erheblich verringert wird.
4.5 Komprimierungsalgorithmus
Nach der Nachrichtenaggregation wird die Anzahl der Nachrichten reduziert, aber die Größe des Nachrichtentexts erhöht, was sich auf die Schreib-E/A auswirkt. Wenn die Größe des Nachrichtentexts reduziert werden muss, wird über eine Nachrichtenkomprimierung nachgedacht.
Als Komprimierungsalgorithmen haben wir zum Vergleich zwei auf dem Markt häufig verwendete Algorithmen ausgewählt: zlib und brotli.
Wir haben die vom Online-Geschäft übertragenen Daten erfasst, die höchste Komprimierungsstufe ausgewählt und die Komprimierungsüberprüfung bestanden:

Es ist ersichtlich, dass Brotli große Vorteile gegenüber Zlib hat und schließlich der Brotli-Komprimierungsalgorithmus ausgewählt wurde.
Wählen Sie die Nachrichtenkomprimierung auf der Nachrichtenverteilungsebene aus, um wiederholte Komprimierung an jedem Zugriffsknoten und Leistungsverschwendung zu vermeiden. Nachdem Sie online gegangen sind, wird nicht nur der Durchsatz verbessert, sondern auch die Kosten für die Breitbandnutzung gesenkt.
5. Service-Garantie-Technologiedesign
Heutzutage verlassen sich einige Unternehmen stark auf langfristige Push-Nachrichten. Der Verlust von Nachrichten beeinträchtigt im besten Fall die Benutzererfahrung und blockiert im schlimmsten Fall die nachfolgenden Geschäftsprozesse, wodurch der Geschäftsfluss beeinträchtigt wird. Um eine langfristige Service-Nachrichtengarantie zu gewährleisten, wurden die folgenden Arbeiten durchgeführt.
5.1 Multiaktive Bereitstellung
Durch die multiaktive Bereitstellung wird durch die Bereitstellung derselben Systemarchitektur und derselben Dienste an verschiedenen geografischen Standorten ein schneller Failover des Systems im Falle eines einzelnen geografischen Ausfalls erreicht und so die Stabilität und Verfügbarkeit des Systems verbessert.

Die langfristige Bereitstellung von Diensten umfasst hauptsächlich die folgenden Punkte:
- 1) LongConnect hat Zugangspunkte in Ostchina, Südchina und Nordchina bereitgestellt und die drei großen Betreiber wurden auch in selbstgebauten Computerräumen in Südchina und Zentralchina eingesetzt, um Benutzern im Ausland einen unabhängigen Zugang zu ermöglichen In Singapur wurden Computerräume hinzugefügt.
- 2) Wechseln Sie für verschiedene Geschäftsszenarien in Echtzeit zwischen Cloud-Knoten und selbst erstellten Computerräumen. Da die Kosten für Cloud-Knoten und selbst erstellte Computerräume unterschiedlich sind, sollten die Kosten so weit wie möglich kontrolliert und gleichzeitig die Servicequalität sichergestellt werden.
Während des laufenden Online-Betriebs kommt es gelegentlich zu Netzwerk-Jitter einzelner Knoten oder Computerräume. Durch die Kontrollschicht werden problematische Knoten in Sekundenschnelle entfernt, was die Auswirkungen auf das Geschäft erheblich reduziert.
5.2 High- und Low-Nachrichtenkanäle
Multi-Service-Nachrichten greifen auf lange Verbindungen zu, aber die Bedeutung verschiedener Nachrichten ist unterschiedlich, z. B. Sperrnachrichten und Einladungs-PK-Nachrichten. Der Verlust einiger Sperrnachrichten hat keine großen Auswirkungen auf die Benutzererfahrung, wenn jedoch die Einladungs-PK-Nachricht verloren geht Dies führt dazu, dass das PK-Geschäft nicht mit den nachfolgenden Prozessen fortfahren kann.
Für unterschiedliche Nachrichtenebenen werden Nachrichtenkanäle mit hoher und niedriger Qualität verwendet. Wichtige Nachrichten gehen an den Kanal mit hoher Qualität, normale Nachrichten an den Kanal mit niedriger Qualität. Auf diese Weise werden wichtige und gewöhnliche Nachrichten physisch getrennt und die Nachrichtenverteilung priorisiert wichtige Nachrichten.

Für Kanäle mit hoher Qualität ist eine doppelte Bereitstellung garantiert und eine idempotente Deduplizierung wird auf der Zugriffsebene durchgeführt. Erstens sind wichtige Nachrichten für die Benutzerebene bestimmt, und das Volumen wird nicht sehr groß sein, sodass der Druck auf die Zugriffsebene nicht stark zunimmt. Darüber hinaus werden Dual-Delivery-Jobs in mehreren Computerräumen bereitgestellt, wodurch die Auswirkungen von Netzwerk-Jitter in einem einzelnen Computerraum reduziert werden.
Nachdem die Kanäle mit hoher und niedriger Qualität online gegangen waren, traten ausgehende Jitter im Intranet auf. Zu diesem Zeitpunkt übermittelten die mit dem Intranet verbundenen Jobknoten ungewöhnliche Nachrichten, aber die Jobknoten mit hoher Qualität in der Cloud konnten Nachrichten normal pushen sorgte dafür, dass qualitativ hochwertige Nachrichten eintrafen und stellte somit sicher, dass qualitativ hochwertige Dienste nicht beeinträchtigt werden.
5.3 Gundam-Funktionen
Der High-Low-Optimierungskanal löst die Verbindung vom Job zur Zugriffsschicht, aber die Nachrichten-Push-Verbindung umfasst mehrere Verbindungen, z. B. die Serviceschicht zum Job und die Zugriffsschicht zum Client.
Für die gesamte Verbindung wird die Ankunftsrate des Terminals durch die Implementierung des Must-Reach-Mechanismus, der als Reach-Funktion bezeichnet wird, sichergestellt.

Funktionsimplementierung:
- 1) Jede Nachricht führt die msgID ein und der Client führt nach Erhalt der Nachricht eine idempotente Deduplizierung und einen Bestätigungsempfang durch.
- 2) Der Server führt eine Bestätigungserkennung für msgid durch. Wenn keine Bestätigung vorliegt, versucht der Server die Zustellung innerhalb des Gültigkeitszeitraums erneut.
Endgültige Ankunftsrate = (1-(1-r)^(n+1)), wobei: r die Einzelankunftsrate der Übertragung und n die maximale Anzahl von Wiederholungsversuchen ist.
Beispiel: r = 97 %, n = 2, dann kann die endgültige Ankunftsrate (1-(1-0,97)^(2+1)) = 99,9973 % erreichen
6. Zustellungsgarantie-Design für Nachrichten, die den „Raum“ betreten und verlassen
Einige Geschäftsszenarien erfordern die Verwendung von Benutzerein- und -ausgangsinformationen. Wenn Benutzer A beispielsweise den Live-Übertragungsraum betritt, wird auf der Seite eine Nachricht angezeigt, in der Benutzer A aufgefordert wird, den Raum zu betreten oder sich der Online-Liste anzuschließen.
1) Raumzutrittsinformationen gehen verloren und es ist ein Ausgleichsmechanismus erforderlich. Ich dachte, dass die Raumeintrittsnachricht durch eine Verbindung mit dem Herzschlag kompensiert werden könnte, aber der Herzschlag ist kontinuierlich. Während der Online-Verbindung hofft das Unternehmen, die Raumeintrittsnachricht nur einmal zu erhalten, daher muss die Raumeintrittsnachricht eine idempotente sein Mechanismus.
2) Bei Verlust der Zimmer-Check-out-Informationen kann das Unternehmen derzeit keine Benutzer aus der Online-Liste entfernen. Zu diesem Zeitpunkt müssen Sie eine Zustandsmaschine für die Verbindung hinzufügen und die Zustandsmaschine über Heartbeats aufrechterhalten. Wenn der Heartbeat verloren geht, gilt die Verbindung als getrennt und der Benutzer checkt aus.

7. Zukunftsplanung
Nach mehreren Iterationen des einheitlichen Langverbindungsdienstes sind die Grundfunktionen stabil geworden und der Langverbindungsdienst wird in Zukunft verbessert und optimiert.
Konzentrieren Sie sich hauptsächlich auf die folgenden Richtungen:
- 1) Dataisierung : Verbesserung der Fähigkeit zur Erfassung von Netzwerkqualitätsdatenstatistiken über lange Verbindungen und zur vollständigen Verfolgung hochwertiger Nachrichten;
- 2) Intelligentisierung : Verbindungsaufbau auf dem Gerät, Auswahl des Zugangspunkts usw. können automatisch an die tatsächliche Umgebung angepasst werden;
- 3) Leistungsoptimierung : Im Verbindungsmodul der Zugriffsschicht werden die Ctrips, die Uplink- und Downlink-Nachrichten verarbeiten, gemeinsam genutzt, wodurch die Anzahl der Ctrips auf der Zugriffsschicht reduziert und die Leistung einzelner Maschinen sowie die Anzahl der Verbindungen weiter verbessert werden.
- 4) Funktionserweiterung : Offline-Messaging-Funktion usw. hinzugefügt.
8. Referenzmaterialien
[5] Ausführliche Erläuterung von TCP/IP – Kapitel 11·UDP: User Datagram Protocol
[6] Ausführliche Erläuterung von TCP/IP – Kapitel 17·TCP: Transmission Control Protocol
[7] Vom Anfänger bis zum WebSocket-Experten reicht eine halbe Stunde!
[8] Ein Artikel reicht aus, um das TCP-Protokoll schnell zu verstehen
[9] Verstehen Sie schnell die Unterschiede zwischen TCP und UDP
[10] Mit nur einem Blick können Sie schnell den Unterschied zwischen TCP und UDP verstehen
[11] Was genau ist Socket? Verstehen Sie in einem Artikel!
[12] Was genau lesen und schreiben wir, wenn wir Socket lesen und schreiben?
[13] Was würden Sie tun, wenn Sie das TCP-Protokoll entwerfen würden?
[14] Gehen Sie in einem Artikel tief in das Betriebssystem ein und verstehen Sie, was Socket ist
[15] Es ist leicht zu verstehen, wie Hochleistungsserver implementiert werden.
- Ein Einführungsartikel zur mobilen IM-Entwicklung: „ Ein Artikel reicht für Anfänger: Mobile IM von Grund auf entwickeln “
- Quellcode des Open-Source-IM-Frameworks: https://github.com/JackJiang2011/MobileIMSDK ( Alternative Adresse hier klicken )
(Dieser Artikel wurde gleichzeitig veröffentlicht unter: http://www.52im.net/thread-4647-1-1.html )