マイクロサービスアーキテクチャ 第2版

Book description

2014年にThoughtworksのマーチン・ファウラーとジェームス・ルイスによって提唱された「マイクロサービス」は、いまではすっかり市民権を得て、さまざまな手法やツールが開発されています。著者は、マイクロサービスに「賛成」でも「反対」でもないという中立的な立場から、マイクロサービスの仕組み、特徴、長所、短所、課題を丁寧に説明しています。Thoughtworks在籍中から数多くのマイクロサービスプロジェクトに携わっていた著者が共有する、自身の実体験から得た多くの知見は、システム設計、開発、デプロイ、テストといった技術的側面のみならず、人材をどのように活かし、生産性を上げるかといった組織面にも多くの示唆を与えてくれるものです。組織に適したアーキテクチャを選択し、信頼性が高く、堅牢性、安全性、柔軟性に優れたシステムを設計する上で指針となる一冊です。

Table of contents

  1. 大扉
  2. 原書大扉
  3. クレジット
  4. はじめに
    1. 本書の対象読者
    2. 執筆した理由
    3. 第1版からの変更点
    4. 本書の構成
      1. Ⅰ部 基礎
      2. Ⅱ部 実装
      3. Ⅲ部 人
    5. 表記法
    6. 連絡先
    7. 謝辞
  5. 第I部 基礎
    1. 1章 マイクロサービスとは
      1. 1.1 マイクロサービスの概要
        1. サービス指向アーキテクチャとマイクロサービスは違うもの?
      2. 1.2 マイクロサービスの重要な概念
        1. 1.2.1 独立デプロイ可能性
        2. 1.2.2 ビジネスドメインに基づくモデル化
        3. 1.2.3 マイクロサービスごとの状態の所有
        4. 1.2.4 サイズ
        5. 1.2.5 柔軟性
        6. 1.2.6 アーキテクチャと組織の連携
        7. 「フェイク」企業に関する注意
      3. 1.3 モノリス
        1. 1.3.1 単一プロセスモノリス
        2. 1.3.2 モジュラーモノリス
        3. 1.3.3 分散モノリス
        4. 1.3.4 モノリスとデリバリ競合
        5. 1.3.5 モノリスの利点
      4. 1.4 実現技術
        1. 1.4.1 ログ集約と分散トレーシング
        2. 1.4.2 コンテナとKubernetes
        3. 1.4.3 ストリーミング
        4. 1.4.4 パブリッククラウドとサーバレス
      5. 1.5 マイクロサービスの利点
        1. 1.5.1 技術の異種性
        2. 1.5.2 堅牢性
        3. 1.5.3 スケーリング
        4. 1.5.4 デプロイの容易性
        5. 1.5.5 組織との連携
        6. 1.5.6 合成可能性
      6. 1.6 マイクロサービスの課題
        1. 1.6.1 開発者体験
        2. 1.6.2 技術の過負荷
        3. 1.6.3 コスト
        4. 1.6.4 レポート
        5. 1.6.5 監視とトラブルシューティング
        6. 1.6.6 セキュリティ
        7. 1.6.7 テスト
        8. 1.6.8 遅延
        9. 1.6.9 データ一貫性
      7. 1.7 マイクロサービスを使うべきか
        1. 1.7.1 役立たない場合
        2. 1.7.2 効果的な場所
      8. 1.8 まとめ
    2. 2章 マイクロサービスのモデル化
      1. 2.1 MusicCorpの紹介
      2. 2.2 適切なマイクロサービス境界にするには
        1. 2.2.1 情報隠蔽
        2. 2.2.2 凝集
        3. 2.2.3 結合
        4. 2.2.4 結合と凝集の相互関係
      3. 2.3 結合の種類
        1. 構造化プログラミングの先行技術
        2. 2.3.1 ドメイン結合
        3. 2.3.2 パススルー結合
        4. 時間的結合に関してひと言
        5. 2.3.3 共通結合
        6. 2.3.4 内容結合
      4. 2.4 過不足のないドメイン駆動設計(DDD)
        1. 2.4.1 ユビキタス言語
        2. 2.4.2 アグリゲート(集約)
        3. 2.4.3 境界づけられたコンテキスト(コンテキスト境界)
        4. 2.4.4 アグリゲート、境界づけられたコンテキストのマイクロサービスへのマッピング
        5. 2.4.5 イベントストーミング
      5. 2.5 マイクロサービス向けのドメイン駆動設計(DDD)の例
      6. 2.6 ビジネスドメイン境界の代替手段
        1. 2.6.1 変動性
        2. 2.6.2 データ
        3. 2.6.3 技術
        4. 2.6.4 組織
        5. 内部階層化と外部階層化
      7. 2.7 混合モデルと例外
      8. 2.8 まとめ
    3. 3章 モノリスの分割
      1. 3.1 目標を持つ
      2. 3.2 漸進的な移行
      3. 3.3 ほとんどの場合、モノリスは敵ではない
        1. 3.3.1 時期尚早な分解の危険性
      4. 3.4 まず何を分割すべきか
      5. 3.5 階層による分解
        1. 3.5.1 コードファースト
        2. 3.5.2 データファースト
      6. 3.6 便利な分解パターン
        1. 3.6.1 ストラングラーフィグパターン
        2. 3.6.2 並列実行
        3. 3.6.3 機能トグル
      7. 3.7 データ分解における懸念
        1. 3.7.1 パフォーマンス
        2. 3.7.2 データ完全性
        3. 3.7.3 トランザクション
        4. 3.7.4 ツール
        5. 3.7.5 レポートデータベース
      8. 3.8 まとめ
    4. 4章 マイクロサービスの通信スタイル
      1. 4.1 プロセス内からプロセス間へ
        1. 4.1.1 パフォーマンス
        2. 4.1.2 インタフェースの変更
        3. 4.1.3 エラー処理
      2. 4.2 プロセス間通信のための技術:多数の選択肢
      3. 4.3 マイクロサービスの通信スタイル
        1. 4.3.1 うまく組み合わせる
      4. 4.4 パターン:同期ブロッキング
        1. 4.4.1 利点
        2. 4.4.2 欠点
        3. 4.4.3 同期ブロッキングの用途
      5. 4.5 パターン:非同期非ブロッキング
        1. 4.5.1 利点
        2. 4.5.2 欠点
        3. async/awaitと、非同期でもブロックするとき
        4. 4.5.3 非同期非ブロッキングの用途
      6. 4.6 パターン:共通データを介した通信
        1. 4.6.1 実装
        2. 4.6.2 利点
        3. 4.6.3 欠点
        4. 4.6.4 共通データを介した通信の用途
      7. 4.7 パターン:リクエスト/レスポンス通信
        1. コマンドとリクエスト
        2. 4.7.1 実装:同期と非同期
        3. 並列呼び出しと逐次呼び出し
        4. 4.7.2 リクエスト/レスポンス通信の用途
      8. 4.8 パターン:イベント駆動通信
        1. イベントとメッセージ
        2. 4.8.1 実装
        3. 4.8.2 イベントの中身
        4. 4.8.3 イベント駆動通信の用途
      9. 4.9 注意深く進める
      10. 4.10 まとめ
  6. 第II部 実装
    1. 5章 マイクロサービスの通信の実装
      1. 5.1 理想的な技術の探索
        1. 5.1.1 後方互換性を容易にする
        2. 5.1.2 インタフェースを明示的にする
        3. 5.1.3 APIを技術非依存にする
        4. 5.1.4 コンシューマにとって単純なサービスにする
        5. 5.1.5 内部実装の詳細を隠す
      2. 5.2 技術選択
        1. 5.2.1 リモートプロシージャコール(RPC)
        2. 5.2.2 REST
        3. 5.2.3 GraphQL
        4. 5.2.4 メッセージブローカー
      3. 5.3 シリアライゼーション形式
        1. 5.3.1 テキスト形式
        2. 5.3.2 バイナリ形式
      4. 5.4 スキーマ
        1. 5.4.1 契約の構造的破壊と意味的破壊
        2. 5.4.2 スキーマを使うべきか
      5. 5.5 マイクロサービス間の変更に対処する
      6. 5.6 破壊的変更の回避
        1. 5.6.1 拡張変更
        2. 5.6.2 耐性のあるリーダー
        3. 5.6.3 適切な技術
        4. 5.6.4 明示的なインタフェース
        5. セマンティックバージョニング
        6. 5.6.5 偶発的な破壊的変更の早期把握
      7. 5.7 破壊的変更の管理
        1. 5.7.1 ロックステップデプロイ
        2. 5.7.2 互換性のないマイクロサービスバージョンの共存
        3. 5.7.3 旧インタフェースのエミュレーション
        4. 5.7.4 どちらのアプローチが好ましいか
        5. 5.7.5 社会契約
        6. 5.7.6 利用の追跡
        7. 5.7.7 極端な手段
      8. 5.8 マイクロサービスの世界における、DRYとコード再利用の危険性
        1. 5.8.1 ライブラリを介したコード共有
      9. 5.9 サービス検出
        1. 5.9.1 ドメインネームシステム(DNS)
        2. 5.9.2 動的サービスレジストリ
        3. 5.9.3 人を忘れない
      10. 5.10 サービスメッシュとAPIゲートウェイ
        1. 5.10.1 APIゲートウェイ
        2. 5.10.2 サービスメッシュ
        3. 5.10.3 他のプロトコルはどうか
      11. 5.11 サービスの文書化
        1. 5.11.1 明示的なスキーマ
        2. 5.11.2 自己記述型システム
      12. 5.12 まとめ
    2. 6章 ワークフロー
      1. 6.1 データベーストランザクション
        1. 6.1.1 ACIDトランザクション
        2. 6.1.2 ACIDでも、原子性に欠けるのか
      2. 6.2 分散トランザクション:2フェーズコミット
      3. 6.3 分散トランザクションはお断り
        1. データベース分散トランザクション
      4. 6.4 サーガ
        1. 6.4.1 サーガの障害モード
        2. 6.4.2 サーガの実装
        3. BPMツール
        4. 呼び出しを追跡する
        5. 6.4.3 サーガと分散トランザクションの比較
      5. 6.5 まとめ
    3. 7章 ビルド
      1. 7.1 継続的インテグレーション(CI)とは
        1. 7.1.1 本当にCIを行っているか
        2. 7.1.2 ブランチモデル
      2. 7.2 ビルドパイプラインと継続的デリバリ(CD)
        1. 継続的デリバリと継続的デプロイの比較
        2. 7.2.1 ツール
        3. 7.2.2 トレードオフと環境
        4. 7.2.3 成果物の作成
      3. 7.3 ソースコードとビルドのマイクロサービスへのマッピング
        1. 7.3.1 1つの巨大リポジトリ、1つの巨大ビルド
        2. 7.3.2 パターン:マイクロサービスごとに1つのリポジトリ(別名マルチリポ)
        3. 7.3.3 パターン:モノリポ
        4. 7.3.4 どの方法を使うべきか
      4. 7.4 まとめ
    4. 8章 デプロイ
      1. 8.1 論理から物理へ
        1. 8.1.1 複数インスタンス
        2. 8.1.2 データベース
        3. 8.1.3 環境
      2. 8.2 マイクロサービスのデプロイの原則
        1. 8.2.1 分離された実行
        2. 8.2.2 自動化の重視
        3. 8.2.3 IaC(コードとしてのインフラ)
        4. 8.2.4 停止時間のないデプロイ
        5. 8.2.5 望ましい状態の管理
      3. 8.3 デプロイの選択肢
        1. 8.3.1 物理マシン
        2. 8.3.2 仮想マシン(VM)
        3. 8.3.3 コンテナ
        4. 曖昧な境界線
        5. 8.3.4 アプリケーションコンテナ
        6. 8.3.5 PaaS(Platform as a Service、サービスとしてのプラットフォーム)
        7. 8.3.6 FaaS(Function as a Service、サービスとしての関数)
        8. WebAssembly(Wasm)
      4. 8.4 どのデプロイオプションが自分に適しているか
        1. Puppet、Chef、その他のツールの役割
      5. 8.5 Kubernetesとコンテナオーケストレーション
        1. 8.5.1 コンテナオーケストレーションの例
        2. 8.5.2 Kubernetesの概念の簡略図
        3. 8.5.3 マルチテナントとフェデレーション
        4. Kubernetesの背景
        5. 8.5.4 CNCF(Cloud Native Computing Foundation)
        6. 8.5.5 プラットフォームと移植性
        7. 8.5.6 Helm、Operator、CRD
        8. 8.5.7 Knative
        9. 8.5.8 将来
        10. 8.5.9 Kubernetesを使うべきか
      6. 8.6 プログレッシブデリバリ
        1. 8.6.1 デプロイとリリースの分離
        2. 8.6.2 プログレッシブデリバリへの移行
        3. 8.6.3 機能トグル
        4. 8.6.4 カナリアリリース
        5. 8.6.5 並列実行
      7. 8.7 まとめ
    5. 9章 テスト
      1. 9.1 テストの種類
        1. 手動の探索的テスト
      2. 9.2 テストスコープ
        1. 9.2.1 単体テスト
        2. 9.2.2 サービステスト
        3. 9.2.3 エンドツーエンドテスト
        4. 統合テストはどうなのか
        5. 9.2.4 トレードオフ
      3. 9.3 サービステストの実装
        1. 9.3.1 モックかスタブか
        2. 9.3.2 高度なスタブサービス
      4. 9.4 (扱いにくい)エンドツーエンドテストの実装
        1. 9.4.1 信頼できない脆弱なテスト
        2. 9.4.2 誰がエンドツーエンドテストを書くか
        3. 9.4.3 エンドツーエンドテストの実行期間
        4. 9.4.4 積み上がる大きな山
        5. 9.4.5 メタバージョン
        6. 9.4.6 独立テスト容易性の欠如
      5. 9.5 エンドツーエンドテストを避けるべきか
        1. 9.5.1 契約テストとコンシューマ駆動契約(CDC)
        2. 9.5.2 結論
      6. 9.6 開発者体験
      7. 9.7 本番前環境でのテストから本番環境でのテストへ
        1. 9.7.1 本番環境でのテストの種類
        2. 9.7.2 本番環境でのテストを安全にする
        3. 9.7.3 平均故障間隔(MTBF)よりも平均修復時間(MTTR)か
      8. 9.8 機能横断テスト
        1. 9.8.1 パフォーマンステスト
        2. 9.8.2 堅牢性テスト
      9. 9.9 まとめ
    6. 10章 監視から可観測性へ
      1. 10.1 断絶、パニック、混乱
      2. 10.2 単一マイクロサービス、単一サーバ
      3. 10.3 単一マイクロサービス、複数サーバ
      4. 10.4 複数マイクロサービス、複数サーバ
      5. 10.5 可観測性と監視の違い
        1. 10.5.1 可観測性の柱?あまり高速ではない
      6. 10.6 可観測性の構成要素
        1. 10.6.1 ログ集約
        2. 10.6.2 メトリック集約
        3. 監視、可観測性システムは本番システムである
        4. 10.6.3 分散トレーシング
        5. 10.6.4 うまくいっているか
        6. 10.6.5 アラート
        7. アラームとアラート
        8. 10.6.6 セマンティック監視
        9. 10.6.7 本番環境でのテスト
      7. 10.7 標準化
      8. 10.8 ツールの選択
        1. 10.8.1 大衆性
        2. 10.8.2 統合しやすさ
        3. 10.8.3 コンテキストの提供
        4. 10.8.4 リアルタイム
        5. 10.8.5 自分たちの規模に合っている
      9. 10.9 マシン内の専門家
      10. 10.10 開始する
      11. 10.11 まとめ
    7. 11章 セキュリティ
      1. 11.1 基本原則
        1. 11.1.1 最小権限の原則
        2. 11.1.2 多層防御
        3. セキュリティコントロールの種類
        4. 11.1.3 自動化
        5. 11.1.4 デリバリプロセスへのセキュリティの組み込み
      2. 11.2 サイバーセキュリティの5つの機能
        1. 11.2.1 特定
        2. 11.2.2 保護
        3. 11.2.3 検知
        4. 11.2.4 対応
        5. 11.2.5 復旧
      3. 11.3 アプリケーションセキュリティの基礎
        1. 11.3.1 資格情報(クレデンシャル)
        2. キーのスキャン
        3. 11.3.2 パッチ適用
        4. 11.3.3 バックアップ
        5. 11.3.4 再構築
      4. 11.4 暗黙の信頼とゼロトラスト
        1. 11.4.1 暗黙の信頼
        2. 11.4.2 ゼロトラスト
        3. 11.4.3 併用のバリエーション
      5. 11.5 データをセキュアにする
        1. 11.5.1 転送データ
        2. 11.5.2 保存データ
      6. 11.6 認証認可
        1. 11.6.1 サービス間認証
        2. 11.6.2 人の認証
        3. 11.6.3 一般的なシングルサインオン(SSO)の実装
        4. 11.6.4 シングルサインオン(SSO)ゲートウェイ
        5. 11.6.5 粒度の細かい認可
        6. 11.6.6 混乱した代理問題
        7. 11.6.7 一元的な上流での認可
        8. 11.6.8 認可の分散化
        9. 11.6.9 JSON Web Token(JWT)
      7. 11.7 まとめ
    8. 12章 レジリエンス
      1. 12.1 レジリエンスとは
        1. 12.1.1 堅牢性
        2. 12.1.2 回復性
        3. 12.1.3 グレースフルな拡張性
        4. 12.1.4 持続的な適応性
        5. 12.1.5 そして、マイクロサービスアーキテクチャ
      2. 12.2 障害はどこにでもある
      3. 12.3 どの程度が多すぎるのか
      4. 12.4 機能低下
      5. 12.5 安定性パターン
        1. 12.5.1 タイムアウト
        2. 12.5.2 再試行(リトライ)
        3. 12.5.3 バルクヘッド
        4. 12.5.4 サーキットブレーカー
        5. 12.5.5 分離性
        6. 12.5.6 冗長性
        7. 12.5.7 ミドルウェア
        8. 12.5.8 冪等性
      6. 12.6 危険性の分散
      7. 12.7 CAP定理
        1. 12.7.1 一貫性を犠牲にする
        2. 12.7.2 可用性を犠牲にする
        3. 12.7.3 分断耐性を犠牲にするか
        4. 12.7.4 APかCPか
        5. 12.7.5 オールオアナッシングではない
        6. 12.7.6 そして実世界
        7. アンチフラジャイル
      8. 12.8 カオスエンジニアリング
        1. 12.8.1 ゲームデイ
        2. 12.8.2 本番環境実験
        3. 12.8.3 堅牢性の先へ
      9. 12.9 非難
      10. 12.10 まとめ
    9. 13章 スケーリング
      1. 13.1 スケーリングの4つの軸
        1. 13.1.1 垂直スケーリング
        2. 13.1.2 水平複製
        3. 13.1.3 データのパーティション分割
        4. 13.1.4 機能分解
      2. 13.2 モデルの組み合わせ
      3. 13.3 小さく始める
        1. CQRSとイベントソーシング
      4. 13.4 キャッシュ
        1. 13.4.1 パフォーマンスのためのキャッシュ
        2. 13.4.2 スケールのためのキャッシュ
        3. 13.4.3 堅牢性のためのキャッシュ
        4. 13.4.4 どこでキャッシュするか
        5. 13.4.5 無効化
        6. 13.4.6 キャッシュの黄金律
        7. 13.4.7 鮮度と最適化
        8. 13.4.8 キャッシュポイズニング:教訓
      5. 13.5 オートスケーリング
      6. 13.6 再出発
      7. 13.7 まとめ
  7. 第III部 人
    1. 14章 UI
      1. 14.1 デジタルへ向けて
      2. 14.2 所有権モデル
        1. 14.2.1 専任フロントエンドチームに向かう要因
      3. 14.3 ストリームアラインドチームを目指して
        1. 14.3.1 専門家の共有
        2. 14.3.2 一貫性の保証
        3. 14.3.3 技術的課題の克服
      4. 14.4 パターン:モノリシックフロントエンド
        1. 14.4.1 モノリシックフロントエンドを使う場合
      5. 14.5 パターン:マイクロフロントエンド
        1. 14.5.1 実装
        2. 14.5.2 マイクロフロントエンドを使う場合
        3. 自己完結型システム
      6. 14.6 パターン:ページベースの分解
        1. Web
        2. 14.6.1 ページベースの分解の用途
      7. 14.7 パターン:ウィジェットベースの分解
        1. 14.7.1 実装
        2. Web Components
        3. 14.7.2 ウィジェットベースの分解を使う場合
      8. 14.8 制約
      9. 14.9 パターン:中央集約ゲートウェイ
        1. 14.9.1 所有権
        2. 14.9.2 各種のUI
        3. 14.9.3 複数の懸念
        4. 14.9.4 中央集約ゲートウェイを使う場合
      10. 14.10 パターン:BFF(フロントエンド向けのバックエンド)
        1. 14.10.1 BFFをいくつにするか
        2. 14.10.2 再利用とBFF
        3. 14.10.3 デスクトップWebなどのためのBFF
        4. 14.10.4 BFFを使う場合
      11. 14.11 GraphQL
      12. 14.12 ハイブリッドなアプローチ
      13. 14.13 まとめ
    2. 15章 組織構造
      1. 15.1 疎結合の組織
      2. 15.2 コンウェイの法則
        1. 15.2.1 証拠
      3. 15.3 チームサイズ
      4. 15.4 コンウェイの法則を理解する
      5. 15.5 小さなチーム、大きな組織
      6. 15.6 自律性
      7. 15.7 強い所有権と共同所有権の比較
        1. 15.7.1 強い所有権
        2. 15.7.2 共同所有権
        3. 15.7.3 チームレベルと組織レベルの比較
        4. 15.7.4 モデル間のバランスを取る
      8. 15.8 イネイブリングチーム
        1. 15.8.1 実践コミュニティ
        2. 15.8.2 プラットフォーム
      9. 15.9 共有マイクロサービス
        1. 15.9.1 分割が難しすぎる
        2. 15.9.2 横断的変更
        3. 15.9.3 デリバリのボトルネック
      10. 15.10 社内オープンソース
        1. 15.10.1 コアコミッターの役割
        2. 15.10.2 成熟度
        3. 15.10.3 ツール
      11. 15.11 プラグ可能なモジュラーマイクロサービス
        1. 15.11.1 変更のレビュー
      12. 15.12 孤立したサービス
      13. 15.13 ケーススタディ:realestate.com.au
      14. 15.14 地理的分散
      15. 15.15 逆コンウェイの法則
      16. 15.16 人
      17. 15.17 まとめ
    3. 16章 進化的アーキテクト
      1. 16.1 「名前が何だと言うの」*1
      2. 16.2 ソフトウェアアーキテクチャとは
      3. 16.3 変更を可能にする
      4. 16.4 進化するアーキテクト像
      5. 16.5 システム境界の定義
      6. 16.6 社会的構成概念
      7. 16.7 居住性
      8. 16.8 原則に基づいたアプローチ
        1. 16.8.1 戦略的目標
        2. 16.8.2 原則
        3. 16.8.3 プラクティス
        4. 16.8.4 原則とプラクティスの結合
        5. 16.8.5 実世界の例
      9. 16.9 進化的アーキテクチャへの指針
      10. 16.10 ストリームアラインド組織でのアーキテクチャ
      11. 16.11 チームの構築
      12. 16.12 必要な標準
        1. 16.12.1 監視
        2. 16.12.2 インタフェース
        3. 16.12.3 アーキテクチャ上の安全性
      13. 16.13 ガバナンスと舗装道路
        1. 16.13.1 見本
        2. 16.13.2 カスタマイズされたマイクロサービステンプレート
        3. 16.13.3 大規模での舗装道路
      14. 16.14 技術的負債
      15. 16.15 例外処理
      16. 16.16 まとめ
  8. あとがき:すべてをまとめる
    1. マイクロサービスとは
    2. マイクロサービスへの移行
    3. 通信スタイル
    4. ワークフロー
    5. ビルド
    6. デプロイ
    7. テスト
    8. 監視と可観測性
    9. セキュリティ
    10. レジリエンス
    11. スケーリング
    12. UI
    13. 組織
    14. アーキテクチャ
    15. 参考文献
    16. 今後について
    17. 最後に
  9. 参考文献
  10. 用語集
  11. 著者・訳者紹介
  12. 奥付

