kakakakakku blog

Weekly Tech Blog: Keep on Learning!

PHP 5.6 環境では CacheTool v3.2.1 を使うべし

数年前にも記事を書いた PHP のキャッシュ管理ツール CacheTool を,今日 PHP 5.6 環境にインストールをして実行したら以下のエラーが出てしまった.調べたところ,5月末にリリースされた最新メジャーバージョン CacheTool v4 から PHP 7.x 系だけをサポートするらしく,PHP 5.6 だと CacheTool v3 を使う必要があった.

$ /usr/local/bin/cachetool.phar opcache:reset --fcgi=/var/run/php-fpm/php-fpm.sock
PHP Fatal error:  Default value for parameters with a class type hint can only be NULL in phar:///usr/local/bin/cachetool.phar/vendor/symfony/yaml/Parser.php on line 49

kakakakakku.hatenablog.com

対応策

PHP 5.6 環境の場合,CacheTool v3.2.1 を指定してインストールする必要がある.バイナリは以下の URL から取得できる.

PHP 5.6 と PHP 7.2 で比較してみた

PHP 5.6 で CacheTool v3.1.0 を指定したときもエラーが出てしまったけど,やはり「PHP 5.6 なら CacheTool v3.2.1」「PHP 7.x なら CacheTool v4.0.0」となる.

PHP 5.6

$ php -v
PHP 5.6.36 (cli) (built: Jun  6 2018 21:16:46)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

$ curl -sO http://gordalina.github.io/cachetool/downloads/cachetool-3.0.0.phar
$ chmod +x cachetool-3.0.0.phar
$ ./cachetool-3.0.0.phar list # ok

$ curl -sO http://gordalina.github.io/cachetool/downloads/cachetool-3.1.0.phar
$ chmod +x cachetool-3.1.0.phar
$ ./cachetool-3.1.0.phar list
Fatal error: Default value for parameters with a class type hint can only be NULL in phar:///cachetool-3.1.0.phar/vendor/symfony/console/Application.php on line 83

$ curl -sO http://gordalina.github.io/cachetool/downloads/cachetool-3.2.1.phar
$ chmod +x cachetool-3.2.1.phar
$ ./cachetool-3.2.1.phar list # ok

$ curl -sO http://gordalina.github.io/cachetool/downloads/cachetool-4.0.0.phar
$ chmod +x cachetool-4.0.0.phar
$ ./cachetool-4.0.0.phar list
Fatal error: Default value for parameters with a class type hint can only be NULL in phar:///cachetool-4.0.0.phar/vendor/symfony/yaml/Parser.php on line 49

PHP 7.2

$ php -v
PHP 7.2.6 (cli) (built: Jun  6 2018 18:55:25) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

$ curl -sO http://gordalina.github.io/cachetool/downloads/cachetool-3.0.0.phar
$ chmod +x cachetool-3.0.0.phar
$ ./cachetool-3.0.0.phar list # ok

$ curl -sO http://gordalina.github.io/cachetool/downloads/cachetool-3.1.0.phar
$ chmod +x cachetool-3.1.0.phar
$ ./cachetool-3.1.0.phar list # ok

$ curl -sO http://gordalina.github.io/cachetool/downloads/cachetool-3.2.1.phar
$ chmod +x cachetool-3.2.1.phar
$ ./cachetool-3.2.1.phar list # ok

$ curl -sO http://gordalina.github.io/cachetool/downloads/cachetool-4.0.0.phar
$ chmod +x cachetool-4.0.0.phar
$ ./cachetool-4.0.0.phar list # ok

ちなみに

CacheTool v3.1.0 から,バージョン表示が間違っていることに気付いたので,Issue を上げておいた.

github.com

Fargate 東京リージョンは7月だー! / AWS Summit Tokyo 2018 に参加した

