Services
Arkitekt is designed to be a flexible and modular platform that can stand as a central backbone for a wide variety of biological analysis needs in lab. This modularity and composability of the platform is ensured by the use of a (micro)-service architecture, where each service is designed to be a standalone component that can be used independently or in combination with other services. A service in the Arkitekt platform is a containerized web-server that can be provides API endpoints for its functionality.
Services in Arkitekt
The following are the core services that are installed in a default Arkitekt platform:
- Lok: Authorization and Authentication service
- Rekuest: Node Repository and Task-Assignment
- Port: Virtualizion of plugin apps
- Mikro: Microscopy Data Management
- Fluss: Workflow management
Other services can be added to the platform as needed. Some additional services that are available in the Arkitekt platform are:
- OmeroArk: OMERO integration
- Kluster: Dask-Cluster management
- Kabinet: Next genration Plugin Management
Technical Design of the Services
Design Principles
While the Services in Arkitekt can be designed in a variety of ways, the following are some of the key design principles that are followed in the design of the services:
-
Containerized: Each service is designed to be a containerized web-server that can be deployed in a containerized environment (e.g. Docker, Kubernetes).
-
GraphQL API: Each service provides a GraphQL API that can be used to interact with the service. This allows for a flexible and powerful way to interact with the service.
-
No inter-service communication: While Arkitekt adopts a clear seperation of concerns and modularity in its design, the services are designed to act completely independently and do not communicate with each other (as opposed to some micro-service architectures where services communicate with each other). This is to ensure that the services can develop and evolve independently and can be used in a variety of combinations.
-
** JWT Authentication and Authorization**: Each service can be configured to use a variety of authentication and authorization mechanisms. However, In order to ensure a consistent and distibributed authentication each service accepts JWT tokens that are used to authenticate.
-
Database: Each service can be configured to use a variety of databases. However, the default database used in the Arkitekt platform is a PostgreSQL database.
-
Configuration: Each service should be configurable using a configuration file and environment variables. This configuration is generated when installaling the platform through the Arkitekt CLI or Konstruktor.
-
Logging and Monitoring: Each service logs its activity to standard output.
Current Tech Stack
The following are the current base technologies that are used in the design of the services:
- Language: Python
- Web Framework: Django
- GraphQL: Graphene
- Database: PostgreSQL
While the above technologies are used as the base, the services can be designed using a variety of technologies and frameworks as needed.
In an effort to standardize and make the backend services more testable and type-safe, we are currently in the process of migrating the services
to use Strawberry
a wildely used Python GraphQL library that is designed to be more type-safe and testable.
While Django might not be the most performant web-framework, it is chosen as the base web-framework for the services due to its flexibility, modularity and the wide variety of libraries and tools that are available for it. If you are designing a service that requires high-performance or has specific requirements, you can choose to use a different web-framework.