文喫で読んだ本2019/10/01

僕は君たちに武器を配りたい

僕は君たちに武器を配りたい

先日亡くなられた瀧本哲史氏の著名な本。 2011年の本なので8年も前になる。これから社会に出ていく若者に向けて、取るべきアクション・持つべきメンタリティについて述べた本。 前半はこれまでから今にいたるまでの社会状況の整理、後半は、今後生き残れるタイプとして「マーケター」「イノベーター」「リーダー」「投資家」の4つのどれか(どれか1つという意味ではなく複合的に持つことを推奨している)として、それぞれの特徴を解説している。 まだAbemaTVがなかった2011年にネット放送局の可能性を強く主張していたり、ソーシャルゲーム業界の今後の厳しさを予見したりしているなど、8年経った今だからこそ面白く読める部分もあった。

2030年の情報通信技術:生活者の未来像

2030年の情報通信技術:生活者の未来像

2015年に出版された本で、情報通信技術を広い分野にわたって俯瞰し、2030年に何がどこまで実現しているかを予測している。

の5つに大別し、要素技術からサービスレベルの技術まで、とても具体的に解説・分析がされている。参考文献リストも豊富で、未来予測系の書籍としてはとても真摯で内容も濃かった。 いわゆる(私の現業務でいうところの)IT技術は「情報オリエンテッド技術」の分野に書かれていて、それ以外の内容は専門外であったが、わかることわからないことどちらもとても勉強になった。

私たちは子どもに何ができるのか――非認知能力を育み、格差に挑む

私たちは子どもに何ができるのか――非認知能力を育み、格差に挑む

「非認知能力」(自制力、やり抜く力(Grit)、レジリエンスなどと本書では定義されている)を伸ばすにはどうしたら良いかについて述べた本。現代の学校教育は認知能力(読み書き能力や知識をつけること)は行っているが、非認知能力を伸ばす取り組みは不十分である。 「どうしたら非認知能力が伸びるか」という疑問への答えとして本書では、3歳あるいは5歳までの乳幼児期には、親や周囲の大人たちが子どもに対して(機械的なものではない)心からのケアをすることが大事であると述べている。学校教育では、子どもが「自分は意味のあることに取り組んでいる」と思える活動を増やすべきとしている。 本書では、教育問題に貧困の問題をかけ合わせて考察しており、今日本でも起きている育児に関わるいろいろな問題(虐待・核家族化・保育環境・教育プログラムなど)も思い出しながら興味深く読んだ。 

優れた戦略とは、面白くて人に話したくなるようなストーリーである、とういことを長々と書いた本。楠木健さんはファンで文章が面白いのだがいかんせん長過ぎる。60ページくらい読んで一旦挫折。

成毛さんはSNSもフォローしているが、文章が面白い。リズムが良くて読みやすく、記憶に残る内容だ。本の内容はインプットしたらどんどんアウトプットせよという内容。

B.C.1177 (単行本)

B.C.1177 (単行本)

紀元前1200年ごろに地中海の複数の王国からなる青銅器文明が軒並み滅んでしまったことについて、原因をさぐる物語。 結論としては、中央集権化および多国間のつながりが複雑になり社会システムとして脆弱になり、それが地方分権が進んだことや自然災害や外敵の侵入により一気に崩壊が伝播して滅んでしまったというもの。 時間がなかったため速読っぽく読んだが、当時の青銅器にとっての錫と、現代における石油を類比させて語っていて、解説にもあるが現代の社会にもつながる話と感じた。

ディープテック 世界の未来を切り開く「眠れる技術」

ディープテック 世界の未来を切り拓く「眠れる技術」 | 丸 幸弘, 尾原和啓 |本 | 通販 | Amazon https://www.amazon.co.jp/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%86%E3%83%83%E3%82%AF-%E4%B8%96%E7%95%8C%E3%81%AE%E6%9C%AA%E6%9D%A5%E3%82%92%E5%88%87%E3%82%8A%E6%8B%93%E3%81%8F%E3%80%8C%E7%9C%A0%E3%82%8C%E3%82%8B%E6%8A%80%E8%A1%93%E3%80%8D-%E4%B8%B8-%E5%B9%B8%E5%BC%98/dp/4296103636/

きっかけはこの記事。ただ、本書の共著者である尾原和啓さんの「アフターデジタル」は以前読んだこともあり、どちらにしても近いうちに手にとったかもしれない。

ディープテック 世界の未来を切り拓く「眠れる技術」書評|Hal Seki|note

「ディープテック」という言葉は英語圏でも一応あるがそこまで存在感のある言葉にはなっていなさそうだ。

Deep tech - Wikipedia

ただ、本書では特にディープテックの主な舞台を東南アジアとしてるので、英語圏でもむしろこれからなのかもしれない。 この分野が東南アジアという経済が急成長している地域で盛んになっているのは、いまグレタさんの国連での演説でも話題にもなった、環境問題と経済成長との両立という課題を真っ向から解決しないといけない地域であるというのもあるのだと思う。それを両立させる道としてディープテックがある。

ディープテックとは何かを本書の定義に沿ってより簡潔にいうなら、「時間も資本も必要で参入障壁の高い、社会的な課題を解決しようとするテクノロジー(もしくはスタートアップ企業)」ということになる。

本書で挙げられている事例をメモ。

  • パーム油の絞りカスから新たな商品を生み出す(Noveltindo Eiyo Technoprima)
  • 車のガソリン・メンテナンス・代車代込の月額定額制のレンタカーサービス

