バックエンド18 件の記事

バックエンド の記事

Raft合意アルゴリズム入門 - リーダー選出とログ複製を実装で理解する

Raft合意アルゴリズム入門 - リーダー選出とログ複製を実装で理解する

35

分散合意アルゴリズムRaftを、OngaroとOusterhoutの原論文を一次ソースに整理します。単一障害点を消すための状態機械複製という出発点、Paxosの難解さに対して理解しやすさを設計目標に据えた経緯、Follower・Candidate・Leaderの3状態とtermという論理時計、election timeoutのランダム化がsplit voteを解消する仕組み、AppendEntriesとcommitIndex、Log Matching PropertyとElection Restriction、2f+1台でf台の故障に耐えるクォーラムの算術、joint consensusとスナップショット、etcd・Consul・TiKV・CockroachDBでの実装、そしてReadIndexとlease readまで、実際に動かして出力を確認したPythonシミュレータで解説します。

ロードバランシングのアルゴリズム入門 - ラウンドロビンから最少コネクション・P2Cまで

ロードバランシングのアルゴリズム入門 - ラウンドロビンから最少コネクション・P2Cまで

14

負荷分散(ロードバランシング)の基礎を実務目線で整理します。L4とL7の違い、ラウンドロビン・加重ラウンドロビン・最少コネクション・最短応答時間・IPハッシュ・Power of Two Choices・Maglevといった主要アルゴリズムの挙動と向き不向き、nginx/HAProxy/Envoyの既定、ヘルスチェックやスティッキーセッションまで、公式ドキュメントを出典にまとめます。

ブルームフィルタとは - 少ないメモリで「たぶん在る・確実に無い」を判定する確率的データ構造

ブルームフィルタとは - 少ないメモリで「たぶん在る・確実に無い」を判定する確率的データ構造

15

ブルームフィルタ(Bloom filter)を基礎から解説します。偽陽性はあるが偽陰性は無い性質、mビット配列とk個のハッシュ関数によるadd/query、偽陽性率と最適kの導出、O(k)の計算量、Cassandra/RocksDBなどの実運用、Counting/Scalable/Cuckooといった変種までを一次ソースで整理します。

CAP定理とは - 分散システムで一貫性と可用性のどちらを守るか(PACELCまで整理)

CAP定理とは - 分散システムで一貫性と可用性のどちらを守るか(PACELCまで整理)

18

CAP定理を一次ソースから整理します。CのC=線形化可能性という定義、ACIDのCとの違い、「3つから2つを選ぶ」という有名な誤解の正体、分断時にCP/APのどちらを選ぶかという実像、Brewerの2012年再考、通常時のレイテンシと一貫性を扱うPACELC定理、結果整合性とBASE、そしてetcd・Cassandra・MongoDB・DynamoDBの分類を留保付きで解説します。

コンシステントハッシュ法とは - 分散システムでノードを増減してもキャッシュが崩れない仕組み

コンシステントハッシュ法とは - 分散システムでノードを増減してもキャッシュが崩れない仕組み

14

コンシステントハッシュ法(Consistent Hashing)を基礎から解説します。単純な mod N ハッシュがノード数変更でほぼ全キー再配置になる問題、ハッシュリングと時計回り割り当て、仮想ノードによる負荷平準化、再配置がなぜ平均 K/N で済むのか、そして Jump Consistent Hash・Rendezvous(HRW)・Maglev といった発展、DynamoDB/Cassandra/memcached(ketama) での実運用まで、原論文を一次ソースに整理します。

UUID と ULID 入門 - 分散システムで衝突しない ID を、時系列に強く設計する

UUID と ULID 入門 - 分散システムで衝突しない ID を、時系列に強く設計する

14

分散システムの一意な ID 設計を、UUID と ULID を軸に整理します。RFC 9562(2024 年発行)が標準化した UUIDv7、UUIDv4 のランダム性が DB インデックスに与える影響、ULID の 128 ビット構成と時系列ソート、生成コード例、そしてタイムスタンプ露出などのセキュリティ注意点まで、一次ソースを裏取りしてまとめます。

