SlideShare a Scribd company logo
1 of 72
現実世界から学ぶ
効率のいいサーバの使い方
2016-06-09
@shigure_onishi
名前 : 大西 時雨
職業 : インフラエンジニア
Github : @a4t
Qiita: @shigure_onishi
Twitter : @iwanomoto
最近の活動 : 燻製戦士 (Lv. 3)
自己紹介
Lv. 3 Lv. 1
ベーコン開発中
今日話すこと
最近の活動
コンピュータってなんだろう
単純なCPUの構造
現実世界に置き換える
最適化
最近の活動
AWS禁止令
AWSの情報を見るのを控えるようにしました
AWSをそれなりに使えるのが武器でしたが、捨てました
一時期はAWSのサービス80%以上触ったことある感じでし
たが、今は多分60%ぐらいまで下がってるはず
AWSの情報に全く追いつけていない
AWS禁止令
嫌いになったわけではない
単純に情報過多で追い切れないから切った
AWSだけじゃなくて最新技術の情報も控えてる
やる気ないのか!!
超やる気あります!!
じゃあ何やってるの?
Linuxカーネルコード読んだり
CPUの作り方とか調べたり
オンプレ環境の運用してた時代のインフラ構成見たり
なんでそっちに進んだの?
とある人物から言われた一言がきっかけでした
日々負荷と戦ってるエンジニアは毎日
頭の中にサーバ構成図思い浮かべてるんやで
???
どういうこと?
確かに頭の中にインフラ構成図思い浮かんで、ここ改善す
ればもっと早くなるかなーとか考えることはある
けど毎日?うーんそれはちょっとないかなぁ
2週間後
全然わかりません!
例えば日本の人口って何千万人もいるけどちゃんと運用さ
れてるやろ?
これが10億人とかに増えたとしても対応方法はきっと用意
されてる(色々混乱はあるだろうけど
なるほど!
伝えたかったこと
現実世界にヒントはいっぱいある
コンピュータってなんだろう?
カーネルコードを読んでみる
正直今もまだしっかり理解できていない
けどなんとなく雰囲気は掴めた
サーバって一言で言っても色々裏で動いている
マルチプロセスとかイベント駆動ってどういうことなのか
こんな感じの本今読んでる
ちょっと言われて凹んだこと
嫁 : 外で読まないでね
俺 : えっ…!?
嫁 : 普通の人から見たらCPUって初
音ミクみたいなもの?ってレベルだ
よ
さらに深く潜り込んでみ
た
そんなわけで
今はCPUの実装を調べたりしてます。
電子回路とか学生の時やったけど全然覚えてない
LEDランプ何個かふっ飛ばして若干電気恐怖症
オームの法則
I = V / R
電流 = 電圧 / 抵抗
電流 = 5 / 0.001 = 5000A
LEDの直流順電流は 0.03A
約 16万倍 の電流を流しこんだ
LEDのふっ飛ばし方
最大電流があるから
電力が25000Wにはならないよ!
このレベルからのスタート
なんとなく知ってる情報
全て0と1で動いてるもの
自分達の書いたコードは
最終的に0と1になる
物理的に考えるとこんな感じ
CPUってどんなものだっけ?
0V
ちょっと不正解!
ここ
0V
この回路の問題点は
スイッチを切り替える
タイミングで発生する
切り替わったタイミングで
スイッチの先端がバウンドする
バウンドすると0Vの信号が
複数回発生してしまう
これをチャタリングという
物理で物事を考える
0V
同じようなことは身近にある
例えばパソコンのキーボード
物理的にはすごく中途半端な接触やバウンドが発生している
けど問題なくタイプを僕達はできている
これはソフトウェア的に解決していて
判定処理を遅延したりしている
人間に最適化されている
しかしCPUはコアな部分なので
もうちょっとだけ
物理的に解決しなければいけない
コンデンサは電気を蓄える物と思われ
がちだが、実は回路を遅延するのにも
使われる
コンデンサは一気に電圧が上がらず少
しずつ電気を蓄電して放出する
この仕組みをCRフィルタという
とは言ってもこの回路には
まだまだ問題がありCPUを
実装するにはシュミット・トリガや
プルアップの仕組みとか必要
コンデンサで解決
つまりコンピュータは
物理的なものに置き換えれる
回路は人間の夢
元々、ロジックというものは人間の心の中にしか存在しなかった
1は絶対に1であるといった完全無欠で純粋な世界。
その世界(心)の一部にしか、ロジックは存在できなかった。
一方、現実の世の中は、アナログ的にドロドロと動作している。
だから、簡単には心の機能のコピーは作れない。
でもある時、仕方なくアナログな材料を組み合わせて何とか心の入れ物を作った。
それが「デジタル回路」。
アナログな材料で作られたロジックの入れ物であり、ロジックという非現実的なモノと現実の間を仕切る薄い膜のよ
うな存在。
By 渡波 郁
ロジックは人間の心を込めた物
人間がやりたいことを回路に詰め込んで
実現したものがロジック
全てはここから始まっている
とは言っても
これ役に立つかと言われると微妙
そんなわけで
もう少し身近な話に
今までの資料で伝えたいのは
物理で置き換えれるということ
待ち行列理論
ここからは資料モロパクリ
http://www.slideshare.net/yamaz2/ss-58813038
答え
だいたい0人に近づいていく
マルチプロセスモデルに置き換
え
人はアクセス
ATMはプロセス
とは言っても現実甘くない
プロセス
プロセス
処理コスト
1cost
2cost
5cost
処理コストバラバラ
とは言っても現実甘くない
プロセス
プロセス
処理コスト
1cost
2cost
5cost +1
とは言っても現実甘くない
プロセス
プロセス
処理コスト
1cost
2cost
5cost
+1
とは言っても現実甘くない
プロセス
プロセス
処理コスト
1cost
2cost
5cost
+2
とは言っても現実甘くない
プロセス
プロセス
処理コスト
1cost
2cost
5cost
+3
とは言っても現実甘くない
プロセス
プロセス
処理コスト
1cost
2cost
5cost
+4
軽い処理なのに待たせてしまう
プロセス
プロセス
処理コスト
1cost
2cost
5cost
何時間待たせるんだよ!
+1
最適化
サーバを分ける
当たり前のようにやっているけど
管理画面を分ける理由はコレ
プロセス
プロセス
処理コスト
1cost
2cost
5cost
プロセス
当たり前のようにやっているけど
管理画面を分ける理由はコレ
プロセス
プロセス
処理コスト
1cost
2cost
5cost
プロセス
当たり前のようにやっているけど
管理画面を分ける理由はコレ
プロセス
プロセス
処理コスト
1cost
2cost
5cost
プロセス
当たり前のようにやっているけど
管理画面を分ける理由はコレ
プロセス
プロセス
処理コスト
1cost
2cost
5cost
プロセス
当たり前のようにやっているけど
管理画面を分ける理由はコレ
プロセス
プロセス
処理コスト
1cost
2cost
5cost
プロセス
当たり前のようにやっているけど
管理画面を分ける理由はコレ
プロセス
プロセス
処理コスト
1cost
2cost
5cost
プロセス
サーバ増えてコスト上がったけ
ど
非常に効果的な戦略
銀行に置き換える
ATM
ATM
目的
引き出し
振り込み
口座開設
窓口
ユーザーは怒らない
口座開設するのに10分待たされたところで
そこまでストレスを貯めない
しかしATMで10分も待たされるとユーザーはイライラする
同じように動画のダウンロードに5秒かかっても ユ
ーザーはそこまで遅いと感じないが
Webページ表示するのに5秒かかると遅いと感じる
これはボトルネックではない
ボトルネックが移動したことにより
ボトルネックではなくなるケースもある
とは言っても早ければ早いほどいいのは忘れずに!
動画アップロードの例
API 1
LB
よくあるパターン
赤いのが動画アップロード
API 2
API 3
動画アップロードの例
upload
Server
LB
API 1
改善パターン
API 2
APIサーバが欲しいものとは?
APIサーバが欲しいのはアップロードした動画のURL
動画の内容はどうでもいい
この構成にするメリット
軽い処理のユーザーは待ちが短くなる
アップロードサーバは回線速度特化のインフラにできる
APIはCPU特化のマシンを選べる
全部のサーバが両方特化するとお金かかる
スケールアウトしたのに
全然負荷がこない
負荷が安定しないため予測しにく
い
負荷が安定していれば
計算しやすい
スケールアウトしにくい
サーバ増やすぞ!
あれ?
サーバ増やすぞ!
誤魔化しが利くなら
ユーザーを騙そう
セキュリティ要件とか制約は色々あるけれども
可能であればこういったトライはしてみよう
まとめ
ヒントは現実にいっぱいある
身近なものにヒントはいっぱい眠っている
バスの運賃支払いのケース
- シングルプロセス
- 降りるタイミングで両替するとかで行列が
- 両替機後ろに置けばいいのでは?
- セキュリティの問題が
先人の知恵を借りる
自分の悩んでることは実はもっと深いレイヤーで
解決されてるかもしれない
そして大体その解決方法は優れている
クラウドは麻薬
特にAWS
素晴らしい技術がいっぱい詰め込まれているため
よくわかってなくても構築できてしまう
お金で解決!
物理法則は変わらない
ツールや言語は変わるけれど、物理の法則は変わらない
常に新しいものを追いかけ続けるのはつらい
低レイヤーを知ってるとその恩恵を受けやすい
つまり僕は、楽をしたい
ご清聴
ありがとうございました

More Related Content

What's hot

ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索
techtalkdwango
 
qpstudy 2014.04 ハードウェア設計の勘所
qpstudy 2014.04 ハードウェア設計の勘所qpstudy 2014.04 ハードウェア設計の勘所
qpstudy 2014.04 ハードウェア設計の勘所
Takeshi HASEGAWA
 
20130608 JAWS-UGさいたま CDPからはじめよう
20130608 JAWS-UGさいたま CDPからはじめよう20130608 JAWS-UGさいたま CDPからはじめよう
20130608 JAWS-UGさいたま CDPからはじめよう
真吾 吉田
 
Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話
Terui Masashi
 

What's hot (20)

ニコニコニュースと全文検索
ニコニコニュースと全文検索ニコニコニュースと全文検索
ニコニコニュースと全文検索
 
NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)
 
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
 
Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験Dockerイメージで誰でも気軽にMroonga体験
Dockerイメージで誰でも気軽にMroonga体験
 