www.riversimple.com

  • 重いプロパンガスのボンベをこれまでの鋼材ではなく強化プラスチックを使った軽量な素材で置き換える

tech.nikkeibp.co.jp

  • 塩と水で灯りを灯す塩ランプの開発(SALt)
  • スマートフォンを使って本の文章を点字に変換する(ReadRing)
  • マメ科の根粒植物を使った二酸化炭素削減(The Audacious Project)
  • ドローンを使ったインフラ設備や建設現場のモニタリング(エアロダイン)
  • 石炭燃料の廃棄物を道路に敷くアスファルトの代替の建築素材として使う(Tech Prom Lab)
  • 液体を使った空気を清浄する(新重工)
  • ドローンによる苗植え(Rice Seed Sowing)
  • ライスハスクを使った小型の米乾燥機(KomeTech)
  • ライスハスクからシリカを生成
  • シリカにニッケルのナノ粒子を付着させて殺菌効果のあるゴムを開発(Bac Off)
  • キッチンのゴミ箱にカメラと重量計を設置し、食糧廃棄を減らす方法をAIがアドバイス(Winnow)
  • 高圧の二酸化炭素を使うことで*染色する際の水やケミカル物質を省資源化・リサイクル(DyeCoo)
  • 月額制で水の使用料を払うかわりに井戸の設置の初期投資を負担するサービス
  • 機械油のサブスクリプション(Kluber Lubrication)
  • プロペラのない、垂直軸型マグナス式風力発電機(チャレナジー)
  • 米からエタノールを製造(ファーメンステーション)
  • ミドリムシの培養プールとその建設費削減(ユーグレナ、小橋工業)
  • 不要になった衣類やプラスチックをリサイクル(日本環境設計)
  • 植物工場を中心とした街形成(ファームシップ)
  • ジェネリック医療機器(レキオ・パワー)
  • 電力を使わず脈動流を起こす節水ノズル(DG TAKANO)

ディープテックを特徴づけるキーワードとして2つ挙げられている。 * by-product - 何かの商品の副産物(主にこれまで廃棄物だったものを使う)として新しい商品を生み出すこと * decentralized - 非中央集権的・分散的なアプローチを取ること

私自身も11月からまさにディープテックな業界に飛び込もうとしている。ディープテックという言葉はこれまで知らなかったが、わかりやすい単語が本にもなって出てくるというタイミングで、そういう時流があるのだと思う。その点でタイムリーな本だった。

CodeBuild & ECSで、ヘルスチェックでGitのコミットハッシュを返すように環境変数を渡す

これを見て以来、実際やりたいと思っていたがやるチャンスがあったのでやってみた。

特に開発環境だと、複数のブランチが同じ場所にデプロイされることがあったり、デプロイ中で、いつ切り替わったのか知るために、いまGitHub上でいうどのリビジョンが実環境に上がっているかを端的に知りたいときがある。

今回やったのは、AWSのCodeBuildで、ECSにデプロイするウェブアプリケーション

アプリのほうは、ヘルスチェックのパスに対してアクセスすると、GIT_COMMIT_HASHみたいな環境変数が定義されていたらそれを文字列で返すように実装する。 こちらは特に難しい部分がないので説明は割愛。

CodeBuild側の設定で妙にハマってしまったのでメモを残しておく。

dev.classmethod.jp

最初、上記の記事を見つけたので楽勝じゃんと思って設定してみたがうまくいかなかった。記事中の例はどこからソースコードをフェッチしてきているか言及がないが、GitHubの場合は取得したソースには.gitは無いため、gitコマンドは使えないといってエラーになる。

そこでAWSのドキュメントを改めて見てみた。

docs.aws.amazon.com

CodeBuildでGitHubからウェブフックしてきたとき、GitのコミットIDが入っている環境変数がある。 CODEBUILD_RESOLVED_SOURCE_VERSIONがそれにあたる。 似たような名前のものとして CODEBUILD_SOURCE_VERSIONもあるが実際にログに出してみたところ、こちらはアーティファクトのARNの値が入っていた。

CODEBUILD_RESOLVED_SOURCE_VERSIONの変数をDockerfile内で直接参照できるかと思ったら、それはできなかった。

そこでこの変数をbuildspec.ymlでdocker build時に--build-argの引数として渡す。

build:
    commands:
    - docker build --build-arg CODEBUILD_COMMIT_HASH=$CODEBUILD_RESOLVED_SOURCE_VERSION -t $IMAGE .

それをDockerfile内でARGで一旦受けて、ENVに格納する。これでコンテナイメージの中に $GIT_COMMIT_HASH 環境変数が格納された。

ARG CODEBUILD_COMMIT_HASH
ENV GIT_COMMIT_HASH $CODEBUILD_COMMIT_HASH

SREcon19 Asia/Pacific参加メモ: 3日目 と総括

3日目(最終日)のメモです。各セッションを振り返ったあと、総括をします。

How We Used Kafka to Scale Database Infrastructure

LinkedIn内部で使われているドキュメントデータベースであるEspressoについて、Kafkaを使ってデータのレプリケーションをどう行っているかを解説したセッション。

f:id:road288:20190616003924p:plain:h200

