System Architecture
Software architecture: consists of the structure of the system, which supports the architecture, combined with the architecture characteristics that the system must support, the architecture decisions, and finally the design principles.
The structure of the system refers to the architecture style(s) the system is implemented in, such as micro-services, layered, or micro-kernel.
Architecture characteristics:
- security
- access audits
- principle of least privilege
- authentication by third parties (Auth0, ORCiD)
- the addition of new resources includes a security scan
- usability
- highly rated in user surveys
- responsive to user requests for UX updates
- all user interfaces and APIs are fully documented, docs are easy to find
- the base system has > 90% up-time
- agility
- continuous integration and continuous deployment uses one-button-push
- adding a new resource to the system requires minimal time (~1 month)
- test cases and monitoring allow for low-risk deployments
- availability
- reliability
- testability
- scalability
- fault tolerance
- elasticity
- recoverability
- performance
- deployability
- learnability
Figure 1: The BioConnect system architecture, shown here as functional components, provides the minimal foundational software to support FAIR and TRUSTworthy data production. One unique component of the system is the identity service. This service allows for resources, such as test subjects and samples, to have multiple names or IDs, while keeping them pointing to the correct real-world entity without confusion.
Figure 2: Flow of data from acquisition, through curation and QC, and iterating through exploration and results. This data flow maintains the traceability and reproducibility of derived data objects (figures, results). Data products are traceable through each processing step all the way back to the original raw data, i.e., the system keeps a record of data lineage. Software and metadata versions are recorded to maintain a reproducible data flow.