All Projects → anemos-io → metastore

anemos-io / metastore

Licence: Apache-2.0 license
A protobuf schema registry on steroids. It will keep track of the contracts throughout your organization, making sure no contract is broken.

Programming Languages

java
68154 projects - #9 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to metastore

Protobuf Convert
Macros for convenient serialization of Rust data structures into/from Protocol Buffers 3
Stars: ✭ 22 (-48.84%)
Mutual labels:  schema, protobuf
go2gql
graphql-go schema generator by proto files
Stars: ✭ 33 (-23.26%)
Mutual labels:  schema, protobuf
Schema Registry
Confluent Schema Registry for Kafka
Stars: ✭ 1,647 (+3730.23%)
Mutual labels:  schema, protobuf
proto2gql
The project has been migrated to https://github.com/EGT-Ukraine/go2gql.
Stars: ✭ 21 (-51.16%)
Mutual labels:  schema, protobuf
Protobuf Dynamic
Protocol Buffers Dynamic Schema - create protobuf schemas programmatically
Stars: ✭ 186 (+332.56%)
Mutual labels:  schema, protobuf
pony-capnp
Cap’n Proto plugin for generating serializable Pony classes. 🐴 - 🎩'n 🅿️
Stars: ✭ 19 (-55.81%)
Mutual labels:  schema
protoc-gen-persist
GRPC SQL and Spanner persistence layer
Stars: ✭ 60 (+39.53%)
Mutual labels:  protobuf
sisyphus-js
Sisyphus customized protobuf and gRPC runtime and code generator for JavaScript/TypeScript
Stars: ✭ 19 (-55.81%)
Mutual labels:  protobuf
graphql-schema-diff
📄🔄📄 Returns the diff of two GraphQL schemas. Detects dangerous and breaking changes.
Stars: ✭ 54 (+25.58%)
Mutual labels:  schema
magnet
A JSON/BSON schema generator
Stars: ✭ 16 (-62.79%)
Mutual labels:  schema
firestore-to-bigquery-export
NPM package for copying and converting Cloud Firestore data to BigQuery.
Stars: ✭ 26 (-39.53%)
Mutual labels:  schema
schema-and-structured-data-for-wp
Creating the best Structured Data and Schema plugin for WordPress
Stars: ✭ 66 (+53.49%)
Mutual labels:  schema
molch
An implementation of the axolotl ratchet based on libsodium.
Stars: ✭ 24 (-44.19%)
Mutual labels:  protobuf
graphql-liftoff
Generate GraphQL schema language from API specifications and more
Stars: ✭ 44 (+2.33%)
Mutual labels:  schema
NoSQLDataEngineering
NoSQL Data Engineering
Stars: ✭ 25 (-41.86%)
Mutual labels:  schema
j2cl-protobuf
Protocol Buffers implementation for J2CL
Stars: ✭ 23 (-46.51%)
Mutual labels:  protobuf
another-json-schema
Another JSON Schema validator, simple & flexible & intuitive.
Stars: ✭ 48 (+11.63%)
Mutual labels:  schema
sbt-avro
Plugin SBT to Generate Scala classes from Apache Avro schemas hosted on a remote Confluent Schema Registry.
Stars: ✭ 15 (-65.12%)
Mutual labels:  schema
MicroServicePractice
微服务实践的demo
Stars: ✭ 40 (-6.98%)
Mutual labels:  protobuf
graphql-docker-api
A GraphQL Server for the Docker API
Stars: ✭ 57 (+32.56%)
Mutual labels:  schema

Protobuf/gRPC MetaStore

Description

Metastore is a schema registry for Protobuf and gRPC. Metastore main purpose is to be a hub for guarding and distributing your data contracts, be it gRPC service or Protobuf message definitions. It's has a few supported workflows but in general it's meant to be used in conjunction with a git repository and a CI/CD pipeline.

Interaction with the metastore always happens though the API. Updating of the store could happen though CI/CD with metastep, a component meant for running in CI/CD. But the API could also be used in your microservices for usage reporting. But the biggest benefit will come from usage in data pipelines, where they could be build at runtime though getting the contracts over the API.

To have a clear split between configuration (through Options) and contract ownership the metastore has a feature called shadow registry. It makes it possible for other parties, aside the contract owners, too augment the contracts, examples of this could be:

  • Annotate a field to indicate a BigQuery partition column or Cluster column.
  • Add descriptions to fields.
  • Annotate a field to indicate it's a sensitive field (eg. Credit Cart).
  • Annotate a field referencing a message to flatten it into a row.

As metastore does'nt have an API it relies on Git repositories to keep track of contract transactions over time. Metastore is able to commit, pull and push to Git repos where all parties can inspect changes via their favorite Git repository manager.

Features

  • Lint and guard against protobuf/gRPC best practices.
  • Shadow registry, let other users annotate contracts with options, aside from the real contract owners (example data organisation).
  • Multiple storage providers for Memory, Local and Google Cloud Storage. Or write your own.
  • Support multiple registries through one server/API.
  • Finegrained update/verify support though well defined scopes (package prefix, package name, file name, ...)

Documentation

References

Metastore presentation at gRPC conf 2019

Known Issues

  • SSH key still need to be configured locally.
  • Metastep needs to be retested and only focused on GitLab now.

Roadmap

  • Implement the resource (example Pub/Sub or Kafka topic) to contract mapping (Message descriptor).
  • Better Git commit messages.
  • Donate the registry API to the gRPC project.
  • Act as a global gRPC reflection Server.

Quick setup

This quick setup is needed when you want to build Metastore by yourself, begin by creating the file gradle/properties.gradle

ext {
    snapshotRepoUrl = "https ://you.maven.repo.example/repository/maven-snapshots/"
    repoUrl = "https ://you.maven.repo.example/repository/maven-releases/"
    repoUser = "repo_user"
    repoPass = "supersecret"

    containerRepoBase = "eu.gcr.io/my-repo"
    containerRepoTarget = "eu.gcr.io/my-repo"

    testGoogleCloud = true
    testGoogleCloudProject = "my-project"
    testGoogleCloudBucket = "my-bucket"
    testGoogleCloudBucketPath = "metastore-test/"
}

Build the base images that jib uses, see README.md in base directory.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].