トランザクションとACID・分離レベル入門 - dirty read / phantom と PostgreSQL・MySQLの違い

トランザクションとACID・分離レベル入門 - dirty read / phantom と PostgreSQL・MySQLの違い

13

データベースのトランザクションを実務目線で整理します。ACID(原子性・一貫性・分離性・永続性)の意味、BEGIN/COMMIT/ROLLBACKの基本、4つの分離レベル(READ UNCOMMITTED / READ COMMITTED / REPEATABLE READ / SERIALIZABLE)と、各レベルで起き得る異常(dirty read・non-repeatable read・phantom read)の対応関係を表で確認します。さらにPostgreSQLのデフォルトはREAD COMMITTED、MySQL InnoDBのデフォルトはREPEATABLE READという製品差や、PostgreSQLではREAD UNCOMMITTEDがREAD COMMITTED扱いになる点まで、PostgreSQL・MySQL公式を一次ソースにまとめます。

ページネーション設計 - オフセット方式とカーソル(キーセット)方式の使い分け

ページネーション設計 - オフセット方式とカーソル(キーセット)方式の使い分け

8

一覧の分割表示(ページネーション)を実務目線で整理します。LIMIT/OFFSET によるオフセット方式の利点(任意ページへジャンプ・総件数)と欠点(大きな OFFSET で遅い・挿入や削除でページずれ)、前回の最後の行を基準にするカーソル/キーセット方式の利点(大規模でも高速・安定)と欠点(任意ジャンプ不可・総ページ数が出しにくい)、複合キーのタイブレーク、不透明カーソルと API レスポンス設計(next_cursor / has_more / GraphQL Relay)、そして使い分けと落とし穴まで、PostgreSQL 公式・Use The Index, Luke・Stripe・Slack を一次ソースにまとめます。

データベースインデックス入門 - B-treeの仕組みと、効くクエリ・効かないクエリ

データベースインデックス入門 - B-treeの仕組みと、効くクエリ・効かないクエリ

10

データベースのインデックスを実務目線で整理します。フルスキャンとの違い、B-tree インデックスがなぜ速いのか、等価・範囲・前方一致・ORDER BY・JOIN で効く理由、複合インデックスの左端プレフィックス、カバリングインデックス(index-only scan)、列に関数を使うと効かない・前方ワイルドカード LIKE が効かないといった落とし穴、書き込みコストやストレージのトレードオフ、InnoDB のクラスタ化インデックスと PostgreSQL の違い、EXPLAIN の読み方まで、PostgreSQL・MySQL 公式と Use The Index, Luke を一次ソースにまとめます。

Webhook 受信側のベストプラクティス - 署名検証・リトライ・冪等性・順序

Webhook 受信側のベストプラクティス - 署名検証・リトライ・冪等性・順序

9

Webhook を安全・堅牢に受け取るための設計を実務目線で整理します。HMAC-SHA256 による署名検証とリプレイ攻撃対策(タイムスタンプ)、生のボディで検証する理由、定数時間比較、at-least-once 配信を前提にした冪等な処理、保証されない配信順序への備え、まず素早く 2xx を返して非同期処理する受信パターン、未知イベントの扱い、シークレットのローテーションや CSRF 除外まで、Stripe・GitHub・Standard Webhooks を一次ソースにまとめます。

レート制限の仕組み - トークンバケット・スライディングウィンドウと 429 の正しい返し方

レート制限の仕組み - トークンバケット・スライディングウィンドウと 429 の正しい返し方

10

API のレート制限(rate limiting)を実務目線で整理します。固定ウィンドウ・スライディングウィンドウ(ログ/カウンタ)・トークンバケット・リーキーバケットの各アルゴリズムの仕組みと長所短所、トークンバケットの擬似コード、Redis での原子的な実装、HTTP 429 と Retry-After・RateLimit ヘッダの返し方、分散環境での注意、そして固定ウィンドウの境界バーストや X-Forwarded-For 偽装、指数バックオフ+ジッターといった落とし穴まで、MDN・IETF を一次ソースにまとめます。