5/30 (水) - 6/01 (金) で AWS Summit Tokyo 2018 に参加してきた.3日間参加したものの,午前中はデイリースクラムなど重要なイベントがあったので,午後に数時間セッションを聞いたり,ブースを見たり,認定者ラウンジで休憩していた.今年はセッション予約が遅れてしまったので,気になっていた上級セッションなどを予約できず,比較的のんびりと過ごしていたような気がする.簡単にメモを残しておこうと思う.

www.awssummit.tokyo

今年7月から東京リージョンから Fargate が使える🎉

AWS Summit Tokyo 2018 でアナウンスがあったリリースの中でも,特に盛り上がったのは Fargate だと思う.今日から使えます!というアナウンスじゃなかったのは少し残念だったけど,それでも1ヶ月後なので,すぐに使えるようになる.既にバージニアリージョンで試しているので,積極的に導入したいと思う.

aws.amazon.com

最近だと CloudFormation で ECS をデプロイするのが主流かもしれないけど,まだまだ使われている ecs-deploy の Fargate 対応は,実は僕が対応していて,今年4月に merge されているのですぐに使える!

kakakakakku.hatenablog.com

5/30 (水)

AWS で実現するクラウドファーストなエンタープライズ・インテグレーション基盤

  • ファーストリテイリングの事例
  • 大規模なジョブネットと依存関係をクラウドネイティブに解決する
  • Beanstalk Worker Tier + SQS を基本構成にしている
  • SQS はメッセージの重複取得の可能性があるので,独自のアプリケーションで,チェックしている
    • FIFO は東京リージョンになく,さらにパフォーマンスの懸念がある
  • ジョブネットの依存関係は RDS に独自で管理している

ファーストリテイリング(ユニクロ)の基盤ということで,とにかく大規模で,歴史的経緯もあるアプリケーションなんだろうなという前提で,Beanstalk と SQS をうまく活用したアーキテクチャになっていた.ただ,メッセージの重複チェックや,ジョブネットの依存関係を RDS で管理しているなど,社内で作り込んだアプリケーションも大量にあるなという印象だった.オープンソースになったりすると,良さそうだけども.

(資料公開待ち)

Nintendo Switch (TM) 向けプッシュ通知システム「NPNS」

  • 任天堂の事例
  • NPNS : Nintendo Push Notification Service
  • Switch のプッシュ通知で使っていて,Switch と常時接続している
  • クラスタリングに対応した ejabberd (XMPP) を使っている
    • メッセージングプロトコル
    • ejabberd をかなりカスタマイズしている
  • XMPP Cluster
    • データベースがスケールしないため,複数のクラスタを運用している
    • Cluster で ELB を使わず,複数のインスタンスでメッシュ構成になっている
    • Consul (Failure Detection) がインスタンスを監視していて,Route 53 のレコード(インスタンスの Public IP)を管理している
    • 1個の Consul Server で,複数の XMPP Cluster を監視している
  • デプロイ
    • クライアントの再接続を分散させるため,独自の仕組みがある
    • 「ドリップ処理」と呼んでいる
    • Blue / Green デプロイメントをした上で,緩やかに Green に切り替えていく
    • インスタンス費用が2倍になる,デプロイが終わるまでに2時間かかるなど,課題はある
  • L4 / L7 で TCP の切断対策もしている

今回参加したセッションの中で,1番技術的に面白かった.技術的なチャレンジが圧倒的で,稼働中の規模も大きく,アーキテクチャとしても素晴らしかった.また,複数ある実現方法を細かく検証してから選定しているところも良かった.今後の展望として NLB を導入して Consul を捨てるという話もあった.資料が公開されたら復習したいけど,公開されなさそう.うーん!公開してー!

(資料公開待ち)

FinTech リファレンスアーキテクチャ技術詳解 および FinTech 領域における AWS 活用事例

aws.amazon.com

