「実例で学ぶレジリエンスプログラミング教室」に参加しました

2022年3月9日に、42Tokyoの協賛企業、株式会社ドリーム・アーツ のイベント「実例で学ぶレジリエンスプログラミング教室」が、42Tokyo校舎およびZoomにて開催されました。

システムを安定稼働させるためのコツであるレジリエンスプログラミングについて、スライドとハンズオン形式で学ぶイベントでした。

本記事は、このイベントの参加レポートです。

内容

株式会社ドリーム・アーツのCTO石田さんが、レジリエンスプログラミングについてスライドで説明した後、ハンズオンを行いました。

レジリエンスプログラミング

株式会社ドリーム・アーツは、SmartDBShopらん など、企業向けのSaaSを提供しています。

サービスを運用してきた中で学んだ、サービスを安定稼働させるためのコツがレジリエンスプログラミングだそうです。

レジリエンスが無いと、どんな問題が発生するか、例を用いて説明してくださいました。

例は、Nginxが複数のサーバをリバースプロキシし、複数サーバが1つのDBにアクセスする構成で、処理時間がかかるクエリが発生した場合に、サービスが止まってしまうというものでした。

レジリエンスの大切さについて説明いただいた後、システムを安定させるためのデザインパターンを6つ紹介してくださいました。

  1. サーキットブレーカー
  2. リトライ&フォールバック
  3. レートリミッター
  4. イムリミッター
  5. バルクヘッド
  6. キャッシュ

これらデザインパターンは『Release It!』という本に載っているそうです。

ハンズオン

github.com

レジリエンスプログラミングの説明の後は、上記リポジトリを使ったハンズオンが行われました。

GoとJavaでマイクロサービスを作成し、お互いに呼び出すようになっています。

Goでは gobreaker を使ってサーキットブレーカーパターンが実装されており、Javaでは resilience4j を使ってサーキットブレーカー、リトライ&フォールバック、レートリミッターパターンが実装されています。

校舎のPCでハンズオンをしようとしたのですが、残念ながらJavaがインストールされておらず、後日家で試しました(現在、校舎のPCにはJavaが入っているようです)。

試した内容は、以下のリポジトリにあります。

github.com

ハンズオンの後は、質疑応答、校舎限定の懇親会が行われました。

参加した感想

  • 耐障害性を高めるプログラミング手法は、42Tokyoの課題では得られない知識であり、勉強になりました。
  • 待ち行列の話が出てきたのですが、そこでポアソン分布が出てきて、統計WEB の輪読会に参加していて良かったと思いました。
  • 石田さんが楽しそうに話されていたのが印象的でした。

来月には株式会社ドリーム・アーツ主催のハッカソンが開催されるそうで、そちらも楽しみです!