Microservices - any real world examples?
-
Microservices have been all the hype in the past few years, but has anyone actually seen any real applications that use microservices architecture? I'm not talking about Amazon, Netflix or Uber, I'm interested in something you can deploy yourself. So far I think the only application I've seen is Bitwarden, everything else is just monolithic approach. Well, maybe Kubernetes too, but it's hard to call that an app or service.
I want to get one misconception out of the way, I'll use Nextcloud as an example. You can deploy it as a monolithic app, as a single container running on apache and sqlite, I think it supports that db. You can also split it and run main app on php-fpm, postgresql, nginx, redis, and cron, all in separate containers. 2nd case is still monolithic app, with just bunch of 3rd party dependencies. That's not what I'm looking for. Bitwarden for example, is separated into multiple microservices, web, admin, sso, attachments, icons, api, identity, events, notifications, all these are coupled Bitwarden services, not 3rd party dependencies.
Any other examples?
-
There are a lot of examples, but they're usually internal and are very large. Microservices are complex and very network intensive. I don't know of any consumer software that follows that architecture pattern.
Bitwarden isn't a microservice based architecture. It's just a service based. If you're using a shared database, it's not a microservice. Microservices each have their own database and then either through your API gateway, service discovery, message broker, etc each service queries the other service for the data it needs.
GitLab is another example of a service based architecture. Even though you can deploy GitLab on k8s as separate services, there is a shared database backend that all of the services talk to.
-
You can abstract this away even a little further with space based architecture where you have a central db but the services don't talk directly to it. They use in memory database like Ignite, Hazelcast, Aerospike, etc and then the data is replicated back to the central db at some point.
-
@stacksofplates said in Microservices - any real world examples?:
Bitwarden isn't a microservice based architecture. It's just a service based. If you're using a shared database, it's not a microservice. Microservices each have their own database and then either through your API gateway, service discovery, message broker, etc each service queries the other service for the data it needs.
That’s a false statement. Microservices can share single database. In perfect world each microservice would have each own, but we’re far from perfect.
-
@marcinozga said in Microservices - any real world examples?:
@stacksofplates said in Microservices - any real world examples?:
Bitwarden isn't a microservice based architecture. It's just a service based. If you're using a shared database, it's not a microservice. Microservices each have their own database and then either through your API gateway, service discovery, message broker, etc each service queries the other service for the data it needs.
That’s a false statement. Microservices can share single database. In perfect world each microservice would have each own, but we’re far from perfect.
No it's not. That's what defines it as a microservice. If the services all talk to the same database, it's just a service based architecture.
-
Here's a diagram for each from Mark Richards and Neal Ford.
Service Based:
Microservices:
And here's a Tweet from Kelsey on a funny name for service based:
There's quite a few architecture designs, and they can be similar but specific things define them, like where they write and get data from. There's a distinction between monoliths as well. There's a normal monolith, and then there's a micro-kernel. Obviously the monolith has everything, but the micro-kernel is still a monolith, but has API hooks for plugins to the monolithic core.
-
There's kind of a push now to move back towards monoliths (or other more sensible designs). Mainly because of the complexity and performance loss.
As with anything a ton of places heard microservices were the future, jumped on, and started using it without actually researching. It's good for some use cases, and not for a lot of them.
-
@stacksofplates said in Microservices - any real world examples?:
@marcinozga said in Microservices - any real world examples?:
@stacksofplates said in Microservices - any real world examples?:
Bitwarden isn't a microservice based architecture. It's just a service based. If you're using a shared database, it's not a microservice. Microservices each have their own database and then either through your API gateway, service discovery, message broker, etc each service queries the other service for the data it needs.
That’s a false statement. Microservices can share single database. In perfect world each microservice would have each own, but we’re far from perfect.
No it's not. That's what defines it as a microservice. If the services all talk to the same database, it's just a service based architecture.
No, because there’s really no single definition of microservices.
https://en.wikipedia.org/wiki/MicroservicesAlso https://microservices.io/patterns/data/shared-database.html
-
@marcinozga said in Microservices - any real world examples?:
@stacksofplates said in Microservices - any real world examples?:
@marcinozga said in Microservices - any real world examples?:
@stacksofplates said in Microservices - any real world examples?:
Bitwarden isn't a microservice based architecture. It's just a service based. If you're using a shared database, it's not a microservice. Microservices each have their own database and then either through your API gateway, service discovery, message broker, etc each service queries the other service for the data it needs.
That’s a false statement. Microservices can share single database. In perfect world each microservice would have each own, but we’re far from perfect.
No it's not. That's what defines it as a microservice. If the services all talk to the same database, it's just a service based architecture.
No, because there’s really no single definition of microservices.
https://en.wikipedia.org/wiki/MicroservicesAlso https://microservices.io/patterns/data/shared-database.html
That doesn't really show anything. From that same site:
Again, if they aren't loosely coupled, all encompassing services they aren't microservices. Just as wikipedia says, the consensus is they are loosely coupled. If they are tied to a single database they are by definition, not loosely coupled.
-
I wouldn't consider microservices as desirable in a deploy-it-yourself end user situation. Unless you are setting up something you really need to be able to scale, it adds IT overhead. A Docker image is an abstraction, but docker/k8s config files are most just configuration as code, so it's not like it's just deploy and go to use a config file from a third-party on your cluster.
However, as we get more open source based images for complete drop-in APIs for developers to use instead of building things from scratch, we'll probably see more of it.
-
Microservice architecture was really a means to an end and not the goal itself.
When you have large teams of developers, you simply have to start divide things up into smaller chunks - one way or the other. If you think about the practical problems of trying to maintain and develop a big piece of software while it's running 24/7 with zero interruptions, it's hard to imagine any other way of doing it.
If you don't have those constraints, then using that type of architecture doesn't make as much sense.
-
@marcinozga said in Microservices - any real world examples?:
Microservices have been all the hype in the past few years, but has anyone actually seen any real applications that use microservices architecture? I'm not talking about Amazon, Netflix or Uber, I'm interested in something you can deploy yourself.
Modern software techniques are rarely things you "buy and deploy", they are for your engineering teams to utilize in your designs. Since it is an "under the hood" artefact in software, even if you were deploying it, you wouldn't generally know.
-
@Pete-S said in Microservices - any real world examples?:
Microservice architecture was really a means to an end and not the goal itself.
Exactly
-
@marcinozga said in Microservices - any real world examples?:
@stacksofplates said in Microservices - any real world examples?:
@marcinozga said in Microservices - any real world examples?:
@stacksofplates said in Microservices - any real world examples?:
Bitwarden isn't a microservice based architecture. It's just a service based. If you're using a shared database, it's not a microservice. Microservices each have their own database and then either through your API gateway, service discovery, message broker, etc each service queries the other service for the data it needs.
That’s a false statement. Microservices can share single database. In perfect world each microservice would have each own, but we’re far from perfect.
No it's not. That's what defines it as a microservice. If the services all talk to the same database, it's just a service based architecture.
No, because there’s really no single definition of microservices.
https://en.wikipedia.org/wiki/MicroservicesAlso https://microservices.io/patterns/data/shared-database.html
I'd take Neal Ford's word over Wikipedia