In diesem Blogbeitrag erhalten Sie einen Überblick über die JFrog Artifactory Architektur, das Funktionsprinzip sowie die Beschreibung der notwendigen Installations-Voraussetzungen.
Was ist JFrog Artifactory?
JFrog Artifactory gehört zu den leistungsstarken und universalen Repository-Manager auf dem Markt. JFrog Artifactory lässt sich mit fast allen gängigen CI/CD-Tools integrieren. JFrog Artifactory ist ein integraler Bestandsteil der JFrog Platform, welche eine fast komplette CI/CD Pipeline abbildet.
JFrog Artifactory kann gleichzeitig als ein Speicherort für alle lokale Artefakte und als ein Remote Repository Manager für die Libraries, Images und Konfigurationsfiles agieren. Der breite Funktionsumfang ermöglicht eine schnellere Bereitstellung der Software von der Entwicklung bis zur Produktion.
JFrog Artifactory unterstützt 27 verschiedene Online-Repositories und Paketformate: Alpine Linux, Bower, Cargo, Chef Cookbook, CocoaPods, Conan, Conda, CRAN, Debian, Docker, Git LFS, Go, Kubernetes Helm Chart, Maven, npm, NuGet, Opkg, P2, PHP-Composer, Pub, Puppet, PyPI, RPM, RubyGems, SBT, Vagrant, VCS. JFrog Artifactory ermöglicht alle diese Repositories unter einem Dach zu vereinen, was den Verwaltungsaufwand massiv verringert.
JFrog Artifactory ist sowohl als Cloud-Lösung (SaaS) als auch On-Prem-Lösung verfügbar. Dabei ist eine Replikation der Repository-Inhalte über mehrere Standorte möglich.
Außerdem lässt sich JFrog Artifactory mit anderen JFrog Tools kombinieren und kann somit einen kompletten CI/CD Prozess inkl. Security und Compliance (JFrog Xray) bedienen. Besonders interessant ist die gemeinsame von Nutzung von JFrog Artifactory und JFrog Xray. In diesem Fall werden die Binärdateien direkt beim Hochladen automatisch gescannt. Auch wenn eine neue Schwachstelle bekannt wird, wird die komplette Analyse erneut durchgeführt.
Repositories
Was ist ein Repository?
Ein Repository ist ein Software-Produkt, welches zur Speicherung und Verwaltung von Binärdaten (Dateien) dient. Oft wird ein Repository auch als Binary Repository Manager (BRM) bezeichnet, da dies als eine Erweiterung des Quellcode-Repositorys gesehen wird. Ein Repository speichert die Ergebnisse des Build-Prozesses (sogenannte Artefakte). JFrog Artifactory kann vier verschiedene Repository-Arten bereitstellen.
Locale Repositories - beinhaltet die Artefakte, die aus dem lokalen Netzwerk kommen und lokal auf der JFrog Artifactory abgelegt werden. Nur auf die lokalen Repositories ist ein Upload von benutzererstellten Artefakten möglich.
Remote Repository – aus IT-Sicht ist ein Remote Repository nicht anders als ein Caching Proxy auf externe Ressourcen (externe Repositories). Ein Remote Repository funktioniert folgendermaßen:
- der Benutzer stellt eine Anfrage
- das Remote Repository holt die gewünschte Datei von dem entfernten Repository ab, legt diese im Cache ab
- und liefert die Datei aus.
Aus dem lokalen Netzwerk können die Benutzer keine Artefakte darauf hochladen.
Virtuelle Repository - ist eine logische Mischung aus einem lokalen und einem Remote Repository. Dieser Repositorytyp ermöglich eine Aggregierung von internen und externen Repositories zu einem zentralen Zugriffspunkt.
Distribution - ist für die globale Bereitstellung von Inhalten vorgesehen. Eine Distribution ist mit einem separaten Produkt namens JFrog Bintray intergiert.
Architektur
JFrog Artifactory Architektur besteht aus vier grundlegenden Schichten:
- User Interface / Web UI
- Caching
- Virtual File System / Checksum-based File Storage
- Connection
User Interaction Layer ist die oberste Schicht von JFrog Artifactory und ermöglicht eine direkte http- oder https-Kommunikation mit einer JavaScript-basierte Management-Konsole sowie auch die Kommunikation über Schnittstellen wie WebDAV und REST-API. Über die REST-API findet die meiste Kommunikation statt. (WebDAV steht für Web-based Distributed and Versioning, REST-API für Application Programming Interface - Representational State Transfer)
Caching – der Caching Layer ist eine optionale Funktion, die zur Beschleunig der Storage-Zugriffen sowie zur Entlastung der Bandbreite dient.
Virtual File System / Checksum-based File Storage – Storage zählt sicherlich zu den wichtigsten Funktionen von JFrog Artifactory.
Die prüfsummenbasierte Speicherung ermöglicht eine optimale Verwaltung der Artefakte.
Dies erfolgt durch die Speicherung der erforderlichen Artefakt-Metadaten in einer dedizierten Datenbank und Zuordnung zu ihrem physischen Speicher (NAS/SAN/FileSystem/Blob Storage/etc.). Jede Binärdatei wird anhand ihrer Prüfsumme nur einmal in der Datenbank gespeichert und dabei umbenannt. Dadurch wird nicht nur die Deduplizierung (bis zu 40%) realisiert, sondern auch schnelle Transaktionen ermöglicht.
Funktionsprinzip:
Für jedes Artefakt, welches in dem Repository hochgeladen wird, wird zuerst eine Prüfsumme (sha1) berechnet und anhand dieser Summe eine ID erstellt. Der Dateiname wird in ihre Prüfsumme umbenannt und in einem neuen Ordner gespeichert. Der Name des Ordners besteht aus den zwei ersten Zeichen des Dateinamens, wie z.B. /filestrore/d3. Anschließend wird die obere Information sowie weitere Information (Properties, Security Entities, File checksum, Archive indices, File stats) in der Datenbank eingetragen.
Connection – Dieser Layer ist für die Kommunikation mit der Datenbank und gleichzeitig für die Kommunikation mit den externen Repositories zuständig.
JFrog Artifactory wird mit einer im System integrierten Datenbank Apache Derby installiert, unterstützt aber auch andere Datenbanken, die man je nach Ihren Anforderungen verwenden kann.
In einer stark ausgelasteten Infrastruktur mit über 700k an Artefakte empfiehlt JFrog die Verwendung einer externen Datenbank, nämlich PostgreSQL ( PostgreSQL v10.x bis v13.x ). Darüber hinaus werden auch folgenden Datenbanken unterstützt:
- MySQL v5.7 und 8.x
- Oracle-Versionen v.12.2, v.18 und v.19
- Microsoft SQL Server 2008 (10.5) und höher
- MariaDB-Versionen 10.2.9-10.4 und Version 10.5.9
Cold Artifact Storage
Die aktuelle Version von JFrog Artifactory (ab Version?) hat eine neue Funktion namens Cold Storage. Die Separierung der Daten auf Cold und Hot ist im Bereich Storage weit verbreitert. Die aktiv genutzten Inhalte werden in dem Live Storage aufbewahrt und die seltener genutzten Inhalte werden in dem Cold Storage archiviert. Diese Vorgehensweise verbessert die Perfomance der Infrastruktur.
Microservices Architektur
JFrog ist Microservices Architektur-basierend und beinhalten folgende Dienste:
- Artifactory – ist der Application Service, welcher für alle Managementaufgaben zuständig ist.
- Access – ist der Authentifizierungsservice, welcher mit den externen Authentifizierungs-Diensten wie z.B. LDAP, SAML, SSO usw. interagiert. Außerdem wird der Access Service für die Verwaltung von Benutzern, Gruppen, Berechtigungen und Zugriffstoken für alle Produkte des JFrog Platform Deployment (JPD) eingesetzt.
- Frontend – stellt die Management Konsole für alle für alle Produkte der JFrog Plattform bereit.
- Replicator - ein Replicator ist für die Verteilung von sogenannten Release-Bundles von einem Artifactory-Quellknoten zu einem Zielknoten vorgesehen. Ein Release-Bundle ist eine Reihe von verschiedenen Dateien und Paketen inkl. der dazugehörigen Metadaten. Diese Funktionalität setzt eine Enterprise+ Lizenz voraus.
- Metadata– wird zum Speichern, Verwalten und Verteilen von Metadaten zwischen verschiedenen Komponenten der JFP verwendet. Der Metadata Service verfügt über eigene Konfigurationseinstellungen und Protokolldateien.
- Router – ist ein zentraler produktübergreifender Hub für die Kommunikation zwischen allen Microservices und Produkten der JFrog Platform.
- Event - dieser Service verteilt die Events sowohl an externe als auch an interne Produkte der JFrog Plattform
- Intergration - ist der Service, der für die Authentifizierung von Drittsystemen und die Ereignisregistrierung verantwortlich ist.
- JFConnect - ist der Service, welcher für den Abruf der Berechtigungen aus der Subscription verantwortlich ist.
- Observability - dieser Service hat die Aufgabe die Protokollen und Metriken zu konsolidieren.
Hochverfügbarkeit
JFrog Artifactory unterstützt eine hochverfügbare Bereitstellung von mehreren einzelnen JFrog Instanzen. Der JFrof-Cluster, welcher aus mindestens zwei aktiven Knoten (Aktiv/Aktiv-Cluster) bestehen soll, bietet nicht nur die Ausfallsicherheit, sondern auch eine gleichmäßige Verteilung der Arbeitslast.
JFrog empfiehlt die Bereitstellung von drei Knoten-Cluster, die sich geografisch nahe liegen. Es wird eine Netzwerklatenz von 1 ms. oder weniger vorausgesetzt. Somit ist diese Lösung nicht für die Replikation zwischen geografisch weit entfernten Standorten vorgesehen (dafür hat JFrog eine andere Lösung namens JFrog Bintray parat).
Installationsvoraussetzungen
JFrog Artifactory hat eine breite Palette an unterstützen Betriebsystem und Plattformen sowohl On-Prem als auch in der Cloud. Wenn Sie mehrere Produkte der JFrog Plattform verwenden möchten, wird es vom Hersteller dringen empfohlen einen separaten Server für jede Komponente zu verwenden.
Unter diesem Link können Sie die Installer-Dateien herunterladen: https://jfrog.com/download-jfrog-platform hier finden Sie die Artifactory System YAML-Datei, die bei der Konfiguration genutzt wird. In dieser Datei finden Sie viele Systemeinstellungen, die Sie gemäß Ihren Anforderungen anpassen können.
Softwareanforderung:
Mehrere JFrog Produkte Produkte (Artifactory, Distribution, Insight, Mission Control) sind Java-basierend. Der Installer bringt alle notwendigen Komponenten (JDK 11+) mit.
Unterstütze Plattformen:
Plattforme
|
Version
|
Windows Server
|
2016, 2019
|
Debian
|
8.x, 9.x, 10.x
|
Centos
|
7.x
|
RedHat Enterprise Linux
|
7.x, 8.x
|
Ubuntu
|
18.04, 20.04
|
SUSE Linux Enterprise
|
12 SP5
|
Helm Charts
|
2.x, 3.x
|
Hardware-Sizing
Die Größe der VM ist von der Anzahl der erwarteten aktiven Entwickler (Clients) anhängig:
Entwickler-Anzahl | CPUs | RAM | Storage |
1 bis 20 | 4 Cores | 4 GB | ab 100 GB (2) |
20 bis 100 | 4 Cores | 8 GB | |
100 bis 200 | 8 Cores (1) | 12 GB | |
(1) 16 Cores empfohlen (2) Speicherplatz, der mindestens dreimal so groß ist wie die Gesamtgröße der gespeicherten Artefakte. |
Firewalls
Source | Destination | Type | Port | Beschreibung |
Externer Zugriff |
JFrog Artifactory |
TCP | 8081 8082 |
Extrene Kommunikation, Kommunikation über LB / Reverse Proxy
WebUI, Artifactory Router service (port 8082) |
Interne Kommunikation zwischen einzelnen Diensten: | ||||
JFrog Artifactory |
Access Service | TCP | 8040 |
Interne Kommunikation zwischen Artifactory und den
Access-Service |
TCP | 8045 | |||
Replicator Service |
TCP | 8048 9092 |
Interne Kommunikation zwischen Artifactory und den Replicator Service
|
|
TCP | 8070 |
Listen port for profiling data
|
||
Metadata Service | TCP | 8086 | ||
Router Service | TCP | 8082 8046 8047 8049 8091 |
||
Events Service | TCP | 8061 8062 |
||
Integrations Service |
TCP | 8071 8072 |
||
JFConnect Service | TCP | 8030 | ||
Web | TCP | 8070 | ||
Observability | TCP | 8036 | ||
gRPC | TCP | 8037 | Port für gRPC (gRPC Remote Procedure Calls) |