Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ニジエチューニング2016-12
Search
ニジエインフラ
December 27, 2016
Programming
1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ニジエチューニング2016-12
ニジエインフラ
December 27, 2016
More Decks by ニジエインフラ
See All by ニジエインフラ
ニジエチューニング2023-12
nijieinfra
0
990
ニジエチューニング2017-12
nijieinfra
0
2.6k
ニジエチューニング2014-12
nijieinfra
0
680
ニジエチューニング2014-11
nijieinfra
0
430
ニジエチューニング2014-10
nijieinfra
0
510
ニジエチューニング2014-04
nijieinfra
0
360
ニジエチューニング2014-03
nijieinfra
0
610
Other Decks in Programming
See All in Programming
今さら聞けない .NET CLI
htkym
0
170
Build-to-own AI: Agentic Development for Humans
inesmontani
PRO
0
160
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
9
5.9k
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
130
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
200
5分で問診!Composer セキュリティ健康診断
codmoninc
0
770
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.3k
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
190
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
3.3k
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
290
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
280
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
150
Featured
See All Featured
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
240
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
WENDY [Excerpt]
tessaabrams
11
39k
Leo the Paperboy
mayatellez
8
2k
How to make the Groovebox
asonas
2
2.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
280
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
280
WCS-LA-2024
lcolladotor
0
780
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Transcript
ニジエチューニング 2016-12 2016/12/27 インフラボランティア:
あんただれ • 名前 ◦ ٩( )( )۶とか₍₍⁽⁽(◌ી( ・◡・ )ʃ)とか ◦
匿名ボードだとインちゃんと呼ばれてる • インフラ・バックエンドのボランティアスタッフです ◦ SREを名乗っても良い気がする今日このごろです • 2014/03/18にJoin • 来年こそ絵上手くなりたいです ◦ デッサン教室行き始めました ◦ 誰か教えてください>< • そろっと年が明けますね おひさしぶりです
前回の資料から2年ぐらい • 本当にいろいろありました・・・ • 結局ごめんやんに直接会えなかったので残念でした ◦ 一度大阪に行ったことあったんですが風邪で会えず・・・ • ということで僕がバックエンドも見ています •
ニジエのインフラもいろいろかわりました
期間もあいたので • 最近やったこととインフラについてのちょろっと紹介でも • 最近やった安定性を高める施策 ◦ NewRelic ◦ Request rate
limit ◦ Traffic shaping • 数字とかでみるニジエインフラ ◦ サーバの構成比率 ◦ HTTP/2いれてどうだった?
NewRelic APM導入 • ご存知な方も多いと思う New Relic APM(アプリパフォーマンス監視ツール)を導入 • 高いと思ってて今まで使いたいなーでも使えないなーと思ってたら クラウド向けの価格があったのに気づいた(
$150/台という印象が強くてちゃんと見てなかったw) • これならニジエでも行けそうということで導入 ◦ ちなみに最小支払いが 4500CU($37.5)なんですが入れたサーバはそれに達してませんでした w
NewRelic効果 • NewRelicを入れたことによって問題となる箇所がはっきり見えるのが良い ◦ 特にデータサイズによって速度が変わるものだと、開発環境だと再現しづらく気付かないことも 多いのでプロダクションのデータで解析できるのは大変良い • ちょっと時間のレンジが少し違うのでアレなんですが APPServerのレスポンスはだいたい 40%高速、ブラウザでも25%高速になっています
• 以前に比べてピーク時の速度低下がかなりマシになり安定化につながっています 改善前 改善後 ピークに効く改善をした時 (実線がピーク時間になっても あまりぶれてないのがわかる )
どう改善したか • といっても特別なことは特にしていません • 主な内容はクソクエリ潰しと不要なリクエスト潰し、一括取得などです • また、単純に一括でとるようにしてしまうと問題が起きるケースがあったのでそこはロジックを大幅に変えるなどして改善 しています • これはニジエに限った話ではないんですがキャッシュ=必ず速いというわけではないので注意が必要
◦ シリアライズやNWコストなどありますし考えて使いましょう的な • 今回は主にデータストアに対して行っています(db/kvs) ◦ wwwも気持ち減った ◦ 直近でwwwが増えたのはサーバ減らしても平気と判断して減らしたからです ◦ wwwはphp70/71化で一気にパフォーマンスをあげようと考えています DB memcached www
結局NewRelicどうなん? • とはいえだいたいの Web系の人たちは使ってる印象はあるので耳タコかなーとも(本業でも使ってる し) • モニタリングしただけで満足すると全く意味ないけど、きちんとそこから改善できるのであれば 大抵の場合は投入コスト以上の効果が生まれる ◦ パフォーマンス向上だけでなく単純にサーバコストの削減も可能
• そもそも全台入れる必要もないしそんなにコストかからない ◦ 入れられたら良いのは確かですが、コスト的に 使おう。
もともと入れようかずっと考えていた・・・
いよいよブチ切れ ということでリクエストベースでのRate limitを投入
本当なら制限なんてかけたくない • お互いにとって幸福なのは何も制限なく使え、そしてリソースが枯渇することもなくサービスが継続できることです • とはいってもAppの仕組み、インフラ構成、コストの問題などで無限にスケールするシステムはまずありません • システムを構築する際に想定される負荷、障害などを考えます これをキャパシティプランニングといい、もちろんニジエも行っています(ちなみに本業でもキャパプラしてます) • そして一般公開されているWebサービスのようなシステムの場合はどうしても想定外の動きをするクライアントがいます
• これは悪意があるリクエストもあればないリクエストもあります • そのようなリクエストによる影響をなるだけ減らして安定化させるためにニジエでは制限をかけるようにしています
実際の制限がないときの状況(Request) • 見てもらえればわかりますが突然ピョコンと上がったり、一番下のグラフでは完全に 枯渇しています • こういうリクエストでもさばけるぐらいのコストをかけられれば良いのでしょうがニジエ はそんなに体力もなく、またこれらを捌いたからといって多くのユーザの方々にメリット があるとも(自分は)思えませんでした • このようなリクエストをされると他のユーザが重くなったりするので制限をかけざるを
得ません
Request rate limit • トークンバケットアルゴリズムを使って制限かけています ◦ 要は特定のパスへのリクエストを例えば 10秒間で20回まで といった制限をいれることでリクエストを絞ってる感じです •
割とこの制限は緩めにかけていて通常の利用ではそうそう ひっかかりません ◦ かけ方も全体でというより特定の操作といった感じです ◦ 引っかかっても気づかないようなものもあります( APIなど) • もし左のようなエラー画面が出た場合はちょっとお茶でも飲めば すぐ正常に戻ります ◦ ついでに「あ、今負荷かけてるんだ」と抑えてもらえれば・・・ • ちなみにこれに引っかかったからといって「やば、ペナルティを受ける!」 とかというのは一部ケース(次ページ)を除き考えていません • 当然ですがかなりの効果があり最近は対策前のような跳ね方は ほとんどしていません ◦ 一部掻い潜ってくるのもありますが気になったタイミングで チューニングしてます
ニジエでの制限(お仕置き部屋) • 個人的にお仕置き部屋と言ってるモードがあるのですが、 いわゆるBANです • これは悪意を持ったリクエストなどに適用されます ◦ この悪意はシステムに対してです ◦ 割と自分が怒らないと発動しません
• まず誤爆はしないはずですがもしこれが出て心当たりがないなどの 場合はTwitterで連絡とってみてください ◦ proxyレベルでまるっとdenyしているので・・・ • ちなみに418なのは一度使ってみたかったステータスだったからで す ◦ 418にする前は402(Payment Required)でした
リリースでトラフィックが跳ねる! たまにある大容量リリースで帯域がきになる・・・ ニジエ大明神 音声アップデート
Traffic shaping • ニジエ大明神や音声などのリリースがあるとそこにトラフィックが集中して画像のトラフィックが 気になる事がありました ◦ 今のところこれが原因で刺さったことはないけど今後もあるのでコントロールしたい • もひとつの理由として高帯域なクライアントです ◦
ニジエのサーバは割と激安構成のためoutbound帯域が結構小さい ◦ システム構成全体としては余裕があるのですが、サーバ1台あたりの帯域を高帯域な クライアントが瞬間的に使い切ってしまうことがありました ▪ これはクライアントが悪いというわけではないです • 左図の数字はトラフィックと考えてください、サーバ全体では30まで捌けて クライアントは18要求しています。ぱっとみ60%負荷ですがクライアントの回線は均一であり ません、しかし振り分けはDNS-RRになりますのでトラフィックが完全にきれいに振り分けされ るわけではありません、特にニジエのようなサーバ1台あたりのキャパが小さい場合は影響を 受けやすくなります ◦ 一番左のサーバは90%負荷になっています • そこでshapingを実施しました ◦ クライアント単位での帯域 ◦ 特定のリソースの帯域(今後の大容量リリースから検討) ◦ トークンバケットとの組み合わせでのシェーピング(検討中) ◦ ただ割と緩めです 公平なリソース割り当てのためご理解ください
ニジエで一番台数が多いサーバって? 配信サーバ!
グラフと数字でみるニジエインフラ • サーバ台数でみると配信周りがTopで36%です ◦ 本業でもこういう比率のシステムは見たことないです ◦ いかに安くみたいな感じで構成したらこうなった感じですね ◦ といってもコスト比率だと17%とdbは圧倒的・・という感じ •
ちなみに現状の配信コストは0.5円/GBぐらいです(ストレージ・動的リサイズ込) ◦ 現状キャパシティ的にはまだ余裕あるのでもっとくればコストが低く ◦ リサイズについては改善を検討しています(特にagif) ▪ いい加減agifサムネの崩れは改善したい ▪ 以前本業でやったことあるので後はサーバコストとの兼ね合い
実はニジエはhttp/2対応しています で、結局どんな感じだったの?
http/2どれぐらいつかわれてるの? • どれ位http/2が使われているか見てみたところ全体の31%と結構使われている ◦ HTTPSを使用するかはユーザ任意 • h2対応していないブラウザだとどんなんだろうとみたところこんな感じ(多い順) ◦ Chrome55が引っかかってるのが解せないけど 偽装とか変な環境なのかなとか(会社のgwとか)
▪ でも採取したのが休日なんだよなぁと・・
ニジエでのhttp/2の傾向 • ヘッダサイズ(HPACK)について ◦ リクエスト(Rx)について ▪ 初回転送時でも割と静的テーブルで圧縮される ▪ 2回目以降はさらに効く(動的テーブル) ▪
88%削減出来ているのは結構驚いた ◦ レスポンス(Tx)について ▪ 想定より動的テーブルの圧縮が効かない ▪ 調べてみたら割と可変なヘッダが多かった(Dateなど) ので当然か・・・ • セッションあたりのリクエスト数 ◦ タイムアウト秒数がそれぞれ違うので参考程度に ▪ 5秒 http/1.1 keep-alive ▪ 180秒 http/2 ◦ 最大リクエスト数はhttp/1.1で25回、http/2.0で641回 ▪ 流石に641は驚いたw ▪ ニジエはリソース多いので割と有効に効いてる印象 ◦ おもったよりhttp/2で1回だけのリクエストだけが多い ▪ 調べたところFireFoxで多い ▪ ココらへん掘り下げて調べても面白いかも • チューニングできそうな要素はあるので少しいじっていきたい
まとめとか今後とか • agifのサムネ崩れ問題への対応 ◦ サーバコストとの兼ね合いがあるので必ずやるとはいえないですが・・・ ◦ メモリが・・・メモリが・・・メモリが・・・ ◦ 画像処理ってメモリ食うんですよねー •
php70 or 71の投入 ◦ 一時期70をテスト投入をしたことあるんですがやはり効果あったので早めに入れたい ◦ 全体投入するにはかなりのコード修正が必要なのでどうすっかなーといった感じです • コードのリファクタリング ◦ php70と合わせて少しずつ進めます・・・ • CentOSからUbuntuへ移行 ◦ 今CentOS(7)/Ubuntu(Xenial)混在なのでこれをUbuntuにしたい • サーバ整理してコスト減らす ◦ 幾つか整理してコストを減らす余地があるのでその辺やりたいなーと 良いお年を