FANCOMI Ad-Tech Blog

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

PythonによるSSP構築インターン!!

こんにちは、8月27日~8月31日の1週間インターンに参加した、みしまです!!

インターンの課題は、SSP構築でした。サーバ構築など研究以外の技術を学びたいと思い、今回のインターンに参加させて頂きました。

インターンの詳細は「目的・目標」、「概要」、「成果」、「まとめ・感想」の順で書きます。

目的・目標

今回、インターンでの個人的な目的・目標を以下に示します。

  • サーバ構築ができるようになる
  • バックエンドの技術を学ぶ

概要

インターンの課題はSSP構築でした。構築に利用したWebサーバやフレームワークなどを以下に示します。

Flask

Flaskは、Djangoより軽量で自由度が高い特徴があります。
課題ではSDK-SSP、SSP-DSPのやり取りにはjsonファイルのみだったので軽量で扱いやすいFlaskを利用するのが良いと思いました。

Gunicorn

Gunicornは、Python製のWSGIサーバの一種です。WSGIサーバはWebサーバとWebアプリケーションの間を最適化するためのものです。 FlaskはPythonで構築を行うためGunicornが適しています。

Nginx

Nginxは、メモリ使用量の少ない高速なWebサーバです。並列処理で負荷分散が可能になっています。SDKからのアクセスが多くなった時に1つのサーバでは処理できません。そのため、Nginxでアクセスを複数のサーバで処理するために利用します。今回はメモリの関係上、2つのSSPを構築しました。


システム全体を図に示します。

f:id:fan_t_mishima:20180903180053j:plain

成果

作成したシステムのパフォーマンスを確かめるために「1秒で処理できるリクエスト数」を指標として、値が大きいほどパフォーマンスが良いことを示します。
検証として以下の4通りの状態でパフォーマンスの変化を測りました。
①Nginx・Gunicornなし
②Gunicornなし
③Nginx・Gunicornあり・プロセス
④Nginx・Gunicornあり・スレッド
①~③はSSPから複数DSPにRequestsを送る際の並列処理をプロセスで行い、④ではスレッドで行いました。結果を以下に示します。

f:id:fan_t_mishima:20180903211741j:plain

結果から並列処理をプロセスからスレッドに変更した際に大幅にパフォーマンスが向上しました。両方の違いとしてスレッドは1つのプロセスで並列処理を行います。プロセスは同じプロセスを生成して、並列処理を行います。そのため、スレッドはCPU使用率が低いためパフォーマンス向上に繋がりました。

まとめ・感想

「目的・目標」に示したサーバ構築ができるようになりました。サーバ構築にはインタプリタ言語であるPythonを使用しました。これを並列処理が得意なコンパイラ言語にすることで、さらにパフォーマンス向上に繋がると考えられます。個人的にコンパイラ言語でサーバ構築をしようと思います。
 バックエンドの技術「Nginx」、「Gunicorn」は、研究では使わないため貴重な経験ができて良かったです。
最後に、サーバサイドの技術を多く学ぶことができてすごく楽しいインターンとなりました。
1週間、本当にありがとうございました。