質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Server+

Server+は、IT業界団体CompTIAが認定しているサーバー業務に関する資格です。サーバーのHW/SW構築・メンテナンス・仮想化など、サーバー運営上の運用・管理において幅広く対応できるスキルを評価します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

2回答

1187閲覧

サーバー連携について

HiruLow

総合スコア55

Server+

Server+は、IT業界団体CompTIAが認定しているサーバー業務に関する資格です。サーバーのHW/SW構築・メンテナンス・仮想化など、サーバー運営上の運用・管理において幅広く対応できるスキルを評価します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2019/10/29 10:19

サーバー負荷分散処理を現在勉強中なのですが、局所的な知識しか判らない為全体像を把握したく質問させていただきます。

・ファイルの共有化について

DBの場合はリードレプリカを使用する事でMasterとなるDB情報を他サーバー内DBと連携させる事ができると聞いたのですが、画像や音楽等のDBへ保存したくないデータの場合はどのようにして負荷分散をすればいいのかわかりません。

・ファイルを生成した際の処理
画像ファイルを生成し、サーバー内の適当なディレクトリに保存したとします。
この際、負荷分散用のサーバーにも同様のファイルを生成する必要があるのでしょうか?

・ファイルの圧縮
一定期間が経過した使用頻度の低いファイルは、圧縮処理をかけたいのですが、サーバー負荷軽減をしていらっしゃる企業等では通常どのような仕組みで対応しているのでしょうか?
個人的に考えた方法としては、Masterとなるサーバーから圧縮対象ファイルを選別し、圧縮処理を行う。その後、連携サーバーでも該当ファイルを圧縮させる。該当のファイルへのリクエストがあった際は、サーバー側で該当のファイルがあるか確認を行い、もし存在しない場合は圧縮用フォルダを参照し該当のファイルのみ解凍、返送を行う。デメリットとして、サーバー側で圧縮フォルダの参照処理を挟む必要が有る。

・NodeJS、SocketIO通信

チャットシステムを取り扱っており、NodeJSのSocketIOを利用しています。
ソケット通信を負荷分散し、各情報を互いに連携させる方法を学びたいです。
現在、各Javascriptファイル内に入室情報用の変数を定義し、同ファイル内にチャットサーバーを立ち上げています。負荷を分散させる場合、おそらくロードバランサに該当のチャットサーバーアドレスを登録し、各負荷分散用サーバーに立ち上げる事で実現できるかと存じますが、ここで以下2点の不明点があります。

・変数の共有化
上記の【Javascript内に変数を定義している状態】のままですと、各サーバー間で変数の状態が違う状態になってしまいます。変数を共有化させるには何を勉強すればよろしいでしょうか、ヒントをいただけると助かります。

・NodeJSからDBへのリクエスト
NodeJS上からMysqlへの通信処理を挟む必要が有り、主にselect,Update処理が必要となります。
リードレプリカではSelect処理を軽減させる事ができると聞いたのですがUpdate処理等の変更手続きを行う場合、どう対応すればいいのか教えていただきたいです。

・サーバーの選び方

AWSが負荷軽減機能も備わっており便利とゆう記事を見かけたのですが、もし複数のサーバー連携を考えているならここがいいよ?等のおすすめがありましたら教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

  • ファイルの共有化について

そもそもの考え方として、極力サーバに状態をもたせることをやめることから検討していきましょう。
WEBサーバ内部にデータを保存すると、仰るとおり何らかの形で別のWEBサーバに同期する必要がでてきます。
しかし、S3を使う、EFSを使うなどして1台のWEBサーバのみにデータがあるという状態にしないようにしましょう。
1台のサーバ固有の情報があるとスケールアウトもできなくなります。WEBサーバ自体にMaster,Slaveというものを作るのではなく、どのサーバを参照しても同じものが返ってくるようにすべきです。
そうすることによってELBを使って用意に負荷分散が可能になりますし、Auto Scalingをすることもできるようになります。
ファイルの圧縮についてはディスク上に置くなら何らかの判定基準を作ってスクリプトで圧縮するしかないでしょう。
S3に置くなら、圧縮とはちょっと違いますがストレージクラスを適切に設定することによって料金を節約することが可能です。
ライフサイクルポリシーを設定して、Glacierに移行してもいいですが、それはファイルの特性次第です。

DBの場合はリードレプリカを使用する事でMasterとなるDB情報を他サーバー内DBと連携させる事ができる

それは少し違うような…。
RDSにおけるリードレプリカはMasterのデータベースをレプリケーションして読み込みのみを許可したインスタンスです。
主な用途は読み込みの負荷軽減です。
そもそもデータベースをWEBサーバ以外のところに置くことにより複数のサーバから同じデータを参照することができるようになるので、リードレプリカとは直接は関係ありません。

  • SocketIOについて

これは質問の系統が少し変わるので別の質問を立てたほうがいいのではという気がしますが…。
NodeJSはあまり良くわからないので一般的な話をすると、↑に書いたことと同じでどのサーバからでも同じ情報が参照できる必要があります。
なので、サーバ固有の情報にならないようにサーバの外に情報を出しましょう。
実際の実装があまりよくわかってないですが、アプリケーションで使うならKVS(Elasticacheのインスタンスを立てるなり、DynamoDBを使うなり)に一時保存するか、用途によってはParameter Storeを使ってもいいかもしれません。

リードレプリカではSelect処理を軽減させる事ができると聞いたのですがUpdate処理等の変更手続きを行う場合、どう対応すればいいのか教えていただきたいです。

こちらについては↑に書いたとおりで、リードレプリカは読み込みしかできないので書き込みはMasterのほうに投げる必要があります。

  • サーバの選び方

要件がざっくりしすぎていてそもそも何を聞きたいのかがわかりません。
基本的には必要なスペックを満たすようなものなら何でもいいですけど、小さめのインスタンスを使っておいて不足があればより大きいサイズのものに変えればいいのではないでしょうか。

投稿2019/10/30 02:34

yu_1985

総合スコア7440

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

一部、回答させてください。

■ファイルの共有化と、処理について

画像などのファイルは、AWSの場合、S3へ保存をするのがいいのかと思います。
EC2上のEBS(SSDのディスク)よりも、結果的に負荷分散になり、冗長性も向上します。

■ファイルの圧縮

使われなくなったファイルを圧縮という方法より、
AWS上であれば、通常は、S3に保存をして、時間が経過したファイルは、
通常の「S3」よりも、低価格な、「S3 Glacier」へ移行をするのがいいのかと思います。
「S3」から「S3 Glacier」へは、自動でもできますし、API経由、画面から手動でも移行することが出来るかと思います。

投稿2019/10/29 14:09

OneOneAdmin

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問