今年読んだ技術書籍(2019年)

by Taichi Nakashima,

今年読んだ技術書籍やレポートなどをざっくりまとめてる.Infrastructure Engineer・Platfomerとして日々の業務に直結するものから1年くらいかけてやっていきたいと思っていることなどを中心に.

Kubernetes

業務ではメインにKubernetesを使っているのでKubernetesに関わる書籍は発売されれば大体目を通すようにしている.

今年発売されたので良かったのはProgramming Kubernetes.この本はCRDやOperatorによってKubernetes nativeなアプリケーションを構築することにフォーカスしている.昨年のJapanContainerDaysでのMicroservices Platform on Kubernetes at Mercariでも話したようにKubernetesを使う大きな理由の1つはその拡張性にある.Kubebuilderなど便利なフレームワークはあれどやはり中身をちゃんと理解するのが重要なのでそれを体系的に扱ってる本は重要.

Brendan BurnsのDesigning Distributed SystemsはContainerを使った分散システムの様々なBuilding BlockやPattern(例えばSidecarパターンやAmbassadorsパターンなど)を紹介している本.Kubernetes上で作るサービスのArchitectをやっていきたい人とかは一度読む良いと思う.分散システムはデザインして構築してデバッグするのが複雑で難しいが「適切にStructuredすればよりReliableであり正しくArchitectedすればよりScalableな組織に導くことができる」というパンチラインとても好き.自分がPlatfomerとしてやりたいことを端的に表している.

先日の登壇でも話したように今自分がメインに作っている基盤にはメルカリだけではなくメルペイも動いておりセキュリティはとても重要な要素になっている.Kubernetes界隈はコンテナという新しいパラダイムのためにセキュリティの進化もめざましくて新しいツールなどを追うのはなかなか大変でHotな分野でもある.AquaのLiz RiceらによるKubernetes SecurityはKubernetesのセキュリティに特化した本(Report).若干古くなってしまったが基礎的な部分が抑えられているのでざっと目を通すのはおすすめ.

Kubernetesの本で読むべき本を聞かれたときには自分はDeveloperなら[Kubernetes: Up and Running](Kubernetes: Up and Running)でCluster AdminならManaging Kubernetesを勧める.でその[Kubernetes: Up and Running](Kubernetes: Up and Running)の2nd Editionが今年出た!1st Editionからの差分はResourceの解説としてRBACやIngressが,PracticeとしてYAMLをGitでどのように管理するかといった話が,Extending KubernetesとしてCRDやAdmission webhooの紹介が追加されていてよりよい感じになっていた.

SRE

自分は今はSREではないがインフラを扱うPlatformerとしてGoogle SREの考え方やプラクティスは常に参考にしている(その辺りの話をSRE NEXTで話すので皆来てくれ!!).

Site Reliability EngineeringThe Site Reliability Workbookに続いてGoogleのSREとSecurity TeamからBuilding Secure Reliable Systemsという本が出た.SecurityとReliabilityは両方とても重要な要素だが同時に満たすのは難しい.それぞれに想定しなければならないリスクが異なる(自然に起こる悪意のないマシン障害 vs. 悪意のある攻撃者).Reliabilityを優先すると脆弱になるしセキュリティを厳しくしすぎるとReliabilityに支障をきたす.じゃあそれをGoogleはどうしてるのか扱ったのが本書.まだEarly Releaseで3章までしか出てない(しかも無料で公開されてる!!)がめちゃくちゃ面白かったので全部出るのが楽しみ.

もう一つ読んだのがCase Studies in Infrastructure Change Managementという本(Report).GFSからColossusへの移行(2年)とDisklessへの移行(6年!)というGoogles社内の大規模なインフラ移行の解説とそこから得られた学びについてそれに関わったSREのTPM(Technical Program Manager)が書いたReport.業務でも今年半年くらいかけてKuberbetes Clusterの移行という大きなインフラ移行プロジェクトをやっていたのでとてもタイムリーな内容だった.自分たちが上手くやれてるところもあればもっとうまくやれたかなーということもありこのReportに書かれてる事は規模は違えど分かるわーっての多かったし次に活かせそうな学びあって良かった.

他にSREというかインフラ関連だとCindy SridharanのDistributed Systems ObservabilityとかDaniel Stenberg(Curlの作者)によるHTTP/3の解説本であるHTTP/3 explainedとかを読んだ.

Management

MicroservicesやPlatformという組織に直結することに関わっているしTech Leadとして率いているチームが大きくなってきたこともあり今年はエンジニア組織やチームに関わる本も多く読んだ.この辺は技術書とは呼べないと思うけどw

今年読んだ本で一番おもしろかったのがWill LarsonによるAn Elegant Puzzleという本.Will LarsonはDiggやUberなどを経て現StripeでInfrastructure TeamのEngineering Managerをやっているひとで,それらの企業での経験をもとにEMとしてのチームのつくりかたVPやDirectorとしての組織のつくりかたが書かれている本.1000人から6000人への組織拡大みたいなHyper scaleをやってきたのはすごい… あとこの本とは別にHow to invest in technical infrastructureでは共通基盤などにいかに投資していくかといったことも書いていて最近ずっと学ばしてもらっている.

