Takeshi Arabiki
自己紹介
SRE とデータエンジニアリングとアプリケーション開発を足して 2(not 3!)で割ったような役割のチームでテックリードとプレイングマネージャーを足して 2 で割ったようなことをしているエンジニア。主に Rails / AWS / MySQL / Presto / Fluentd / Cassandra / Kafka。R言語上級ハンドブック(2013 年)共著者。
関連 URL
- 個人ブログ
- @a_bicky
- abicky
- abicky
- Speaker Deck a_bicky
- クックパッド開発者ブログ執筆エントリー
- Repro Tech Blog 執筆エントリー
- 社内インタビュー
主なスキル
Rails
そこそこの規模の Rails アプリケーションの開発に 2013 年 12 月から従事している。Rails と言っても、Rack アプリケーションよりもバックグラウンドジョブ等のアプリケーション開発が多く、Vue.js や React.js 等、モダンな JS フレームワークは業務で触れることはほとんどない。
また、大半の不安定な system spec は直すことができる。
cf. Rails アプリケーションの不安定なテストを撲滅したい 〜system spec のデバッグ方法とテストを不安定にさせる要因〜
Ruby
Ruby は 2013 年 12 月からメインの開発言語。Ruby コミュニティには全然顔を出さないので、その界隈で話題になっている最新の機能には精通していないが、一番速く読み書きできる言語。実際 OSS で不具合を見つけたら Pull Request を送るだけのことはできる。
以下、特筆すべき Pull Request
- Fluentd v0.14 の stable release のブロッカーになっていた deadlock 問題を解消した PR
- cf. Fluentd v0.14.22 has been released | Fluentd(自分の GitHub ユーザ名は @abicky)
- bootsnap を使うと起動時に稀にエラーになる問題を解消した PR
- ruby-kafka に custom assignment strategy を指定できる機能を追加した PR
- Datadog のライブラリにメトリックのバッファを定期的にフラッシュする機能を追加した PR
ridgepole は PR を何個も出していたら、かつての同僚ということもあってかコミット権をもらえたが、最近は全然コントリビュートできていない。
いくつか自作の gem もある
- ActiveRecord::LockWaitTimeout, ActiveRecord::Deadlocked, ActiveRecord::ConnectionTimeoutError が起きた時に原因調査に役立つ情報を表示する gem を作った
- ruby-kafka の consumer group で instance type や availability zone によって特定の partition の lag が大きくなる問題を解消する gem を作った
- Avro でスキーマ管理されたデータを BigQuery で取り込めるデータに変換する
- fluent-plugin-mysql-select-insert
- Ruby で SOCKS Proxy を利用する
Ruby のアプリケーションを運用する上ではメモリ管理周りの知識も必要なので、その辺もそこそこ理解しているつもり。
MySQL
MySQL がどのように動いているかや、パフォーマンスを出すための SQL のチューニングやインデックスの張り方についてはそこそこ詳しいはず。以下、主な執筆記事。
- MySQL で複合インデックスを作成する際には必ず Explain の key_len を確認すべきという話 - あらびき日記
- Rails Developers Meetup 2018 で「MySQL/InnoDB の裏側」を発表しました - あらびき日記
- 論理型の設定値を RDB に保存する場合の選択肢と各々のメリット・デメリット - あらびき日記
- MySQL with InnoDB のインデックスの基礎知識とありがちな間違い - クックパッド開発者ブログ
AWS
2017 年 8 月から ECS on EC2 のアプリケーションの運用をしているので、ECS と EC2 のノウハウはけっこう持っているはず。
あとは S3, SNS, SQS, Lambda, Route53, EMR, EventBridge 辺りを組み合わせたアーキテクチャだったらすぐ構築できると思う。
Savings Plans, Spot instance を使ったコスト削減や、アーキテクチャの改良などによるコスト削減も得意。
Datadog
監視サービスを CloudWatch Alarm から Datadog に移行し、実運用に乗せるところまでを行った経験があるので、Datadog の辛いところをどう解消したかなどは色々語れる知識がある。以下はその例。
ただし、Datadog は監視用途にしか使ってないので、APM, Logs 等他のサービスについてはノウハウがない。
Terraform
2017 年 8 月から AWS のリソース、Datadog のモニター等を Terraform で管理しているので、Terraform を使ったインフラ構築等はサクッとできるはず。
Fluentd
そこそこの規模のデータを扱う aggregator を 2017 年 8 月から運用しており、運用で問題が起きた時にソースコードを読み解いて Pull Request を出せる程度には理解している。
特に、v0.14 の安定バージョンのブロッカーになっていたバグを直したのは自分である。
We got a bug report about output plugin deadlock with several plugins. @abicky fixed this bug and several users tested the patch on their environment. Many thanks for working on this issue.
cf. Fluentd v0.14.22 has been released | Fluentd
Fluentd 入門 〜運用に必要な基礎知識〜 はその時の産物。
Presto/Trino
4 年以上は自分が中心になって運用した経験があるので、安定化やパフォーマンスチューニングに関するノウハウは国内だとけっこう持っている方だと思う。Pull Request を送るほどの Java の知識はないが、connector にちょっと手を入れることはできるし、挙動を理解する際にどの辺のコードを読めば良いかは主要部分に関しては把握している。
Amazon Elastic MapReduce (EMR) ではじめる Presto/Trino 入門のように入門者向けの記事や、Presto における Service Discovery の動作原理のように運用者向けの記事も執筆している。
対外発表には次のようなものがある
- Repro Tech Meetup で「Repro における Presto の安定化・パフォーマンス改善の歩み」を発表しました
- Repro における Presto Cassandra Connector 改造秘話 / Presto Conference Tokyo 2020
Go
Go で書かれているサービスをコードレビューすることがたまにあるのと、簡単な処理であれば Go で書くこともある。次のように、Go の習得も兼ねて Go 製の運用ツールの開発経験もある
ただし、普段読み書きする機会はほとんどないので、Ruby に比べると開発速度はかなり劣る。
Java
書くことはあまりないが、Presto, Cassandra, Kafka, Kafka Streams 等、運用している OSS のコードは挙動を理解するために頻繁に読むことがあるし、普段 Kafka Streams アプリケーションのコードレビューもしている。
以下、Java で書かれたソースコードを読んだりブレークポイントを設定したりして挙動を理解した例
- Stateful Kafka Streams アプリケーションで consumer が増減すると意図しない偏りが発生する理由 〜 StreamsPartitionAssignor はいかにタスクを割り当てるのか 〜 - あらびき日記
- Presto における Service Discovery の動作原理 - あらびき日記
- Docker のログを columnify で Athena (Presto) に特化した Parquet にする - あらびき日記
- Cassandra でレプリケーションストラテジーを変更するとデータが消失する - あらびき日記
- Hive on Tez で Parquet を Snappy で圧縮すると起きる Container is running beyond physical memory limits. を解消する - あらびき日記
- Sloppy Phrase Search の slop とは - あらびき日記
BigQuery
パフォーマンスが出ない場合やメモリエラーが起きた時に原因を調査して解消したり、数百行規模の分析クエリを書いて複雑めの集計を行うこともできる。
Kafka
2 年以上 Kafka broker を運用しているし、ruby-kafka のほぼ全てのコードを読んだ上で ruby-kafka を使った producer アプリケーションも consumer アプリケーションも書いたことがあるし、Kafka Streams をソースコードレベルで理解した上で Kafka Streams アプリケーションのコードレビューをできるし、librdkafka もトラブルがあればソースコードレベルで調査できる。
- Stateful Kafka Streams アプリケーションで consumer が増減すると意図しない偏りが発生する理由 〜 StreamsPartitionAssignor はいかにタスクを割り当てるのか 〜 - あらびき日記
- rdkafka-ruby で Local: Broker transport failure (transport) が起きる場合の対処方法 - あらびき日記
また、ruby-kafka には積極的にコントリビュートしている
Cassandra
3 年以上の運用経験があり、書籍を読んだりソースコードを読んだり手元で動かしたりして色々ノウハウが溜まっている。
- Cassandra でレプリケーションストラテジーを変更するとデータが消失する - あらびき日記
- Cassandra C/C++ Driver を使うと Cassandra で Connection reset by peer という INFO ログが出る - あらびき日記
マネージメント
2018 年にチームリーダーになり、2019 年に開発組織の方針によりチームリーダーという役職を明示的には置かなくなったが実質チームリーダーのようなことをしていた。2021 年から正式にチームリーダー(ピープルマネジメントはしない)となり、2022 年からチームマネージャー(チームリーダー + ピープルマネジメント)となった。
マネージメント関連の公開資料としては例えば次のようなものがある
- 続・何でも屋になっている SRE 的なチームから責務を分離するまでの道のり 〜新設チームでオンコール体制を構築するまで〜 - Repro Tech Blog
- Repro の開発組織体制の変遷そして Platform Engineering
言語
日本語
ネイティブ
英語
CEFR B2
カランメソッドを全ステージ修了したり、2020 年 7 月から週 2 回 1.5 時間のオンライン英会話を続けたりしているので、1 対 1 であればある程度コミュニケーションが取れる。
- TOEIC L&R 935 (2021 年 8 月)
- Listening 455 (CEFR B2)
- Reading 480 (CEFR C1)
- duolingo english test 105 (CEFR B2)
執筆歴
- R言語上級ハンドブック (2013年)
登壇歴
- 2023-12-06 Repro の開発組織体制の変遷そして Platform Engineering (Platform Engineering Meetup #6)
- 2023-08-31 何でも屋になっている SRE 的なチームから責務を分離するまでの道のり 〜新設チームでオンコール体制を構築するまで〜 (SRE Lounge #15)
- 2020-11-20 Repro における Presto Cassandra Connector 改造秘話 (Presto Conference Tokyo 2020)
- 2019-10-29 安定・安価なECS auto scalingを目指して (SRE Lounge #11)
- 2019-06-04 Repro における Presto の安定化・パフォーマンス改善の歩み (Repro Tech: 実践・並列分散処理基盤)
- 2018-03-24 MySQL/InnoDB の裏側 (Rails Developers Meetup 2018 Day 1)
- 2015-09-05 クックパッド特売情報 における自然言語処理 〜固有表現抽出を利用した検索システム〜 (NLP若手の会 第10回シンポジウム)
- 2013-06-01 R による文書分類入門 (Tokyo.R #31)
- 2012-09-25 HTML5 Canvas で学ぶアフィン変換 (SWF 研究会#2@東京)
- 2012-02-19 Rのスコープとフレームと環境と (Tokyo.Lang.R #0)
- 2011-11-26 twitteRで快適Rライフ! (Japan.R #2)
- 2011-11-26 RではじめるTwitter解析 (2011年度 データ解析環境Rの整備と利用)
- 2011-11-12 R版Getopt::Longを作ってみた (Tsukuba.R#9)
- 2011-11-12 Rデータフレーム自由自在 (Tsukuba.R#9)
- 2011-09-10 文字列カーネルSVMによる辞書なしツイート分類 (第7回自然言語処理勉強会)
- 2011-08-27 Rデバッグあれこれ (Tokyo.R #16)
- 2010-12-02 TwitterのデータをRであれこれ (Osaka.R #4)