見出し画像

#さくらの夕べ Tech Night #2 Online 雑多書き

 下記のイベントを視聴しながらざっとまとめてみました。

いまさら聞けないNode.js

Node.jsとは
JavaScriptの実行環境の1つ
C10K問題を解決するために作られた
色々な場所で使われている

C10K問題とは?
クライアント1万台問題
1万という数値には特別な意味はない。クライアントの台数が多いという意味

サービスの応答が遅くなる
問題は同時接続数
マシンスペック以外の原因によって遅くなる

原因

プロセス数の上限

画像2

画像3

コンテキストスイッチのコスト

画像4

画像5

ファイルディスクリプターの上限

画像6

画像7

解決方法

サーバ台数を増やす💸

シングルプロセスで捌く
→ 非同期・ノンブロッキングI/O
  非同期処理の記述が複雑になりがち

画像7

Node.jsのアプローチ

シングルプロセス・シングルスレッド
CPUを使わない処理は非同期で行われる

画像8

Node.jsを使うときの注意

非同期処理
- ネストが深くなって見づらい
- コールバック方式だと例外処理を書きづらい
   - Promise, async/await
- 絶対に同期版を使わないこと

グローバル変数
- 全リクエストで共有される
  - 別のリクエストによって突然書き換えられてしまう

リソース管理
- 明示的に解放しないと枯渇し、新しいリクエストを処理できくなる

一部のバグが全体に影響
- 接続が切れてもプロセスは実行され続ける
  - 無限ループを入れてしまうと新しいリクエストを処理できなくなる

CPUを使いまくる
- 1つの関数が終わるまで他のリクエストを処理できない

いまさら聞けないDockerの"hello-world"イメージ

Docker イメージは「1つのファイル」ではなく「概念」。抽象的なイメージ・レイヤの積み重ね

Docker イメージに含まれるもの
Linuxのファイルシステムとアプリケーション、メタ情報

Dockerイメージとイメージ・レイヤの関係
親子関係

画像9

Dockerイメージのダウンロード

画像10

画像11

Dockerコンテナの実行とは、特別な状態でのプロセス実行

画像12

Dockerコンテナ用に読み書きできるイメージ・レイヤ

画像13

画像14

複数のイメージ・レイヤが1つのDockerイメージとして見える

画像15

コンテナ実行時、Dockerイメージのファイルシステムも「/」にマウント

画像16

いくつもの名前空間を分離した状態で実行

画像17

hello-world

画像18

感想

Node.js と Docker 完全に理解した。

2つとも元々別のところで出していたのを今回改めて発表したものみたいですね。なので記事読みながら解説聴けたので理解がしやすかったです(理解したとは言ってない)

イベント後に案内ありましたが、他のイベントも開催されるようです。

ちなみに私はさくらのVPSを2012年から使っていました(現在放置中😅)


😉