はじめに
複数の案件を経験し、サーバーにも様々な構成があることを知ったので、これまでに出会ったサーバーや学習したものを整理しました。
いたらない部分があった際は教えて頂けますと幸いです。
背景
エンジニアがよりビジネスロジックに集中できるように、物理マシン⇒仮想マシン⇒コンテナ⇒サーバーレスへと抽象化のレベルが高まっているという背景があるようです。
具体的には、
- 物理マシンの上にシステムを作っていた当時は、物理マシンを管理するさまざまな手間がかかり、物理マシンの知識が求められた。
- 仮想マシンが登場すると、物理マシンを管理する手間が減った。
- コンテナという技術が広まると、仮想マシンの中でもコンテナの部分だけを把握すればよくなり、より管理が楽になった。
- サーバーレスという技術が広まると、コンテナでは必要だった細かい設定も不要になり、インフラの管理をほとんど意識せずにアプリケーション開発に集中できるようになった。
一覧
仮想化技術を使用していない場合
私はHPE製の物理的なサーバーにRHELをインストールし、その後ApacheやTomcatをインストール・設定後、アプリをデプロイする等しました。
ホスト型
ホストOS上で仮想化ソフトウェアを動作させ、その上で複数のゲストOSを動かす。仮想化環境を構築しやすい。
私はVirtualBoxを使って、ホストOSとは異なるゲストOSをインストール・設定をしました。
ハイパバイザ型
物理サーバ上でハイパバイザという仮想化ソフトウェアを動作させ、その上で複数のゲストOSを動かす。ハイパバイザ型のパソコンは最初から仮想サーバをつくることを目的に作られたパソコンなのでOSではなくハイパバイザが入れられている。
狭義では、ホストのOSを使わずハードウェア上で直接稼働させるタイプのみをハイパーバイザーと呼びますが、広義ではホストOS上で稼働させるタイプ(ホスト型)もハイパーバイザーと呼ばれる。
今まで意識したことが無かったのですが、EC2は裏側でハイパバイザを使っており、ハイパバイザによって生成された仮想マシンを私はインターネットを通して借り、OSやソフトウェアを導入してサービスを提供しているのだと知りました。
コンテナ型
ホストOS上にコンテナエンジンという管理ソフトウェアを動作させ、その上でコンテナと呼ばれる実行環境を動かす。OSは共通のため自由度は低いが、移行性は高い。
DockerやKubernetesというものを聞いたことはあるのですが使ったことはないのでこれからが楽しみです。
まとめ
以前実施したサーバー構築は、仮想化技術を利用しない物理サーバー上に直接環境を構築する従来型の構成であったことが分かりました。
また、テストを行う中で登場した社内環境・検証環境・本番環境について、それぞれ構成に違いがあると感じていましたが、今回の学習を通じて整理することができました。
構成によってアプリケーションのデプロイ方法も変わると思うので(WARなのかJARなのかコンテナイメージなのか等)これからの業務では、デプロイ先のサーバー構成を意識して、どういった成果物を結果として作る必要があるか等考えて取り組みます。
