はてなに入社して4年経った。
入社4年成功https://t.co/p3DaJCO1Tq
— ゆううき (@y_uuk1) 2017年12月2日
2017年のエンジニアリング活動を一言でまとめてみよう。
時系列データベースの開発にはじまり、なぜかIPSJ-ONEで登壇し、その後IPSJ-ONEでの構想をベースにはてなシステム構想を考え始め、ウェブサイエンス研究会でストーリーとしてまとめ上げつつ新たな可能性に気づき、それを実践していく場としてウェブシステムアーキテクチャ(WSA)研究会を立ち上げた。
一方で、仕事では、昨年の振り返りに書いているように、エンジニアとしての専門性を発揮する機会が薄れてきたという問題意識が、いよいよ深刻な課題へと変貌したように感じている。それも残念ながら自分一人だけの問題ではなくなってきた。 この課題をエンジニアリングそのものではなく、人間のスケールアウトでは解決できない、組織アーキテクチャの課題であると捉えている。 組織アーキテクチャの課題を解くための鍵は、今のところ「未来を定義する」「未来に向かって集中して取り組める環境をつくる」ことだろうと仮定している。 前者の未来については前述のシステム構想があり、後者の方法論として今年実践する機会のあったプロジェクトマネジメントがある。
したがって、来年は、今年構想したビジョンを技術と組織の両輪を回し、実現し始める、ということが目標になる。 そしてその裏には、エンジニア個人としては技術を作る技術をやっていきたいと思いつつ、生活時間の大半である業務の課題はマネジメントであるというギャップをどう埋めて一つのストーリーとしていくかが重要になるだろう。
ここまで、いきなりまとめに入ったのだけれど、2017年に力を注いだ各トピックについて細かく振り返ってみる。
- 時系列データベースの設計・開発・運用
- 学術研究のアプローチとの出会いとビジョンの構想
- プロジェクトマネジメント
- アウトプット
時系列データベースの設計・開発・運用
このTSDBのオレオレ実装を、半年毎日コード書いて頑張っていたのだけど、リリース前に疲弊しまくって睡眠もうまくとれなくなってしまったので、途中までになってしまった。https://github.com/yuuki/diamondb/ 個人でやるプロジェクトとしては、ひと通り動くまでに時間がかかりすぎ、細かくロードマップを引きづらかったので、サーベイを続けて、新たな課題を発見し、その課題を小さく解決する手法を編み出したい。
TSDBの開発は、大きな成果だと思っており、この知見を横展開するために、より汎用的なアーキテクチャにできないかと考えたのが、TimeFuzeアーキテクチャ構想だ。
時系列データベースに限らず、大規模な計算機システムのモニタリングを支えるデータ処理アーキテクチャが好きなので、今後のライフワークとしていきたい。
学術研究のアプローチとの出会いとビジョンの構想
突然だけど、id:matsumoto_r (まつもとりー)さんの昨年の振り返りをみてみよう。
さらに、id:y_uuki さんとは今年1年非常に仲良くさせていただいて、12月はなぜか毎週会って何かイベントごとをこなすようなぐらい、企業・アカデミア方面で関わることが多かったように思います。いつか、企業とアカデミアの両方の要素を含む新しい研究会みたいなものを一緒に作っていけるといいな、ぐらいに一方的に信頼しており、色々と今年は無茶をお願いしましたが、できるだけその無茶をちゃんと責任をもってサポートできるようにしたいと思います。
エンジニア・研究者とはどうあるべきか - 2016年振り返りと新生ペパボ福岡基盤チームの紹介 - 人間とウェブの未来
今年は、まつもとりーさんのおかげもあって、学術研究コミュニティとの関わりが深くなった年だった。 前述の 高度に発達したシステムの異常は神の怒りと見分けがつかない - IPSJ-ONE2017 - ゆううきブログ に始まり、まつもとりーさんの5年間の挑戦の最後を見届け matsumotoryさんの博士学位論文公聴会に参加し、見て聞いて考えたこと - ゆううきブログ、ペパボ・はてな技術大会では考えたビジョンをみてもらって、自分なりにウェブシステム全体をみてストーリー化し、それに対して議論していただいて、最後は「企業とアカデミアの両方の要素を含む新しい研究会」としてウェブシステムアーキテクチャ研究会を一緒に立ち上げることができた。
その中で気づいたのは、学術研究のアプローチにより、ウェブシステムの分野におけるある種の限界を突破できるかもしれないということ。 ここでの限界というのは、同じことの繰り返しで積み上げによる進化をしていないじゃないか感と、シリコンバレーの巨人の西洋技術を取り入れるだけで自分たちの存在価値とはなんなのだろう感を指している。 それらに対するアプローチは既にあり、前者は体系化、後者は徹底したサーベイと自分なりの思考からの新規性ということになる。 このあたりのよもやまについてはTwitterにあれこれ書いていた。
ちなみに、学術研究のアプローチを企業でのエンジニアリングに導入することで何が起きるかについては、まつもとりーさんの下記の2つの記事にすべて書かれている。*1
なにより重要なのは、そもそもなにがやりたいのかという自分の欲求と、それが実現したらどんな世界になるのかをイメージすることだとまつもとりーさんは何度もおっしゃっていた。*2 前者はともかく後者はまあいいんじゃないと思いがちだし、実際何度もそう思った。 特に現場の泥臭い運用をやっていれば、なおさらそう思う。 しかし、前者だけであれば個人の趣味でしかないので、食べていくために仕事をしないといけないとなると費やせる時間は限られる。 そこで、欲求が世界にどう作用するかを考えることで、やりたいことを仕事にできる...はず*3。
こういうことをずっと考えていた1年だった。 こうしてちょっとずつ自分なりの道をつくりつつあるのも、まつもとりーさんのおかげだなあとしみじみ思います。いつもありがとうございます。
プロジェクトマネジメント
時系列データベース開発とクラウド移行のプロジェクトを丸ごと任された結果、物事を前に進めるための条件というものがあることを体感で理解したように思う。 これをウェブオペレーションチームの一部で実践しはじめ、小さな範囲でうまくできそうだということがわかってきたので、来年はチームというか部署全体で適用していきたい。 これらについては、まだアウトプットしていないのでどこかでアウトプットしたい。daiksyさんの薦めで、RGST2018に応募していたのだけど、残念ながら選考で落ちてしまった。
SREの分野のマネジメントって、SRE本以外に世の中に知見があまりなく、逆にチャンスだと思うが、自分が追求することではないと思っているので、誰かこれをはてなで追求したい人がいないかを探している。
アウトプット
OSS
- GitHub - yuuki/diamondb: [WIP] DiamonDB: Rebuild of time series database on AWS.
- GitHub - yuuki/binrep: The static binary repository manager
- GitHub - yuuki/albio: albio: A CLI tool to gracefully manage EC2 instances with ALB/NLB
- GitHub - yuuki/mkr-check: A CLI to run check commands in mackerel-agent.conf.
- GitHub - yuuki/rlq
- GitHub - yuuki/portpinger-rs
以前開発していたdrootが、[capze](https://github.com/yuuki/capze]とともにオンプレミス上の大きめのサービスで稼働しはじめ、明らかになったバグを修正したりしていた。
アーキテクチャ設計に関わった GoとMySQLを用いたジョブキューシステムを作るときに考えたこと - ゆううきブログ では、id:tarao さんにより Fireworq として実装され、公開された。今、1200 starsとかになっていてすごい。
ブログ
登壇内容をベースにそれをできるかぎりしっかり文章にまとめるということをやり続けている。 なぜかというと、アウトプットのスケーラビリティを非常に強く重視していて、登壇資料はあくまで当日その場のためのものであり、文章として後に残すことが自分のためにも重要だと考えているためだ。 最小のインプットで最大のアウトプットが鉄則。
- 高度に発達したシステムの異常は神の怒りと見分けがつかない - IPSJ-ONE2017 - ゆううきブログ
- matsumotoryさんの博士学位論文公聴会に参加し、見て聞いて考えたこと - ゆううきブログ
- 時系列データベースという概念をクラウドの技で再構築する - ゆううきブログ
- RedisサーバのCPU負荷対策パターン - ゆううきブログ
- コスト効率の悪いLambdaアプリケーションの性質に関する考察 - ゆううきブログ
- サーバ「管理」ツールとしてのMackerelの起源 - ゆううきブログ
- ウェブシステムの運用自律化に向けた構想 - 第3回ウェブサイエンス研究会 - ゆううきブログ
システムビジョンを語り合ったペパボ・はてな技術大会〜インフラ技術基盤@福岡 - Hatena Developer Blog
- 詳解システム・パフォーマンス 第2章「メソドロジ」メモ - ゆううきメモ
- MySQLの同期レプリケーションで複数の更新クエリを1トランザクション内で発行すると速くなるケース - ゆううきメモ
- 書籍「Designing Data-Intensive Applications」下読み - ゆううきメモ
- 詳解システム・パフォーマンス 3章「オペレーティングシステム」輪読メモ - ゆううきメモ
- mkr + peco + tmux + ssh - ゆううきメモ
- Go言語をほぼ毎日書いている話 (序) - ゆううきメモ
- 書籍「Mackerel サーバ監視[実践]入門」執筆成功 - ゆううきメモ
- 詳解システムパフォーマンス 7章「メモリ」メモ - ゆううきメモ
- 詳解システムパフォーマンス 8章ファイルシステム メモ - ゆううきメモ
- ウェブシステム内の待ち行列をMackerelで可視化してみる - ゆううきメモ
登壇
過去最多の11本。とはいっても、数とかどこで登壇したかは問題ではなく、何を考え何を話したか、それぞれの登壇に何かしらの挑戦があったかが重要だと思う。
- 高度に発達したシステムの異常は神の怒りと見分けがつかない, IPSJ-ONE 2017, 2017-03-18
- mkr + peco + tmux + ssh, Mackerel Meetup #10 Tokyo, 2017-04-27
- AWSでつくる時系列データベース, リクルートテクノロジーズ社内勉強会, 2017-04-28
- Go言語をほぼ毎日書いている話 (序) , そうだ Go、京都。, 2017-04-28
- RedisのCPU負荷対策パターン, Kyoto.なんか #3, 2017-08-19
- 人はなぜミドルウェアを作ってしまうのか?, CROSS 2017, 2017-09-07
- Webシステムをデータセンター移行するときに考えること, Hosting Casual Talks #4, 2017-09-30
- 時系列データベースという概念をクラウドの技で再構築する, AWS Summit Tokyo 2017), 2017-06-01
- はてなシステム構想, ペパボ・はてな技術大会@福岡, 2017-10-07
- 自然のごとく複雑化したウェブシステムの自律的運用に向けて, 人工知能学会 合同研究会 第3回ウェブサイエンス研究会(招待講演), 2017-11-24
- TimeFuzeアーキテクチャ構想 - 処理とデータとタイマーを一体化したデータパイプライン, ウェブシステムアーキテクチャ(WSA)研究会 第1回, 2017-12-23
あとがき
エンジニアとしてやりたいことと、仕事で実際にやっていることとの乖離が大きくなってきた。 そもそも、仕事ではだいたいその場しのぎの解決しかできず、あとは家に帰ってがんばるということがこれまでほとんどではなかったかとすら思う。 世の中のすごいエンジニアもみんなそんなもので、もっとたくさんのプライベート時間を費やしているか、技術力が圧倒的だから少ない時間できれいに解決できるに違いない、自分はまだまだなのだという気持ちでいたのだけど、どうやら必ずしもそういうわけではなさそうだと感じはじめた。 人が増えれば解決するはずだと、信じていたが脆くもその願望が打ち砕かれつつある。サーバ増やしてもスケールしないのと同じでアーキテクチャの問題。
乖離を埋めるためには、どうしたらいいのか。 技術力を発揮するというより、組織やプロジェクトをマネジメントすることが必要だと自分で導出してしまったため、矛盾しているような気もする。 マネジメント、あれほどやりたくないと言っていたのだけど、それが課題となればやるしかない。
自分の技術力向上については、WSA研を目安に研究志向でアイデアをOSSとして実現しつつ、より高みを目指したアウトプットとして論文を書いていきたい。
最後にid:tomomiiさんの縁側トーク 道をつくるを載せておき、来年また思い出せるようにしておく。tomomiiさんに道の概念を話してもらってから、自分の道とはなにかということを頭のなかでずっと考えている気がする。