What are the three components of a microservices architecture?