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