岩田智哉(70)69この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。はじめにサーバーレス開発部@大阪の岩田です。Frameworkのアプリを動かしてみたので、構築手順やGunicorn、uWSGIとのベンチマークの比較についてご紹介します。UnitはNGINX社が開発した軽量Web/APサーバーです。WebサーバーのNGINXはご存知の方も多いと思いますが、実はこんなミドルウェアもリリースされていたりします。2018年4月に正式リリースされており、2018年9月現在でPythonPHPGoPerlRubyといった言語がサポートされています。soonとなっており、今後サポートされていくようです。API経由で無停止かつ動的に設定を投入できるのが大きな特徴です。公式ドキュメントでは下記のように紹介されています。下記の環境で構築しました。Unitをインストールします。今回はソースからインストールする方法を選択しました。ビルドに必要なパッケージをインストールしておきます。Unitのソースを取得して、ビルド・インストールします。インストール先は/usr/local/unitとしました。Unitをsystemd管理下に置きたいので、下記のファイルを作成します。Unitを起動してみます。unitステータスを確認してみます。frameworkのアプリを作成します。venvを使いつつ、公式のチュートリアルの手順に従って構築します。migrateここまでできたら、チュートリアルの手順通りにコードを追加し、ユーザー一覧取得のAPIが動くところまで持っていきます。runserverでWebサーバーを起動し、APIが動作することを確認しておいて下さい。Unit上でDjangoアプリが動くよう、設定を投入します。下記のようなJSONファイルを用意します。environment)を指定することができます。}}ファイルが準備できたらcurlコマンドを使い、Unixソケット経由で設定を投入します。configuration."}・・・エラーになりました。'encodings'モジュールが読み込めておらず、仮想環境がうまく認識できていなさそうです。調べた結果、userの指定を追加することでうまく動くようになりました。設定追加後のJSONは下記の通りです。curlでAPIにアクセスして試してみます。http://localhost:8000/users/[{"url":"http://localhost:8000/users/1/","username":"admin","email":"admin@example.com","groups":[]}]レスポンスが返ってきました。ベンチマークせっかくなので、PythonのAPサーバーとしてよく利用されるGunicorn、uWSGIと比較してみました。Unitを導入したEC2と同一サブネット上に負荷掛け用のクライアントとしてEC2を追加で構築し、何パターンか設定を変えつつ、abコマンドでベンチマークを行いました。abコマンドはそれぞれ5回づつ実行し、5回の平均値を結果として採用しています。各APサーバーの設定それぞれ利用したベースの設定は下記の通りです。}}計測パターンに応じてprocessesを変更しています。100000processes、threasdsの値は計測パターンに応じて変更しています。この設定ファイルを使って、下記コマンドで起動します。1workers、threadsの値は計測パターンに応じて変更しています。この設定ファイルを使って、下記コマンドで起動します。runserverで起動するDjangoの開発用Webサーバーもベンチマーク対象に入れてみました。processesを1に設定しました。processesを1に、threasdsを1に設定しました。workersを1に、threadsを1に設定しました。結果このような結果になりました。その1)負荷掛けクライアント側の並列度を上げて再実行してみます。Unit:processesを1に設定しました。uWSGI:processesを1に、threasdsを1に設定しました。Gunicorn:workersを1に、threadsを1に設定しました。その2)負荷掛けクライアント側を並列起動するようにしたので、サーバー側も複数プロセス立ち上げるように設定を変更してみます。m5.largeインスタンスはvCPUが2つなので、APサーバーのプロセスを2つ立ち上げる設定にしています。uWSGIとGunicornのスレッド数の設定ですが、何度か試した感じuWSGI:3、Gunicorn:1あたりが性能が出たので、それぞれこの値を採用しています。Unit:processesを2に設定しました。uWSGI:processesを2に、threasdsを3に設定しました。Gunicorn:workersを2に、threadsを1に設定しました。負荷掛けクライアント側の並列度をさらに上げて再実行してみます。Unit:processesを2に設定しました。uWSGI:processesを2に、threasdsを3に設定しました。Gunicorn:workersを2に、threadsを1に設定しました。結果5並列の場合とあまり変わりませんでした。Gunicornとなりました。Unitが1位になってくれると期待していたので、少し意外な結果でした。参考資料に記載されているのですが、Gunicornに直接httpでリクエストを送ると、レスポンスのヘッダとボディが別パケットになるそうです。間にNginx等のWebサーバーを噛ませてリバースプロキシするような構成を取ると、もう少しGunicornが伸びそうな気はします。時間ができたら検証してみたいと思います。soonとなっている機能も多くあります。発展途上なイメージですが、NGINX社が開発していることもあり、今後シェアを伸ばしていく可能性も十分に持ち合わせていると思います。Unitの動向を注意深く見守っていきたいと思います。700,363回転するのが大好きなサーバーレスエンジニアです。CodeでPythonの開発環境構築を構築してみた。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。濱田孝治416re:Invnetの動画検索でもめちゃくちゃ便利ですが、その他ブログやホワイトペーパーやGitHubも横断検索できるので、是非一度使ってみてください。CAFEの他、NTTデータとセブンイレブンの取り組みや、サインポスト、Zippinなどの各社と流通・小売業との連携を業界マップに作成してみました。泰雨111皆さん、こんにちは。コンサル部のテウです。2020年もあっという間に2ヶ月が経ちました。今年こそ機械学習に入門しようぜ!!って決心された方もいらっしゃると思います。入門できる方法をご紹介させて頂きたいと思います。本記事の手順通り、ランチタイム等の時間を活かして、手軽に入門してみてください。濱田孝治416re:Invnetの動画検索でもめちゃくちゃ便利ですが、その他ブログやホワイトペーパーやGitHubも横断検索できるので、是非一度使ってみてください。夏目祐樹414こんにちは、CX事業本部の夏目です。MacのタッチバーのタッチIDが非常に便利なのですが、Terminalでsudoを叩かないと行けないときに使えたらなぁと思ったので、情報を共有します。臼田佳祐296ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介257SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。