AWS_クラウドの概念

AWSの長所・利点

固定費が柔軟な変動費へ、データセンターの運用・保守費用が不要

リソースを利用したときだけ利用できるので、小さく始めることができる。 コストにはAmazonがサーバー等を管理する人件費やデータセンターの費用等ももちろん含まれた金額となっている。

スケールメリットによるコストダウン

多くの人が利用するほど、安く提供できる。 実際60回を超える値下げがされている。

キャパシティ予測が不要

従来のオンプレミスだと、アクセス数などキャパシティを予測してサーバー等を用意する必要があった。
AWSだと必要な場合はすぐにリソースの増減ができるので、スケーリング(容量を増減すること)すればいい。

速度と俊敏性の向上

新しいITリソースを簡単に利用できる。

すぐにデプロイできる

オンプレだとデータセンターに行って、機材を設置して・・・等、多くの作業が必要。AWSはネット上で完結する。

クラウドアーキテクチャの設計原理

故障に備えた設計をする

あらゆる故障に備えた設計をする。 そのため、単一障害点をなくすという考え方をする。

  • 一つデータセンターのみで運用しない。
  • 単一のインスタンスのみで運用しない。

単一障害点(たんいつしょうがいてん。英: single point of failure、SPOF)とは、その単一 箇所が働かないと、システム全体が障害となるような箇所を指す。

単一障害点 - Wikipedia

機能の依存関係を疎結合にする

コンポーネント疎結合して、一つが止まっても別のコンポーネントで継続できるようにする。

AmazonSQSというサービスがある。
SQSをコンポーネントの間に配置してメッセージのやり取りができるため、疎結合ができる。

AWSが提供するサービスにはSQSというものがあります。SQSとは様々なタスクを実行するアプリケ ーションの分散コンポーネント間でデータを簡単に移動させられるというものです。SQSを簡単に説明すると、メッセージキューイングサービスということになります。
メッセージキューイングとは、アプリケーションプログラムの間で動作の連携を行い、データを交換させるときの方式のことです。送信データをキュー(queue)と呼ばれる領域に保持することで受信側の処理を待たずに継続して処理を行っていくことができます。この仕組みの提供をSQSでしています。
引用先:SQSの特徴や導入事例を紹介!AWSのメッセージングサービス|TECH PLAY Magazine [テックプレイマガジン]

また、マイクロサービスアーキテクチャという技法を用いることで、疎結合をしているとのこと。 機能毎に分けて作成して、機能ごとのやりとりは定義したAPIを呼び出す。 これで機能毎に、改修することもできるので管理や運用がしやすいのか。 バックとフロントを分けて開発するのもこの考えなのかな?

マイクロサービスとは、複数の規模の小さなサービスを組み合わせてひとつの大きなアプリケーションを構成する、ソフトウェア開発の技法のひとつです。 従来は、「すべての機能がまとまったひとつの大きな塊」としてソフトウェアを設計することが多かったのに対し、マイクロサービスは「まず機能を分解していき小さなサービスをつくる。それらを組み合わることでひとつの大きなソフトウェアを構成する。」という考え方です。
ひとつひとつのサービスは小さいだけでなく、自らの持つ役割に専念して、自律的に機能するという点もマイクロサービスに欠かせない要素です。 具体的には、個々のサービスはできるだけシンプルにすること、そして複数のサービスがひとつのOSやハードウェアの上で動かないようにすることが重要です。 その理由は後述しますが、とにかく個々のサービスは依存関係が低く、それぞれのサービスの呼び出しはネットワークを介して行われるというのもマイクロサービスの特徴です。f:id:yattachang:20201123053259p:plain 引用先:マイクロサービスとは? そのメリットを簡単に解説(初心者・非エンジニア向け) | NCDC株式会社

弾力性の実装

クラウドはリソースのの性能を柔軟に増減することが可能です。 方法は次の3つ。

  1. 巡回スケーリング
    一定間隔(毎日、週毎等)に発生する定期的なスケーリング

  2. イベントベーススケーリング 自分のWEBサービスにアクセスが多くなるときを予想して実施するスケーリング

  3. オンデマンドの自動スケーリング 監視サービスを利用してスケーリングを行う。