「FinTech リファレンスアーキテクチャ」の解説と,FinTech スタートアップ3社のパネルディスカッションだった.3社とも「リファレンスアーキテクチャ」に含まれている「検討事項と対応内容のマッピング表」を活用して,アーキテクチャを検討している点とセキュリティ関連の AWS サービスを多く使っている点が特徴的だった.個人的には,全体的に FinTech に限定したものではなく,クラウドネイティブというか,Well-Architected にアーキテクチャを実現しよう!という話に聞こえた.インスタンスに ssh したら負けで,Systems Manager Run Command を使おうという話も出ていた.

5/31 (木)

AWS のリアルタイム処理入門

  • 関連するサービス
    • Kinesis
    • Lambda
    • Step Functions
  • 分類
    • リアルタイム
    • ニアリアルタイム
    • リアクティブ
    • イベントソーシング
    • ステートマシン

事前に予約していたセッションがなく,会場のパブリックビューイングで聞いていた.初心者セッションではあったものの「リアルタイム」と言ってもいろいろ考え方があるんだよという話と,それをどう AWS で実現するかという話が整理されていて,非常に良いセッションだった.

(資料公開待ち)

6/01 (金)

AKB48 のモバイルサイトを他社のデーターセンターから AWS に Amazon ECS を用いて移管した話

  • 自社のオンプレから AWS に移行をしている
  • 利用技術
  • データベース移行
    • AWS Direct Connect でオンプレと VPC を接続する
    • MySQL 5.1 → MySQL 5.5 → MySQL 5.6 → Aurora まで多段レプリケーションをする
  • ECS 構成
    • コンテナインスタンスごとに Fluentd を起動して,ログを収集する
    • 既存のアーキテクチャを踏襲し,コンテナから NFS にアクセスする
  • 現在
    • Jenkins から Wercker に移行した
    • Terraform から CloudFormation に移行した

同じサイバーエージェントのグループ会社で働いているけど,こういう事例を聞く機会がなく,非常にキレイにオンプレから移行しているなと感じた.特に技術選定が良く,運用の効率さが高そう.監視サービスの StatusCake は聞いたことがなくて気になる.あと,多段レプリケーションとは言え,MySQL 5.1 から Aurora まで流すのは強すぎ...!

www.slideshare.net

Startup Architecture of the Year 2018

  • Game Server Services 株式会社
  • 株式会社 MESON
  • GVA TECH 株式会社
  • 株式会社スナックミー
  • コネヒト株式会社
  • ピクシブ株式会社

アーキテクチャに特化したピッチ大会ということで,AWS Summit Tokyo 2018 の中でも1番楽しみにしていたセッションだった.個人的にはサーバレスを活用した GS2 に期待していたけど,タイムアップでアーキテクチャの話が聞けなかったのは残念だった.どこも ECS を使ったマイクロサービスを運用しているんだなーとか,バージニアリージョンの Fargate を活用しているのは良いなーとか,GuardDuty などセキュリティ系のサービスもちゃんと使ってるんだなーとか,短い時間だったけど面白かった.Well-Architected は本当に重要だー.

関連記事

去年の AWS Summit Tokyo 2017 にも参加したけど,1年あっという間だった...!

kakakakakku.hatenablog.com

Mac で最高に便利な「3本指のドラッグ」

Mac を使うときに「3本指のドラッグ」の設定を有効にするのが個人的に必須で,無効になっている他人の Mac だとドラッグすらうまくできないほどに体が慣れてしまっているけど,会社で「3本指のドラッグ」を知らない人が多く,紹介したら喜んでもらえたので,この素晴らしさを広めるために記事を書くことにした.

用途は無限大

「3本指のドラッグ」の用途は無限にあって,具体的な例を挙げておく.Keynote でキレイな発表資料を作るときも使えないと困ってしまう.

  • Chrome で表示されている文字をドラッグしてコピーするとき
  • iTerm2 でターミナルの結果をドラッグしてコピーするとき
  • Keynote でオブジェクトのサイズを変更するとき
  • などなど

設定方法

少し隠れた場所にあるけど「アクセシビリティ」の中にある.