EspressoはバックエンドにMySQLを用いたクラスターデータベースで、以前はデータの可用性を高めるためのレプリケーションMySQLレプリケーション機能を用いて行っていた。ただそうするとインスタンス(ノード)ごとのレプリケーションとなり、柔軟性やフェイルオーバー時の負荷の集中などに課題があったので、Kafkaを使ってパーティション単位のレプリケーションアーキテクチャを変更した、というのがセッションの主旨。

Kafkaを用いて工夫しているのは、次の3点がポイント。

  • KafkaのメッセージにはGTID(Global Transaction Identifier)が振られていて、必ずその順番でスレーブに適用されるようになっていること
  • マスターのフェイルオーバー時には、スレーブ自らがメッセージをプロデュースして、新しい世代番号のGTIDを発行して、それを自分自身がコンシュームすることで、マスターの切り替えを厳格に行えること
  • メッセージのチェックポイントの機構を持っていて、あるメッセージがパブリッシュに失敗しても、直前のチェックポイントからやり直す仕組みがあること

他のカンファレンスやウェブの記事でもいくつか取り上げられていて、例えば下記のスライドが詳しいのでこちらを見てもよいと思う。内容は9割がた同じ。

www.slideshare.net

How to Start On-Boarding of SRE

Quipperに勤務する日本人の @chaspy_ のセッション。オンボーディング(入社またはチームにジョイン後、仕事にスムーズに入っていくための講習・手続き・サポートなど)に焦点をあて、SREのオンボーディングはどうあるべきか、Quipperでの実例が語られた。

自身がチームにジョインした際、完全に1人で動けるようになるには半年かかった経験から、オンボーディングを適切に行うことでこの期間を短縮できるのではと考え、自らが新入のメンバーに対してオンボーディングを企画して始めた。

技術面とメンタル面の2つに注目して、前職の仕事内容とのギャップ、それにともなう精神的不安があったとし、それを解消するようなオンボーディングを実施することで、新しいメンバーは2ヶ月で自立できるようになったとのこと。

オンボーディングにおけるポイントは3つ。

(1)ゴールを設定すること。

  • チームのミッションは何か?
  • チームは何の責務を負っているか?
  • 日々やらなけれればならないことは何か?

ここから何をできるようになればよいのかが定義できる。Quipperの場合は「Infrastrucure as Codeが実践できる」「アラートに対応できる」「Pull Requestがレビューできる」「中長期タスクに取り組める」がある。

これをもとに、(2) 学習曲線をデザインしていく。

セッション内では、GitHubのIssue、Pull Request、Quipperのウェブ上のHandbookなどを用いてハンズオンでオンボーディングが進められている様子が紹介された。

(3) 1on1を通じてフォローすること

1on1では「直近やっていること」「次週の計画」「いま困っていること」をフォローする。そして、最初に定義したゴールへの進捗を追いながら、自立までフォローしていく。

これらは今ではテンプレート化され、社内の他の部署でも使われるようになっているとのことだった。

オンボーディングをここまで体系立ててやっている事例紹介はあまりないので貴重だった。

発表資料はこちら

Lightning Talks

5分ずつだが、短いなりにコンパクトにまとめられていてテンポがよく、どれも良かった。

Developing Effective Project Plans For SRE Internships

SREのインターンをどのようにやるべきか?を考察。

  • 「実験的なもの」または「まだ未着手な(Greenfield)もの」に取り組んでもらう
  • 何かをship(本番リリース)してもらうことを重視しよう
  • 運用業務とコードを書くことを両方入れよう。SREの実際の業務イメージを体験してもらう
  • メンターの自分自身でもやりたいタスクかどうか?を考えよう
  • インターンのアウトプットに対する期待値の最大・最小をイメージとしてもっておこう
Zero Downtime Cross-Cluster Migration of Microservices in Kubernetes

Kubernetesクラスター間でマイグレーション(移行)する際にゼロダウンタイムで行った事例紹介。

クラスターはVPNで相互接続されていて、両者のPod間での疎通ができることを前提として、Migration Controller(おそらく自作)が両クラスタにいて、LabelとAnnotateをうまく使ってトラフィックをスイッチしているようだった。LTだったこともあり詳細はわからず。

How to Ruin an SRE-Dev Relationship in 3 Simple Steps

SREと開発チーム(dev)の関係をどうあるべきか、どうしたら両者の関係が壊れてしまうのかという逆説的な視点から考察。

  • [step0] 相互理解すること
    • SREのResponsibilityを定義する
    • SREとdevはアプローチは違えどゴールは同じことを確認する
  • [step1] 相互に信頼すること
    • ミーティングで話し合う
    • devが本番環境で辛いと感じていることを聞き出し、改善する
  • [step2] コラボレーションする
    • 定義ミーティングを設ける
    • 次の四半期でやることを一緒に計画・実践する
An Effective Agile SRE Workflow

SREはたくさんやることがある。ワークフローを最適化したいよねということで、うまいやり方の提案。

  • 「SREのメインプロジェクト」「リクエストに対する対応(Toil)」の2つのボード(Kanbanをイメージしていると思われる)に分けて管理
  • WIPの数を制限
  • Interrapt Shieldを使おう(今はこのタスクに着手できないって自らストップかけることを宣言するようなイメージに感じた)
5 Actions for Training Your SRE Team

SREチームとして成長するための5ステップ。

  • 学習するための安全な場所を持とう
    • システムリソース的な話なのか、場所の話なのか、心理的安全のことなのか、ちょっと聞き取れなかった
  • チームの他のSREのことを知ろう
    • その際、彼らの評価という視点からは切り離して捉えることが重要
  • 技術的にどこにフォーカスするかを決めよう
  • ワークグループを作って皆で一緒に取り組もう
  • 進捗をトラッキングしてチーム内で各自共有しよう
