Most of cloud computing technologies are based on virtualization. The advertisement of cloud computing technologies often refers reliability and reduction of costs. But when compared with container technologies such as Java VM, live migration and hardware abstraction of virtualization is much more difficult.

So what is the reason for virtualization-based cloud computing getting more popular than container-based technologies?

有帮助吗?

解决方案

The flexibility.

If you use shared hosting where your application is running within a container, you are restricted to a small set of very specific tasks you can perform.

If you use a virtual machine, you're restricted by the operating system and the hypervisor, but your room for maneuver is much larger.

For example, on a VM, you may access all the files, which also means that you can install anything you want. This makes it possible to do things you can't do on a shared hosting platform. Examples:

  • If you need Redis as a caching solution, you can do it. In a case of a container, you don't have this freedom.

  • If you need to have a partition in RAM for very fast access, a Linux VM will let you do it; on shared hosting, there will be no way to have this sort of customization.

Additionally, you have the benefit of tools which were used for years or decades by system administrators to manage servers. For instance, if you have a VM, you can usually access it with SSH or through RDP. In a case of container-based server, the only things you can use as a customer are the (usually badly made) tools provided by the hosting company. This makes it extremely difficult to impossible to profile or debug the applications, and even a simplest task as generating a dump or reading log files can become unnecessarily complicated.

There is nothing wrong with container approach per se. It has its perfectly valid uses. But it's not the answer to everything: sometimes, an actual virtualization is needed.

其他提示

The question is no longer accurate. Today containerization as defined by the Open Container Initiative (which includes Docker) is a means of hosting complex applications as if they were individual units. Containers provide good cost savings and high availability. This provides the following benefits:

  • Scaling out is as simple as adding new instances of the same container
  • Each container has exactly the dependencies it needs, and no more
    • This allows multiple versions of a service that would otherwise have conflicting dependencies to be hosted on the same server
  • Orchestration services like Kubernetes (k8s) deploy your application consistently, and manage its own infrastructure
  • Containers behave the same whether they are hosted in the cloud or on premises, allowing you to be "Cloud Ready" before your company is ready to pull that trigger

In this scenario, if you need to add redis caching, you would pull in a redis container, and use the orchestration service to wire everything together.

Every major cloud provider has a managed container service including Amazon EKS, Azure AKS, Google GKS, etc. Typically you have the cloud manage the hard parts of hosting the containers, and you provide it the deployment instructions. With minimal effort, you can have your cluster automatically scale out as well.

The bottom line is that the container cluster is running on top of virtual machines, but you no longer manage that. There are some trade-offs, but I believe they are manageable:

  • You can't RDP or SSH into a container
  • Monitoring your application health requires a bit more infrastructure (i.e. Elastic Stack, CloudWatch, Splunk, or some equivalent log aggregator)
  • Splitting your application into smaller reusable parts increases the complexity of the system

That said, the balance of power in 2020 has definitely shifted toward using OCI compliant containers to host your application.

许可以下: CC-BY-SA归因
scroll top