セキュリティキャンプ2023参加記

どうもyapattaです。

セキュリティキャンプ2023のチューターとして今回参加してきた。キャンプ終了後の参加記RTAを目指してを書いていく*1

 

きっかけ

今年のセキュリティキャンプ(これからはセキュキャンと略する)は三年ぶりのオンライン開催だった。自分は2020年度に受講生として参加した*2。講師の方々に非常に良くしてもらい技術に対する興味関心が圧倒的に高まった2ヶ月だった*3

yapatta.hatenablog.com

 

とは言え対面開催に比べたら制約は強く、色んな人と交流はできたがその後オンラインだけでお互いの存在を観測するみたいになりがちだった。対面開催で色んな人と交流することへの憧れもあり*4、また自身が分散合意アルゴリズムについてそこそこ知っていたこともあり分散合意ゼミのチューターに申し込んで無事参加することになった。

 

講義内容

自分が参加したゼミは『故障を乗り越えて動くシステムのための分散合意ゼミ』というものであった。ざっくり言うと巷で良く使われている分散合意アルゴリズムRaft*5をGo言語で実装しながら耐故障性を高める基盤技術である分散システムについて学んでいこうぜ、というものだ。

詳細について自分で説明しようと思ったが、受講生がせっかく頑張ってくれたわけだし彼らの成果発表スライドでも上げておく。これを見たら大体何をやっているかわかると思う。

 

speakerdeck.com

 

感想

Go言語はchannelやgoroutineなどの機能のおかげで大分並行システム*6の実装が楽になるが、それでも実際に分散システムを作ってみると状況整理が非常に難しい。一つ一つの挙動自体は難しくないのだが、それらが複数同時に絡みあっていて複雑に見えてしまう。実際受講生が実装中に報告してくれたバグ自体もどれも巨大なものではなかった。例として、goroutineが止まれなくて無限増殖してしまったり、timerの時間管理が想定通りに動いていなかったり、フォロワがログの追加を認める場合の条件設定が論文の内容と少しズレていたりと。現在の状況を整理して、その上で一つ一つを一緒にバグを潰す作業は非常に楽しかった。と同時に自分が実装するときに気をつけようと思えることも沢山あって、逆に自分が学ばされた*7

 

というか彼らの吸収が早くて無限にすげえ〜となっていた。Raftの論文を読んだことが無い人が3日ちょいでRaftを作るってのは中々できることではない。実際初めて自分が論文を読んだときは何言っているかよく分からなくなっていた。本当にunderstandable consensus algorithmか?、と。

次世代の人たちが新しいことをどんどん吸収して覚えていくのは見ていてワクワクするし、応援したくなる。背筋が自然としゃきっとする。自分に教えられることがあって周りの役に立っているというのも悪い気がしない。自分もセキュキャンコミュニティの輪の中で生かされてしまっているな。学ぶ立場から段々と教える立場に変わって後進を育てながら一緒に更に学べるコミュニティが身近に存在していることがありがたすぎるぜ。次は講師を目指したい、教えられることも増やしていきたい。

 

まあこんな感じでこの文章を終わらせる。5日間非常に楽しくゼミを走り抜けることができて、分散合意ゼミで関わった講師と受講生に感謝しかない。ゼミ外の他のタイミングで関わってくれた人たちもありがたいぜ。

*1:結局書くのが面倒くさくなって今になった

*2:当時参加したゼミはReDos検出プログラムの作成とOSSへの適用というもの。内容はゴリゴリの計算理論とグラフ理論で中々にアルゴリズムの実装が楽しかった

*3:当時は10月から12月初頭にかけて週末にゼミが開催された

*4:タダ飯を食べたいとは言っていない

*5:https://raft.github.io/raft.pdf

*6:並列と無闇に書くと強い人に殺される

*7:教えるとより理解が深まるとはよく言う