JFrog Artifactory Architektur und Funktionsprinzip

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.

JFrog Artifactory Repositories

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

JFrog Artifactory Layer 

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:

 

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.

 

JFrog Artifactory Cold Artifact Storage

 

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)

 

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.