04 Jul 2021

最近読んだもの 7

記事

  • How is software developed at Amazon?  - High Scalability -
    • ピザ2枚のチーム・システムから始まり、それを分割していく(顧客のニーズに合わせて)
      • チームには目標と必要なリソースが与えられ、それぞれがひとつのスタートアップのように振る舞う。マネジメントは複数のスタートアップをみる取締役のような立ち位置になる
    • エンジニアは、開発者、アーキテクト、運用者、テスター、セキュリティスペシャリストとして振る舞うことを期待される
    • チームは職能を跨いだメンバーで構成。エンジニア、PM、マーケターなど
    • 計画はボトムアップに(各チームが一番ユーザーをわかっている)
    • チーム間のコンフリクトはマネジメントの階層構造で調整
      • 何もやらないより、リスクを織り込んで何かを出す方を選ぶ。折り込まれたリスクはのちに別のリファクタチームが解消する。スピードを維持する
      • そもそもとしてチームが分かれるとコミュニケーションと一貫性は難しい
      • 全体方針はトップダウンで、それへの向かい方は各チームで
  • QUIC at Snapchat - Snap Engineering
    • QUIC 導入はかっこいい施策だが、あくまでネットワークのレイテンシーとエラー率の改善活動の一環として位置付けられているのがよい
      • プロトコルの変更以外にも make requests and responses smaller, reduce unnecessary sync, utilize global content distribution partners to bring media close to the people who use it などやれる事はたくさんある
    • 導入による改善は、いずれの指標も 95 パーセンタイル以上で 5 ~ 25 % くらい
      • この桁感は覚えておくと参考になりそう
  • Security headers quick reference
    • まとまってる
  • curl vs Wget
    • curl 作者の @bagder による比較
    • curl は cat、wget は cp の analogue とするのは確かにすんなり納得できた
      • curl works more like the traditional Unix cat command, it sends more stuff to stdout, and reads more from stdin in a "everything is a pipe" manner. Wget is more like cp, using the same analogue.
    • wget は busybox に入っていて便利というのはすごいそう思う
    • curl はもう http/3 もサポートしていてすごい
  • Open Source Insights
    • 各種ライブラリの依存関係などが確認できるツールらしい
    • Google が各種パッケージマネージャの情報をインデックスしているらしい
  • Revisiting the Twelve-Factor App Methodology — Coder Society
    • 12 factor apps が出てからもう 10 年とは…
  • Application Frameworks | July 2021 | Communications of the ACM
    • 当たり前のことが書かれているだけに見えた…

動画

雑誌

WEB+DB PRESS Vol.123
WEB+DB PRESS編集部 (編集) 形式: Kindle版

コード

  • rs/zerolog: Zero Allocation JSON Logger
    • Zerolog's API is designed to provide both a great developer experience and stunning performance. Its unique chaining API allows zerolog to write JSON (or CBOR) log events by avoiding allocations and reflection. とのことで unique chaining APIavoiding allocations とはどういう感じか気になったので流し読み
    • unique api に関しては有名な uber の zap で発明された、メソッド呼び出しを chain できる api のこと
      • chaining 自体は一般的なインタフェースだけど、確かにロギングの api でこのようなものはなかったかもしれない
      • 確かにこれは書きやすそう・読みやすそう
        • ログへの出力要素の追加やメタデータの設定がスッキリ書ける
    • パフォーマンスに関しては sync.Pool を使って確保したメモリを再利用していることと、出力前のログ内容を単なる []byte に追記していっている (内部で構造体などで保持していない) のがポイントだった
      • Event がひとつのログを表すクラス
      • ロギングする内容は buf []byte に保持している
      • buf にはログの要素を諸々処理してから append していっている
      • 以上よりメモリ確保が走るのは次のケース
        • pool に確保済みの buf がない場合、新規で確保する
          • pool の初期化時に複数確保したりはしていない
        • 500 byte を超えるログを作成する場合、buf を延長する
          • ロジックは通常の Go の append と同じ
    • 基本的には json 出力形式のみサポートされているのは今どきでよい
    • ちなみに sync.Pool の各要素は ほぼ同じメモリコストにしないとにしないと非効率 らしく、buf が一定以上大きいと pool に戻さない という制御が入っていた
      • sync.Pool の実装は見ずにあてずっぽうだけど、でかいバッファが gc されずに確保され続けることにもなり得そうなので、ハードリミットがあるのは安心感がある
  • kubernetes-sigs/kustomize: Customization of kubernetes YAML configurations