WEBアプリ開発に関する技術を綴るブログ

php,js,apache,mysql,laravel,fuelphpあたりの技術

監視〜用語集〜

用語

*スループット(throughput) 処理能力のこと。 一定時間にどれだけのデータを転送できるか。通信速度を意味している。

*Apache MPM(マルチプロセッシングモジュール) 下記の種類がある。

■prefork

Apache HTTP サーバ1.3系以前のモデル ・1つのリクエストに対して、1プロセスを割り当てる ・負荷に応じて、子プロセスを増減

あらかじめ複数のプロセスを用意して、クライアントからのリクエストを待ち受けます。 用意したプロセス数を超えるリクエストが要求された場合、新たにプロセスを生成して、 クライアントからのアクセスに対応します。

HTTPリクエスト → プロセス HTTPリクエスト → プロセス HTTPリクエスト → プロセス

■worker

・スレッド対応型 ・リクエスト処理は、スレッドが対応する ・負荷に応じて、子プロセス数を増減させる ・1子プロセスあたりのスレッド数は固定

■event

・workerの一種でマルチスレッドで動作する ・keep-Aliveの処理を別のスレッドに割り振って通信を処理

■perchild

・スレッド対応型 ・リクエスト処理は、スレッドが対応する ・負荷に応じて、スレッド数増減 ・子プロセスの数は固定

■winnt

・スレッド対応型 ・リクエスト処理は、スレッドが対応 ・Windows NTに特化したスレッドモデル

*プロセス 実行されるバイナリ 1つ1つの実行中のアプリケーションをメモリ(RAM)の領域内に一時的に入れたデータ。 スマホやパソコンの動作が重い場合はメモリ領域がプロセスに消費されている可能性あり。 メモリ(RAM)の容量が多いほど、アプリケーションを立ち上げる数が上がり処理が速くなる。

*スレッド OSのプロセススケジューラがスケジューリングできる最小の実行単位 プロセスの処理方法を並行動作可能にすること。 シューティングゲームのプロセスを実行中の場合、 主人公、敵、弾などの複数の処理を複数に処理したい場合に使われる。 1.クライアント側(ブラウザなど)からフォームを送信する 2.サーバー側でデータをデータベースに挿入したり、必要なデータを取り出す 3.取り出したデータを計算したり、加工するなどして表示する

イベントループモデル:店員一人が客二人の処理を行う。 スレッドは増えないからCPUの面でいうとスレッドモデルより有利

スレッドモデル:もう一人店員が出てきて会計をする(スレッドを複製して処理を行う) スレッドが複製された分CPUを食う

*プロセスとスレッドの違い

特徴

・プロセス:リソースを共有できない。ロックかけたりしないといけない。プロセス間通信もできる。

・スレッド:メモリやオープン中のファイルなどのリソースを共有することができる。競合が問題になる。 生成方法 ・プロセス:親プロセスからforkで子プロセス生成

・親プロセスからpthread_createでスレッド生成

データ保持

切り替える場合

メモリに保持する情報

処理速度

データの安全性

並列処理の動作

*CDN(コンテンツ・デリバリ・ネットワーク) コンテンツを配信するためのネットワーク 単にファイル(画像やZIPファイル等)をダウンロード配信するための技術 動画配信=CDN WEB高速化=CDN ではない 世界中に張り巡らされたCDN専用の配信ネットワーク(CDNプラットフォーム)を利用して、 Webサイトにアクセスしようとするエンドユーザに最も近いPoP(配信拠点)から効率的かつ高速にWebを配信する仕組み

例)ヨーロッパの企業、ヨーロッパのサーバ a.CDNなし アメリカ人がヨーロッパの企業のwebサイトからファイルをダウンロードすると、 遠いサーバからのダウンロードとなるので遅い

b.CDNあり アメリカのキャッシュサーバからダウンロードできるので早くなる

日本人が海外のwebサイトを見るのは、HOP数が多いため往復の時間がかかる

仮想IPアドレス

・複数の機器で共有されるIPアドレスのこと。

・外部からの接続窓口となる負荷分散装置(ロードバランサ)などに設定するIPアドレスのことを仮想IPアドレスということもある。