REST API設計の基礎と冪等性 - HTTPメソッドの意味と Idempotency-Key

REST API設計の基礎と冪等性 - HTTPメソッドの意味と Idempotency-Key

10

REST API設計の基礎を、HTTPメソッドの意味(safe / idempotent)から整理します。リソース指向のURL設計、GET/POST/PUT/PATCH/DELETE の使い分けと冪等性の早見表、なぜ冪等性がリトライや二重課金防止に重要か、POST を安全にリトライする Idempotency-Key の仕組み、ステータスコードの使い分け、RFC 9457 のエラー形式まで、RFC 9110・MDN・Stripe を一次ソースにまとめます。

Node.jsが年1回のメジャーリリースへ - Node 27からの新スケジュールとLTSの考え方

Node.jsが年1回のメジャーリリースへ - Node 27からの新スケジュールとLTSの考え方

7

Node.js が 2026年3月の公式発表でリリーススケジュールを変更します。Node 27(2027年)から、メジャーは年1回(毎年4月)に集約され、奇数/偶数の区別を廃止して全リリースが LTS 対象に。早期テスト用の Alpha チャンネル新設、総サポート期間の36か月化など、新旧スケジュールの違いと、Node 26 / Node 27 の位置づけ、運用への影響を Node.js 公式ブログを一次ソースに整理します。

JWT(JSON Web Token)の仕組みと正しい使い方 - 署名・検証とセキュリティの落とし穴

JWT(JSON Web Token)の仕組みと正しい使い方 - 署名・検証とセキュリティの落とし穴

12

JWT(JSON Web Token)を実務目線で整理します。header.payload.signature の3部構造と Base64URL、iss/sub/aud/exp などのクレーム、HS256 と RS256/ES256 の使い分け、検証の流れ、そして alg:none 攻撃・アルゴリズム混同・「JWT は暗号化ではないので中身は誰でも読める」という誤解・失効の難しさといった落とし穴まで、RFC 7519/7515/7518/8725 と OWASP を一次ソースにまとめます。

HTTP ステータスコードの実践的な使い分け - 401 と 403、3xx の違いをちゃんと選ぶ

HTTP ステータスコードの実践的な使い分け - 401 と 403、3xx の違いをちゃんと選ぶ

9

HTTP ステータスコードを、API 設計で迷いやすいポイントを中心に整理します。2xx/3xx/4xx/5xx の意味と使い分け、401 と 403 の違い、301/302/307/308 のメソッド保持、200 でエラーを返すアンチパターン、404 と 410、429 と Retry-After、422 の位置づけまで、RFC 9110 や MDN といった一次ソースをもとにまとめます。

PHP バージョン履歴の歩き方 - PHP 5 から 8.5 までの変更点と追加機能を整理

PHP バージョン履歴の歩き方 - PHP 5 から 8.5 までの変更点と追加機能を整理

15

PHP のバージョン履歴を、各版の変更点と追加機能とともに整理します。PHP 5 系の OOP 整備、PHP 7 系のパフォーマンス革命と型、PHP 8 系のモダン化(JIT・enum・property hooks)まで。さらに 2025年11月リリースの PHP 8.5(パイプ演算子・clone with・URI 拡張)と PHP 8.4 の新機能を php.net の公式情報をもとにまとめ、サポート状況と移行の指針も示します。

Supabase 完全入門 - PostgreSQL ベースの BaaS と Firebase との徹底比較(2026年最新版)

Supabase 完全入門 - PostgreSQL ベースの BaaS と Firebase との徹底比較(2026年最新版)

23

オープンソースのFirebase代替として急成長を続けるSupabaseを徹底解説。PostgreSQL/Auth/Storage/Realtime/Edge Functions の主要機能、Next.js での実装サンプル、Row Level Securityの仕組み、2026年新機能(pg-deltaの宣言的スキーマ管理、PostgREST自動リトライ)から、Firebaseとの料金・アーキテクチャ・選定基準の違いまで、現場で必要な情報を網羅します。