データが主食

データエンジニアの備忘録。分析だったり、読んだ本のメモだったり。

Cloud Nativeとは?

仕事のプレゼンで、「CloudNativeで.....」とか「クラウド流儀に反する」とか、それっぽい表現する機会がありました。 しかし、実際のところ、Cloud Nativeってなんなのか定義はよくわかっていませんでした。

先日、なかなか良いCloud Nativeの説明を見つけたので翻訳してみました。

www.nginx.com

この本のP.14に登場します。

Cloud Nativeの要素

Automatable

If applications are to be deployed and managed by machines, instead of humans, they need to abide by common standards, formats, and interfaces. Kubernetes provides these standard interfaces in a way that means application developers don’t even need to worry about them.

人手ではなくて、機械によってデプロイ・管理されているアプリケーションでは、共通企画・フォーマット・インタフェースを遵守する必要がある。 Kubernetesはこれらの標準インタフェースを提供するため、アプリケーション開発者はこれらを心配する必要がない。

Ubiquitous and flexible

Because they are decoupled from physical resources such as disks, or any specific knowledge about the compute node they happen to be running on, containerized microservices can easily be moved from one node to another, or even one cluster to another.

Cloud Nativeなアプリケーションでは、ディスクなどの物理的な資源や実行中のノードに関する何らかの知識を分離しているため、コンテナ化されたマイクロサービスは他ノードや他クラスターへも容易に引越しできる。

Resilient and scalable

Traditional applications tend to have single points of failure: the application stops working if its main process crashes, or if the underlying machine has a hardware failure, or if a network resource becomes congested. Cloud native applications, because they are inherently distributed, can be made highly available through redundancy and graceful degradation.

旧来のアプリケーションは単一障害点を持っていることが多い。例えば、メインプロセスがクラッシュしたり、マシンが物理的障害を起こしたり、ネットワークが混雑したりすると、旧来のアプリケーションは停止してしまう。 Cloud Nativeなアプリケーションでは、本質的に分散しているおり冗長性やgraceful degradationにより、高い可用性を実現できる。

Dynamic

A container orchestrator such as Kubernetes can schedule containers to take maximum advantage of available resources. It can run many copies of them to achieve high availability, and perform rolling updates to smoothly upgrade services without ever dropping traffic.

Kubernetesなどのコンテナオーケストレーションでは、コンテナーをスケジュールすることで利用可能資源を最大限活用できる。 複製を作ることで、高い可用性を実現し、rolling updatesによりスムーズなアップデートを可能にする。

Observable

Cloud native apps, by their nature, are harder to inspect and debug. So a key requirement of distributed systems is observability : monitoring, logging, tracing, and metrics all help engineers understand what their systems are doing (and what they’re doing wrong).

Cloud Nativeなアプリケーションはその特性上、調査・デバッグが難しい。 そのため、分散システムは観測可能性が求められる。monitoring, logging, tracing, metricsはエンジニアがシステムの挙動を把握することを助ける。

Distributed

Cloud native is an approach to building and running applications that takes advantage of the distributed and decentralized nature of the cloud. It’s about how your application works, not where it runs. Instead of deploying your code as a single entity (known as a monolith ), cloud native applications tend to be composed of multiple, cooperating, distributed microservices . A microservice is simply a self-contained service that does one thing. If you put enough microservices together, you get an application.

Cloud Nativeとは、クラウドの分散・decentralizedという特性を活かすアプローチである。 それは、「アプリケーションが何をするか」であって「アプリケーションがどこで動作するか」ではない。 コードを単一インスタンスにデプロイするのではなくて、複数台が協調する分散マイクロサービスである。 マイクロサービスとは、自己充足のシンプルなサービスであり、複数のマイクロサービスを組み合わせることでアプリケーションを作ることができる。

所感

  • 概念的なことなので、これくらいの表現しかできないよなーという感じ。