production services with gentoo linux on sakura cloud
TRANSCRIPT
Production Services with
Gentoo Linux@mazgi#ssmjp 2015.09.30
Hidenori MATSUKI ( @mazgi ) Maverick inc.
Manager a.k.a. 雑用係
whoami?
developmentoperationothermake ebuild
My roles are …
What’s RTB-DSP ?• RTB→Real Time Bidding
• Web広告が表示される瞬間に広告枠のオークションを行われ配信される広告が決まる仕組み
• DSP→Demand Side Platform
• 広告主に代わりSSPから広告枠を買い付けるプラットフォーム
• SSP→Supply Side Platform
• 広告媒体者に代わりDSPに広告枠を販売するプラットフォーム
広告主Audience
It's w
e!
DSP SSP Media
※画像は http://jp.yamaha.com/products/network/downloads/tools/ より
広告出稿
広告閲覧1. 広告リクエスト
2. bid request
3. 入札判断
4. bid response
5. 落札通知
6. 広告配信
a few secs
100 ms or die!
whoarewe?
We are planning and developing Internet Advertising services with
RTB DSP Service with DMP
We
have
2 s
ervi
ces
PaperArea targeting “Paper” Ads from Web
Paper
Today
’s
Pick Up
PaperArea targeting “Paper” Ads from Web
Paper
Code name is “FSS”Mainly made by ScalaProvided on Gentoo Linux
今日はこの開発コードネーム”FSS”を提供するサーバーがなぜGentoo Linuxでさくらのクラウド上に構築されたかまた自社製アプリケーションをどのようにebuildでパッケージングしているかをご紹介します!
というわけで
システム構成
SAKURA Cloud
Rendering
MongoDB (Back)
MongoDB (Back)
MongoDB (Back)
MongoDB (Back)
MongoDB (Back)
MongoDB (Back)
InternetRouter
Switch
WebView WebView
MariaDB MariaDB
Load Balancer
Load Balancer
HTTPS Access
Customer & Publisher
Replication
LoadBalancing
(HA, appliance)
FSS System Structure
WebAPI WebAPILoad
Balancing
MongoDB (Front)
MongoDB (Front)
MongoDB (Front)
(Replication & Sharding) (Replication)
Rendering
アプリケーション構成• WebView
• 管理画面のWebView
• SPAとしてSlim, Sass, CoffeeScript, AngularJS等で実装 ( http://techlog.mvrck.co.jp/entry/frontend-intro/ )
• WebAPI
• 管理画面のWebAPI
• Scala + Play Framework 2で開発
• RenderingServer
• 入稿データから紙広告の原稿を生成する
• こちらもScalaで実装
• RGBからCMYKへの変換や各種組版処理(!)を行う
なぜGentoo Linux?
OS/Distribution選択• 堅牢さ+サポートは魅力的
• RHELサブスクリプションは良い選択
• 社会インフラや安全性を担うなら(私は)こっち
• カスタマイズの自由度が高いものも魅力的
• 日々変わる自社サービスなら(私は)こっち
• どうせ自前でパッケージングすることになるならやりやすい方が良い
• make menuconfig しなくちゃいけなくなるとか
• ミドルウェアをconfigureのオプション変えてビルドしなくちゃいけなくなるとか
• OpenSSHのバージョン上がるとLPKパッチあててパッケージ作らなくちゃいけないとか(今は AuthorizedKeysCommand があるので不要です)
• 自社プロダクトのパッケージを作りたいとか
それ、Gentooだとどうなる?• make menuconfig しなくちゃいけなくなるとか
• OSインストール時にやってますよね?
• 1回やるのもn回やるのも手間は一緒です
• ミドルウェアをconfigureのオプション変えてビルドしなくちゃいけなくなるとか
• USEフラグでかなり自由に制御できます
• Ansible的なやつで /etc/portage/package.use/* を管理すれば展開も楽です
• OpenSSHのバージョン上がるとLPKパッチあててパッケージ作らなくちゃいけないとか
• USE=“ldap” emerge openssh で解決(当時)
• パッケージが提供されていないOSSや自社プロダクトのパッケージを作りたいとか
• Gentoo(Portage)ならGit(Hub)のリポジトリをそのままパッケージにできます
どうやって{構築, 運用}?
普通にサーバー作成• サーバーはさくらのクラウドで構築
• じつはDSPサービスの方はハウンジングメイン(クラウドって楽だなと改めて思います)
• LDAPアカウントでログインできるところまで構築したイメージを複製するだけ( http://blog.mazgi.net/entry/cloning_ldap_authenticatable_server_on_sacloud )
• /home はNFSで共有
• 同一ゾーン内であればどのサーバーに入っても同じファイルが見える
• ファイルシステムは基本的に btrfs
• パーティション分ける代わりに subvolume
• /var/log は compress 指定
• fog-sakuracloudとか使って手オペ0にしたい
普通にプロビジョニング• 弊社は伝統的にAnsible
• オフィシャルにPortageモジュールあります
• でも安定版だと usepkg が指定できない(masterには入ってる)
• PlayBookリニューアル中
• ミドルウェア/ツールインストール
• Gentoo Linuxのオフィシャルパッケージは比較的バージョン新しい
• ~amd64 マスクされてても使うこともひじょうにしばしば
• 足りないものは私家版作成( https://github.com/mazgi/portage-overlay/tree/master/dev-java/sbt-bin )
• 必要の応じてUSEフラグ設定
USEフラグ設定(ImageMagick)
AfterLittle CMS, JPEG, PNGがほしい
USEフラグ設定(Oracle JDK)
After
今回はX.Orgいらない
普通にパッケージング&deploy• とりあえずサンプル(&補足)
• https://github.com/mazgi/portage-overlay/tree/master/www-apps/playscala-example
• Gentoo Linuxを本番で使ってる会社のblog
• http://techlog.mvrck.co.jp/entry/services-with-gentoo/
• だいたいこんな感じでいけます(雑)
• ~amd64 マスクされたバージョン9999を emerge すると実行時点のGitのHEADがインストールされるようにしています
いかがでしょうか?
• Gentoo Linux便利そうですよね?
• 本番サービスで使ってみたくなりますよね?
• 一緒にサービスをGentoo Linuxで動かしませんか?
さいごに
We are hiring !Maverick Inc. では
一緒に本番サーバーでemergeを実行したり ebuildを書いてみたい方を募集しています!
ぜひ @mazgi までお声がけください!