Managing Terraform State at Stack Overflow

Terraformのアップグレードの話。おそらくモジュールのアップグレードに焦点をあてた話。アップグレード時にStatefileに差分が出たり壊れたりするケースがあるようだが、Terraformのアップグレード自体はまだ経験がなくピンと来なかった。

Transparency—How Much Is Too Much?

透明性の重要性について、いくつかのフェーズに分けて考察。

  • エンジニアチーム内での内部の透明性
  • 組織内・社内での内部の透明性
  • 社外のステークホルダーとも情報を共有する透明性
  • 全世界にパブリックに情報を公開するという意味での透明性
Dashboards for Thousands of Services

Googleダッシュボードをどう作っているかという話だと思うが、ポイントがいまいちわからず。

  • アプリケーションの SLO→メトリクス→アラート→ダッシュボード、とする
  • 標準化する、水平にデータを集める、サービスオーナーが自身でダッシュボードを作れる
What SREs Can Learn from Moms about the Preventative Paradigm

母の育児という仕事は「予防、事前に対処する」という行動ばかりでSREにとって大変参考になるという話。言われてみればそう感じることも多く、LTの中で一番おもしろかった。 SREの職務全般と母の仕事にも共通点が多い。

f:id:road288:20190616004157p:plain:h200

Our Practices of Delegating Ownership in Microservices World

メルカリで組織をスケールさせるという視点で、マイクロサービスを管理権限をどのように各マイクロサービスチームに権限移譲しているかという話。 ポイントとしては

  • Terraformの設定ファイルはモノレポで管理
  • 本番環境チェックリスト、GitHubでチェック&レビューのプロセスを回している
Error Budgets in Banks—Challenges & Way Forward

Error BudgetをBank社でどのように運用しているかについて。エラーバジェットに透明性を確保することで、実際の金銭の予算のアロケーションとも連動させているというような話だと理解。

Aperture: A Non-Cooperative, Client-Side Load Balancing Algorithm

TwitterのFinagleの内部で使われているロードバランサのApertureのバランシングアルゴリズムについてのセッション。 Client-Sideというのでこれは最初ブラウザのJavascriptで制御する話かと一瞬思ったがそうではなく、Finagleのマイクロサービスのクライアントという意味(Finagleは主にScalaで実装されている)。

話は下記の記事と共通する部分が多い。使っている図も同じ。

Aperture Load Balancers — Finagle 19.5.1 documentation

横に並列に大量にスケールさせたサーバー同士で通信する場合の接続先について考えたときに、各サーバーが相手先の全サーバーに全部均等にコネクションを貼ろうとしてしまうとコネクション数が爆増してしまう。そのため、例えば相手の接続先が100台あったとしても各サーバーが実際につなぐのはそのうちから選んだ3つに対して接続させるようにして、それがうまく均等にできればリソース効率が良い状態にできる。その際に考慮に入れるのは接続先に対するレイテンシと、接続先の負荷状態。

セッションでは、どのようなアルゴリズムを試してきたかを紹介し、 現在たどりついたベストの実装について述べていた。

f:id:road288:20190615105804p:plain:h200

自分の理解では、図のようなリング(輪)のトポロジで、各サーバーをリング状に均等に割り振り、それを接続元・接続先を一緒の円として重ねたときに重なる部分がそれぞれの接続元が接続先につなげるときのサブセットとして決まる。

それを一回決めるだけならそれほど難しくないが、次のチャレンジはそれを継続的に行うことだ。サーバーは数が増減するしトラフィック量も負荷状況も変化していく。各サーバーが次のリクエストで接続先を選ぶときに中央で管理するのではなく個別に(discrete)判断して、それがうまく推移的になり、結果的にランダムに配分されている、それがResiliencyといえる。そうしたアルゴリズムの詳細についての解説だった。

High Availability Solution for Large Scale Database Systems

Baiduのエンジニアによる、超大規模のMySQL運用において高可用性を保障するための工夫について述べたセッション。

f:id:road288:20190615111540p:plain:w250

BaiduにおけるMySQL利用の規模はかなりのもので、1万ノード以上、ペタバイトのデータ量、複数のクラウド利用およびハイブリッド、MySQLバージョンの混在など、運用が大変なため、自動化の必要性に迫られていた。

これだけあると故障は日常的にあるので、HA構成をきちんと取らないといけないが、Baiduでは決済取引などのクリティカルな用途にもMySQLを使っているので、ノードのFail検知や復旧後のデータの一貫性については譲れない要件だった。さらに規模の大きさから同時並行で処理ができる必要があり、既存のソリューションであるMHAMMMではその要件を満たせなかったとのことだった。

Baiduで採用したアプローチはXAgentというプロセスをすべてのMySQLノードに配置して管理するというもの。設定を注入するノードは別途いるが、XAgentはそれぞれ個別に協調動作し、SPOFは無い。

さらに、ノードのFailを検知する仕組みについても解説があった。「ノードがFailした」と一言でいってもさまざまな状況があり、一時的に負荷が高くて応答しないだけかもしれないし、ネットワークのレイテンシが高いだけかもしれないなど、ミス検知してしまう可能性はいくつものケースが想定される。そこでBaiduでは3レイヤーに分けて検知のアルゴリズムを組み、ミスがないようにしているとのことだった。

