2023 年振り返り

あけましておめでとうございます。2023年もお世話になりました。

2024 年もよろしくお願いします。

私生活

  • 体調管理
    • 健康です。熱が突然出るとかはあった気がしつつ、仕事を休むほどにはならなかったです
    • 家族の体調に左右されてリモートワークを選択することが何度かありました。アフターコロナ時代で気を遣った面もあります
  • 旅行
    • 5月に軽井沢に二泊三日しました。東京からのアクセスは抜群で、北陸新幹線なら70分です。ゴールデンウィークの翌週に行ったので混雑なく過ごせました。山を散策したり、いちご狩りしたり、自然を満喫できました。
    • お気に入りの白馬キャンプは、当日に子どもが高熱でキャンセルしました 😿

野鳥の森でバードウォッチング

  • 子育て
    • 四歳になって色々できるようになってきたので、サッカー教室に入れました。気に入ったようで、公園遊びのレパートリーに「サッカーボールで遊ぶ」が増えました
    • 本がそんなに好きそうでなかったので、毎日朝晩絵本の読み聞かせ + 隔週で図書館通いを一年間徹底したら、本好きになりました。表紙が飾れるラックに借りてきた絵本を並べておくと興味が向きやすくなるのでオススメです。
  • 読書
    • 英語の勉強も兼ねて、2023年は小説を多めに読みました。「Secret Garden」「Matilda」「To Kill a Mockingbird」など。
    • 中でも 「Anne of Green Gables(赤毛のアン)」は実は続編があって、シリーズ2と3まで読むほどには面白かったです。シリーズ3「Anne of the Island」はアンの大学時代(18~22)の話です。1915年出版にも関わらず、大学生活は今とそんなに変わらないのが読んでいて新鮮な驚きでした。
  • 雑感
    • 夏の間、貸菜園でトマト・きゅうり・なす・ピーマンなどの夏野菜を育てました。1~2週間ごとに通うのは大変でしたが、収穫は週末の楽しみになってました。10月になると寒いので一夏でやめましたが、また機会があればやりたいです。
    • インフレと円安もあって、2023年はお金のことを考える機会が多かったです。

炎天下の中、野菜のお世話

仕事

  • 入社から三年半経ちました
  • 開発チーム全体を振り返ると、施策の開発スピードは相変わらず早く、一方で安定性と開発生産性をバランス良く維持できたと思います 👍
  • 個人的に大きな issue として、前半に Vitess の本番導入が、後半に Flink のステージング導入ができました。Vitess は当初から期待していた MySQL 接続集約による接続上限の回避に加えて、Thread_running が下がったことで slow query を大きく減らす効果もありました。一方で、proxy の割にリソース消費量が大きいのは意外でした。Flink は今後のシャーディングを見据えて、複雑な JOIN クエリのマテリアライズテーブルをリアルタイムに作成するために使う予定です。
  • 2024 年のあけおめピークは無事障害もなく乗り越えることができて感無量です 😂
  • 2023/12/21 4:00 に障害がありました。GKE クラスタの Pod が問題なく起動するにも関わらず LB(NEG)に入るタイミングで Error syncing to GCP: error running backend syncing routine: googleapi: Error 400: Invalid value for field 'zone': ''. Must be a match of regex '(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?)', invalidという身に覚えのないエラーが発生しはじめて、リクエストが全く届かなくなりました。結局、その場で GKE クラスタをコピーして Ingress 含めた主要リソースを全部移行するという大工事で乗り切りました。GCP サポートとともに原因特定に取り組んでますが、GKE 自体に根本原因がある可能性も残ってます。

ソフトウェアエンジニアリング

  • 2023 年も Vitess に bug fix や feature request の PR を送り続けました。中でもパラレルのユースケースで特に対応が必要だった issue は次の三つです。
    • github.com
      • v15, v16 には、MySQL サーバーが高負荷で一時的に応答不能になるとその前段にある vttablet component の再起動が走るバグがありました。v17 では修正されてます。
    • github.com
      • v15, v16 には、vttablet の rolling update 時に最大1分間リクエストが MySQL まで届かなくなるバグがありました。こちらも v17 で修正されてます。
    • github.com
      • vitess-operator で unmanaged MySQL 構成を実現する場合、MySQL Replica ごとに vtgate/vttablet のセットが必要です。次にリリース予定の v2.12 ではこの冗長な設定は不要になります。
  • 自分のプロジェクトだと protolint 関連のメンテナンスが中心でした。
    • protolint のインストール方法がさらに増えました。Maven Central 経由npm パッケージ経由 でも利用できるようになりました。
    • もともと実装されていた、キャメルケースをスネークケースに変換する処理(例: accountStatus -> account_Status)でエッジケースの要望対応に少し苦労しました。小文字と大文字の間に _ を入れるというシンプルな実装になっていたので、ITDepartmentRegion は ITD_epartment_Region に変換されてました。それを IT_Department_Region に変換したいという話です。最初、大文字二つと小文字があったら大文字間に _ を入れるルールを追加したら、この例は解決しました。一方、今度は ListAccountOAuthsEnabledFilter が List_Account_O_Auths_Enabled_Filter になるデグレが報告されました。結局、大文字が三つ以上並んで最後が小文字のときに限定して、末尾の大文字二つの間に _ を入れるとちょうど良くまとまりました。こういう地味な作業は ChatGPT ならすぐに書いてくれると思ってましたが、全く要件を満たしていないコードを生成し続けるので、愚直にやりました。