qpstudy 2014.04 ハードウェア設計の勘所
qpstudy 2014.04 ハードウェア設計の勘所qpstudy 2014.04 ハードウェア設計の勘所
qpstudy 2014.04 ハードウェア設計の勘所
 
MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編
 
20130608 JAWS-UGさいたま CDPからはじめよう
20130608 JAWS-UGさいたま CDPからはじめよう20130608 JAWS-UGさいたま CDPからはじめよう
20130608 JAWS-UGさいたま CDPからはじめよう
 
Html5nagoya20130910
Html5nagoya20130910Html5nagoya20130910
Html5nagoya20130910
 
MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編
 
qpstudy 2014.04 ミドルウェア設計の勘所
qpstudy 2014.04 ミドルウェア設計の勘所qpstudy 2014.04 ミドルウェア設計の勘所
qpstudy 2014.04 ミドルウェア設計の勘所
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システム
 
Laravel heroku-push
Laravel heroku-pushLaravel heroku-push
Laravel heroku-push
 
Led cube lt
Led cube ltLed cube lt
Led cube lt
 
KUSANAGIを触ってみた (WordFes Nagoya 2016 セッション)
KUSANAGIを触ってみた (WordFes Nagoya 2016 セッション) KUSANAGIを触ってみた (WordFes Nagoya 2016 セッション)
KUSANAGIを触ってみた (WordFes Nagoya 2016 セッション)
 