f:id:road288:20190615112740p:plain:w250

次に、フェイルオーバーの際にデータの一貫性をどう厳密に保障するかという話があった。 フェイルオーバーといってもレプリーションのやりかたがasyncなのか、semi-async(Group Replication)なのか、Raft/MGR(これがなぜここで出てくるのかわからなかった)によって異なるとし、細かい調整をやっている話だったが、この詳細は理解ができなかった。

Ironies of Automation: A Comedy in Three Parts

自動化の皮肉、ということで、自動化によって生じる新たな問題と、それに対して人間と機械のバランスをどうとるべきかについて述べたセッション。

"Ironies of Automation"というのは、約30年前の1983年にBainbridgeによって書かれた文書とのことだ。私は知らなかったので軽く読んでみた。

Ironies of Automation

(自分なりの要約)機械による自動化は、自動化した際には想定していなかった事態が起こったときにオペレータが臨機応変に対応できる能力が落ちてしまうことにより、新たな問題を生む。時間をかけて蓄積したオペレータのCognitive Skillは非常に価値があり、高度な自動化がなされたシステムであっても経験を積んだオペレータの価値は変わらない。

この文章には2012年にBaxterらによるフォローの文書がある。

The ironies of automation … still going strong at 30?

(自分なりの要約)Bainbridgeが言及したときから30年たったが、原則は変わっていない。むしろCloudComputingの登場などで新たな問題が生まれている。

おそらくこれらを前提としたうえで、3つの仮想のエピソードが紹介される。 ただ、これが寓話にSREのケースを当てはめて話を進める感じで、いまいちよくわからなかった。

1回聞き直してみたがそれでもわからない。英語がわからないのはもちろんあるが、前提としているコンテクストの知識が足りないのだと感じる。 部分部分で何を言っているかは分かる。このセッションはクロージング・セッションであって聴衆に考えさせるのが目的でプレゼンターも断片的に問いを投げかけている構成になっているから一貫したストーリーというかポイントがあるわけではないのかもしれない。ただそうだとしても、自分の中で飲み込めるまでには理解できないのが悔しい。

とりあえずメモだけ。

  • 監視を誰が監視するのか?
  • 中長期に運用していくうえで身につく知識は、使わなければ失われてしまう
  • 遭遇したことのない未知の事象にどう対処するかを教えることはできるのか?
  • 過去の障害レポートから学ぼう。Postmortemsは書いて終わりではもったいない
  • システムはあなたが思っているようには動かない。システムを「再発見」しよう
  • あなたはどうしていくのか?自分の冒険を選ぼう。これまで何を経験してきただろうか?
  • 機械学習は自動化を一歩推し進める。自動化することを自動で生成できる。
  • Second Order Effects(二次効果、副次的効果)

Ethics in SRE (Virtuous SRE)

「SREの倫理」(プレゼン資料でのタイトルは「徳の高いSRE」)と題して、SREが持つべき倫理観について述べたセッション。決して「こう考えるべき」「こうすべき」をいうセッションではないので各自のコンパスを持ってもらいたい、とことわりを入れながらも、倫理観をもって行動していこうと諭すセッションだった。

前提知識として、ACM code of ethicsという文書があるらしい。

Code of Ethics

このセッションも概念的で理解がとても難しかった。全体としていいたいことは分かる。SREとして社会的責任を帯びていることを自覚して自分なりの価値観をもって高潔に行動していこう、ということだ。

ただ、途中の、

  • Deontologism 非存在論
  • Consequentialism 結果論?
  • カントのCategorical Imperativ 定言的命法?

このあたりの単語が???で中間はほとんどわからなかった。日本語に訳してもよくわかっていない。このへんの知識をある種の教養として持っていることが半ば期待されているようで悔しかった。

最後のほうは実例がいくつか上がった。

  • ドイツのAir Safety Law
  • 自動運転
    • TeslaもUberも倫理的課題を抱えている
  • 技術は中立たりえるのだろうか?
  • コンピュータシステムは、橋を作ることとどう違うのだろうか?
    • この問いかけは何度も出てきた
  • BitCoinの話
  • ICE's expert system and always detain ?? ICEとは何だろう
  • 「審判するシステム」としてのMLとAI
  • Facebookの問題
    • 民主主義や国に対して大きな影響を与えられる存在
  • エンジニアは正しいことをしたいと基本的には思っているが、以前の調査によると、求められれば状況に応じて意にそぐわないことをするエンジニアが4割もいる

出典:

Stack Overflow Developer Survey 2018

f:id:road288:20190616005101p:plain:w250

  • SREは「Watchers on the wall」(壁の上に立つ見張り番)ではないだろうか?
  • 私たちができることは何だろう?
    • 倫理上の取り決めに沿ったレビュープロセスを持とう
    • 異議を唱え(dissent)よう
  • IEEE Guidelines for Engineers dissenting on ethical grounds
  • 個々のコンパスを持とう

3日間を終えての総括

海外カンファレンスに行く意味を自問している自分もいましたが、行って帰ってきて思うことは、シンガポールという場所で環境変えて集中してひたすらインプットして、そしてそれをいろいろ調べながらアウトプットして、という普段やらないことを徹底してやり続けた3日間でものすごくリフレッシュしました。