システム環境設定
→ アクセシビリティ
→ マウス/トラックパッド
→ トラックパッドオプション
→ ドラッグを有効にする(3本指のドラッグ)

f:id:kakku22:20180530185003p:plain

まとめ

とにかく便利すぎるので,まずは「3本指のドラッグ」を有効にして,素晴らしさを体験してみましょう!個人的にはアクセシビリティの設定ではなく,トラックパッドの設定にあっても良いのにな(探しにくいし)と思う.

Firebase Authentication で「メール認証」と「Google 認証」を実装できる無料コース「Vue.js + Firebase Authentication」を受講した

2週間前に Vue School が公開している無料コース「Vue.js + Firebase Realtime Database」を受講して,まとめ記事を書いたけど,先週に新しく無料コース「Vue.js + Firebase Authentication」が公開されたので,さっそく受講してみた.一番最後に Firebase Realtime Database を使う箇所があるので,順番的には「Vue.js + Firebase Realtime Database」を受講してから「Vue.js + Firebase Authentication」を受講すると良いと思う.今回も Vue.js 初学者と Firebase Authentication 初学者にオススメのコースだった.

kakakakakku.hatenablog.com

Vue.js + Firebase Authentication

vueschool.io

コースは計9個の動画で構成されている(そのうち1個はまだ非公開になっている).特に Firebase Authentication を使って「メール認証」と「Google 認証」が簡単に実装できる点が素晴らしく,こんなに簡単にできちゃって良いのだろうか?と思うほどだった.

  • Introduction to Firebase Authentication ⏲ 1:35
  • Sign up, in, or out with Firebase Authentication ⏲ 7:48
  • Firebase Authentication Error Handling ⏲ 3:17
  • Firebase Authentication via Third-Party Providers ⏲ 3:37
  • Update Firebase Authentication User Profile ⏲ 2:59
  • Update Firebase Authentication User Email and Password ⏲ 3:28
  • Link Multiple Firebase Authentication Providers to One User Account ⏲ 5:19
  • Additional User Data and Firebase Authentication ⏲ 4:19
  • Protected Routes with Vue Router, Firebase Authentication and Vuex ⏲ Coming Soon !

なお,以下のように英語字幕が出るので,英語が苦手な人でも,問題なく受講できると思う.前回と少し UI が変わっていて,再生速度の変更などの機能が追加されていた.

f:id:kakku22:20180522144639p:plain

(受講画面例)

実装した認証アプリケーション

以下の認証アプリケーションを実装した.

  • 「メール認証」と「Google 認証」でサインイン/サインアウトができる
  • 「メール認証」から「Google 認証」に紐付けることができる
  • プロフィールを更新することができる
  • パスワードの更新することができる
  • 追加情報(今回は好きな食べ物)を Firebase Realtime Database に登録することができる

f:id:kakku22:20180522144739p:plain

(実装した認証アプリケーションの画面)

前提

今回は localhostindex.html の動作確認ができるようにする必要があり,動画の中では特に紹介はなかったけど,今回は local-web-server を使うことにした.他のツールでも問題ないと思う.local-web-server を使うと http://localhost:8000 で動作確認ができるようになる.

$ npm install -g local-web-server
$ ws --spa index.html

www.npmjs.com

Introduction to Firebase Authentication

Sign up, in, or out with Firebase Authentication

まず,サポートされている認証方式の多さに驚いた.メールだけではなく,Google / Facebook / Twitter / GitHub などがあった.また,今回のコースでは使わなかったけど「匿名認証」もサポートされていて,あると便利な場合もありそう.なお,実行する前に「承認済みドメイン」を確認しておく必要がある.デフォルトで localhost は承認されているので,今回は localhost で動作確認をすることにした.

f:id:kakku22:20180522145250p:plain

(サポートしている認証方式一覧)

