Hinter den Kulissen eines Hit Counters
Allgemeines
Viele großer Webprojekte setzen im Hintergrund ausgeklügelte Techniken und Technologien ein, von denen der Nutzer des Dienstes in der Regel nichts mitbekommt. Daher möchte ich die Chance nutzen und dem technisch interessierten Leser hier einen kleinen Einblick geben, wie VCounter hinter den Kulissen aussieht.
Die Technik lässt sich grob in vier Hauptkomponenten aufteilen: den Reverse Proxy, die VCounter Anwendung, das Deployment mit Docker und den Datenbankserver.
Der Reverse Proxy (Traefik)
Mit dem Reverse Proxy hast du als erstes Kontakt wenn du die VCounter Seite aufrufst, dir deine Statistiken ansiehst oder wenn
dein Counterbild vom Server geladen wird. Der Reverse Proxy nimmt Anfragen entgegen und beantwortet sie entweder selbst oder
leitet sie an die richtigen Komponenten weiter. Er übernimmt hier folgende Aufgaben:
-
TLS-Verschlüsselung (HTTPS):
Alle Anfragen werden verschlüsselt über HTTPS entgegengenommen. Traefik verwaltet die TLS-Zertifikate automatisch und stellt sicher, dass die Kommunikation zwischen dem Besucher und dem Server sicher abläuft. -
Routing und Weiterleitung:
Traefik nimmt Anfragen direkt unter der Adresse https://vcounter.de entgegen und reicht sie intern an den Docker-Container der VCounter Anwendung weiter. Statische Inhalte wie Bilder und Grafiken werden direkt ausgeliefert, ohne die Anwendungskomponente zu beanspruchen. Dieses Prinzip wird auch als Reverse Proxy bezeichnet.
Die VCounter Anwendung
Die VCounter Anwendung wurde mit Hilfe des Spring Boot Frameworks in
Version 4.1.0 auf Basis von Java 17 angelehnt an den Vorgaben der 12-Faktor-App umgesetzt.
Durch das Framework erhält die Anwendung einfachen Zugriff auf
- einen Webcontainer (Embedded Tomcat)
- persistenten Speicher (JPA = Java Persistence API, Hibernate)
- Transaktionsmanagement (JTA = Java Transaction API)
- ...
Die VCounter Anwendung hat zwei wesentliche Aufgaben:
- Erfassung der Counterdaten:
Immer wenn ein Besucher eine Seite mit einem VCounter Code aufruft, wird das VCounter Bild vom Server abgerufen. Die Daten des Aufrufs werden zusammen mit der Counter-Id in eine an den Applicationserver angebundene Datenbank protokolliert. Welche Daten erfasst werden, kannst du im Artikel "Wie funktioniert ein Besucherzähler" nachlesen. - Generierung der Statistiken:
Die erfassten Daten werden in aufbereiteter Form in den Statistiken wiedergegeben. Dazu wird beim Aufruf der Übersichtsstatistik bzw der Detailstatistik die Counter-Id an die Webseite übergeben. Anhand dieser Id kann die VCounter Anwendung nun die zugehörigen Daten aus der Datenbank auslesen und für die Anzeige aufbereiten. Um unnötige Berechnungen zu vermeiden liegen die Statistiken zum Teil auch schon in aufbereiteter/vorberechneter Form in der Datenbank vor.
Deployment mit Docker
Die gesamte Anwendung ist containerisiert und wird über Docker Compose
orchestriert. Dadurch lassen sich alle Komponenten einfach und reproduzierbar betreiben. Das Deployment funktioniert wie folgt:
-
Build:
Der Quellcode wird mit Maven kompiliert und zu einem JAR-File (Java Archive) gepackt. Dieses JAR-File enthält alle Komponenten der Anwendung, die für deren reibungslose Ausführung nötig sind. -
Container:
Das JAR-File wird in ein Docker-Image verpackt. Die Anwendung läuft als eigener Container und ist von anderen Diensten isoliert. Über Umgebungsvariablen werden Profile (dev/prod) gesteuert. -
Orchestrierung:
Docker Compose startet die Anwendung zusammen mit den zugehörigen Diensten. Traefik wird als externer Reverse Proxy im gleichen Netzwerk betrieben und leitet den Datenverkehr automatisch an den Container weiter.
Der Datenbankserver (MariaDB)
Zum Datenbankserver gibt es leider nicht viel interessantes zu berichten, obwohl er die wichtigste Aufgabe im Projekt hat:
Er muss die beim Abruf des Counter-Codes anfallenden Besucherdaten schnell und effektiv aufnehmen und in strukturierter Form
abspeichern können. Beim Generieren der Statistikseiten wird auf diese Daten zurückgegriffen. Die Aufbereitung der Daten wird
dabei zum Teil vom Datenbankserver als auch von der VCounter Anwendung übernommen. Die Verbindung zwischen der Applikation
und der Datenbank erfolgt über das Hibernate Framework.
Diese Aufgabe des Datenbankservers übernimmt in diesem Projekt ein MariaDB Server.
Weitere Hintergrundinformationen:
Was ist ein Besucherzähler
Wie funktioniert ein Besucherzähler