2018の22日目のものです。このブログではお初にお目にかかります。インフラチームのid:masasuzです。モバイルファクトリーでは現在AWSと物理データセンターを使用しています。モバイルファクトリーではもともと物理データセンター使用しており、既存のサービスはその上で構築されております。数年前からAWSを本格的に利用し始めて新規のサービスは基本的にAWSで構築します。AWSで構築されたサービスは要件によって様々なアーキテクチャになっています。今回はある程度共通化されている物理データセンターにあるサービスのインフラアーキテクチャについて述べていきます。Server)RedisキャッシュサーバMemcachedRedisジョブキューサーバGearmanQudoResque個々のミドルウェアは置いておいて、構成としては特別なものを使っていないと思います。モバイルファクトリーとして特色のあるアプレケーションサーバに関して少しだけ詳しく述べたいと思います。Serverを使用しています。Debianを使用していましたが、全て置き換えられています。ミドルウェアは可能な限り標準のインストールで入るものを使用します。標準でパッケージが用意されていない場合はdebパッケージを作成して、社内のaptサーバからインストールできるようにしています。サーバ構築毎にビルドするということはしないようにしています。installですむようになってます。作られているプロダクトは最近は別として、ここ10年くらいはPerlで書かれています。Perlを利用していましたが、OSアップグレードのたびにバージョン変わるのはつらい新しいバージョンのPerlを使いたいなどの理由で、独自にパッケージングしたperlを使うようにしています。mf-perl5.xxの名前でパッケージングしてプロジェクト側で使いたいバージョンのperlを選択できるようにしています。依存パッケージも含めて同じバージョンのPerlモジュールがインストールされるようになっています。社外に公開できないロジックが含まれていたりするものに関してはdarkpan(プライベートなCPANレポジトリ)を立ててそこからインストールするようにしています。mod_perlで動いていましたが、公開されているサービスは全てPlack/PSGIに置き換えられていますアプリケーションサーバのデーモン管理にSystemdを利用しています。これもOS標準の起動方法に合わせるためです。Start::Server経由でPlack/PSGIサーバを起動することにより、ホットデプロイできるようにしています。アプリケーションサーバとしては主にStarletを使っていますが、新しめのプロジェクトではGazelleも使われています。WebフレームワークとしてはSledge、Splite、Amon2が使われています。SpliteはPSGI対応したSledge風のフレームワークです。社内独自フレームワークです。SledgeやSpliteは長めに運営されているサービスで使われており、現在では新規でPerlのプロジェクトを作る場合は、Amon2が使われております。結びにモバイルファクトリーで主に使われているアーキテクチャについてざっくりと書いてきました。これは現在の姿で、課題があれば日々変化していっています。一昔前であれば、デーモン管理はUpstartを使っていましたし、リバースプロキシはPerlbalを使っていました。長年運営しているサービスもあるので、ドラスティックに変更はできませんが、少しずつよりよい形に改善していってます。冒頭で述べたように新規のサービスではAWSで構築することが多く、AWSに合わせたアーキテクチャを構築しています。これに関してはどこか別のところで述べられたらと思います。今回はざっくりでしたが、掘り下げて知りたいこと等ありましたら、またどこかの機会で述べたいと思います。