そして今回も実装は GitHub に公開されている.ただし,master ブランチだと完成形の index.html になっているので,写経しながら進める場合は,コミット履歴から1番最初に戻す必要がある.

$ git checkout e82855604d8374ae45b824e47d3a50f7fe5066ea index.html

残念ながら,今回は最初のコミットでも,微妙に実装が進んでしまっているので,正確に写経するのであれば index.html を以下の雛形にすると良いかと.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Firebase Authentication</title>
</head>
<body>

<div id="app">
  <h1>Vue School - Firebase Authentication</h1>
</div>

</body>
</html>

実装に入る前に,Chrome DevTools のコンソールから「メール認証」を試した.あまりにも簡単で驚いた.

firebase.auth().createUserWithEmailAndPassword('1@example.com', '12345678')

うまく動いたので,次は Vue.js でフォームとメソッドを実装した.簡単に「メール認証」を実現できた.

methods: {
  register () {
    firebase.auth().createUserWithEmailAndPassword(this.email, this.password)
  },
  signOut () {
    firebase.auth().signOut()
  },
  signIn () {
    firebase.auth().signInWithEmailAndPassword(this.email, this.password)
  }
}

f:id:kakku22:20180522145329p:plain

(実装したフォーム)

f:id:kakku22:20180522145355p:plain

(認証後の Firebase Authentication コンソール)

Firebase Authentication Error Handling

現状だと,パスワードが間違っていたり,メールアドレスが存在しなかったりする場合に以下のようなエラーが出るため,Promise でエラーを取得できるように修正した.

{code: "auth/wrong-password", message: "The password is invalid or the user does not have a password."}
{code: "auth/user-not-found", message: "There is no user record corresponding to this identifier. The user may have been deleted."}

Firebase Authentication via Third-Party Providers

「Google 認証」を実装した.と言っても難しいことはあまりなく,提供されている GoogleAuthProvider を使うだけだった.

methods: {
  signInWithGoogle () {
    const provider = new firebase.auth.GoogleAuthProvider()
    firebase.auth().signInWithPopup(provider)
      .catch(error => alert('🤕' + error.message))
      .then(data => console.log(data.user, data.credential.accessToken))
  }
}

Google アカウントに紐付く画像も取得できるため,以下のように画面を実装した.

<div v-if="authUser">
  <h2>Signed in as {{authUser.email}}</h2>
  <img :src="authUser.photoURL" height="150">
  <p>What's up, {{authUser.displayName || 'friend'}}?</p>
  <button @click="signOut">Sign out</button>
</div>

f:id:kakku22:20180522145640p:plain

(Google 認証に成功した)

f:id:kakku22:20180522145655p:plain

(Firebase Authentication コンソールでも Google プロバイダになっていた)

Update Firebase Authentication User Profile

次はプロフィール(今回は名前と画像 URL)を変更できるようにした.メソッドは以下のように authUser.updateProfile を使った.

methods: {
  updateProfile () {
    this.authUser.updateProfile({
      displayName: this.displayName,
      photoURL: this.photoURL
    })
  }
}

f:id:kakku22:20180522145912p:plain

(プロフィールを変更できるようになった)

Update Firebase Authentication User Email and Password

さらに「メール認証」のときにメールアドレスを変更できるようにした.本当に全て簡単にできてしまう.

methods: {
  updateEmail () {
    this.authUser.updateEmail(this.email)
  },
  updatePassword () {
    this.authUser.updatePassword(this.newPassword)
      .then(() => { this.newPassword = null })
      .catch(error => alert('🤕' + error.message))
  }
}

Link Multiple Firebase Authentication Providers to One User Account

なんと Firebase Authentication を使うと「メール認証」と「Google 認証」など,複数のプロバイダを紐付けることもできる.Firebase Authentication の linkWithPopupunlink を使うだけだった.

methods: {
  linkGoogle () {
    const provider = new firebase.auth.GoogleAuthProvider()
    this.authUser.linkWithPopup(provider)
      .catch(error => alert('🤕' + error.message))
  },
  unlinkGoogle () {
    this.authUser.unlink('google.com')
  },
}

