what are the main components of microservices