Tech Blog

グローバルな家族アプリFammを運営するTimers inc (タイマーズ) の公式Tech Blogです。弊社のエンジニアリングを支える記事を随時公開。エンジニア絶賛採用中!→ https://timers-inc.com/engineering

社内勉強会「DeepDive」のご紹介

f:id:timers-tech:20170605091443p:plain

Timersでプロダクトマネージャーしてます わた と申します。メガネとウイスキーとコーヒーを愛するメガネです。最近、グレンリヴェットというウイスキーのアンバサダーになりました。

さて、今回は弊社内で不定期に開催しているエンジニア勉強会「DeepDive」の紹介です。僕は勉強会の企画・運営担当として関わっているのですが、前回開催の非同期処理基盤について会が非常に盛り上がったので記事化してみます。

DeepDiveとは

ざっくり言ってしまえば、社内勉強会です。ただ、やっぱりやるにしても格好いいものにしたいというのもあり、名前をつけて、ロゴも作ってやっています。骨子は以下の通りです。

  • Timersで行われるTech系勉強会ブランド
  • 主目的は、Timersエンジニア同士のノウハウ共有による、Timersでの使用技術についての理解を深めること
  • そのため、Timersで使用してる技術や、開発したシステムについての勉強会が主となる
  • 参加者からのフィードバックもどしどしある場にしたい

まだ開催回数は2回なのですが、第1回はRx(リアクティブプログラミング)についての自社での導入状況や、技術習得時に役立つ&ハマりがちなノウハウが共有されるというものでした。

今回、ご紹介するのは第2回の「非同期処理基盤」の導入に向けた設計状況についての回です。

なぜ非同期処理基盤が必要なのか

弊社サービスでは、写真や印刷物を扱うことから、画像合成や印刷を担当するパートナーへの入稿手続きが必要であり、また費用をいただくため注文確定の確認処理や課金決済処理を行う必要があります。

これらは現状、直列でのバッチ処理にて行われているのですが、サービスのグロースの結果、バッチ全体の処理時間が伸びに伸びてしまっており、対処が必要な規模となってきました。もちろん、これまでも部分的に処理を並列化して改善を続けてきたのですが、いよいよ構造的な手を打とうという話に至ったのです。

と、なると、問題は直列処理になっている部分です。これをバッチ処理全体の依存関係を整理しながら、クリティカル度の高い処理から並列で動かしていくことで、問題解決をしようと考えました。そこで必要になるのが、非同期処理基盤です。

f:id:timers-tech:20170605100613p:plain

非同期処理基盤の実体は?

まず必要となるのは、Queueの仕組みです。実績、運用のしやすさ、開発をする際の環境整備のしやすさなどを考慮し、GCP上にKubernetesを使ったDockerコンテナクラスタを展開することで、実装することとなりました。

DeepDiveにおいては、このあたりの検証・検討経緯や設計上の制約についての議論がなされ、とても白熱しました。

  • 弊社のシステム群の大半はAWSにあるのに、AWS ECSを使わずにどうしてGCPにしたの?
  • Queueに入れるタスクが依存関係を持っている時の制御はどうするの?
  • 現状は、サーバー・サーバー間の処理に使う設計に見えるが、クライアント(アプリ)から叩くことは想定されてるの?その場合には、gRPCとか対応してくれると理想なんだけど?
  • アーキテクチャ的に、マイクロサービスになっていくように見えるけど、ビジネスドメインごとに別実装にしていく方針なの?というか、今回、Golang(Go言語)なんですね。どうして、メインの言語であるPHPにしなかったの?
  • Queueに渡して処理している間、ビジネスサイドでは短期的なデータ不整合が発生しうるけど、その場合のサービス側での見せ方や対応手段は考えてる?

といったような質問が行き来し、説明が30分に対して、質疑・議論が約1時間におよぶ、とても白熱した時間になりました。質問内容は、ブログに書くためにざっくりめの質問にまとめていますが、実際の議論では実装や制約、設計思想に至るまで深い話になっていました。

雰囲気写真

こんな感じでやってます。

f:id:timers-tech:20170605101343j:plain f:id:timers-tech:20170605101351j:plain f:id:timers-tech:20170605101355j:plain

DeepDiveを企画・運営してみて

PM職の僕ですが、Techな話は大好きです。勉強会担当として、ネタにすべきテーマに取り組んでるエンジニアにLTを依頼したりすると、たまに「えー」とか言われりすることもあります。それでも、開催にさえ至れば、エンジニアのみんなが議論に熱を上げ、新たな気づきや理解が浸透していくのを感じ、とても嬉しくなります。IT業界では当たり前のことなのですが、Techに対して真摯であり、そこに学びの必要性を認め、そして、その機会があるということは、とても素敵なことだなと思います。

また、今回は非同期処理基盤というサーバーサイドの話題にも関わらず、Android/iOSエンジニアたちも多く(というか、ほぼ全員)が参加するという全員野球な姿勢も素敵ですね。

個性豊かなTimersのエンジニアたちは、設計や実装についての議論を通じて、より良いサービスシステムの開発に熱を上げています。ともに仕事を進めていくPMとしても、嬉しくもあり、誇りでもあります。

飲める!カジュアル勉強会

Timers社内の勉強会では、ガチ勉強会とカジュアル勉強会の2種類があり、前者と後者の違いは、飲めるかどうか!です。

カジュアルにやろう!という趣旨であれば、会社がイベント用に備蓄してくれている冷蔵庫の中のお酒たちとちょっとした駄菓子を持ち出して、ワイワイやれるという趣旨です。飲んだくれになって「やいの!やいの!」になってはいけないのですが、多少のお酒は議論の呼び水ですよね。

ちなみに、DeepDiveはカジュアル勉強会です!!

積極採用中!!

子育て家族アプリFamm、カップル専用アプリPairyを運営するTimers inc. では、現在エンジニアを積極採用中! 急成長中のサービスの技術の話を少しでも聞いてみたい方、スタートアップで働きたい方など、是非お気軽にご連絡ください! 採用HP : http://timers-inc.com/engineerings

Timersでは各職種を積極採用中!

急成長スタートアップで、最高のものづくりをしよう。

募集の詳細をみる