SDN

概念

システム設計の基礎概念を体系的に学べます。図解付きの詳細と腕試しクイズへ。

基礎概念

5
性能 vs スケーラビリティ
「速さ」(性能)と「混んでも捌けること」(スケーラビリティ)は別問題。リソースを足した分だけ性能が伸びるなら、そのシステムはスケーラブルだと言える。
クイズ 10Performance vs Scalability
レイテンシ vs スループット
レイテンシは『1件を終えるまでの時間』、スループットは『単位時間あたりに捌ける件数』。一般に、許容できるレイテンシを保ちつつスループットを最大化することを目指す。
クイズ 2Latency vs Throughput
プログラマが知っておくべきレイテンシ数値
L1キャッシュ参照0.5nsから大陸間往復150msまで、各操作にかかる時間の桁感を覚えておくと、設計の概算見積もりが一瞬でできる。『メモリは速くディスクは遅い、同一DC内は速く大陸間は遅い』の桁を体に入れる。
クイズ 3Latency Numbers Every Programmer Should Know
2のべき乗表
2^10≒1千(1KB)、2^20≒100万(1MB)、2^30≒10億(1GB)、2^40≒1兆(1TB)という対応を覚えておくと、容量やデータ量の概算見積もりが暗算でできるようになる。コンピュータは2進数なので、10ビット増えるごとに約1000倍。
クイズ 4Powers of Two Table
概算見積もり
封筒の裏でやれる程度のざっくり計算で、QPS・ストレージ・帯域の規模感を素早く出す技術。『1か月≒250万秒』『40req/s≒1億req/月』などの換算を覚えておくと、システム設計面接で要件から必要リソースを即座に見積もれる。
クイズ 4Back-of-the-Envelope Calculation

一貫性と可用性

4

ネットワーク

4

アプリケーション層

3

データベース

13
リレーショナルデータベース(RDBMS)
データを行と列のテーブルで管理し、トランザクションがACIDを満たすデータベース。整合性と複雑なクエリに強い。MySQL / PostgreSQL など。
クイズ 16Relational Database (RDBMS)
マスター・スレーブ レプリケーション
1台のマスターが書き込みを受け、その内容を複数のスレーブにコピー。スレーブは読み取り専用にして、大量の読み取りを分散する。読み取りが多いシステムに有効。
クイズ 0Master-Slave Replication
マスター・マスター レプリケーション
両方(以上)のマスターが読み書きを受け付け、互いに変更を同期し合う構成。片方が落ちても書き込みを続けられるが、書き込み競合の解決という難問が生じる。
クイズ 0Master-Master Replication
フェデレーション(機能別分割)
1つの巨大DBを、機能(役割)ごとに別々のDBへ分割する手法。例: ユーザー用DB、商品用DB、フォーラム用DB。各DBが小さくなり、読み書きとレプリ遅延が減る。
クイズ 5Federation (Functional Partitioning)
シャーディング(水平分割)
1つの巨大テーブルを行で分割し、複数のDB(シャード)に分散する手法。各シャードはデータの一部だけを持つ。例: 姓の頭文字や地域で分ける。書き込みもスケールできる。
クイズ 8Sharding
非正規化(デノーマライゼーション)
あえてデータの冗長なコピーを複数テーブルに持たせ、重いJOINを避けて読み取りを高速化する手法。読み取りが圧倒的に多いシステムで、書き込み性能を犠牲に読み取りを稼ぐ。
クイズ 5Denormalization
SQLチューニング
計測(ベンチマーク)とボトルネック特定(プロファイル)を起点に、スキーマ・インデックス・クエリを最適化してDBを速くする手法。新しいハードを足す前にまずやるべきこと。
クイズ 4SQL Tuning
NoSQL
リレーショナルでない4種(key-value / document / wide-column / graph)の総称。データは非正規化され、JOINはアプリで行う。多くは厳密なACIDより可用性・結果整合性(BASE)を優先する。
クイズ 10NoSQL
キー・バリュー ストア
『キーを渡すと値が返る』という最もシンプルなNoSQL。ハッシュテーブルが抽象モデルで、O(1)の超高速な読み書きができる。キャッシュやセッション保存の定番。
クイズ 0Key-Value Store
ドキュメントストア
キーに対して『ドキュメント』(JSON/XMLなどの構造を持つ塊)を値として格納するNoSQL。ドキュメントの中身でも検索でき、柔軟なスキーマを扱える。MongoDB / DynamoDB など。
クイズ 0Document Store
ワイドカラムストア
列(カラム)を基本単位とし、ネストしたマップでデータを表すNoSQL。超大規模・高可用に強く、巨大なデータセット向き。Bigtable / HBase / Cassandra が代表。
クイズ 2Wide-Column Store
グラフデータベース
ノード(点)とエッジ(線=関係)でデータを表すNoSQL。『友達の友達』のような複雑な関係をたどる処理に圧倒的に強い。SNSやレコメンドに最適。Neo4j など。
クイズ 0Graph Database
SQLとNoSQLの選択
整合性・複雑なクエリ・成熟度が要るならSQL、柔軟なスキーマ・超大規模・超高スループットが要るならNoSQL。用途で使い分ける(両方併用も普通)。
クイズ 5SQL or NoSQL

