Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)

Akatsuki Hackers Labは株式会社アカツキが運営しています。

Rails4.2のコネクションプールの実装を理解する

tl;dr

Railsではコネクションプール数を設定していても、1スレッド辺り1コネクションしか持ちません。

発端

アカツキではRails + Unicorn + Nginx + MySQLの構成をAWSで運用しており、c3.4xlargeインスタンス上で1台辺り64のUnicornワーカープロセスが実行される設定になっています。

ソーシャルゲームでは時にたくさんのアプリケーションサーバを並列稼働される必要がでてきます。特に年末年始の時期は平時の2-3倍のトラフィックが予想され、アプリケーションサーバを最大100台で稼働させる必要がありました。

Railsのdatabase.ymlのpool設定は5だったので、単純に考えると最大 100台 * 64プロセス * 5接続 = 32,000個の接続が常時貼られるのでは?MySQLmax_connectionsの設定は大丈夫か?という議論があり、Railsのコネクションプールの実装をきちんと理解すべき!ということで、調査しました。

続きを読む

急いで覚えるElixir: Enumerable編

ElixirのEnumerable

前回の記事から続いて、今回はElixirで利用する基本的な制御構文について学んでいきます。

Keyword list

多くの関数型プログラム言語では、2要素のtupleによって関連付けられたデータ構造を表現します。 Elixirでは、最初の要素がAtomであるTupleのListのことをKeyword listと呼びます。

iex> list = [{:a, 1}, {:b, 2}]
[a: 1, b: 2]
iex> list == [a: 1, b: 2]
true
iex> list[:a]
1

キーが重複している場合、先頭に格納された値が優先的に読まれます。

続きを読む

Electronで社内ツール作ってみた

はじめに

アカツキにて内定者インターンをしているsachaosです。 この記事ではプロジェクトに配属され、少しの間アシスタントディレクター業を行っていた僕が、 エンジニアの端くれなりに社内ツールを作って業務プロセスの無駄な部分を自動化した話をします。

続きを読む

resize2fsコマンドの先でカーネルは何をしているのか

背景

前回の記事で、resize2fsコマンドがどのように1秒未満での容量拡張を実現しているかを知るために、resize2fsコマンドのソースを調査しました。その結果、メタデータの一つであるGlobal Descriptor Tables(GDT)をカーネル内で更新しているからではないか、という示唆を得られました。今回は、実際にカーネルのコードを読んで、この示唆が正しかったことを見ていきたいと思います。

続きを読む