DEV Community 👩‍💻👨‍💻

DEV Community 👩‍💻👨‍💻 is a community of 970,177 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

Create account Log in
Adekoyejo Akinhanmi
Adekoyejo Akinhanmi

Posted on

What's the best way to manage migrations in a microservice architechure?

I'm thinking of creating a repository that will handle database migrations across the services. Is this efficient?

Top comments (8)

sam_ferree profile image
Sam Ferree

I think ideally, a SOLID microservice architecture would imply that a service for model A doesn't care about the schema changes for model B, so migrations could live in the repo for the services they are for.

I could be wrong though, are you running into a specific problem?

senornigeria profile image
Adekoyejo Akinhanmi Author

Specifically, I'm using knexjs for migrations and I was unable to run migrations for files that were not present in the current service migration directory. What I mean is, KnexJS would look through its migrations folder and attempt to correlate previous migrations in the migrations table with the files present. If it doesn't find them, it throws an error. So I decided to move all the migrations to a separate service and do version control there.

sam_ferree profile image
Sam Ferree

Ah, I'm used to EntityFramework which stores it' "Last Migration" information in a table on the database, so I'm sure if that would be an issue.

Seems like a good enough reason to keep your migrations in their own repo to me.

There is also probably an argument that could be made for a monorepo for all your microservices.

pdeveltere profile image
Pieter Develtere

Actually, you are incorrect here. A shared DB is not an anti pattern. But you definitely want to have separate tables.

From the article on that comes after the article you posted:

aroman012 profile image
Alejandro Roman

It's weird because the website says that and at the same time says that it is an anti-pattern that should be avoided.

See the "Decision 3" section

rthordonovan profile image
Ryan Thor Donovan

The Grubhub tech blog put up an article about how they did exactly this when they moved both the legacy Seamless and Grubhub data to a new SOA platform while all three were in use:

The short of it is, yes, you should have a separate service handle the migration, but also consider giving that service direct database access and ensure that all responses are idempotent in case communication fails in the middle of a migration.

danielvincenzi profile image
Daniel • Edited on

I was looking for about it, and I found the for Kubernetes native.

🌚 Friends don't let friends browse without dark mode.

Sorry, it's true.