JubaQLご紹介
JubaQLご紹介JubaQLご紹介
JubaQLご紹介
 
Pimhack2020, web-app team
Pimhack2020, web-app teamPimhack2020, web-app team
Pimhack2020, web-app team
 
azure botserviceをもっと身近に
azure botserviceをもっと身近にazure botserviceをもっと身近に
azure botserviceをもっと身近に
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
 
Python と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめるPython と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめる
 
Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話
 

現実世界から学ぶ効率のいいサーバの使い方

Editor's Notes

  1. 現実世界から学ぶ効率のいいサーバの使い方というお題で始めたいと思います。 よろしくお願いします。 えと、今リモートで登壇してます。 ちょっとマイクの都合上、そちらの声が聞こえないことがあると思うので、予めご了承ください。
  2. まずは自己紹介です。 こんな感じになっていて、アカウントはサービスごとに結構バラバラです。 トピックとしては最近燻製にハマってまして
  3. こんな感じのステータスになってます。 右上のが初回の燻製で結構焦げつきましたが、左が先週の燻製になります、だいぶ綺麗に仕上がりました あと右下ですが、ベーコンの開発をしてます。
  4. まぁそんなことは置いといて、資料70枚になってしまったのでサクサクいきたいと思います。 今日話すことは 最近の活動、コンピュータってなんだろう、 単純なCPUの構造、現実世界に置き換える、最適化 となっています。
  5. そんなわけで最近の活動です。
  6. AWSの禁止令を自分に出しました AWSをそれなりに使えるのが僕の武器でしたが捨てました 一時期はAWSのサービス80%ぐらい触ったことあったのですが、今多分60%ぐらいになってます。 なので、今AWSのこと全然追えてないです。
  7. かと言ってAWSが嫌いになったわけじゃなくて、単純に情報過多になって追えなくなったから切りました あとAWSだけじゃなくて最新の技術を追うのも控えてます
  8. やる気あんのか!ってなると思うんですが、
  9. やる気あります!
  10. じゃあ何やってるのって話になると思うんですが、 Linuxカーネルコード読んだり、CPUの作り方とか調べたり、オンプレ環境の運用実績見たりしてます
  11. なんで直接役に立たないものもの勉強してるの?って話だと思うんですが、 とある人にこんなこと言われました。 これうちのCTOなんですけどね
  12. 日々負荷と戦ってるエンジニアは毎日頭の中にサーバ構成図思い浮かべてる
  13. まぁこうなっちゃいまして
  14. 確かにインフラ構成図思い浮かべることはあるけど毎日は考えないなぁと
  15. でまぁわからないので聞いてみたわけです 例えば日本の人口って何千万人もいるけどちゃんと運用されてるよね? これが10億人になってもきっと対応方法は用意されてる、と これ聞いて僕はほぉーーーーーってなりました
  16. まぁ伝えたかったことってのは「現実世界にヒントはいっぱいある」ってことでした
  17. そんなわけで現実世界に近づこうと思い、コンピュータってなんだろうと考え始めました。
  18. OSってそもそもどうやって動いてるんだっけ?ってなりカーネルコードとか読みました。 正直今もちゃんと理解してるわけじゃないんですが、なんとなく雰囲気はわかりました サーバって一言で言っても裏で色々動いてることがわかりました。
  19. けどこれまだソフトウェアで解決してる部分だなと思ったので 次にCPUの創りかたという本を読んでる最中です。 この本読んでるのはいいんですけど、ちょっとショックなことがありまして、まぁこんな感じです。 初音ミクかーってなりました。 男のロマン全否定ですよね。
  20. まぁそんなわけで今CPUの実装調べてたりしてます けど電子回路とか全然覚えてなくてLEDのランプを何個かふっ飛ばして若干電気恐怖症です。
  21. ちなみにLEDランプのふっ飛ばし方しっかり記載しておきました。 この回路組むと5000Aに流れることになって、約16万倍の電流を流し込んでもれなくLEDが破裂します。
  22. まぁこんなレベルの人間がCPUの実装を調べ始めました
  23. で、CPUってどんなものなんだっけ?ってなり、なんとなく皆さんの頭の中を図にするとこんな感じなのかなと思ってます。 全てが0と1で動いていて自分の書いたコードは最終的には0と1になって、スイッチがあってーって感じだと思います。
  24. けどこれちょっと不正解なんです。
  25. 問題点はここにあります。
  26. これを物理で考えると、スイッチが切り替わって0V側に接触した時に発生します。 ゴムボールのようにぼよーんってバウンドしてしまうんですね これは力学からすると絶対発生するものなので、回避不能です。 その結果0Vの信号が3回とか4回発生してしまうわけです。
  27. 同じようなことって実は凄く身近なところにもあって、 例えばパソコンのキーボードとかもこういった問題があります。 これはソフトウェアで解決していて、判定を遅延したりしてます。 要は人間に最適化されてるわけですね。
  28. けどCPUはもっと深いレイヤーなのでもうちょっとだけ物理的に解決しなくてはいけないわけです。
  29. で、コンデンサが出てきたりするんですが、正直この辺り説明するとだいぶ時間かかってしまうので、 コンデンサを使って遅延処理を実現してる程度に覚えておいてください
  30. 結局何が伝えたいかってところだけ言うとコンピュータって物理的なもので出来ているってことですね 当たり前なんですけど、魔法の箱とかじゃないです。
  31. あとこれは僕の好きな言葉なんでとりあえず載せておきました、興味あったら後で見てください
  32. 要約すると、人間のやりたいことを詰め込んだものがロジックで、 実現するために回路を作成しているわけですね。 コンピュータは全てここから始まってます。
  33. とは言ってもこれが役に立つかって言われると微妙なんですよね 多分仕事には直結しなくて、雑学程度にしか使えないレベルのお話です。
  34. そんなわけでもう少し身近な話にしたいと思います。 今まで伝えたかったことは、パソコンは魔法の箱じゃないですよってことです。
  35. 待ち行列理論
  36. まぁコレ社内にいたら一度は聞いたことあるかもしれませんが、うちのCTOの資料パクりました
  37. いつも10人並んでいるATMが一台あります、 ここで新たにATMを1台追加すると行列はどうなるでしょうって問題です
  38. もう答え言っちゃうんですが、だいたい0人に近づいていきます。
  39. いつも10人並んでるということは常に2人入ってきて、 常に二人出て行くというような感じなってます。
  40. これが2台になると出て行く人が4人になるので、次第に0人に近づくというわけです。
  41. これをマルチプロセスモデルの置き換えると、人はアクセス、ATMはプロセスということになります。
  42. で、ここからは僕の作った資料なんですが、 とは言っても現実はそう甘くないですよね。 これは色で分けてあるんですけど、青がコスト1、緑がコスト2、赤がコスト5になってます。 これは時間が経過するとどういうふうになるかちょっと見ていきます
  43. これ、青いのがコスト1なので1コマ進みました、下は緑なのでまだ待機中です。 で、これ先に進んでいくんですけど…
  44. まぁこんな感じに数字増えていきますよね
  45. で、最終的にこうなっちゃいますよね、何時間待たせるんだよ!って
  46. じゃあ最適化してみましょう
  47. サーバを分けるってのが一番簡単な方法です。
  48. こうやって、そもそも赤いやつを同じ行列に並ばせないようにします。
  49. そうすると、こんな感じに結構スムーズに進みます
  50. これ当たり前のようにやってますけど、管理画面を分けるってこういう意味ですね
  51. これはサーバ費用上がっちゃいますが非常に効果的で、ユーザーの待ち時間が減ります
  52. で、これを銀行に置き換えてみます。 大体コスト的にこんな感じなのかなぁって思ってるんですが、 青が引き出し、緑が振り込み、赤が口座開設って感じにしました。 銀行に行けば当たり前のように見る光景ですね
  53. この図のポイントは、口座開設の人は別に怒らないってことです。 口座開設するのに10分待たされてもそこまでストレス貯めませんよね? けど、ATMで10分待たされると人ってイライラするんですよ これ、同じようにWebで例えると、動画のダウンロードに5秒かかってもユーザーは遅いと感じないけれども、 Webページ表示するのに5秒かかったら遅いって感じますよね
  54. これってつまりボトルネックじゃなくなってるんですよ。 ボトルネックが分離されたことによってボトルネックではなくなるケースもあるわけです。 まぁとは言っても早ければ早い方がいいのだけは忘れないようにしてください。
  55. じゃあもっと具体的なケースを見ていきたいと思います。 これは動画アップロードのケースですね ロードバランサーがあって後ろに3台APIサーバが並んでます。 赤いやつが動画アップロードですね、 こいつのせいでまたさっきと同じように詰まる可能性があるわけです。
  56. なので、ちょっと改善パターンを考えました、アップロードサーバを分けました。 アップロードサーバで動画のアップロードをして、 アップロードした動画のURLだけをAPIに投げるという構成です。
  57. この構成のポイントはAPIのサーバが欲しいものってなんだろうってところです。 APIサーバが欲しいのは動画の内容なんてどうでもよくて、動画のURLが欲しいわけですね。 そのURLをデータベースに書き込みたいだけだと思うんですよ、大体
  58. で、この構成にすると様々なメリットが出てきます。 まずひとつは、軽い処理のユーザーが待ち時間減るってことです 次にアップロードサーバは回線速度を出すために特化した構成にできます。 APIサーバはCPU特化のマシンを選べたりします。 で、両方備えた環境を全部のサーバに反映すると、これはお金が非常にかかります。
  59. あとスケールアウトやすいってメリットもあります 上のように急に跳ね上がると無駄にスケールアウトとかしちゃいます。 下みたいにある程度安定していると効果的にスケールアウトできます。
  60. と、様々なメリットがあるので色々制約とかはあるかもしれませんが、 可能であればこういったものにトライしてみると効率よくサーバを使えます。
  61. そんなわけでまとめに入っていきたいと思います
  62. ヒントって身近なところにいっぱい眠ってると思ってます。 僕はこの間バスの運賃の支払いを見てシングルプロセスだなとか考えてました まぁ普通の人から見たら若干頭おかしい人かもしれませんが… 降りるタイミングで両替とかする人いて完全に詰まってるんですよね
  63. あと、先人の知恵を借りるのも重要だと思ってます。 自分の悩んでることってもっと深いレイヤーで既に解決されてるかもしれないです。 その解決方法は淘汰されてきてるので、優れてる傾向が多いです。
  64. そして、クラウドは麻薬だなって思います。 特にAWSは凄く便利で危ないと思ってます、僕が麻薬漬けでした。 困ったらお金で解決ばっかりしてきました お金使えばそれなりにアクセス捌けるのなんて当たり前なんですよね
  65. で、最後に物理の法則は変わらないってことです ツールや言語って流行りとかあってチョコチョコ変わりますよね。 で、常に新しいもの追いかけ続けるのはつらいです。 じゃあ楽をしたい場合どうするかってなると低レイヤーのことを知ると恩恵を受けやすいです。
  66. そんなわけでご清聴、ありがとうございました。