CPU

CPUの仕事量の確認。 正常時:使用率が90%未満で安定稼働 異常時:90%超えが長時間継続してる時

・リソースの説明

System: システム(カーネル)プロセスの使用時間の割合 システムプロセス マルチタスクOSにおいて、OSの機能を実現するためのプロセス。 たとえばUNIXのデーモンなどが、システムプロセスの例である (ただし、デーモンだからといってシステムプロセスだとは限らない) デーモン UNIX系のOS(LinuxMac)における常駐プログラムの呼び名。 Windowsにおけるサービス メモリ上でお仕事来るのを待って、お仕事がくると素早く実行、終わるとまた待機する。 http"d"やsyslog"d"など、"d"が付いてたらデーモンと判断

User: ユーザプロセスの使用時間の割合。ユーザ空間(アプリケーション)でCPUが使われた時間の割合。

Nice: 実行優先度を変更したプロセス使用時間の割合IO 。 nice値が変更されたプロセスにより、ユーザ空間でCPUが使われた時間の割合。 *nice値:実行中のプログラムの優先度。実行中のプログラムの優先度を変更するコマンド renice。

Wate: CPUがディスクI/Oの終了待ちをしていた時間の割合

Hard IRQ:ハードウェア割り込み要求での使用時間の割合

Soft IRQ:ソフトウェア割り込み要求での使用時間の割合

Steal Time: OS仮想化利用時に他のCPUの計算に待たされた割合

オリジンサーバ

HTTP用オリジナルコンテンツを保管しているサーバ

キャッシュサーバ

CDNにより提供される、コンテンツ配信用のサーバー

マルチコアCPU

コアが複数あるCPU(パソコンの脳みそ)のこと

シングルコアCPU

脳みそが1つしかないので、並行処理はできない。

ロードアベレージ

『仕事中のプロセスの数+待ち状態のプロセスの数』の平均値

エッジサーバ

CDNサーバのこと

オリジン⇄エッジサーバ⇄エンドユーザ

CDNであればスマートキャッシュ技術によりオリジンへのリクエストが減るため、 オリジンの負荷を軽減させることができる。

エンドユーザ⇄グローバルサーバ・ロードバランサ⇄(CDNサーバ群(エッジサーバ)⇄Webサーバ(オリジンサーバ)

コンテンツのキャッシュがない場合に、CDNサーバがWebサーバへリクエス

サーバー監視

・異常監視

・正常監視

サーバー監視方法

・死活監視

サーバーが停止することなく動いているかを監視する。 監視する側からPINGというコマンドを送って、一定期間に監視対象サーバーから 応答があるかないかでサーバー自身が停止してないか確認

・ハードウェア監視

サーバーやネットワーク機器の物理的な故障がないかを監視

・負荷状態監視(パフォーマンス監視)

サーバーの負荷状況を監視。 ・CPU使用料 ・メモリ使用料 ・ハードディスク使用料 ・ネットワーク使用料 の閾値が超えてないかを監視する。

・アプリケーション監視

サーバーに搭載されているアプリケーションが正常に動作しているかを監視。 プログラムを動作させる「サービス」や、 外部アクセスとプログラムの情報のやり取りを行う「ポート」を監視。

・ネットワーク監視

サーバーやネットワーク機器間のネットワークに異常が無いかを監視。 閲覧者からサーバーまでのネットワーク疎通に問題がないか確認

サーバー監視ツールの種類

商用製品] ・監視以外の機能も充実 ジョブ管理、資源配布管理のようなシステム運用で必要な機能を統合した 作りとなっている場合が多く、システム全体の管理に有効です。

・ツールの価格が高い 機能が充実してる分ハイコスト。大規模システムでの利用を想定してるので、 販売数が少なく価格は高め。

OSS ・自由度が高い分OSS知識や運用担当者の技術力が必要 ・建築費用やサポートコストがかかる場合がある ・監視機器の台数が中小規模向けの場合がある。

LoadAverage

システム全体の負荷状況を表す指標。 1CPUにおける単位時間あたりの実行待ちとディスクI/O待ちのプロセスの数 実行プロセス数(実行中プロセス数+実行可能プロセス数) システムのスループットをあげたい場合は、ロードアベレージを下げる

