When designing new applications to run in containers, one key aspect to keep in mind is the concept of decoupling. Tightly coupling an application and its data together may be a non-starter. Keeping the characteristics of a container in mind, separating the data from the application’s dependencies from the start will speed up things greatly. eSimplicity uses cloud-native architecture and tools, along with a microservices approach, to make it easy for the transition.
The nature of containers is very volatile in the sense that containers are treated as disposable. Also, if one goes against that nature, one ends up making virtual machines out of containers. The larger the scale of an application, the more need for control. Scaling up is very rewarding because of the sheer simplicity of it, but that also leads to a mess of containers flying around if the process is not tightly controlled. Orchestration tools help with the placement and tracking of your containers.
Monitoring and logging
Monitoring and logging are critical to debug failures or prevent crashes. It is even more important in a containerized world since the bigger an application grows, the harder it becomes to keep track of resources. Assuming that logging and monitoring solutions were present for your legacy product, it should not be hard to switch them to work with containers. Docker, for example, offers multiple logging options and allows you to ship your application’s output to a json file, fluentd, Splunk, or plain old syslog. With regard to monitoring, eSimplicity can choose hosted paid solutions like Datadog or New Relic. Or, we can build our own solution based on tools like cAdvisor, Prometheus, and Grafana, which cover the same ground as paid solutions and offer all the necessary features like alerting and dashboarding.