From 9bacbf14cb6eea3abb0a5fc38d7efe938d2297a5 Mon Sep 17 00:00:00 2001 From: Marc Bruggmann Date: Mon, 24 Aug 2020 15:12:33 +0200 Subject: [PATCH] Update the system model to focus more on the core entities. (#2011) * Update the system model to focus more on the core entities. Now that we have a way of labeling and annotating catalogue entities, we can focus the system model more on the entities themselves. I believe that also makes more sense as a model that is shared across many companies - it's easier to standardize on the core entities, and leave some room to implement further abstraction or categories to individual implementations. * Re-add system and domain conepts. --- .../software-model-core-entities.png | Bin 0 -> 17277 bytes .../features/software-catalog/system-model.md | 129 ++++++++++-------- 2 files changed, 71 insertions(+), 58 deletions(-) create mode 100644 docs/features/software-catalog/software-model-core-entities.png diff --git a/docs/features/software-catalog/software-model-core-entities.png b/docs/features/software-catalog/software-model-core-entities.png new file mode 100644 index 0000000000000000000000000000000000000000..b718b7527c3e5a8ac723f09d294457f8bda6ce44 GIT binary patch literal 17277 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 literal 0 HcmV?d00001 diff --git a/docs/features/software-catalog/system-model.md b/docs/features/software-catalog/system-model.md index 4b2884e097..435fe05b48 100644 --- a/docs/features/software-catalog/system-model.md +++ b/docs/features/software-catalog/system-model.md @@ -3,55 +3,24 @@ id: system-model title: System Model --- -We believe that a strong shared understanding and terminology around systems, -software and resources leads to a better Backstage experience. +We believe that a strong shared understanding and terminology around software +and resources leads to a better Backstage experience. _This description originates from [this RFC](https://github.com/spotify/backstage/issues/390). Note that some of the concepts are not yet supported in Backstage._ -## Concepts +## Core Entities -We model our technology using these five concepts (further explained below): +We model software in the Backstage catalogue using these three core entities +(further explained below): -- **Domains** are a high-level grouping of systems -- **Systems** encapsulate the implementation of APIs -- **APIs** are the boundaries between different components and systems -- **Components** are pieces of software +- **Components** are individual pieces of software +- **APIs** are the boundaries between different components - **Resources** are physical or virtual infrastructure needed to operate a - system + component -![Software Ecosystem Model_ Public Github version](https://user-images.githubusercontent.com/24575/77633084-39bcde80-6f4f-11ea-8251-f8df561a3652.png) - -### Domain - -While systems are the basic level of encapsulation for resources, components and -APIs, it is often useful to group a collection of systems that share -terminology, domain models, business purpose, or documentation, i.e. they form a -bounded context. - -For example, it would make sense if the different systems in the “Payments” -domain would come with some documentation on how to accept payments for a new -product or use-case, share the same entity types in their APIs, and integrate -well with each other. - -### System - -With increasing complexity in software, we believe that systems form an -important abstraction level to help us reason about software ecosystems. Systems -are a useful concept in that they allow us to ignore the implementation details -of a certain functionality for consumers, while allowing the owning team to make -changes as they see fit (leading to low coupling). - -A system, in this sense, is a collection of resources and components that -exposes one or several APIs. Components and resources in a system are typically -owned by the same team and are expected to co-evolve. As such, systems usually -consist of at most a handful of components. - -For example, a playlist management system might encapsulate a backend service to -update playlists, a backend service to query them, and a database to store them. -It could expose an RPC API, a daily snapshots dataset, and an event stream of -playlist updates. +![](system-model-core-entities.png) ### Component @@ -60,34 +29,78 @@ backend service or data pipeline (list not exhaustive). A component can be tracked in source control, or use some existing open source or commercial software. -A component can implement APIs for other components to consume. It might depend -on the resources of the system it belongs to, and APIs from other components or -other systems. All other aspects of the component, e.g. any code dependencies, -must be encapsulated. +A component can implement APIs for other components to consume. In turn it +might depend on APIs implemented by other components, or resources that are +attached to it at runtime. ### API -We believe APIs form an important (maybe the most important) abstraction that -allows large software ecosystems to scale. Thus, APIs are a first class citizen -in the Backstage model and the primary way to discover existing functionality in +APIs form an important (maybe the most important) abstraction that allows large +software ecosystems to scale. Thus, APIs are a first class citizen in the +Backstage model and the primary way to discover existing functionality in the ecosystem. -APIs are implemented by components and form boundaries between components and -systems. They might be defined using an RPC IDL (eg Protobuf, GraphQL, ...), a -data schema (eg Avro, TFRecord, ...), or as code interfaces. In any case, APIs -exposed by components need to be in a known machine-readable format so we can +APIs are implemented by components and form boundaries between components. They +might be defined using an RPC IDL (eg Protobuf, GraphQL, ...), a data schema +(eg Avro, TFRecord, ...), or as code interfaces. In any case, APIs exposed by +components need to be in a known machine-readable format so we can build further tooling and analysis on top. -Some APIs might be exposed by the system, making them available for any other -Spotify component to consume. Those public APIs must be documented and humanly -discoverable in Backstage. +APIs have a visibility: they are either public (making them available for any +other component to consume), restricted (only available to a whitelisted set of +consumers), or private (only available within their system). As public APIs are +going to be the primary way interaction between components, Backstage supports +documenting, indexing and searching all APIs so we can browse them as +developers. ### Resource -Resources are the infrastructure a system needs to operate, like BigTable -databases, Pub/Sub topics, S3 buckets or CDNs. Modelling them together with -components and systems will better allow us to visualize resource footprint, and -create tooling around them. +Resources are the infrastructure a component needs to operate at runtime, like +BigTable databases, Pub/Sub topics, S3 buckets or CDNs. Modelling them together +with components and systems will better allow us to visualize resource +footprint, and create tooling around them. + +## Ecosystem Modeling + +A large catalogue of components, APIs and resources can be highly granular +and hard to understand as a whole. It might thus be convenient to further +categorize these entities using the following (optional) concepts: +* **Systems** are a collection of entities that cooperate to perform some + function +* **Domains** relate entities and systems to part of the business + +### System + +With increasing complexity in software, systems form an important abstraction +level to help us reason about software ecosystems. Systems are a useful concept +in that they allow us to ignore the implementation details of a certain +functionality for consumers, while allowing the owning team to make changes as +they see fit (leading to low coupling). + +A system, in this sense, is a collection of resources and components that +exposes one or several public APIs. The main benefit of modelling a system is +that it hides its resources and private APIs between the components for any +consumers. This means that as the owner, you can evolve the implementation, in +terms of components and resources, without your consumers being able to notice. +Typically, a system will consist of at most a handful of components (see +Domain for a grouping of systems). + +For example, a playlist management system might encapsulate a backend service +to update playlists, a backend service to query them, and a database to store +them. It could expose an RPC API, a daily snapshots dataset, and an event +stream of playlist updates. + +### Domain +While systems are the basic level of encapsulation for related entities, it is +often useful to group a collection of systems that share terminology, domain +models, metrics, KPIs, business purpose, or documentation, i.e. they form a +bounded context. + +For example, it would make sense if the different systems in the “Payments” +domain would come with some documentation on how to accept payments for a new +product or use-case, share the same entity types in their APIs, and integrate +well with each other. Other domains could be “Content Ingestion”, “Ads” or +“Search”. ## Current status