Goten Protocol Flows
Understanding the Goten protocol flows.
Design decision includes:
- services are isolated, but they can use/import services on lower
levels only, and they can support only a subset of regions available
from these used/imported services.
- deployments within the Service must be isolated in the context of
versioning. Therefore, they don’t need to point to the same primary
API version and each Service version may import different services
in different versions.
- references may point across services only if the Service imports
another service. References across regions are fine, it is assumed
regions for the same Service trust each other, at least for now.
- all references must carry region, version, and service information
to maintain full global env.
- We have schema and meta owner references. Schema refs define a region
by name, version, and service by context. Meta refs have separate
fields for region, service, and version.
- Schema references may be of blocking type, use cascade deletion, or
unset.
- Meta references must trigger cascade deletion if all owners disappear.
- Each Deployment, Service + Region pair, is responsible for maintaining
metadata.syncing
fields of resources it owns.
- Each Deployment is responsible for catching up with read-copies from
other regions available for them.
- Each Deployment is responsible for local database schema and upgrades.
- Each Deployment is responsible for Meta owner references in all service
regions if they point to the Deployment (via Kind and Region fields!).
- Every time cross-region/service references are established, the other
side may reject this relationship.
We have several components in API servers and db controllers for maintaining
order in this graph. Points one to three are enforced by Meta service and
EnvRegistry components. EnvRegistry uses generated descriptors
from the Goten specification to populate the Meta service. If someone is
“cheating”, then look at point twelve, the other side may reject it.
Understanding the API server flow.
Understanding the meta owner flow.
Understanding the cascade deletion flow.
Understanding the multi-region synchronization flow.
Understanding the database migration flow.