Endo kitura on_bluemix
-
Upload
joohoun-song -
Category
Internet
-
view
495 -
download
0
Transcript of Endo kitura on_bluemix
KITURA を BLUEMIX で実⾏してみる
⾃⼰紹介
• 会社:株式会社ジェーエムエーシステムズ(5年⽬)
• 所属:モバイルソリューション事業部
• 好きな⾔語:Objective-C, Javascript
• 仕事:iOSアプリの開発がメイン
最近の活動
アジェンダ
1. Kituraってどんなもの?
2. Kituraを使って、Webサーバを構築してみる!(←重点的に)
3. 他のWebフレームワークと⽐べてみる!
4. 今後のKituraに期待すること!
Kituraって?
⼀⾔で⾔うと、
Swiftで開発できるWebアプリケーション⽤の
フレームワーク
1.Kituraって?
サーバで実⾏できるSwiftといえば「Perfect」
1.Kituraって?
BluemixのSwift対応を発表!!
※私が現地で撮影しました
1.Kituraって?
Webフレームワーク「Kitura」の発表
Kituraって?
で、 何ができるの?
Kituraって?
• テンプレートエンジンの利⽤ - Mustache形式を採⽤(デザイナと作業分担しやすい)
• ルーティング - router.get(){} - router.post(){}
• URLからの値を取得 • リクエストパラメータの取得 • デバッグログの出⼒
まぁ普通です。
⾔い換えれば、違和感なく使い始めることができます。
Kituraを使ったWebサーバを構築!
Kituraの始め⽅ (失敗編)
• Bluemixランライム上で構築します
Kituraサーバ構築(失敗編)
• 「計算」カテゴリー内の「CFアプリケーション」を選択
Kituraサーバ構築(失敗編)
• 「ランタイム」を選択
Kituraサーバ構築(失敗編)
• 必要な情報を⼊⼒すると、環境が作成されます
Kituraサーバ構築(失敗編)
• 同じページに記載されている⼿順通りに実⾏すると、アプリが起動します。
1. 最初にCFコマンド・ライン・インターフェースをインストールします。
2. スターター・コードをダウンロードします。
3. ダウンロードしたコードを解凍します。 4. 以下のコマンドを実⾏します。
$ cd your_new_directory
$ cf api https://api.ng.bluemix.net
$ cf login -u user_id -o user_id -s space_name
$ cf push jmas-swift
Kituraサーバ構築(失敗編)
• ブラウザでアクセスしてみると…
Kituraサーバ構築(失敗編)
えっ。 超簡単〜。
• ということで、最初の⼿順でダウンロードしたスターターコードを、Kituraに置き換えてみます。
• 使うソースコードはこちら
(https://github.com/IBM-Swift/Kitura-Sample)
Kituraサーバ構築(失敗編)
• サンプルをダウンロードして、あとは同じ⼿順で実⾏してみると…
Kituraサーバ構築(失敗編)
!!!!!!!
あれ?
• ビルドエラーになりました。 • ここから⻑い戦いが始まります。
Kituraサーバ構築(失敗編)
• BuildPackの差し替え • BuildPackは、Cloud Foundry 上で、任意のアプリケーションを
実⾏できるようにするための仕組みのこと。 • これをカスタムのBuildPackにして、その中で、必要なライブラリ
をインストールしてみると…
Kituraサーバ構築(失敗編)
権限エラー!!
• VirtualBoxでUbuntuを構築! • それならば、ランタイムと同じ環境をローカルに構築 • 必要なライブラリをビルドして、出来上がったライブラリを使えば
いいのでは? • ということで…
1. VirtualBoxのインストール
2. Ubuntu14.04の構築 3. Ubuntu上にSwiftのコンパイラをインストール
4. Kituraを実⾏するために必要なライブラリをインストール 5. 完成した.soファイルや.hファイルをgithubに
6. BuildPackの中で、必要なライブラリをランタイム環境に展開
Kituraサーバ構築(失敗編)
その結果…
やっぱり失敗!!なんでだー!?
ってね。
まぁ。
そんな気がしていました。
おとなしく推奨されているDockerで構築します。
ようやく本題
Kituraを使ったWebサーバを構築!
正しい(?) Kituraの始め⽅ (for Mac)
正しいKituraの始め⽅
ざっくり説明すると… 1. Docker のインストール 2. CF Cli Toolのインストール 3. DockerFileを作成する 4. imageをビルドしてプッシュ 5. Bluemix上でコンテナを作成
正しいKituraの始め⽅
• Dockerのダウンロードとインストール https://www.docker.com/products/docker-toolbox ※Docker ToolBoxでググると出てきます。
正しいKituraの始め⽅
• Cloud Foundry CLI をダウンロードして、インストールします
https://github.com/cloudfoundry/cli/releases ※(参考サイト) https://console.ng.bluemix.net/docs/containers/container_cli_cfic.html
正しいKituraの始め⽅
• IBM Containers Cloud Foundry プラグインをダウンロード、インストールします。
$ cf install-plugin https://static-ice.ng.bluemix.net/ibm-containers-mac
※(参考サイト) https://console.ng.bluemix.net/docs/containers/container_cli_cfic.html
正しいKituraの始め⽅
• Bluemix上で、独⾃コンテナの追加を⾏います。
※注意※
初めての⽅は、 最初にレジストリ名称
を設定できます。
が、後で 変更できません。
企業アカウントなどの場合はご注意くださ
い。
私は jmas_kitura_test にしちゃいました。
これからDockerを使うときは、常にKituraを意識することになりました。
まだ、会社には バレていません。
しばらく黙ってます。。。
正しいKituraの始め⽅
• またローカルでの作業に戻ります • Bluemixにログインします $ cf login
• IBM Containers CF CLI プラグインを実⾏します
$ cf ic namespace set jmas_kitura_test $ cf ic login
正しいKituraの始め⽅
• 環境変数を設定します • 前⾴のログインコマンドを実⾏すると、
以下のログが出⼒されますので、合わせて実⾏します
$ export DOCKER_HOST=tcp://containers-api.ng.bluemix.net:8443
$ export DOCKER_CERT_PATH=/Users/endo/.ice/certs/containers-api.ng.bluemix.net/
$ export DOCKER_TLS_VERIFY=1
正しいKituraの始め⽅
• DockerFileを⽤意します githubにサンプルがありますので、それをダウンロードするのが良いと思います。 https://github.com/IBM-Swift/kitura-ubuntu-docker ※[kitura ubuntu docker]で検索すればヒットします。
※⾃分で記述してもOK
正しいKituraの始め⽅
• DockerをBuildします • ⽤意したDockerFileのあるディレクト
リまで移動して以下のコマンドを実⾏します
$ docker build -t=“image_name" .
正しいKituraの始め⽅
• Dockerのイメージをタグ付けします $ docker tag jmas_kitura registry.ng.bluemix.net/
jmas_kitura_test/jmas_kitura
• イメージをプッシュします $ docker push registry.ng.bluemix.net/jmas_kitura_test/
jmas_kitura
正しいKituraの始め⽅
• ブラウザでBluemixにログインしてみます
正しいKituraの始め⽅
• コンテナを選択すると……
キターーーーーー!!!!!
まだ終わりじゃありません!
正しいKituraの始め⽅
• ここからコンテナを作成します。
正しいKituraの始め⽅
• 起動したコンテナに接続します # CONTAINER IDを確認します
$ docker ps
# コンテナにattachします
$ docker attach CONTAINER ID
正しいKituraの始め⽅
• github などからソースコードをダウンロードします。
• Kitura-Sampleが雰囲気を掴むには、いい感じです
https://github.com/IBM-Swift/Kitura-Sample
正しいKituraの始め⽅
$ git clone https://github.com/IBM-Swift/Kitura-Sample.git
$ cd ./Kitura-Sample
$ make
# または
$ swift build -Xcc -fblocks
# これでビルドが完了です
# 最後に以下のコマンドで実⾏します
$ ./.build/debug/Kitura-Sample
正しいKituraの始め⽅
• これで、ブラウザからアクセスしてみると…
お疲れ様でした。
サーバ構築の完了です。
では簡単に、ソースと結果の画⾯を⾒てみます
どんな動きをしているのか?
• どんな動きをしているのか?
router.get("/hello") { _, response, next in response.setHeader("Content-Type", value: "text/plain; charset=utf-8") do { try response.status(HttpStatusCode.OK).send("Hello World, from Kitura!").end() } catch {} next() }
- ソース
- URL 「http://xxx.xxx.xxx.xxx:8090/hello」
- 結果
どんな動きをしているのか?
• どんな動きをしているのか?
router.get("/error") { _, response, next in Log.error("Example of error being set") response.status(HttpStatusCode.INTERNAL_SERVER_ERROR) response.error = NSError(domain: "RouterTestDomain", code: 1, userInfo: [:]) next() }
- ソース
- URL 「http://xxx.xxx.xxx.xxx:8090/error」
- 結果
どんな動きをしているのか?
• どんな動きをしているのか?
router.get("/users/:user") { request, response, next in response.setHeader("Content-Type", value: "text/html; charset=utf-8") let p1 = request.params["user"] ?? "(nil)" do { try response.status(HttpStatusCode.OK).send( "<!DOCTYPE html><html><body>" + "<b>User:</b> \(p1)" + "</body></html>\n\n").end() } catch {} next() }
- ソース
- URL 「http://xxx.xxx.xxx.xxx:8090/users/endo」- 結果
こんな感じ。
あとは皆さんも⾃分で体験してみてください。
他の⾔語との⽐較
• 今回は、処理性能を「Go」と⽐較してみたいと思います。
他の⾔語との⽐較
• ⽐較はApache Bench を使った負荷テストで、性能を⽐較してみます。
他の⾔語との⽐較
• 公平を期すために、どちらも同じBluemix Docker上でソースコードをコンパイルして実⾏してみました。
他の⾔語との⽐較
• Kituraのソースコードimport KituraRouter import KituraNet import KituraSys let router = Router() router.get("/") { request, response, next in response.status(HttpStatusCode.OK).send("Hello, World!") next() } let server = HttpServer.listen(8090, delegate: router) Server.run()
他の⾔語との⽐較
• Goのソースコードpackage main import ( "fmt" "net/http" "log" ) func HelloServer(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World\n") } func TestServer(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "TEST\n") } func main() { http.HandleFunc("/", HelloServer) http.HandleFunc("/test", TestServer) log.Printf("Start Go HTTP Server") err := http.ListenAndServe(":8090", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } }
他の⾔語との⽐較
テストケース1 • リクエスト数:100 • 同時リクエスト数:100 ab -n 100 -c 100 http://x.x.x.x:8090/
他の⾔語との⽐較
テストケース1 • 結果
1秒間に処理したリクエスト 平均応答時間
Kitura 18.77 53.269 ms
Go(net/http) 65.22 15.333 ms
Go の圧勝…
他の⾔語との⽐較
テストケース2 • リクエスト数:500 • 同時リクエスト数:200 ab -n 500 -c 200 http://x.x.x.x:8090/
他の⾔語との⽐較
テストケース2 • 結果
1秒間に処理したリクエスト 平均応答時間
Kitura 59.01 16.269 ms
Go(net/http) 70.74 14.137 ms
意外にも僅差に…
まだまだこれから改良されていくことを考えると、なかな
かの結果なのでは?
今後のKituraに期待すること(IBM様へのお願い)
• RDB関連の処理がまだまだ弱いと思います
• Bluemixランタイムで、Kituraを動かせるようにしてください
• KituraのWebSocket対応してください!
• SSLへの対応をお願いします!!
遠藤 武宣 ([email protected])
ご清聴ありがとうございました