クラウドは、いつでもリソースの増減が可能。
使い捨て可能なリソースとして、サーバーを考えることができる。

並列化を考慮する

クラウドでは繰り返し可能なプロセスを容易に構築できるので、できるだけ同時に複数の処理を行い、さらに可能であれば自動化することを推奨している。

WEBアプリケーションを例にすると、ロードバランサーを利用して、受信リクエストを分散させる。

※スケールインとスケールアウトについて

スケールアウトは,稼働する仮想サーバの台数を増やす機能で,スケールインは,稼働する仮想サーバの台数を減らす機能です。仮想サーバの負荷が増えた場合にスケールアウトすると,負荷を減らせるので,仮想サーバの処理性能を向上できます。 仮想サーバのスケールアウトとスケールイン

動的コンテンツデータは、コンピューターの近く。静的コンテンツデータは、エンドユーザーの近くに保管する。

  • 静的コンテンツは、外部に出してエンドユーザー近くに保管する。 Amazon CloudFrontというサービスを利用すると、世界中にAmazonが配置したサーバー(エッジロケーション)にコンテンツをコピーして、ユーザーからのネットワーク距離の近いサーバーが応答することで、通信の遅延が少なくてすむ。

  • 動的に処理するデータは、クラウド上のコンピューターの近くで保管する。 コンピューターでの処理が必要になるので、このような保管となる。

AWS Well-Architectedフレームワーク

信頼、セキュリティ、効率、コスト効果の高いシステムを設計しクラウドを運用するために作られたアーキテクチャのベストプラクティス。
下記5本の柱を基本としている。

  1. 運用上の優秀性
  2. セキュリティ
  3. 信頼性
  4. パフォーマンス効率
  5. コスト最適化

まとめ

  • クラウドとは インターネット経由で、コンピューター、ストレージ、データベース、アプリケーション等のITリソースをユーザーの要望に応じてサービスを利用できる。

  • オンプレミス サーバーなどの設備を自前で用意し運用するシステム。

  • AWSクラウドコンピューティングのメリットは6つ
    ①固定費が柔軟な変動費
    ②スケールによるコストメリット
    ③キャパシティの予測が不要
    ④速度と俊敏性の向上
    ⑤データセンターの運用と保守が不要
    ⑥数分で世界中にデプロイ可能

  • AWSを活かしたシステム構築では、故障に備えた設計、疎結合、弾力性、並列化、データの保管場所に留意する。

  • AWS Well-Architectedフレームワークとは、信頼、セキュリティ、効率、コスト効果の高いシステムを設計しクラウドを運用するために作られたアーキテクチャのベストプラクティス。

バックアップ・リストアについて

バックアップとは

データ損失に備えて、データを複製しておくこと。

 

リストアとは

データ損失の際に複製したデータから戻すこと。

 

リカバリとは

バックアップデータに処理を加えて、データを正常化、最新化すること。

f:id:yattachang:20201121222612p:plain

※引用先:

バックアップ・リストアについて知ろう | Think IT(シンクイット)

Web3層構造とは(WEBサーバー、アプリケーションサーバー、DBサーバー)

 下記図が非常にわかりやすい。

 

※引用先:

ミドルウェア(Web、AP、DB)について知ろう | Think IT(シンクイット)

 

Railsで、WEBサーバーをNginx、APIサーバーをUnicornにした場合

・クライアントから送られてきた静的なリクエストは、Nginxが処理する

・クライアントから送られてきた動的なリクエストは、Unityが担当し、Railsとやりとりし、Nginx経由でクライアントにレスポンスを返す。

 

 

Unicornとは

Unicornとは

Rubyを利用する際に選ばれるアプリケーションサーバーです。起動の速さ、デプロイする際にダウンタイムが発生しないといった点に定評があり、広く利用されています。

 

アプリケーションサーバーとは 

アプリケーションサーバーのおもな役割は、Webサーバーからの要求(リクエスト)に応じて、アプリケーションを実行することです。


Webサーバーがクライアントからの要求を受け取り、動的コンテンツと判断した場合、アプリケーションサーバーへ処理を投げかけます。


