# 2021年/雨水(前) Transtracerの研究、RSSリーダーの再開
Created: February 22, 2021 3:33 PM
Research: transtracer
Tags: SRE, go, rust
Week: February 22, 2021 → February 28, 2021
## Transtracer研究
あらかた実験材料はそろったので,ジャーナル論文を書き進めている。修正論文の骨子は頭のなかにできているので,書くこと自体はスムーズ.
### フローデータストア
論文には間に合わなくて書けないけど,グラフ構造(ノード,フロー,フローの統計メトリックデータ)をどこに保持させてどの経路で問い合わせるのがいいかを考えている.今は中央のPostgresに保存することになってるけど,フローの可視化だけにPostgresを運用するのは,めんどくさい.用途として,データの完全性や可用性は高くは求めなくてよいから,中央のDBをもたなくてもよいようにしたい.
各ホストにインストールするエージェントがローカルに自身のホストに紐づくフローデータを保持し,エージェントに対して問い合わせるとフローデータを取得できる.
1. 分散リレー方式: 任意のエージェントに問い合わせると,他の全エージェントに問い合わせて,フローデータをマージする.
2. 専用リレー方式: 専用のリレーコンポーネントをセットアップして,リレーコンポーネントに問い合わせると,リレーコンポーネントが全エージェントに問い合わせて,フローデータをマージする.
エージェントのローカルデータストアは,エージェントと合わせて,ホストあたり,コンテナ1つで完結するように,エージェントにDBを組み込む方式を考えている.Go言語であれば,bboltやnutsdb,badgerがある.
[etcd-io/bbolt](https://github.com/etcd-io/bbolt)
B-tree.
[xujiajun/nutsdb](https://github.com/xujiajun/nutsdb)
[dgraph-io/badger](https://github.com/dgraph-io/badger)
LSMツリーのGCでCPU負荷がかかる.
bboltとbadger,オプションの持ち方が違う.
ノードがダウンしたときのために,別ノードでキャッシュを保持しておいて,キャッシュからデータを引けるようにしたい.問い合わせるのは人間なので,問い合わせ時にキャッシュを更新するだけだと,いざというときにキャッシュがなくて困るかもしれない.キャッシュを自動で更新する仕組みがいりそう.幸い,各ローカルデータストア同士でデータが競合することはない.また,一時的にデータが欠けたりすることは問題にならない.他の<replication factor>個のノードに複製を置いて,ノードダウン時には,複製ノードからデータを取得する仕組みがあればよい.
[hashicorp/memberlist](https://github.com/hashicorp/memberlist)
[weaveworks/mesh](https://github.com/weaveworks/mesh)
メトリックは,Prometheusにscrapeさせるか,ローカルデータストアに保持するか.両方できるのがよいけど,実装の手間がかかる.
Grafanaのエコシステムにうまく乗ってWeb UIを実装したい.GrafanaのPane pluginで,ネットワークトポロジを描いて,[Backend plugin](https://grafana.com/docs/grafana/latest/developers/plugins/backend/) からフローのデータストアを叩く.
あとはネットワークグラフをロール単位でグループ化するにはどうしたらいいか考えないといけない.グルーピングのための設定は,クラウドのコンパネやk8s,監視ツールなどに一次情報があるため,API問い合わせ時に,これらのメタ情報をプラグイン形式で取得して,フローデータと突き合わせる.
### コンテナとフローの紐付け
[BPF: New helper to obtain namespace data from current task](https://lwn.net/Articles/798679/)
bpfコードの中で `bpf_get_current_pidns_info` を呼ぶとnsidとpidを取得できる.
### Go 1.16
[use the new ErrClosed error introduced by go 1.16 by yuuki · Pull Request #4 · yuuki/connperf](https://github.com/yuuki/connperf/pull/4)
connperfの実装でnet.ErrClosedに置換できる箇所を置換した.
### ジャーナル論文の校正
採録されたHeteroTSDB論文の校正が返ってきたので,チェックする.結構しっかり校正されてきている.iPadで赤をいれて返却した.
## 思索・近況コーナー
### RSSフィード購読の再開
RSSフィードのサブスクリプションサービスををだいぶ前に使っていたのだけど,ほとんどみないエントリに埋め尽くされて管理が崩壊してしまった.
今週,wakatteinfra slackで読むものさがしが話題になっていた.
[読むものさがし / morrita - Message Passing](https://messagepassing.github.io/009-feed/01-morrita/)
みんな思いの外,RSSをやってるらしくて,自分もひさしぶりにRSSの運用をはじめてみた.これまでは,技術や研究の情報収集は,はてなブックマークやTwitterに依存するところが大きかった.しかし,SNSはうっかりすると,世の中一般の話題で気がもっていかれることがあり疲れる.対策のために,TwitterをiPhoneからアンインストールしている.iOSのSlackアプリで会社のワークスペースからサインアウトしている.
RSSを運用して,もうすこし静かな世界で情報収集をしたい.
Twitterのユーザや検索ワードもフィードとして登録可能な[Feedbin](https://feedbin.com/)を試している.FeedlyもFeederもTwitterと連携できるのだけど,FeedlyはTwitterを購読するには,Pro+プラン(月額$12)が必要でそれなりにお高い.Feedbinは$5で済む.
@ryot_a_raiくんは優先度順にp1,p2,p3でフィードを分けているらしく,それに倣うことにした.p1にはACM Queueとかmorning paper,SRE weekly,Observability系の会社のブログなどをいれている.p2は,その他のクラウド系のプロダクトとかFacebook,Netflix,GitHubなどの会社ブログ,Higg Scalability,Zennのトレンド,知人のはてなブログでないブログなどをいれている.p3はTwitterのフィード,Zennのトレンドなどをいれている.惜しいのは,TwitterのフィードでMediaオンリーの設定をいれているのに,全ツイートを取得してしまうところ.
## 徒然コーナー
### SRE
[ペパボSREケーススタディ - ロリポップ!レンタルサーバーのSLI/SLOをもとにしたパフォーマンス改善の取り組みを紹介します - ペパボテックブログ](https://tech.pepabo.com/2021/02/22/lolipop-sli-slo-practice/)
> 2019年から取り組みはじめたこれらのパフォーマンス改善ですが、最初の6ヶ月はSLO違反となるサーバー台数も多く、2019年6月末の状況で1ヶ月ウィンドウでのSLO達成率は67.35%(目標値:88.15%)と厳しいスタートとなりました。
公開しづらいであろうSLO達成率まで公開されていてすごい.
[upgundecha/howtheysre](https://github.com/upgundecha/howtheysre)
各社のSRE事例がまとまっている便利リポジトリ.@googlesreでも紹介されていた.
### Rust
[Rust Cookbook for Beginners - CADDi Tech Blog](https://caddi.tech/archives/2381)
初心者向けcookbook
### ネットワーク
3分間NetWorking
[https://twitter.com/okumin/status/1363211769129312256?s=20](https://twitter.com/okumin/status/1363211769129312256?s=20)
[3 Minutes Networking](http://www5e.biglobe.ne.jp/aji/3min/)
知らなかった.ネットワークのOSI参照モデルの各レイヤについて解説されている.
### Linux 5.11
[Linux_5.11 - Linux Kernel Newbies](https://kernelnewbies.org/Linux_5.11)
- a new epoll_pwait2(2) syscall for wait timeouts with nanosecond resolution
- Introduce preferred busy-polling SO_BUSY_POLL
- Kernel moduleへのBTF traceが強化されている
### Pepabo Tech Conference #14
[Pepabo Tech Conference #14 (2021/02/25 19:00〜)](https://pepabo.connpass.com/event/204392/)
ペパボさんの基盤系テーマのイベントを聴講した.P山さんとClubhouseでしゃべってて,脱線はしまくてったけど,意外とまじめにしゃべっていた.
### 分散トレーシングの難しさ
[Distributed Tracing - we've been doing it wrong](https://copyconstruct.medium.com/distributed-tracing-weve-been-doing-it-wrong-39fc92a857df)
### 社内の技術研究部
typescriptのナウい書き方: [https://www.typescriptlang.org/docs/handbook/advanced-types.html](https://www.typescriptlang.org/docs/handbook/advanced-types.html)
[https://github.com/type-challenges/type-challenges](https://github.com/type-challenges/type-challenges)
io_uringの発表を聴いていた.よく調べられていてすごかった.ユーザ空間に2つにリングバッファを用意して,それぞれ要求イベントと完了通知イベントを管理する.カーネルはキューに出し入れするだけ.ユーザ空間の仕事が多く,liburingを使うのがある程度の前提になっていそうとのこと.
Qiitaの記事では下記がわかりやすかった.
[Linuxにおける非同期IOの実装について - Qiita](https://qiita.com/tmsn/items/0b9e5f84f9fbc56c1c82)