キャッシュ

3

非同期処理

3

通信プロトコル

5

セキュリティ

11
セキュリティの基礎
システム設計で最低限押さえるべきセキュリティの基礎4点。通信と保存の暗号化、入力のサニタイズ、パラメータ化クエリ、最小権限の原則。
クイズ 47Security Basics
OWASP Top 10
OWASP(世界中の専門家が運営する非営利団体)がまとめた『Webアプリで最も危険な脆弱性ワースト10』。2021年版が現行で、面接では『A01は何?』『この攻撃はどのカテゴリ?』と問われやすい定番リスト。
クイズ 18OWASP Top 10
認証 vs 認可
認証(AuthN)は『あなたは誰か』を確認すること、認可(AuthZ)は『あなたは何をしてよいか』を決めること。順番は必ず認証→認可。セッション・JWT・OAuth2・OIDC・mTLSの使い分けが面接頻出。
クイズ 7Authentication vs Authorization
暗号化
データを守る暗号の基礎。守る場所(転送時/保存時)、鍵の方式(対称/非対称)、パスワード保存(ハッシュ+ソルト+bcrypt/Argon2)、通信路の保護(TLS)を押さえる。『パスワードを暗号化』は減点表現で、正しくは『ハッシュ化』。
クイズ 8Cryptography
クロスサイトスクリプティング(XSS)
攻撃者のJavaScriptを他のユーザーのブラウザで実行させる攻撃。Cookie窃取やなりすましに使われる。根本対策は『出力時のエスケープ』とCSP。OWASPでは A03 Injection に分類される。
クイズ 2Cross-Site Scripting (XSS)
クロスサイトリクエストフォージェリ(CSRF)
ログイン済みのユーザーのブラウザを悪用し、本人が意図しないリクエスト(送金・設定変更など)を勝手に送らせる攻撃。Cookieが自動送信される性質を突く。防御はCSRFトークンとSameSite Cookie。
クイズ 2Cross-Site Request Forgery (CSRF)
SQLインジェクション(SQLi)
ユーザー入力をSQL文に文字列連結することで、攻撃者にSQLの構造を改変されてしまう攻撃。認証回避・情報窃取・データ破壊につながる。根本対策はパラメータ化クエリ(プリペアドステートメント)。OWASPでは A03 Injection。
クイズ 1SQL Injection (SQLi)
サーバサイドリクエストフォージェリ(SSRF)
サーバに任意のURLへリクエストを送らせる攻撃。特にクラウドのメタデータエンドポイント(169.254.169.254)を叩かせて認証情報を盗むのが典型。OWASP A10(2021新設)。防御は宛先allowlistと内部IP遮断、IMDSv2。
クイズ 1Server-Side Request Forgery (SSRF)
オリジン間リソース共有(CORS)
ブラウザの『同一オリジンポリシー(別サイトのデータを勝手に読ませない)』を、安全な範囲で緩めるための仕組み。攻撃ではなく許可の制御。設定を緩めすぎる(特に `*` + credentials)と逆に脆弱になる。
クイズ 1Cross-Origin Resource Sharing (CORS)
APIセキュリティ
APIを守るための要点: レート制限(枯渇・総当たり・課金爆発の防止)、強い認証・認可、サーバ側の入力検証、シークレット管理。OWASP API Security Top 10(2023)では BOLA(IDOR) が最大リスク。
クイズ 7API Security
ゼロトラスト & mTLS
『社内ネットワークだから信頼する』という境界型防御をやめ、すべてのアクセスを毎回検証する考え方(never trust, always verify)。mTLS(相互TLS)で通信相手も証明書で認証し、最小権限を徹底する。
クイズ 2Zero Trust & mTLS