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