f:id:kakku22:20180522150157p:plain

(複数のプロバイダに紐付けることができた)

Additional User Data and Firebase Authentication

Firebase Authentication で管理できるプロフィール情報は限られているため,例えば「ウェブサイト/誕生日など」任意の追加情報を登録できる機能を実装した.追加情報を保存するデータストアは Firebase Realtime Database だった.詳細は別のコース「Vue.js + Firebase Realtime Database」を参照してもらえればと.

f:id:kakku22:20180522144739p:plain

(追加情報を登録できるようになった)

f:id:kakku22:20180522151258p:plain

(Firebase Realtime Database のデータ構造)

Protected Routes with Vue Router, Firebase Authentication and Vuex

Coming Soon !

まとめ

  • Vue School が公開している無料コース「Vue.js + Firebase Authentication」を受講した
  • 1,2時間で Firebase Authentication の機能概要と実装イメージを把握することができた
  • こんなに簡単に認証機能の実装ができてしまって良いのだろうか?(ビックリ 👀)
  • 追加のプロフィールを情報を Firebase Realtime Database に保存する実装もあり実践的だった

プロダクションレディなマイクロサービスを実装するための標準化を学べる「プロダクションレディマイクロサービス」を読んだ

オライリーから出版されている「プロダクションレディマイクロサービス」を読んだ.「プロダクションレディ」という秀逸なタイトルに惹かれただけじゃなく,章ごとのテーマも非常に惹かれる内容になっていた.仕事でアーキテクチャを考えたり,アーキテクチャレビューを担当する場面も多いけど,ベストプラクティスなアーキテクチャをもっと上手に言語化したいなと思っていて,プロダクションレディなマイクロサービスの標準化を学べる本書に興味を持った.

  • 1章 マイクロサービス
  • 2章 本番対応
  • 3章 安定性と信頼性
  • 4章 スケーラビリティとパフォーマンス
  • 5章 耐障害性と大惨事対応
  • 6章 監視
  • 7章 ドキュメントと組織的な理解
  • 付録A 本番対応のチェックリスト
  • 付録B マイクロサービスの評価基準

プロダクションレディマイクロサービス ―運用に強い本番対応システムの実装と標準化

プロダクションレディマイクロサービス ―運用に強い本番対応システムの実装と標準化

  • 作者: Susan J. Fowler,佐藤直生,長尾高弘
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2017/09/13
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

小さなモノリス

「マイクロサービスアーキテクチャ本」にもモノリスを分割する話が載っていたけど,本書でも「モノリスを分割することが1番難しい」と書かれていた.コンテキストの見極めに失敗すると「モノリスを数個の小さなモノリスに分割するだけ」になってしまうと書かれていて,「小さなモノリス」という失敗パターンの表現は刺さった.確かに「小さなモノリス」って言われたらツライ...!

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

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

逆コンウェイの法則

マイクロサービスの文脈でよく聞く「コンウェイの法則」に対して,本書では「逆コンウェイの法則」というパワーワードが出てきた.意味としては,マイクロサービスを積極的に採用していくと,必然的に独立した小さなチームが多くできるということだけど,さらに「逆コンウェイの法則」は組織構造だけじゃなく,個々のエンジニアにも当てはまるという話が興味深かった.ようするに,担当するマイクロサービスに特化した責任とドメイン知識が強まるため,全体を把握したエンジニアがいなく「集合的に全体を把握する」ことになるということだった.良し悪しを決めるというよりは,法則の納得感があるところが良かった.

インシデント発生時の「緩和」と「フォローアップ」

インシデント(障害)発生時には,以下の5種類の段階があり,モノリスと比較するとマイクロサービスだと「調整」「フォローアップ」が必要になるという話だった.個人的には「緩和」「フォローアップ」の重要さがまとまっているのが素晴らしいと感じた.

  • 評価
  • 調整
  • 緩和
  • 解決
  • フォローアップ

