![見出し画像](https://assets.st-note.com/production/uploads/images/31838487/rectangle_large_type_2_549ec220b05e8aa3b62bda5cad75a090.png?width=1200)
#さくらの夕べ Tech Night #2 Online 雑多書き
下記のイベントを視聴しながらざっとまとめてみました。
いまさら聞けないNode.js
Node.jsとは
JavaScriptの実行環境の1つ
C10K問題を解決するために作られた
色々な場所で使われている
C10K問題とは?
クライアント1万台問題
1万という数値には特別な意味はない。クライアントの台数が多いという意味
サービスの応答が遅くなる
問題は同時接続数
マシンスペック以外の原因によって遅くなる
原因
プロセス数の上限
コンテキストスイッチのコスト
ファイルディスクリプターの上限
解決方法
サーバ台数を増やす💸
シングルプロセスで捌く
→ 非同期・ノンブロッキングI/O
非同期処理の記述が複雑になりがち
Node.jsのアプローチ
シングルプロセス・シングルスレッド
CPUを使わない処理は非同期で行われる
Node.jsを使うときの注意
非同期処理
- ネストが深くなって見づらい
- コールバック方式だと例外処理を書きづらい
- Promise, async/await
- 絶対に同期版を使わないこと
グローバル変数
- 全リクエストで共有される
- 別のリクエストによって突然書き換えられてしまう
リソース管理
- 明示的に解放しないと枯渇し、新しいリクエストを処理できくなる
一部のバグが全体に影響
- 接続が切れてもプロセスは実行され続ける
- 無限ループを入れてしまうと新しいリクエストを処理できなくなる
CPUを使いまくる
- 1つの関数が終わるまで他のリクエストを処理できない
いまさら聞けないDockerの"hello-world"イメージ
Docker イメージは「1つのファイル」ではなく「概念」。抽象的なイメージ・レイヤの積み重ね
Docker イメージに含まれるもの
Linuxのファイルシステムとアプリケーション、メタ情報
Dockerイメージとイメージ・レイヤの関係
親子関係
Dockerイメージのダウンロード
Dockerコンテナの実行とは、特別な状態でのプロセス実行
Dockerコンテナ用に読み書きできるイメージ・レイヤ
複数のイメージ・レイヤが1つのDockerイメージとして見える
コンテナ実行時、Dockerイメージのファイルシステムも「/」にマウント
いくつもの名前空間を分離した状態で実行
hello-world
感想
Node.js と Docker 完全に理解した。
2つとも元々別のところで出していたのを今回改めて発表したものみたいですね。なので記事読みながら解説聴けたので理解がしやすかったです(理解したとは言ってない)
イベント後に案内ありましたが、他のイベントも開催されるようです。
ちなみに私はさくらのVPSを2012年から使っていました(現在放置中😅)
😉