Microservices and Docker at Scale
A microservice is (generally) a single process focused on one aspect of the application, operating in isolation as much as possible. A Docker container runs a single process in a well-defined environment
Why Microservices? Why Containers?
unique ability to better scale development and operations. It also helps organizations easily determine what services don’t need scaling in order to optimize resource utilization
Containers offer a well defined, isolated runtime environment. Instead of shipping an artifact and all of its variables, containers support packaging everything into a Docker
Why Run Microservices in Containers?
Containers and microservices enable developers to build and manage self-healing microservice-based applications more easily. Containers encapsulate discrete components of application logic provisioned only with the minimal resources needed to do their job.
Challenges
- There are increased pipeline variations.
- Testing becomes more complex.
- Deployment complexity increases.
- Monitoring, logging, and remediation become very important and increasingly difficult
- There are numerous different toolchains, architectures, and environments to manage.
Container Challenges
Security is a critical challenge–both because it is still a relatively new technology, and due to the security concerns for downloading an image le. Containers are black boxes to OpSec: less control, less visibility
Best Practices for Microservices and Containers
- Build domain knowledge.
- Pipeline automation:
- Test automation:
- Use an enterprise registry for containers.
- Know what’s running where and why.
- Your pipeline must be tools/environment agnostic
- Consistent logging and monitoring
- Be rigorous in handling failures
- Be flexible at staffing and organizational design