「緩和」というのは「インシデントの影響を小さくする」ことを意味していて,インシデント発生時にすぐバグを直すのではなく,まずはユーザー影響を考えるべきと言い換えることができる.サービスを運用していて「インシデント対応が上手だな」と感じる人は緩和が上手だと思うし,SIer 時代から意識するようにしている.個人的には「緩和」という言葉が定義されていることに意味があるので,仕事でも積極的に使っていこうと思う.また,3章では「ホットフィックスはアンチパターン」という話もあり,すぐに直すのではなく,まずは安定バージョンに切り戻すことで「緩和」できるということにも繋がる.

「フォローアップ」は SRE の文脈で出てくる「ポストモーテム」と同じだった.仕事でも最近はポストモーテムを書くようにしていて,重要なのは「インシデントから学ぶ」姿勢と言える.

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

  • 作者: 澤田武男,関根達夫,細川一茂,矢吹大輔,Betsy Beyer,Chris Jones,Jennifer Petoff,Niall Richard Murphy,Sky株式会社玉川竜司
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2017/08/12
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (1件) を見る

オンコールローテーションの定義

マイクロサービスの監視には4種類の構成要素があり,ポイントがまとまっていた.内容的にはマイクロサービスに特化しているようには感じなくて,モノリスでもサービスを運用する上で重要な話だった.

  • ロギング
  • ダッシュボード
  • アラート
  • オンコールローテーション

その中でも「オンコールローテーション」はマイクロサービスだと特に設計が難しそうで,定義が載っているのは参考になった.よくあるのが「1番詳しい人が常にオンコールを受けている状態」だったりするので,マイクロサービスでも,モノリスでも,サービスを運用する前にオンコールローテーションは決めておくべきだと感じた.個人的には,オンコールローテーションを運用しているチームも,運用していないチームも経験があるけど,やはりオンコールローテーションという責任が明確に与えられている方が良かった.

  • 1度にオンコールを受けるのは2名以上
  • オンコールシフトは1週間未満
  • 次のオンコールシフトまで1ヶ月以上の間隔を空ける

マイクロサービスのドキュメント

7章に「リポジトリの README もコードコメントもドキュメントではない」という話があり,刺さった.目指す方向性としては,全てのマイクロサービスのドキュメントが一箇所に集まっていることが重要とのことだった.そして,マイクロサービスのドキュメントとして,まとめるべき項目が整理されているのが目から鱗だった.確かにここまで書けば,包括的で実用的なドキュメントになりそう.特に「オンコールランブック(インシデント発生時の対応方法)」「FAQ(よく聞かれることならなんでも)」は,めちゃめちゃ良かった.

  • 説明
  • アーキテクチャ図
  • 連絡先とオンコール情報
  • リンク
  • オンボーディング/開発ガイド
  • リクエストフロー/エンドポイント/依存関係
  • オンコールランブック
  • FAQ

まとめ

「付録A 本番対応のチェックリスト」も便利で,今回記事にまとめたところ以外にも学びが多く,マイクロサービスを作る前に必読な良書だった.標準化として満たすべき項目が非常に多く「お前のマイクロサービスはマイクロサービスじゃねぇ!」と叱咤激励されているような気分にもなり,気持ちが引き締まる思いだった(笑)

また,マイクロサービスに特化しすぎていなく,モノリスだとしても,サービスを運用するときに必要なポイントがうまく言語化されているのが良かった.オススメ!

f:id:kakku22:20180517011305j:plain

(今回も付箋だらけになった...!)

関連記事

やはり「マイクロサービスアーキテクチャ本」と合わせて読んだり,「マイクロサービスアーキテクチャ本」の筆者 Sam Newman の登壇動画を合わせて見ると,より理解が深まると思う.

www.youtube.com

kakakakakku.hatenablog.com