本ではないけどStripeが発行してるIncrementsのTeam特集も面白かった.上のWill Larson(Do engineering managers need to be technical?)や元Fastly VPのKevin Stewart(How to build a startup engineering team),元Google SRE現HoneycombのLiz Fong-Jones(Code less, engineer more)といったひとらが寄稿している.いろんなひとのつまみ食い系でいうとEMが知るべき97のことも楽しそうね(まだ読んでない).

この分野で今後発売される本でいうと元SpotifyのJonathan RasmussonによるCompeting with UnicornsとかSoftware Engineering at Googleが楽しみやねえ

あとEM関連ではないけどPlatform teamではPlatformを(社内に向けた)プロダクトとしてみてどのようにプロダクト管理をするか? どのようにプロジェクト管理するか? ってのを常に試行錯誤していきた.Agileなどを経てBasecampが実践しているSix week release cycleというやり方に行き着き今はそれを少しカスタマイズしてプロジェクトを回している(詳しくはHow We Structure Our Work At Mercari Microservices Platform Team で話した).Shape Up(Webで無料で公開された! )はBasecampのProduct StrategyのRyan SingerがそのSix-week release cycleについてが書いた本.いかにやるべきプロジェクトを決め(「どれだけ時間がかかるか?ではなくてどれだけの時間を使いたいか?どれだけ価値があるか?」を考える)・いかにそれを回すか(Six week release cycle)について詳細に書かれておりめちゃ学びがあった.

Chaos Engineering

ここからは今後やっていきたい分野で学んでいること.まず1つ目はChaos Engineering.Chaos Conf 2018でAdrian CockroftがKeynote Chaos Engineering - What it is, and where it’s goingでも話しているようにはこれまでNetflixやAmazon,Googleくらいが大規模にやってきたResiliencyへの取り組みがChaos EngineeringというPracticeとなりより広く多くの企業が採用し始めたのは近年になってから(2016年にはGremlinというChaosのSaaSも登場している).学ぶほどに自分らがいるところと比べて程遠いなあと感じ段階的にやっていきたと思っている.

SREの原典がSite Reliability EngineeringだとするとChaos Engineeringの原典はAli BasiriらのChaos Engineeringになる.これはNetflixがこれまでやってきたChaos Engineeringを体系的にまとめた本.Chaosに興味があるひとは必ず目を通すと良い.面白かったのはNetflixの社内でさえもChaosとはランダムにインスタンスを殺すことだと思ってるひとがいたということ.本は2017年のもので今年はAutomating chaos experiments in productionという論文も出ていてより自動化が進んでいるのが紹介されている…!

他にも具体的なChaos Toolkitを使ってChaosを実践するLearning Chaos EngineeringやObservabilityにフォーカスしたChaos Engineering Observabilityといった本も目を通したがまあそこまで面白くなかったw まだ盛り上がり始めたばかりの分野でもあるので多くの事例が登場するのはこれからかな

BPF

Cloudに移行するほどPerformance改善とそれに直結するCostは重要になる.そういう意味でObservabilityは重要になっているしBPFは身につけていきたい技術の一つ.今年は本が2つも出て良かった.

SysdigのLorenzo Fontanaらによって書かれたLinux Observability with BPFはBPFのアーキテクチャからBPFToolやBPFTrace(Kubectl-traceも!)といったBPFのUtilitiesの紹介や実際のUsecaseまで幅広く書かれている本で入門としてとても分かりやすい本で良かった.

BPF Performance Tools: Linux System and Application ObservabilityはLinux Performance界隈の重鎮でBFPの開発や発展に貢献してきたBrendan Gregg先生によって書かれた本.かなり詳細.Systems Performanceと同様にCPUやMemoryなどコンポーネントごとにBFPツールや使い方が紹介されている.全部は読んでなくて辞書的に使っていこうかなという本.

ACM Queue

自分が関わる分野の論文もちゃんと読んでいこうと思いつつもなかなか動けずthe morning paperを読んで満足してしまってるのは良くないと思いACM Queueを年間契約して読み始めた(論文とは言えないと思うけどw).まだ全部読むのはできてなくて気になったものを拾い読みするくらいしかできてないけど習慣にしていきたい…(Microservicesの話でいうと異なるDatastoreを扱うような分散システムにおいてDistributed Transactionsを使わずにデータのConsistencyを確保するOLEPの話とか面白かったOnline Event Processing).

Hashicorpは最新の論文などを応用してリアルな世界で使えるツールを作っていてかっこええなあと思っている.Leaving the Ivory Tower: Research in the Real WorldはHashicorp社内のResearchチームと実際のプロダクトチームがいかにコラボしているかが紹介されているがこういうループを自分たちのチームでも作りたいなあと思ってみている.