自分が何か貢献できるとしたら今回得たものをアウトプットすることなのかなと思います。 ブログ記事を書いたり、どこかで話したり、業務に生かしたり、次回は登壇する側に回ったりなど。 本記事がその1つとして誰かの参考になればうれしいです。

SREcon19 Asia/Pacific参加メモ: 2日目

昨日の記事の続き。2日目について書きます。

帰国してからきちんとまとめようと思ってもだらだら遅れる気がするので、昨日とは違って現時点でのメモをどばっと吐き出したいと思います。

Reliable by Design: Adding Value in the Design Review Process

f:id:road288:20190614073722p:plain

システムアーキテクチャ・ソフトウェアのデザインにおいては、後々後悔する意思決定があるので、きちんとデザインドキュメントを書き、レビューをしようということで、チェックリスト形式でレビューすべき点を紹介したセッション。

Who, what, why(誰が、何を、なぜ)
  • ゴールは何か? 必要な人がレビューをしているか
  • プライバシー・セキュリティ・悪影響を与えるシステムはないか
Alternatives Considered(他の選択肢)
  • 他の選択肢を十分検討したか?
Stickiness
  • システムの中でどの部分が今後変化する可能性があるか?逆に変化しないところはどこか。
  • アーキテクチャがデータモデルに織り込まれているか?
Data
  • データの一貫性が求められるのはどこか、アーキテクチャがそれを反映ししているか
  • 他のデータによって変更されるもの、そうではないものはどれか
  • データのSLO, 保持期間, 暗号化, レプリケーション, シャーディング, バックアップ, アクセス制限, GDPR等プライバシーへの対応 
Complexity
  • それぞれのシステムコンポーネントは役割が明確か。数を減らすことはできないか。似たものがないか。新しい依存関係を生んでいないか。
Scale and Performance
Operability
  • 監視がやりやすいデザインか(やりづらいデザインもある)。
  • サードパーティのツールで監視できないか。
  • オペレータにとってわかりやすい・使いやすいツールか
  • ルーチンワークはToilになる。誰がやるのか。自動化してしまうことでオペレーティングチームのシステム理解度が下がることもある。
  • Abusiveなリクエスト・ユーザーへの対応を決めておく
  • 外部ベンダーはこちらの機能リクエスト・問題に対応してくれるか
Robustness
  • 物理的故障が起きたときにどう対処するか
  • ネットワーク分断・レイテンシの上昇にどう対応できるか
  • 復旧のために必要な手動のオペレーションは何か
  • システムをオペレータ自身が壊してしまうことができるか。一般ユーザーからそのパスが切り離されているか
  • 分割可能な単位は何か。依存関係は何か。Gracefulに縮退させられるか
  • ゼロから再起動できるか。どれくらいの時間がかかるか。その際システムの依存関係がないか。DNSと監視の考慮も忘れないこと。
  • ロードのスパイクに対応できるか
  • キャッシュは使っているか。キャッシュを使わなくてもさばけるか
  • Control PlaneとData Planeは分離されているか
  • Canaryデザインについて。システムに負荷をかけないか。
  • システムが自らに負荷をかけてしまうような悪循環に陥るポイントはないか。

Edge Computing: The Next Frontier for Distributed Systems

Fastlyの人が、といっても会社とは直接関係ないトークだ、とことわったうえで、Edge Computingの基本と今後の可能性について述べたセッション。

エッジコンピューティングとはオリジンサーバーでレスポンスを作って返すのではなく、もっとユーザーに近いロケーションにあるシステムによってレスポンスを作って返すことをいう(少なくともこのセッションでの定義)

ユーザーに近いといってもどこか。いくつかポイントがある (↓上から下に行くに従ってユーザーに近くなる)

  • Origin Server
  • Continental Region
  • Data Center in Major cities
  • ISP
  • Last mile 例えば携帯電話の基地局とかの想定と思われる

次のリクエストが異なる○○によって処理されることを想定したシステムが必要。

  • 異なるプロセス
  • 異なるサーバー
  • 異なるクラスタ
  • 異なるプロバイダー(AWS/GCPみたいなクラウド提供者を指しているか?)

下記のような考慮が必要

  • リクエストの標準化
  • 認証でやるのか、Paywallでやるのか(このPaywallという文脈がわからなかった。課金ユーザーのみ許可するアクセス制限とかそういうイメージかと)
  • ユーザーエージェントによって異なる処理
  • ローカライズ
  • A/Bテスト

  • Fastlyが提唱している WASI というフォーマットについて紹介

  • データのReadだけエッジでやって、Writeは中央(Origin)でやるのか、それともReadもWriteもエッジでやるのか

  • デプロイはどうするか、設定の変更はどうやるか、ファンクショナルテストや負荷テストはどうするか

発表資料

TCP—Architecture, Enhancements, and Tuning

TCPの基本からチューニング、さらにはQUICまで、内部実装を紹介しながら今後の進化について述べたセッション。

