Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ISUCONでEnvoyを使えるか?

 ISUCONでEnvoyを使えるか?

Aya (Igarashi) Ozawa

September 11, 2018
Tweet

More Decks by Aya (Igarashi) Ozawa

Other Decks in Technology

Transcript

  1. ISUCONで
    Envoyを使えるか?
    Cloud Native Meetup #4 LT
    Aya Igarashi @Ladicle

    View full-size slide

  2. @Ladicle
    Software Engineer - Z Lab Corp.

    View full-size slide

  3. お題となるWebサービスを決められたレギュレーションの中で限界ま
    で高速化を図るチューニングバトル!!!
    今週末は…

    View full-size slide

  4. 2016
    はてなダイアリー風
    似非マイクロサービス
    2017
    idobata風(chat app)
    サーバ3台構成
    2018...
    ?????
    よりCloud Nativeな構成に?

    View full-size slide

  5. Envoy → Observability
    ISUCON → Measure + Tuning
    もしかして…

    View full-size slide

  6. さっそくISUCON7の予選問題で試してみる(制限時間5h)
    https://github.com/Ladicle/isucon7-qualifier-envoy

    View full-size slide

  7. ISUCON7予選問題
    idobata風のチャットサービス
    ● サーバ3台構成 (default: APPx2, DBx1)
    ● 1core CPU /1GB Memory
    ● DBはMySQL
    ● APPは複数の実装があるがGoを選択

    View full-size slide

  8. 構成を検討する
    Envoyをどこまで使うか?
    ● 基本的にHTTPproxy/Tracing/Metricsだけ使う
    ● Serverは3台固定で、動的制御が必要なものもない
    のでcontrole-planeは使わず, data-planeのEnvoy
    にstaticな設定ファイルのみ渡す
    ● tcp_proxyを使ってMySQLの前段にEnvoyを置いて
    もよいが、取得できるMetricsの恩恵に比べて構築
    の手間が大きいため使わない

    View full-size slide

  9. static_resources:
    listeners:
    - address:
    socket_address:
    address: 0.0.0.0
    port_value: 80
    filter_chains:
    - filters:
    - name: envoy.http_connection_manager
    config:
    tracing:
    operation_name: ingress
    codec_type: auto
    stat_prefix: isubata_http
    route_config:
    name: isubata_route
    virtual_hosts:
    - name: isubata_all
    domains:
    - "*"
    routes:
    - match:
    prefix: "/"
    route:
    cluster: isubata1
    decorator:
    operation: isubata1
    http_filters:
    - name: envoy.router
    clusters:
    - name: isubata1
    connect_timeout: 60s
    type: static
    lb_policy: round_robin
    hosts:
    - socket_address:
    address: 127.0.0.1
    port_value: 5000
    - name: jaeger
    connect_timeout: 1s
    type: static
    lb_policy: round_robin
    hosts:
    - socket_address:
    address: 10.0.1.100
    port_value: 9411
    tracing:
    http:
    name: envoy.zipkin
    config:
    collector_cluster: jaeger
    collector_endpoint: "/api/v1/spans"
    admin:
    access_log_path: "/tmp/admin-access.log"
    address:
    socket_address:
    address: 0.0.0.0
    port_value: 9901
    Envoyの設定ファイル

    View full-size slide

  10. NGINXをEnvoyに置き換え
    時間制限内に終わら
    せるためにDockerで
    サックとデプロイ

    View full-size slide

  11. 3681
    初回ベンチマーク結果
    まだEnvoyによる影響はなかった
    3684

    View full-size slide

  12. Targetの表示
    起動忘れてベンチ回
    すミスが防げる
    Grafana Dashboard
    複数台構成でも楽に状
    況把握. ISUCON用途だ
    とNodeExporterで十
    分だった

    View full-size slide

  13. JaegerでTraceLogを見る
    Longest Spanでソートすると分かりやすい
    Errorが表示されているのは
    Service Nameが設定されて
    いないから
    envoy/issues/3792
    Native Jaeger Tracingしよ
    うとしたらセグフォした
    envoy/issues/4140
    横軸: 時刻
    縦軸: Spanの期間

    View full-size slide

  14. まとめ
    ISUCONでEnvoyを使えるか?

    View full-size slide

  15. WE ARE
    HIRING!

    View full-size slide

  16. For your time & we’ll see you soon
    ladicle
    Thank you!

    View full-size slide