Load Averageが高い≒サーバ負荷が高い≒重い≒応答速度が遅い

正常時:CPUのコア数未満の数値 異常時:CPUのコア数以上の数値

プロセスの状態 TASK_RUNNING->CPUが割り当たれば実行可能な状態。CPUが割り当たって処理実行中もこの状態に当たる。(実行中のプロセスはロードアベレージの数値には換算されない) TASK_INTERRUPTIBLE->割り込み可能な待ち状態。sleepやユーザーからの入力待ちなど。 この状態のプロセスはロードアベレージには換算されない TASK_UNINTERRUPTIBLE->割り込み不可能な待ち状態。ディスクのI/O待ち TASK_STOPPED->サスペンドのシグナルが送られて実行中断になっている状態 TASK_ZOMBIE->子プロセスがexitして親プロセスにリープされるまでの状態

CPU Multi

CPUの1コアあたりの使用率 (8コアのCPUなら、CPUを8つ搭載していることと同義 正常時:使用率が90%未満で安定稼働 異常時:突発的に使用率が90%を超える場合など

Block I/O

正確にはBlockDevice I/O 入出力が終わるまで他の処理が一旦止まる 具体的には,ハード・ディスクやCD-ROMドライブ, フロッピ・ディスクなどのディスク装置全般がブロック・デバイスです。 block inはinputなので入力(読み込み) block outはoutputなので(書き込み) 正常時:エクイ二クスのVMなら,3k未満 異常時:エクイニクスのVMなら,3k以上

ノンブロッキングI/O

入出力中も他の処理を行うけど、入出力が完了しないとできない処理になった場合はそこで待っててもらう。 Node.jsでは、ノンブロッキングI/Oと呼ぶ。 何かの処理前に、処理待ちが発生する場合、すぐに関数から何か返って来るという処理。 ノンブロッキングをより理解するには、ブロッキング処理(同期処理)、非同期処理を理解する必要がある。 プロセスをブロック状態にさせないから、ノンブロッキング ノンブロッキングブロッキング処理(同期処理)と異なり、並行して別の処理を行う事が可能。 非同期とは異なる。 店員(スレッド),レジ(CPU),客(リクエスト) シングルスレッド×ノンブロッキングIO 店員がレベルアップし、お弁当の温め中に次のお客さんの会計を行う事が出来るようになる。

Swap I/O

メモリに乗り切らないキャッシュを書き込む領域 実体はHDDやSSD swap inはinputなので入力(読み込み) swap outはoutputなので(書き込み) 正常時:0 異常時:常時発生 突発的に数MB単位で発生 ハードディスクの一部をメモリっぽく使うことで、実際のメモリより大きなメモリがあると錯覚させる技

・見方のコツ メモリに余裕があれば、まず発生しない 正常時は0といったが、多少発生していても気にしなくていい

異常時 メモリが足りない ->スワップが激しく怒る ->Block I/Oが激しく怒る ->サーバが応答しなくなる ->サービスが止まる

Memory

揮発性のストレージなので、再起動するとデータは消える。 Linuxは空きメモリをファイルキャッシュで使うのでfreeが少なくても慌てないこと。

*メモリ装置は内部の半導体素子の動作原理の違いにより、 通電している間だけ記憶内容を維持できる揮発性メモリと、 電源を切っても内容が失われず永続する「不揮発性メモリ」(non-volatile memory/不揮発メモリ)に分かれる。

・搭載メモリの使い道を表している 正常時:CacheとBuffersとFreeがグラフを占めている。 異常時:グラフの最大値が実搭載メモリより大幅に低い

MemoryFree 何の用途にも使っていない物理メモリ量 MemoryBuffers ファイルなどのメタデータをキャッシュしている物理メモリ量 MemoryCache ファイルのデータ本体をキャッシュしている物理メモリ量

Traffic

ネットワークを流れる情報(量)。ネットワークリソース。 転送速度を帯域という。 Inbound はクライアントからサーバへ転送する通信量 Outbound はサーバからクライアントへ転送する通信量 正常時: Webサーバへのアクセス数などと比例した波 異常時: 相対的に観測する 平時の数倍なら異常

95th Percentail -> 95パーセンタイル -> 計測値の分布(ばらつき)を小さい数字から大きい数字に並べ変え、パーセント表示することによって、小さい数字から大きな数字に並べ変えた計測値においてどこに位置するのかを測定する単位。例えば、計測値として100個ある場合、5パーセンタイルであれば小さい数字から数えて5番目に位置し、50パーセンタイルであれば小さい数字から数えて50番目に位置し、95パーセンタイルであれば小さい方から数えて95番目に位置する。

要するに、上位5%のデータは無視する単位。 突発的なトラフィック増をカウントしない。 CDNの料金はこれを基に計算。

異常時のグラフは社内のルーター。異常ってほどではないが、突発的なDLが発生している模様。

TCP Session

2台以上の通信機器間の半永久的な双方向情報交換 Current Establish を気にする事が多い このグラフの数値だけ上がることは少ない 正常時: Webサーバへのアクセス数などと比例した波 異常時: 相対的に観測する 平時の数倍なら異常

・リソースの説明 OSIの7階層モデルで言えば,第5層「セッション層」の機能。端末の間でセッションができると,通信に使うアプリケーションがデータ転送可能な状態になる。 例えば ssh接続やDB接続など

ちなみに・・・ コネクションは,そのセッションでデータ転送を行うための論理的な回線のことです。通常は第4層「トランスポート層」のTCP(transmission control protocol)での「TCPコネクション」を指すことが多い。 一つのセッションに一つのコネクションしかないこともあるが,一つのセッションに複数のコネクションが存在する場合もある。 コネクションはセッションによって管理される。

Current Established 現在の通信が確立しているセッションの数 データ転送が行える状態 Active Openクライアントは、サーバーに処理を依頼するとき、相手サーバーに対して、コネクションをオープンする Passive Openクライアントからの要求を、随時受け付けられるように、予め、自ホスト内で、コネクションをオープンしておくこと

・見方のコツ WiFiサーバは、バックエンドシステムへAPI接続するため、アクティブオープンも一定数ある。 サーバの場合は、パッシブオープンのみということもよくある。

異常時:ファイルを大量に生成してNASに転送しているので、ソレだと思う。バッチ処理

TCP Errors

TCP接続の切断や再送などをまとめている セグメント:プロトコルごとに規定されている制御情報を格納するヘッダと、 相手に届けるデータを連結したPDU(Protocol Data Unit)のこと(トランスポート層

正常時: 多少は気にしなくても良い 異常時: 遭遇経験なし

・リソースの説明 Attempt Fails ->接続に失敗した総数 Estab Resets -> established resets ->リセットされた総数 Retrans Segs -> retransmission segment -> 再送したセグメントの総数 In Errors -> 受信したエラーセグメントの総数 Out Resets ->送信したセグメントのうちRSTフラグを設定したもの(コネクションをリセットした)の総数

アプリケーション層:データ トランスポート層:セグメント インターネット層:パケット ネットワークインターフェース層:フレーム

Process Switch

複数のプロセスを(あたかも)同時に動かすために必要なしくみ OSで実装 このグラフの数値だけ上がることは少ない 正常時: Webサーバへのアクセス数などと比例した波 異常時: 相対的に観測する 平時の数倍なら異常

・リソースの説明 Context Switch 複数のプロセスが1つのCPUを共有できるように、CPUの状態(コンテキスト)を保存したり復元したりする過程のこと Interrupts 割り込みの主な目的は周辺機器からの情報を、他の作業をしながらも取り落とすことなく受け取ること        例えばキーボードやマウスの入力

Processes プロセスの数 このグラフの数値だけ上がることは少ない 正常時: サーバ設定にもよるが、一定の波 異常時: 相対的に観測する 平時の数倍なら異常

・リソースの説明 fork 新しいプロセス生成に必要なシステムコール コストはそれなりに大きい

Disk Space

記憶装置 不揮発性のストレージなので、再起動してもデータは維持 残り容量に注目 正常時: 一定の値 ゆるやかな上昇傾向 異常時: 90%を超えた時 突発的に使用量が上昇した時

・見方のコツ ディスク容量が100%になると・・・ SSH接続など、OSへのアクセスも不可になることがある。

Apache Process

Apache のプロセスの数 設定で最大値の定義可 重要グラフ server-status という、Apacheの機能で取得 正常時: 日々似たような傾向の波になる 異常時: 平時の数倍なら異常 設定値以上の数値を記録

busy 子プロセスの状態(使用中) idle 子プロセスの状態(待機)

異常時 同時接続により、障害が発生することもある。例:ワンピースタワー

アクセス殺到、サーバがダウンするとか過負荷で重いというのは、同時処理が多すぎて処理しきれないことが主な原因。 上限に達すると新規接続は確立できなくなる(ブラウザ真っ白)。 アクセス数が少ないのに同時接続が多い場合、処理自体が遅くないか、接続を開放していないかサーバ設定やプログラムを見直す必要がある。

Apache Throughput

一定時間にどれくらいのお仕事を処理できるか。 Webサーバの応答時間を含めた、単純なログの行数 重要グラフ 画像、JS、CSSも含む(設定次第) 正常時: 黄色(応答2秒以下)のグラフが大半を占めている 異常時: 平時の数倍なら異常(DDoSなど) 濃い色のグラフが目立つ(応答遅延)

・見方のコツ 色のこさが分かれているが、応答時間によって分けている。 全て黄色(2秒以下)なら文句なし。 濃い色がグラフの大半を占めてくると、パフォーマンスに問題あり

ちなみに赤は400番台のエラー

WiFi うっすらと遅延がみえるが安定

ワンピ 突発的にスループット上昇が見られる(単なるプロモーションだと思うが) エラーが多く見られる 安定して8秒以上の遅延が発生している

MySQL Threads

MySQLのスレッド数

基本的にはユーザが直では使わず、他のプロセスから関節的に使われることが多いため、 数値が上昇するときは別のリソースも上昇していることが多い

正常時: Webサーバへの接続数と似たような波形 異常時: 相対的に観測する 平時の数倍なら異常

・見方のコツ サーバの設定値以上になると、待ちが発生する。 Apacheの応答が大きく遅延することも。

Connected:現在の接続数 Running:スリープ状態になっていないスレッドの数

MySQL Throughput

一定時間にどれくらいのお仕事を処理できるか。 MySQLスループット(MyISAM) 実は古いグラフ。。InnoDBの数値は取れないので、あまり意味は無い もちろん、MyISAMを利用している場合は波形が現れる 正常時: Webサーバへの接続数と似たような波形 異常時: 相対的に観測する 平時の数倍なら異常

・見方のコツ WiFiMyISAMも利用している(セッションテーブル) 正常のグラフで突発的にスループットが上昇しているが、恐らくセッションテーブルのガベコレ

MySQL Scan and Lock MySQLのスキャンとロックの数(MyISAM) 実は古いグラフ。。InnoDBの数値は取れないので、あまり意味は無い もちろん、MyISAMを利用している場合は波形が現れる 正常時: 例のグラフ程度なら問題なし 異常時: 遭遇経験なし

補足 InnoDBの値を見たい場合は、Percona Monitoring Plugins for Cacti を使うと良い。 https://www.percona.com/doc/percona-monitoring-plugins/LATEST/cacti/index.html

プロセスID (PID)

プロセスに割り振られた管理用の番号

API

API サービスのデータを外部のアプリケーションやプログラムから扱うために機能を 提供するインターフェースです。

・ある一つの機能に特化したプログラムで共有可能なもの ・ソフトウェアの機能を共有する仕組み

API利用例 ・ ・ ・ ・

Web API HTTP通信によってやりとりを行うAPI。 リクエストとレスポンスによってやりとりする。 Twitter APIで独自のTwitterクライアントを作る、 Amazon APIを利用して自分のサイトに最新の商品情報を掲載できるのは、 TwitterAmazonが、APIを外部に向けて公開してるから。

Web API 用途

Web APIの種類

Web API 使い方 Web APIを提供する企業のWebサイトから利用登録を行ってAPIキーを取得。

Web APIを活用する上で必要な知識 HTML 5,CSS,JavaScript

REST API RESTの原則にそった形で設計されたAPI GETまたはPOSTでリクエスト送信、レスポンスをXMLデータで受け取る方式

API提供企業

Twitter REST API Cybozu REST API Github API

SOAP API リクエストもレスポンス共にXMLフォーマットのデータで行う形式

テストの種類

なぜテストが重要か

テストの目的 1.バグ発見 2.品質保証 3.品質改善

この中で最重要は目的は1.バグを発見すること

バグを防ぐには

テスト種類

単体テスト

クラスや関数といった単位のプログラムのテスト

・機能確認テスト 一つのモジュールが設計書や仕様書通りに動作するか確認する

・制御フローテスト プログラムの論理構造に沿って、命令や分岐などが実行されるか確認

・データフローテスト データや変数が「定義」「使用」「消滅」の順に行われているかを確認

結合テスト 単体テストで検証したプログラムを組み合わせて行うテスト ・状態遷移テスト 状態遷移図や状態遷移表に基づいて動作を確認

機能テスト 結合したプログラムを一つの機能として行うテスト ・機能確認テスト

システムテスト

個々のプログラムや機能を結合したプログラムが仕様通りに動くかを検証する為のテスト ・確認テスト -回帰テスト 修正・変更した後に、変更箇所が正しく動くかを確認

-デグレードチェックテスト 修正・変更を行った後に、新たな不具合が生まれてないかを確認

・評価テスト -セキュリティテスト 悪意のある外部からの攻撃への対応や脆弱性が存在しないかを確認する為のテスト

-ユーザビリティテスト 操作性,学習性,理解性,見やすさといったユーザーに対しての使いやすさを確認

-障害許容性テスト 障害が発生した場合に指定された機能が維持されていることを確認

・負荷テスト -性能テスト 処理能力が仕様を満たしているか確認

-ロングランテスト 長時間の連続稼働によって処理能力や稼働率に問題が生じないかを確認

-負荷テスト 極端に高い負荷をかけた状況下での動作を確認

ユーザによるテスト ・受け入れテスト 対象のシステムがユーザーの要求を満たしているか確認

・運用テスト 実際の操作環境下でシステムが正しく動くかを確認

・アルファテスト 開発者以外の人が操作して、不具合がないかを確認

ベータテスト 発売・リリース前の製品を開発者以外の一般ユーザーが操作して、不具合がないことを確認

テスト技法

ホワイトボックステスト ・制御フローテスト ・データフローテスト

ブラックボックステスト

システムの内部構造を意識しないテスト ・機能テスト ・システムテスト

ブロックチェーン

ブロックチェーン(分散型取引台帳)

ブロックチェーンの仕組み

ブロックチェーンの種類

パブリック型(パブリックチェーン)

プライベート型(プライベートチェーン)

ブロックチェーンのメリット

中央集権化による障害を防ぐ

海外送金が安くなる

データの改ざんが不可能

ブロックチェーンの歴史

ブロックチェーンエンジニア

a.ブロックチェーン自体を実装するエンジニア

b.ブロックチェーンを使いこなして開発をするエンジニア

企業のブロックチェーン活用例

米国ブロックチェーン企業

米国マイニング企業

米国フィンテック企業

国内ブロックチェーン企業

国内マイニング企業

国内フィンテック企業

トークンエコノミー

マイニング

暗号通貨著名人

暗号通貨が普及している国

XEM盗難事件

モナコイン 51%攻撃

ビットコイン

イーサリアム

ビットコインキャッシュ

リップル

暗号通貨愛好家が集まるシェアハウス

ブロックチェーンや暗号通貨でよく目にする用語

ハッシュパワー:マイニング時に行われる修理能力

マイニング(採掘)難易度調整:マイニングによるブロック生成の際の難易度の指標

ハッシュレート(採掘難易度):

プルーフ・オブ・ワーク(PoW):

ナンス値:使い捨てのランダムな32ビットの値

ハッシュ値:

ハッシュ関数:入力した値に対して、まったく別の値が出力されるという暗号方式

ビット:コンピュータで扱う情報の最小単位