Using a service mesh to manage the cross-cutting concerns of microservices