Product information

  • Title: マイクロサービスアーキテクチャ 第2版
  • Author(s): Sam Newman, 佐藤 直生, 木下 哲也
  • Release date: November 2022
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784814400010

You might also like

book

SREの探求 ―様々な企業におけるサイトリライアビリティエンジニアリングの導入と実践

by David N. Blank-Edelman, 山口 能迪, 渡邉 了介

組織の大小を問わず、システムやアプリケーションの信頼性がビジネスにとって重要なこと、また市場が求めるスピードでイテレーション(反復)しながら、信頼性を維持するのは難しいことが認識されています。サイトリライアビリティエンジニアリング(SRE)は、この課題に対する取り組みです。 本書は、大規模なプロダクションシステムの運用において、様々な企業や組織がSREをどのように実践しているかについて紹介します。Microsoft、Dropbox、Google、SoundCloud、Spotify、Amazon、Facebook、LinkedIn、Netflix、Lyftなど、規模や業種、提供するプロダクトやサービスが異なる様々な企業でのSREの導入と発展、そこから得た課題について解説します。 全33章で約40名の著者陣が「SREの導入」「SREの周辺領域」「SREのベストプラクティスと技術」「SREの人間的側面」というテーマで執筆しており、対談やケーススタディ、アンチパターンなどを交えながら、SREに取り組む現場の人々の声を紹介します。

