読者です 読者をやめる 読者になる 読者になる

Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

【資料公開します】AWS Dev Day Tokyo 2017 にて登壇しました/choconの簡単なご紹介

こんにちは。SREの @kazeburo です。2017年5月31日から6月2日にAWS Summit Tokyo 2017と同時に開催された「AWS Dev Day Tokyo 2017」に登壇しました。

登壇する機会をいただき、また数あるセッションの中から会場に足を運んでいただいた皆様、ありがとうございました。

発表内容

「Cloud connect the world as Glue」というタイトルにて、メルカリのインフラストラクチャの概要および変遷、そして現在のAWSをはじめとするクラウドの利用について紹介しました。

資料はこちらになります。

chocon について

スライド中で触れた chocon について少し紹介したいと思います。

choconはクラウドのRegionあるいはデータセンター外との通信を効率良く行うためのミドルウェアになります。HTTPS、HTTP/2の通信をKeepAlive/Poolingし、再利用することでレイテンシをさげるのが目的になります。

f:id:kazeburo:20170604003341p:plain

具体的には、choconに対してHostヘッダに「example.com.ccnproxy-https」とつけてリクエストを行うと、choconがhttps通信に切り替えて「example.com」に対してproxyリクエストを行います。ちなみに「example.com.ccnproxy」だとhttp通信にてproxyを行います。

choconの効果は、手元のPCからでも確認ができます。

choconを手元のmacbookにインストールして起動しました。

%  ./chocon --port 5000

まず、choconを経由せずに https://example.com/ にリクエストしてみます。

% httpstat https://example.com/
Connected to 93.184.216.34:443 from 192.168.67.49:57384

HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: max-age=604800
Content-Type: text/html
Date: Sat, 03 Jun 2017 15:12:26 GMT
Etag: "359670651"
Expires: Sat, 10 Jun 2017 15:12:26 GMT
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
Server: ECS (rhv/818F)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1270

Body stored in: /var/folders/r_/x5zvpkbd06z2dh467h6s46940000gn/T/tmprZKyNa

  DNS Lookup   TCP Connection   TLS Handshake   Server Processing   Content Transfer
[     5ms    |      117ms     |     261ms     |       268ms       |        0ms       ]
             |                |               |                   |                  |
    namelookup:5ms            |               |                   |                  |
                        connect:122ms         |                   |                  |
                                    pretransfer:383ms             |                  |
                                                      starttransfer:651ms            |
                                                                                 total:651ms

トータルで650msec以上かかりました。次にchoconを経由します。

% httpstat  http://127.0.0.1:5000/ -H 'Host: example.com.ccnproxy-https'
Connected to 127.0.0.1:5000 from 127.0.0.1:57432

HTTP/1.1 200 OK
Cache-Control: max-age=604800
Content-Type: text/html
Date: Sat, 03 Jun 2017 15:14:09 GMT
Etag: "359670651+gzip"
Expires: Sat, 10 Jun 2017 15:14:09 GMT
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
Server: ECS (rhv/818F)
Vary: Accept-Encoding
X-Cache: HIT
X-Chocon-Req: CNHYFXAU6VC5yrWcfxpDf5
Content-Length: 1270

Body stored in: /var/folders/r_/x5zvpkbd06z2dh467h6s46940000gn/T/tmpTBxC1x

  DNS Lookup   TCP Connection   Server Processing   Content Transfer
[     5ms    |       0ms      |       110ms       |        0ms       ]
             |                |                   |                  |
    namelookup:5ms            |                   |                  |
                        connect:5ms               |                  |
                                      starttransfer:115ms            |
                                                                 total:115ms 

初回はchoconがサーバに接続するため、直接つなぐのと同等のレスポンスタイムとなりますが、2回目からレイテンシが改善します。example.com のIPアドレスにpingを実行した際のRTTは100msec強でしたので、最速でhttps通信ができたと言えるのではないでしょうか。

最後に

メルカリSREチームではchoconをはじめ、いくつものミドルウェアを開発し、運用しております。ミドルウェアやインフラストラクチャ、SREについてもっと詳しく知りたい、聞いてみたいという方がおりましたら、こちらから連絡をしていただけたら嬉しいです。

www.wantedly.com