FANCOMI Ad-Tech Blog

株式会社ファンコミュニケーションズ nend・新規事業のエンジニア・技術ブログ

goody!を支える技術

こんにちは。pythonemacs派の、y_kawasakiです。布教活動が進捗ありません。 さて、皆さん、goody!を使って頂いていますか?今回は、goody!を支える裏側について、少し話してみようかと思います。

goody!とは?

行きたいお店が決まらない、そんな時に役立つアプリです。

goody!ページ  goody! -「なに食べる?」をいますぐ解決!新感覚のスマートフォングルメアプリ

goody!プロデューサーが語る ファンコミュニケーションズ 広報ブログ

を参照すると詳しくなれます。

goody!を支えている者達

goody!は、AWSの上で動いています。特に難しいことはしていなくて、それぞれのロールサーバ群の前にELBをおいて、負荷分散と、availabilityを確保しています。(AWSって時々落ちるんです。幸いなことにgoody!では、メンテナンス予告があったとき以外落ちていないですが。)RDBは、安定のMySQL5.6を使っています。

リクエストは、nginxが受けて、Gunicornflaskと受けて処理をしています。

flaskは、最近、注目のpythonのミニマムWebフレームワークです。ミニマム過ぎて、なにも考えていないと、ルーティングくらいしか機能がないように思えます。しかし、ちょこっとしてものを書くには大変便利で、簡易なものであれば、あっという間に、複雑なものもまじめに作ればできます。O/Rマッパーは、SQLAlchemyを使うのがおすすめらしいですが、goody!では、O/Rマッパーは使わず、ごりごりとSQLを書いています。

flaskはもちろんPEP333WSGI対応ということで、適当にミドルウェアを用意してあげれば、本番環境でもなんの問題もなく使えます。WSGI対応サーバとしては、これまた、python製のGunicornを使っています。今は、単純にHTTPサーバとして起動させていますが、負荷と安定具合を見つつ、Unix Domain Socketに移行したいなぁと思っています。 (ちなみにデーモン化には、これまたpython製のsupervisordを使ってます)

どうやってお店を決定しているか

goody!で検索すると、はじめは近くにある人気のお店が何件か出てきます。そこで、このお店いいなぁと思ったら、チェックを押したり、なんか違うと思ったら、次のお店をタップしていると思います。ナビ開始や、お店に行ったよとか、レビューしたよ!という情報を組み合わせて、あなたにあったお店の情報をどんどん、蓄積していきます。そして、検索のリクエストがあるたびに、この人が好きそうなお店はこんなお店で、近くにあるかなぁというのを検索したり、こういうお店を選んでいる他の人は、どんなお店を選んでるかというのを考えて、お店を提案しています。だ・か・ら使えば使うほどいいかもというお店が出てくるのです。どんなことをやっているかは、また、機会があれば、紹介したいと思います。

皆さんが使ってくれれば使ってくれるほど、中の小人さんは賢くなります。ぜひ、新しいお店の発見に、意外な自分の発見に、優柔不断で困っている時にぜひぜひ使ってみてください。