シンクロ・フード エンジニアブログ

飲食店.COMを運営する、株式会社シンクロ・フードの技術ブログです

builderscon tokyo 2018 に参加してきました! (@fohte)

基盤チームで CI 職人をやっている @fohte です。

9 月 6 日 (金)、9 月 7 日 (土) に開催された builderscon tokyo 2018 に参加しました!

builderscon.io

今回は、個人的ベストスピーカー賞のいくつかのセッションをご紹介させていただきます。

セッション紹介

Algorithms in React

@koba04 さんによる、React の内部アーキテクチャである Stack (~ React 15) と Fiber (React 16 ~) に関するセッションでした。

Stack とは何か、Fiber とは何かを詳細に説明されており、名前しか聞いたことがなかった筆者にもすんなりと理解できる発表でした。

React 15 以前まで用いられていた Stack は、同期的に再帰的に ReactElement を探索して処理する構造で、途中で中断したり再開することが難しいという問題や、ツリーが大きくなると UI をブロッキングしてしまうといった問題がありました。

そこで、React 16 から採用された Fiber では render phase と commit phase が分けられており、render phase では非同期で処理が行われ、commit phase では同期的に処理が行われるようにしています。
そして、なるべく render phase で処理を行うようにすることで、Stack が抱えていた問題を解決しています。

また、Fiber のアーキテクチャを活かした Time Slicing や、React 17 で実装予定の Suspense と呼ばれる機能も、デモを用いながら紹介されていました。 デモが非常に実用的で分かりやすかったため、スライドや下記リポジトリをご参考ください。

React の内部は触れたことがなかったためほとんど知識がありませんでしたが、そんな筆者でも分かりやすく説明されており、React の内部も見てみようと思えるセッションでした。

lld − 開発ツールの主要コンポーネントの1つをスクラッチから作成した話

(スライドが見つかりませんでした。)

Turing Complete FM (以下 TCFM) というポッドキャストをされていることで著名な Rui Ueyama (@rui314) さんによる、Rui さんが作られた LLVM リンカである lld の設計思想などに関するセッションでした。

lld は 1 度作り直されており、その際に「複数のリンカを抽象化せずにそれぞれ実装していく」という方針に切り替えたそうです。
そこで、「リンカはそれぞれ異なる独立した仕様を持っているが、コードの重複を防ぐために抽象化した結果、あるリンカにだけ存在する機能と、また別のリンカにだけ存在する機能を同時に使うケースが発生し、実用上は存在しないケースについて考慮する必要が出てきて、完全に無駄」という話があり、これはなんでも抽象化したくなってしまう筆者にとって衝撃的な話でした。
また、「抽象化しないことによって抽象化によるパフォーマンスの低下をなくせる」といった話もまた自分の考えを改めるきっかけになりました。

「自分で良いと思ったことはアンチパターンであってもやってみるべき」ということで、実際に手を動かして、さらにそれで成功した方の発言はかなりの説得力がありました。

Rui さんの単独 TCFM のような感じで、非常に分かりやすいセッションでした。
「リンカとは何か」といったところから基礎的な部分から丁寧に分かりやすく説明されていて、低レイヤーにあまり詳しくない筆者にも話を理解でき、興味深く聴くことができました。

このセッションは、個人的ベストスピーカー賞でした。

高集積コンテナホスティングにおけるボトルネックとその解法

GMO ペパボの P 山 (@pyama86) さんによる、コンテナホスティングサービスのロリポップ!マネージドクラウドを運用するにつれて直面した課題と、それをいかにして乗り越えたか、という発表でした。

特に、strace でプロセスが発行するシステムコールをトレースし、perf でシステムコールのボトルネックをシンボルレベルまで確認する、といったボトルネックの調査方法は非常に参考になりました。

P 山さんも仰っていましたが、「コンテナはあくまでプロセスである」ということを改めて感じました。

筆者も規模は違えど似たような課題を抱えており、タイムリーで参考になるセッションでした。

ブログサービスのHTTPS化を支えたAWSで作るピタゴラスイッチ

はてなの @aereal さんによる、はてなブログの独自ドメインの HTTPS 配信環境をどのように構築したか、という発表でした。

Let's Encrypt はプログラマブルにアクセス可能で、自動的に TLS 証明書の発行・更新が行えるようになっています。 そこで、はてなブログではどのように自動化したのかということを詳細に解説されていました。

具体的な構成についてはスライドをご覧頂くとして、主に AWS Step Functions と Amazon DynamoDB の TTL Trigger を活用されていました。

Step Functions は任意の AWS Lambda を起動し、エラー処理も柔軟に行えるワークフローエンジンです。 はてなブログでは Lambda には状態を持たないようにし、Step Functions に状態をもたせることで、実行ステップ全容を把握しやすくしているとのことでした。

また、DynamoDB の TTL Trigger は、アイテムが期限切れになったときに任意の Lambda を起動するといった、pub/sub 方式を取ることができます。
証明書の更新タスクのようなバッチ処理は、あるタスクがエラーになったときなどに複雑になってしまいがちです。そこで、TTL Trigger を使ってある証明書の期限が切れたときに更新タスクを起動するようにすることで、単一のタスクに集中でき、処理単位が小さく、失敗も把握しやすくなったとのことでした。

大規模処理の戦略に関するベストプラクティスがうまく言語化されていて、深く共感できるセッションでした。

雑感

builderscon は今回が初めての参加でしたが、常に「同時刻に行われている他のセッションも聞きたいんだけどこっちも捨てがたい…」となってしまうほどに、興味深いセッションで目白押しでした。

聴講したどのセッションも多くの知見が得られ、非常に充実した 2 日間になりました。
体力的には疲れて 2 日目終了後にはヘトヘトでしたが、次回もぜひ参加したいと考えています!