このへんは部分的には理解しているが、体系立てて説明できるかというとできなかった分野で勉強になった。再度復習したい。

  • OSI参照モデルの説明(L1~L7まで)
  • その中で、L4レイヤー、つまりTransport Layer(TCPの部分)の深掘り

  • Transport Layerの課題と必要な要件について

    • 順序が保証されていること
    • ステートフルであること
    • 帯域のコントロール
    • Multiplexing多重化
  • TCPのコアコンセプト

    • Sequence番号を持つ
    • コネクションを張る
    • Window Sizeを持つ
    • Port番号を使う
    • Ackをする
  • TCP Headerの中身の説明

    • Window Size
  • Retransmission 再送処理の説明

    • Syn, Ack, Retransmission Timer
  • TCPの拡張

    • スロースタート
    • Congestion Avoidance(混み合うことを防ぐ機構)
    • Fast Retransmission(早い再送処理)の仕組み. Recv側から再送リクエス
  • TCPのチューニング

    • Bandwidth delay product(帯域遅延積と訳せるらしい、ちゃんと理解できていない)
    • Bufferのチューニング, Selective Ack, MTU Probing
    • Initial Congestion Window
      • initcwnd を増やすことでラウンドトリップを減らす
  • Congestion Controlのアルゴリズム

  • QUICの紹介

    • TCP/TLSを(一部)置き換えようとしている
  • SCTPについて

BGP—The Backbone of the Internet

f:id:road288:20190614083237p:plain

BGPの紹介。歴史、実装、プロトコル、実際の例をあげての説明。

自分が特に弱い分野で意味のあるメモを以下に書ける気がしないのでセッションの結論だけ。

  • BGPはインターネットのメッセージバスである
  • よくスケールするが、全部を網羅することはできない
  • 実装が複雑なので、全部を理解するのは困難

Linux Memory Management at Scale: under the Hood

Linuxのメモリ管理についてのセッション。

下記の画像はfbtax2を使った際にメモリの利用が改善された例の紹介

f:id:road288:20190614084707p:plain

Ad Hoc SSH Access Using Signed Tokens

SSHアクセスを、従来の公開鍵を接続先のサーバーに置く必要なしに、CAとx.509を用いて必要なときに一定時間だけ必要なサーバーにSSHアクセスを許可する仕組みの説明。OSSではない模様

下記の画像が端的になんたるかを表しているので詳細は割愛

f:id:road288:20190614085117p:plain

Software Networking and Interfaces on Linux

f:id:road288:20190614090411p:plain

ネットワークの基本から、インタフェース、ブリッジ、最新のトレンドまでを紹介するセッション。

EthernetARPの紹介から始まり、vLanやIptable、NATやRouteテーブルの紹介などまでは良かったが、tun/tapが出てきたあたりからついていけなくなり、virtio_net, veth, ipvlan, macvlan, calicoなどまで説明して後半はふむふむと聞いてるだけ。完全に打ちのめされた。このへん理解が浅すぎて勉強しないと...

  • インタフェースまとめ
    • Loopback
    • Dummy
    • "real"
    • multiple L3 addresses
    • TAP/TUN
    • vEth
    • VLAN
    • Macvlan, macvtap
    • Ipvlan, ipvtap L2
    • Ipvlan, ipvtap L3

↑この辺あとで調べ直す。

セッション動画は下記に上がってます。

mt165.co.uk

Automating OS/Platform Upgrades for Service Owners

Pinterestでの実例から、SpinnakerのCanary機能を用いてOSやプラットフォームごとアップグレードする事例の紹介。

アップグレード前後で比較すべきキーとなるメトリクスを用いて、Canary機能を使って試験的に一定時間デプロイしてメトリクスを収集して、アップグレードをそのまま全デプロイしてよいかを判断する。意思決定フローの都合もあって手動承認する部分を残している。

f:id:road288:20190614091055p:plain

仕組みとしては分かる。だけどこれを実際にやるのは大変なはずで、これを仕組みとして回しているというのはとても励みになる。

Unified Reporting of Service Reliability

GCPの中の人による、GCPの障害やユーザーサポートの情報を集約するダッシュボードのアーキテクチャの紹介と、それをどう運用しているかの事例の紹介。

前半はデータをどう集約してダッシュボードを作っているかという話で、Entity RelationshipとStar Schemaに基づいたデータモデルを作っているということで、DWHとしては正攻法なやり方をしていると思った。そこからSQLを多段でごにょごにょしてダッシュボードとして提供している。

後半は、そのデータから得たインサイトをどうアクションにつなげえているかという話で、下記の話が一番印象に残った。

  • SLI/SLOは、Customer Happinessと連動しているのか?相関を調べて、ミスマッチであれば、SLI/SLOを修正する。

  • Monitoring/Alertのタイミングより先にユーザーからのIncidentレポートが上がっていないか? そうであれば、Monitoring/Alertのほうを修正する。

f:id:road288:20190614091420p:plain

全体的に熱量がある話で、こうしたDWHとそこからインサイト、アクションへとつなげるというのはハードルがいろいろあるが、「標準化せよ」「自動化せよ」「ビジョンを持って最初のやり方がうまく行かなくても失望せず続けよ」と締められていて、後味が良かった。

2日目は以上です。

なお、下記のブログ記事にも2日目の様子は詳しく紹介されています。

SREcon Asia/Pacific 2019: Day Two - danrl.com

SREcon19 Asia/Pacific参加メモ: 1日目

2019/6/12~6/14にシンガポールで行われているSREcon19 Asia/Pacific(以下SREcon19AP)に参加しています。開催場所はシンガポール市内のSuntec Singapore International Convention & Exhibition Centreです。

SREconはSite Reliabilityの話題を中心に、DevOps、分散システム、OSやネットワークのデバッグ・チューニングなどがテーマで、特定の技術にフォーカスしていないぶん、幅広いトピックがあるカンファレンスです。

f:id:road288:20190613084053j:plain:w200

