Artifactory’s Microservices Explained

Patrick Russell
2021-04-06 17:57

Relevant Version: Artifactory 7.X

Although the JFrog Wiki provides an overview of Artifactory's microservices, it does not go into detail about the purpose and function of these services. This article hopes to describe these services in more detail to assist with troubleshooting them.

In this article, the whole Artifactory 7.X system is referred to as the "Artifactory Platform". The Artifactory Platform contains six microservices running together. The reason for this terminology is because there is an "Artifactory" microservice in the Artifactory Platform.

The "Context path" referred to throughout the article is used in REST API commands directed at that particular microservice. For example, the context path of Artifactory is "/artifactory", and can be used in a System Ping test:

#Artifactory microservice health check
curl localhost:8082/artifactory/api/system/ping

Artifactory 

Context path: /artifactory | Port: 8081

Artifactory is the original JFrog Binary Repository Manager, it was released back in 2016 as Artifactory 1.0. It still runs on a bundled Apache Tomcat host. Tomcat is a Java-based application, in 7.X it uses the Java JDK. Both of these dependencies are bundled with Artifactory.

Artifactory has evolved in scope over the years, its primary purpose is to be an efficient Binary Repository Manager. In the Artifactory Platform, the Artifactory microservice handles configuration changes, downloads and uploads, and some background tasks such as metadata calculations.

The Artifactory microservice has been evolving to delegate more and more behaviors to other microservices. This is being done to improve the overall stability and efficiency of the Platform.

Access 

Context path: /access | Port: 8040

The Access microservice was first introduced in Artifactory 5.4. It runs on the same Apache Tomcat as Artifactory, it is also a Java web application. 

The Access microservice handles security operations of the Artifactory Platform. Actions such as logins, REST API authentication, and security configuration changes are all handled by this service. It also handles registration and management of the Platform.

This microservice was designed to improve the performance of logins and authentications.

Router

Context path: /router | External Port 8082 | Internal Port 8046

The JFrog Router microservice, along with the remaining microservices in this article, was introduced in Artyfactory 7.0. It forms the core of the Artifactory Platform system, as it manages all communications between microservices.

During an Artifactory Platform startup, the Router microservice handles the registration of the other microservices within the Platform. For the startup to succeed, all of the microservices must connect and "join" the cluster successfully. 

The Router microservice performs routine health checks to the other microservices. If a health check is missed, the router will mark the service as "Unavailable" and will fail requests to that service with a 503 HTTP error.

You can use the Router's external port (8082) to reach the microservices within the Platform. For example, a request to artifactory.com:8082/artifactory will reach Artifactory on port 8081 internally, and a request to artifactory.com:8082/access will reach Access on port 8040.

If you see any errors in the logs mentioning "localhost:8082" or "localhost:8046", these errors mean there is a problem with the Router.

Frontend

Context path: /ui | Internal port: 8070

The Frontend is accessed through the JFrog Router on port 8082 using a web browser. Its internal port shouldn't be accessed during day-to-day operations.

The Frontend microservice handles the Unified Web UI of the JFrog Platform. It seamlessly merges the views of systems such as Xray or Mission Control, even though these systems are deployed on separate hosts. 

Metadata 

Context path: /metadata | Internal port: 8086

JFrog Metadata is normally not accessed directly, it runs in the background during regular operations.

The Metadata microservice handles the calculation and indexing of packages within the Artifactory Platform. As of Artifactory Platform 7.X, this duty is shared with the Artifactory microservice, some packages are calculated by Metadata while others are still handled by Artifactory.

The Metadata system displays the information it has calculated in the "Packages" UI view:

Event 
Context path: /event | Internal port: 8062
JFrog Event handles sending artifact data to external services such as JFrog Xray or JFrog Distribution. It usually works through both the local Artifactory Platform Router, which connects it to the remote Router of Xray or Distribution.

Events are tasks which require moving artifacts or updating metadata. The Event microservice has taken on this role from the Artifactory microservice. In the past, the Artifactory microservice handled these kinds of operations.