Webサーバーから処理要求を受けたアプリケーションサーバーは、アプリケーションを実行して処理結果をWebサーバーへ返します。


このとき、実行されるアプリケーションの実装内容に応じて、データベースサーバーの情報が必要な場合にはデータを要求します。


アプリケーションサーバーは、アプリケーションのプログラムが正しく実行されるためになくてはならないものです。


この「Webサーバー」「アプリケーションサーバー」「データベースサーバー」という3つのミドルウェアのはたらきを「Web3層構造」といいます。

 

※引用:

サーバーエンジニア未経験者向けの知識3【アプリケーションサーバー】 | テックマガジン from FEnetインフラ

rbenvとは

rbenvとは

rubyのパッケージマネージャー。

rbenvがあると、複数バージョンのRubyが同一のシステム内(PCとか)で共存できる。

そのため、同一のシステム内(PCとか)で異なるアプリを作る場合にも、違うバージョンのRubyを使うことができる。

 

例:

自分のPC内で、AアプリとBアプリを作る。

Aアプリは、Rubyの2.5バージョンを使う。

Bアプリは、Rubyの2.6バージョンを使う。

 

rbenvのバージョンは、Homebrewで管理している。

Hombrewとは

Hombrewとは

パッケージ管理システムの1つ。

 

パッケージ管理システムとは

パッケージやライブラリの導入を単純化するプログラム。

インストールやアンインストールなどの作業を一元管理し、パッケージ同士の依存関係などが管理できる。

 

パッケージとは

機能やコードをひとまとめにした物。

 

ライブラリとは

便利なプログラムの部品をいっぱい集めて、ひとまとめにしたファイルのこと

※引用先:https://wa3.i-3-i.info/word1473.html

 

依存関係とは

こちらで書いている内容がとてもわかり易かった。

 

パッケージ管理システムとは|たかお|note

そもそもソフトウェア同士やライブラリとの依存関係とはどういうものなのでしょうか。

本当は怖くない黒い画面入門(文末参考文献参照)というWebサイトには下記のように書かれています。

一つのソフトが複数のソフトを利用するため、「ソフトAをアップデートしたらソフトB、ソフトCが動かなくなった「という状況が発生します。「ソフトB 5.0にはソフトA 2.0以上が必要「といった関係があるためです。これをソフトの依存関係と言います。

なるほど、特定のバージョンのWebサーバでしか動作しないソフトウェアとかもありますね。

さらに、下記のように書かれています。

無数のソフトの依存関係を手動で管理するのは面倒過ぎるのでPackage Manager(パッケージマネージャー)と呼ばれる種類のソフトがよく使われます。Package Managerは「そのソフトにどのソフトのバージョン何以上が必要か「、「今インストールされているソフトは何か「といった情報を持っているため、必要に応じてソフトを勝手にダウンロードしてきてインストールしてくれます。

なるほど、非常に分かりやすい説明ですね。つまりパッケージ管理システムは「このバージョンのソフトやライブラリはあのバージョンのソフトと互換性があるからそれをインストールしよう」という感じで自動で依存関係を管理してくれるんですね。 

 

Hombrewのその他の利点

パッケージやライブラリをダウンロード・インストールする際、手動ではなくコマンドからダウンロード・インストールすることができる。

※例えば、Macでアプリケーションをインストールする際に、以下の工程となる。

 

  1. アプリケーションを公式サイトからダウンロードする
  2. ダウンロードしたファイルを開き、PCにインストールする 

 

 

Nginxとは

Nginxとは

2002年にIgor Sysoev氏によって開発されたフリーかつオープンソースのWebサーバー(処理速度が速く、高負荷に比較的強い点で有名)

 

Webサーバーとは

HTTPリクエスト(GETメソッド、POSTメソッドなど)を受け取ったときに、HTMLやCSS等の静的なリクエストの処理(レスポンス)をするためのサーバーのこと。

 

動的な処理のリクエストが来た場合は、その処理をアプリケーション・サーバーに依頼する。

 

※公式ドキュメント

nginx ドキュメント 日本語訳