Quote:
Originally Posted by PJo336
Check out x Ray on aws. It traces calls between all your services and provides maps and logging for it. It's how we debugger out last issue between 3 services communication breaking down
I use newrelic for all my services and it will generate service maps, and when you look at traces in newrelic it will annotate all the steps, you that you can see not only that you spent X ms in some remote endpoint, but that Yms of that came from this particular function on the remote endpoint or that DB call. It's pretty good.
We do most of our communication in a star formation, i.e. there are hubs that make a lot of calls to disparate services. We try to avoid multiple step service layers.
We do some data replication via queues. Like if there's a service that needs only a userid and username, instead of having it make a call to some "user service", the user service just publishes user changes and the other service uses that to populate a database. That can be a little fragile, if you decide later that you want emails too then you have to refresh your local version of the user database from scratch.
So far it works fairly well. We have, I think, 20-30ish services. Some are very well defined and self contained, some less so. We have one monolith next that will probably stay that way, or maybe get broken in 2-3 along very well defined lines.
We avoid most of the obscure AWS stuff, just RDS, S3, SQS and then recently some kinesis. RDS could easily be replaced, and we use wrappers for S3 and SQS so they could probably be replaced by anything with similar functionality.