book

Rクックブック 第2版

by J.D. Long, Paul Teetor, 大橋 真也, 木下 哲也

Rを使って統計解析、グラフィックス作成、データ分析などを行う際に、頻繁に遭遇すると思われる約300の問題とその解決策を収録したレシピ集です。RとRStudioのインストール、言語仕様、基本操作などの基礎的なことから、高度なプログラミングテクニックやさまざまな回帰分析の種類とその使い方まで、扱う内容は多岐にわたります。初心者にとっては、環境設定や文法、入出力などでつまずきやすいポイントを的確にフォロー。中級者以上にとっては日々の作業をより生産的、効率的にする「使える」レシピを多数用意しています。リファレンスとして手元に置いておきたい、Rユーザ必携の一冊です。

book

マスタリングLinuxシェルスクリプト 第2版 ―Linuxコマンド、bashスクリプト、シェルプログラミング実践入門

by Mokhtar Ebrahim, Andrew Mallett, 萬谷 暢崇, 原 隆文

Linuxシェルスクリプトの解説書。その中でも特にbashのシェルスクリプティングに焦点を当てています。シェルスクリプトの書き方、デバッグ方法、bashプログラミングの基本といったシェルスクリプティングの基礎から、sedやAWKなど各種ツールとの連携といった実践的な応用までを体系的に解説します。WebサーバーなどのLinuxシステムの管理を任されるようになった初級の管理者にも、もっと高度で実践的なテクニックを必要としている中級の管理者や開発者にも広く役に立つ内容です。

book

仕事ではじめる機械学習 第2版

by 有賀 康顕, 中山 心太, 西林 孝

2018年の発行以来、多くの読者に支持された書籍を全面改訂! 不確実性の高い機械学習プロジェクトについて、「仕事で使う」という観点から整理するコンセプトはそのままに、初版の発行後に登場した概念や課題を取り上げます。「機械学習でいい感じにしてくれ」と突然上司に言われたとき、本書で学んだことが読者の力になるはずです。本書で得た知識は読者が「いま」困っている問題を解決する助けとなるでしょう。 第2版では、機械学習システムの開発と運用の統合する「ML Ops」、機械学習モデルを解釈し、その妥当性や根拠を明らかにする「機械学習モデルの検証」、ユーザーの行動を学習しながら予測を進める「バンディットアルゴリズム」、意思決定における予測システムの役割や意思決定のデザインを扱う「オンライン広告での機械学習」といった新章を追加しています。