今回のSREcon19APは、セッション内での発表によると参加者は580人(125の企業、24カ国)だそうです。Google/Microsoft/Facebook/Baiduなどの業界を代表する大企業を中心に、ユーザー企業、ツールベンダーなどバラエティに富んだ参加者の印象です。日本からも十数人の参加者がいます。

開催期間は3日間で、3トラックで同時進行し80くらいのセッションがあります。その他はランチ・レセプション・スポンサーブースなどがあり、一般的な技術カンファレンスの構成です。

私は現在、株式会社サイバーエージェント・アドテクスタジオのエンジニアとして、インフラ部門のチームに所属していくつかのプロダクトのインフラ構築・管理・オペレーションなどを行う仕事をしています。”SRE”という肩書ではありませんが、実質的にSRE的な役回りをやっていることも多くあり、幅広い視野と一段高い視点を得たいと思ってこのカンファレンスに参加しました。

現地にいる間に感じたことを速報・メモ的に書き留めたいと思います。

f:id:road288:20190613084121j:plain:w200

全体の所感

SREというポジションは、特定の技術領域を指しているものではないので、技術カンファレンスとしてはガチガチの技術トピックというよりは、アプローチ・マインドセット・組織づくりなどに関する内容が多い印象です。 例えば、現在アプリケーション実行基盤としてデファクトスタンダードになっているKubernetesを正面から取り上げたセッションはありませんし、プログラミング言語をタイトルに冠したセッションもJavaが1つ、Pythonが1つという感じでバラバラです。 ただ、ふわっとしている内容なのかというとそういうわけではなく、それぞれの内容を具体的に応用可能な知見にするための方法論が話されている印象を受けました。 多数の言語・多数のミドルウェア、インフラ基盤に接している私の今の状況にはフィットしていると思いました。

f:id:road288:20190613084534j:plain:h200

各セッションの一行所感

参加したセッションを端的に紹介していきます。

A Tale of Two Postmortems: A Human Factors View

2つの「あるあるな」障害振り返り(Postportem)の事例を紹介しながら、どこに注目すべきか・ありがちな落とし穴・注意点などを考察。

Availability—Thinking beyond 9's

99.99%」「99.9999%」などの9を並べたSLA/SLOの定義をあらためてまとめつつ、Failureの定義は何かとか、誰がその指標を使うのかといった視点から可用性(Availability)について考察。

f:id:road288:20190613084941p:plain:h200

Use Interview Skills of Accident Investigators to Learn More about Incidents

システム障害後の調査のため関係者にインタビューする際のノウハウをまとめたセッション。基本的には「彼ら個々の頭にあるストーリーを語ってもらうこと」を推す内容。

Leading without Managing: Becoming an SRE Technical Leader

SREとしてのキャリアを、いわゆるマネージャとしてではなく、テックリードのポジションで上を目指すための具体的な方法論・取り組むべきことについて紹介。LinkedInでそのポジションにあり、Kafkaについての著書もあるなど実績もある方の話でとても説得力・具体性があった。

f:id:road288:20190613085132p:plain:h200

Practical Instrumentation for Observability

「Avalilability」「Latency」「(Service/Product)Quality」の3つに焦点をあて、Observability(可観測性)の基本をあらためておさらい。基本的な内容かもしれないが実際はできてないことばかりで頭が痛い。

f:id:road288:20190613085415p:plain:h200

Let's Build a Distributed File System

ファイルシステムの基礎からはじまり分散ファイルシステムアーキテクチャについて述べ、簡単なデモ用OSSPyDFS」を例に分散ファイルシステムの具体的な実装を紹介。

Ensuring Site Reliability through Security Controls

Paypalのエンジニア2人が登壇。Malicious(悪意のある)トラフィックを遮断するためのL7レイヤーでの検知および対処方法について紹介。このあたりは既存のWAFソリューションを入れるとあとはお任せみたいにしてしまうこともありがちで、具体的に中身について考えられたのは良かった。

f:id:road288:20190613085627p:plain:h200

Why Does (My) Monitoring Suck?

モニタリングはなぜ難しいのか、そしてどう改善すべきかの具体的な方法論について紹介。結論としては「SLOを定めよ」「アラートを整理しろ」「メトリクスを取るための仕組みを導入せよ」。

Enhance Your Python Code beyond GIL

PythonのGIL(Global Interpreter Lock)について紹介し、それを前提にしつつpythonでの並行・並列処理をうまく実装するための選択肢(multithread/multiprocess/ASyncIOおよびその組み合わせ)について紹介。

f:id:road288:20190613085806p:plain:h200

1日目は以上です。 残り2日間も追って投稿します。

VPCエンドポイントについて整理

あとで復習用にメモっておく

devlog.arksystems.co.jp

VPCのネットワークにはコンポーネントがいくつもあって、混乱しやすいので用語の整理。

VPCエンドポイント

「インタフェースタイプ」「ゲートウェイタイプ」の2種類がある。

インタフェースタイプ

Private Linkとも呼ぶ

などが対象

参考:

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-endpoints.html

昔はVPCのCIDRブロックが重複していると相互接続できなかった。いまでもVPCピアリングはできないが、PrivateLinkを使えば(部分的に)接続可能になる。

ゲートウェイタイプ

  • S3, DynamoDBのときに利用
  • ルートテーブルの書き換えが必要

トラフィックがインターネットを通らないので、データ転送料が安くなる?(どれくらいのインパクトあるかは不明)