YAPC::Asia2015参加レポート(Day2)

8月21日(金), 22日(土)に、YAPC::Asiaに参加してきた。
YAPC::Asiaは今年で最後ということで、会場はなんと東京ビッグサイトだった。

参加セッション一覧

私が参加した8/22のセッションは次の通り。

  • 8/22
    • ISUCONの勝ち方 by Masahiro Nagano
    • NASA主催の世界最大級ハッカソンSpaceAppsを運営した話 by Tsubasa YUMURA
    • Docker3兄弟について by アルパカ大明神
    • Adventures in Refactoring by Ben Lavender
    • Posture for Engineers by Marylou Lenhart
    • Run containerized workloads with Lattice by Etourneau Gwenn
    • Profiling & Optimizing in Go by Brad Fitzpatrick

セッションの感想&内容

参加したセッションの感想や内容を書く。
なお「内容」は、理解し切れていない部分や誤解もあるはずなので、参考程度に見て欲しい。また誤りを指摘できる人は指摘して欲しい。

ISUCONの勝ち方 by Masahiro Nagano

感想

  • ISUCONに参加したことはなく、過去問なども見たことはなかったが、毎年Twitterで盛り上がりが伝わってくるISUCONというものがどんなものか知りたくてこのセッションを聞いた。
  • プロファイリングツールについての話が興味深かった。言語別のプロファイリングツールもあるが、それよりもstrace, tcpdump, lsof, dstatなどのコマンドのほうが役立つということだった。このあたりのコマンドは使ったことはあるが、使いこなせているかというとそうでもないので、しっかり勉強しておこうと思った。
  • コンテキストスイッチの説明、Apacheとnginxのプロセスモデルの違いの説明がわかりやすかった。
  • ISUCONの対策資料は結構ネット上にあるようなので、目を通しておこうと思った。

NASA主催の世界最大級ハッカソンSpaceAppsを運営した話

資料

感想

  • この発表を聞くまでSpaceAppsを知らなかったが、すごく楽しそうなハッカソンだと思った。こういうハッカソンに参加できるくらいの技術力を身に付けたいと思った。

Docker3兄弟について by アルパカ大明神

資料

感想

  • Docker Machineは発表された当初に触ったことがあったが、Compose, Swarmは触ったことがなかったので、使用感知りたくて参加した。
  • スピーカーの方は触っただけではなく、開発環境で実際に使っていて、特に問題なく使えているということで、それだけでも貴重な情報を聞けたと思った。
  • 副題に~そして4兄弟へ~とあり、Docker4兄弟というのはDocker Networkのことかと思ったけど、Docker Toolkitのことだった。

Adventures in Refactoring

感想

内容

  • シングルクウォーテーションとダブルクウォーテーションの両方が使われている箇所をどちらかに揃えて一貫性をとるようなリファクタリングは、やってもいいが、リファクタリングの目的としては正しくない。
  • リファクタリングは、リファクタリングの前後で改善点を評価できなければならない。行が減ったのであれば、それはその分バグの潜在するリスクを減らしたと評価できる。リファクタリングの結果行数が増えるのはいけない。
  • リファクタリング中にバグを見つけても、そのバグを修正すべきではない。バグが悪いのか、リファクタリングが悪いのか分からなくなってしまうため。
  • Goのgo fmtは素晴らしい。
  • Javaは言語レベルでDeprecatedをサポートしている点が素晴らしい。

Posture for Engineers

感想

  • スピーカーは、エンジニアやりつつヨガの講師もやっているという女性。Postureは姿勢という意味。
  • 技術的な内容ではないが、ヨガやっていたこともあって興味があったので、気軽な気持ちで参加した。
  • トーク中にみんなで席から立って腰や肩にいい立ち方をして、思い出に残った。

内容

  • 「椅子に座る」という動作自体、人間の歴史からすると最近の出来事なので、長時間使っていたら負担も大きい。
  • 長時間座っていると股関節が固まってくるので、意識して1時間に1回立つようにするのが大事。
  • バランスボールに座って仕事をしたり、スタンディングとシッティングを適度に織り交ぜながら仕事をするのがオススメ。

Run containerized workloads with Lattice

感想

  • Lattice含めCloudffoundryあたりのこと全く知らなかったので、基本的な内容ざっと知れてよかった。

内容

メモそのまま。。。

  • LatticeはCloudfoundryのサブセット。スケジューラもあり、diegoという。
  • cloudfoundryはインストールしにくい。不要なのも一緒にインストールされる。だるい。
    それで機能は少ないが、簡単にインストールできるlatticeが作られた。
  • Latticeはパーシステントデータはサポートしていない。あくまで開発用。
  • Dockerにはロードバランシングやオートヒーリングがない。
  • K8sもあるが、最高ではない。単なるスケジューラに過ぎない。

Profiling & Optimizing in Go

資料

Go Debugging, Profiling, and Optimization

感想

  • Goそんなに書いたことがなくてついていけない部分も多々あったけど、Goにはpprofという強力なプロファイリングツールが備わっていて、webというコマンドでプロファイリング結果を図示することまでできることがわかった。

YAPC全体の感想

  • YAPCには昨年、今年と参加したが、本当に楽しかった。
  • YAPCPerlだけにとどまらない技術の祭典という感じで、本当に素晴らしいイベントだったと思う。今年で最後なのが惜しまれる。
  • 普段Twitterでフォローしているエンジニアの方のトークを聞くのは本当にモチベーション上がる。
  • LTではbotの話題が多かった。この辺りはこれからまだまだ面白いことやる人が出てきそうな予感がして、期待大。
  • ベストトークの2位、3位はHTTP2関連だったということで、HTTP2勉強しなきゃな、と思った。
  • Consulの話も随所に出てきていたっぽい。
  • あらかじめ準備されていたトークだけでなく、会場で話をしたエンジニアの方のレベルの高いディスカッションの内容も伝わってきたりして、本当有難い感じだ。→OSS開発の活発さの維持と良いソフトウェア設計の間には緊張関係があるのだろうか?
  • ノベルティのサイリウム良かった。子供めっちゃ喜んでた。

YAPC::Asia2015参加レポート(Day1)

8月21日(金), 22日(土)に、YAPC::Asiaに参加してきた。
YAPC::Asiaは今年で最後ということで、会場はなんと東京ビッグサイトだった。

参加セッション一覧

私が参加した8/21のセッションは次の通り。

  • 8/21
    • メリークリスマス! by Larry Wall
    • Managing Containers at Scale with CoreOS and Kubernetes by Kelsey Hightower
    • Consulと自作OSSを活用した100台規模のWebサービス運用 by fujiwara
    • Perlで学ぼう!文系プログラマのための、知識ゼロからのデータ構造と計算量 by Shinpei Maruyama
    • Electron: Building desktop apps with web technologies by Ben Ogle
    • esa.io - 趣味から育てたWebサービスで生きていく by Atsuo Fukaya

セッションの感想&内容

参加したセッションの感想や内容を書く。
なお「内容」は、理解し切れていない部分や誤解もあるはずなので、参考程度に見て欲しい。また誤りを指摘できる人は指摘して欲しい。

メリークリスマス! by Larry Wall

感想

  • スピーカーはPerlを作った方。英語めっちゃ聞きやすかった。
  • Perl5, Perl6はホビット, Load of the Ringと似てるみたいな話をしていた。LotRネタわかったので、ニヤニヤしながら聞いてた。
  • Perl6を今年のクリスマスに出せるように頑張ると言っていた。

Managing Containers at Scale with CoreOS and Kubernetes by Kelsey Hightower

感想

  • デモを交えたKubernetesの解説。
  • 8/19のDocker Meetup #5で同じプレゼンを聞いてはいたんだけど、そのときは同時通訳がなくてほぼ理解できなかったので、もう一回聞いた。今回は同時通訳のおかげで、概要は何となく理解できた。
  • デモが良かった。コンテナ時代のアプリ管理はこうなっていくんですよ、と概念的に説明されていたところを、実際にデモしてくれたという印象。
  • Kubernetesのダッシュボードがかっこよかった。

内容

  • 「Ansibleなどの構成管理ツールは、"マシンの管理"というところに重きを置いているため、物理サーバ、VMの管理には向いていても、アプリの管理には向いていない。それではアプリがスケールしないので、アプリの管理はスケジューラでやる。」という導入の後に、スケジューラとしてKubernetesが紹介された。
  • 続いてKubernetesの構成要素として以下が紹介された。
    • node: CPU, メモリなどのリソース
    • pod: コンテナを束ねる単位。1つのpodの中ではnamespaceを共有する。
    • scheduler
    • replication controller: podの数を1つから3つに増やすときに使う。自己回復機能がある。
    • service
  • その後のデモでは、pod内のコンテナの増減やバージョンアップの様子がデモされた。canaryパターンというものが紹介されていたが、何なのかよくわからず。
  • 質疑応答
    • Q 様子がおかしなコンテナのトラシューはどうするのか?
      • A トラシュー用のpodを作ってそこでトラシューするのが良い。
    • Q Immutableの文脈では、開発環境で試験したコンテナをそのまま商用環境に持っていくという話があるが、Kubernetesもそうするべきか?
      • A Kubernetesのクラスタ自体は開発環境と商用環境でわけるべき。また商用環境の中においても、Kubernetesで20000ノードのクラスタ立てるのではなく、500ノードずつくらいにクラスタをわけたほうがいい。
    • Q パーシステントデータの扱いは?
      • A (Kubernetesの)Schedulerではパーシステントデータを持つPostgreSQLのようなDBは扱えない。etcdを使う。

Consulと自作OSSを活用した100台規模のWebサービス運用

資料

感想

  • Consulは気になりつつ触ったことなかったので、実運用で得たノウハウを聞けて大変参考になった。とくにConsul導入の目的が聞けてよかった。Consulの機能は何となく知っていたが、使いどころがわかっていなかったので。

内容

  • Consul導入の目的
    • 内部DNSがない。オートスケールする環境でChefで/etc/hostsをいじるのは面倒、またHA構成のDNSの運用は大変。ということで、内部DNSが欲しくてConsulを使い始めた。
  • Serverは3台以上推奨で、1台がleaderとして選出される。(Raftアルゴリズム)
  • 使いやすいKVS機能がある。デフォルトでは、問い合わせに応答できるのはleaderノードだけ。なので負荷はleaderノードに集中する。stale modeにすると他のノードでも応答できるようになる。
  • メモリフットプリントは20MBくらい。省リソース。ディスクIOhは少ないところに入れるべき。
  • leaderノードがクラスタはずれた際の次のleaderノードの選出は2~3秒で終わる。その間DNS引けなくなる。それが挙動できないならstale modeを使う。
  • クラスタは一度動かしたら基本は止められない。
  • オペミスでクラスタが崩壊するとKVが消えるので要注意。定期的にバックアップを取っておく。

Perlで学ぼう!文系プログラマのための、知識ゼロからのデータ構造と計算量

資料

感想

  • 期待していた内容を聞けた。2日間で一番満足度が高いセッションだった。
  • データ構造、計算量、DBのアクセス方法のそれぞれは知っていたが、自分の中でそれらが全然繋がってなかった。このセッションがその部分を繋げてくれた。
  • 何かの書籍の内容をそのまま講演にしたのではないかというくらい、体系だっていてわかりやすかった。
  • 2日目の「ISUCONの勝ち方」で早速B+木の話が出てきて、この発表聞いておいて良かったって思った。
  • オススメ参考書籍はないということだったが、自分が知る限り、データ構造についてはこの本が分かりやすかった。C言語ポインタ完全制覇

内容

内容

当日のメモそのまま貼り付けただけ。。。

事前知識
  • shortは2byte。だけどメモリの番地はintだから、short*は4byte使う。
  • じゃあshortって何なん?→メモリの番地読みいったとき、先頭の番地は分かっても、
    そこから何byte読めばいいかわからん。ここでshort
    というデータ型が必要。
データ構造
  • 値そのものと指し示す値
No.1 配列
  • Cの配列って面白くて、必ず連続したメモリ領域に配列を確保する。
  • 問題もある。追加で要素が欲しいとき、次に配列領域伸ばせるかって言うと、分からない。
    もう使われているかもしれない。
No.2 単方向連結リスト
  • 配列は連続したメモリ空間でないといけなかったが、連結リストは飛び飛びでOK。
  • 配列は計算して目的の変数に一発アクセスできたけど、連結リストだと
    じゅんぐりじゅんぐり計算しないと一発アクセスはできない。
計算量の話
  • オーダー法。n回の計算も2n+1回の計算も、オーダー法的にはO(n)。
  • 配列はO(1)?かな。
  • 連結リストはO(n)。悪くないけどO(log n)だと嬉しいよね。
2分木
  • 2分木で探索するとき、全部見なくていい。O(log n)で済む。
  • 意味ないとき→最初が1で次に1→2→3→4となっている場合。
    いやこれって連結リストじゃん、ていう。
B木
  • 勝手にバランスしてくれる木。
  • 満員になったら真ん中のやつを上にしていく。
  • 木の枝を降りていく計算は基本O(log n)
  • 問題: シーケンシャルアクセスやりにくい。
B+木
  • DBのインデックスとかに使われているやつ。
  • B木は値をmoveしているところ、B+木はcopyする。
    するとリーフの部分はシーケンシャルに並んでいる。

Electron: Building desktop apps with web technologies by Ben Ogle

感想

  • このあたりHPが底をついてしまって、発表が頭に入ってこなかった。
  • Electronという名前と、AtomがElectronの上に構築されているということだけわかった。

esa.io - 趣味から育てたWebサービスで生きていく

資料

感想

  • esa.ioというサービスはこの発表を聞くまで知らなかった。
  • 端的に観想を言うなら、「カジュアルだな。。。」と。この一言に尽きる。
  • 情報共有ツールとしてQiita:Teamを使っていたが、有料になったので、同じようなものを自分で作った。それでいけそうな手ごたえがあったので、会社作ってそちらに専念することにしたと。
  • いくつもサービスを作って経験を積み、いけそうなサービスで勝負する、というのは素晴らしいと思った。
  • スピーカーがサービス開発において取り組んでいることは、既にWebなどで「こんな風に開発するといい」といわれていることが多くて、斬新なことをやっているという印象は持たなかった。これは、今「こんな風に開発するといい」とされていることをきっちりやれば、食べていけるようなWebサービスを作ることができる、ということを証明してくれているので、他の開発者にとっては希望になると思った。
  • 情報共有ツールの現状のシェアでいえばQiitaのほうがリードしていそうなので、今後の展開に注目していこうと思う。

JTF2015参加レポート

まえおき

今年もJTFに参加してきた。
去年はJuly Tech Festaといいつつ6月だった気がする。
個人的には、開催時期は6月のほうがうれしい。
7月後半は子供たちが夏休みということもあり、6月に比べて世間で他にもいろいろ魅力的なイベントがやっているので。
まぁまた来年もやるなら7月でも行きますが。

簡単にレポートを書く。


ベンチャーCTO、AWSエバンジェリストを経て考える、クラウド時代に向き合うエンジニア像のこれから(@horiuchi)

資料

感想

  • AWSの堀内さん」しか知らなかったので、堀内さんのこれまでの経験を踏まえて、これからのエンジニア像を語ってくれた本セッションは面白かった。
  • 堀内さんがAWSのエバンジェリトだった頃、AWSの新サービスが登場する度にそのサービスの概要やメリットを分かり易くユーザ伝えている堀内さんを見て、何故こんなに幅広い分野のサービスを理解できるのだろう、と不思議に思っていた。
    この発表を聞いて、それを可能にしていたのは、ベンチャーCTO時代に様々な技術に触れた経験が大きかったんだろうな、と思った。
  • なので、最後にスタートアップCTOがお薦め、という話が出てきた時、それまでの話の流れからガラっと変わった印象を持ちつつ、妙に納得した。

マイクロサービスで、一歩先行くImmutable Infraを目指そう(@sho7650)

資料

ざっくり要約

稼動したシステムには変更を行わない"Immutable Infrastructure"という考え方が出てきた。

典型的なやつ mmutable Infrastructureを実現するときは、ステートレスなサーバ(Web, App)とステートフルなサーバ(DB)でやり方を変えよう、というのが今の流れ。
上記のようなシンプルな図を眺めている分にはそれで良さそうに思えるが、実際にImmutable Infrastructure実現しようとしたら、話はそう単純ではない。
エンプラなシステムなどは接続先がたくさんある。あるサーバ切り替えて周りのサーバが落ちる可能性がある。これは課題。
この課題の解決策としてマイクロサービスが出てきた。

マイクロサービスのポイント

  1. コンポーネント化する。

  2. コンポーネント化とは、インタフェイスを明確にすること。ロジックに変更があってはいけない。

  3. メモリをコンポーネントと考えると、速くなった、容量が大きくなったはOK。機能が削減されて、今まで通ってたロジックが通らなくなったはNG。
  4. 上図ではブルーとグリーンでインタフェイスが変わってなければ、どんな複雑はシステムでも、ブルーグリーンデプロイメントできる。

  5. 作ったプログラムはプロジェクトとして扱うのではなく、プロダクトとして扱える。

  6. プロジェクトとして扱うと、始まりと終わりができる。そうではなく、プロダクトとして捉え、開発者が最初から最後までやる。
  7. 同期はREST, 非同期はMQなどシンプルな構造にする。

最近のマイクロサービスの文脈では、「どうやって?」という部分の話はあまり出てきていない。
そこは、これからみんなの知見が集まっていかないと話ができない部分。

=> SOAの知見が役に立つのでは?

SOA

  • マイクロサービスでcomponentといっているものを、SOAだとサービスと言っている。サービスは一番小さな単位。
  • サービスの規約は何でもいいと言っている。REST、MQなど手段具体的な実装方法については言及していない。
  • だから、SOAはマイクロサービスに比べると、自由度が高い。
  • プログラムの考えで言うと、構造体→オブジェクト指向SOAという流れ。
  • Service Repository。サービスを登録しておくところ。サービスのHUBみたいな。

マイクロサービス vs SOA

  • SOAは、偉い人がトップダウンでインタフェイスを決める。
  • マイクロサービスは、ボトムアップ
  • 自分の会社だとどちらが向いているかを考える必要がある。

SOA ロードマップ

  1. 基礎段階: 保守性の向上
  2. ネットワーク化段階: カプセル化。中継層に担わせる。中継層・・・技術的に難しいことを担わせる。
  3. プロセス制御段階: 俊敏性の向上。

  4. SOAは組織ありき。組織としてどうするかを先にトップダウンできる。

  5. SOAのプロセス制御は、普通のセッションより長くセッションを保とうとする。普通ログアウトしたらセッションは切るが、SOAだとログアウトした後も保とうとする。

まとめ

  • 新しいものと古いものを組み合わせて使う。
  • 車輪の再開発はしない。
  • Re-usable not Re-cycle
    • もともと再利用可能しておいてそれを使うのと、あるから使うというのは全然違う。後者は辛くなる。

感想

去年会社の勉強会でマイクロサービスって考え方が流行りつつあるらしい、という話をしたら、「それSOAと何が違うの?」と言われて、SOAを知らなかった自分は「???」となった。
RebuildでもマイクロサービスとSOAについて言及してた気がするけど、「SOAはエンプラ臭がする」とかそんな程度の話だった気がする。
そんな感じでマイクロサービスとSOAについてはかなりもやっとした理解しかなかったのだけど、この発表を聞いて、マイクロサービスとSOAの違い、何故マイクロサービスの文脈でSOAを出す必要があるのか、といったあたりを理解することができた。参加してよかった。

MONITORING DOCKER(@jhotta)

資料

なし

ざっくり概要

  • datadogで働いている。
  • datadogのblogで、監視についての連載を始めた。Monitoring 101: Collecting the right data
  • monitoringをDIYしていると、機能追加なんてできない。
  • monitoringツールを作ることが、競合との差別化に繋がるのか?というところは考えて欲しい。
  • Docker監視で「コレだ!」というのはまだない。
  • WHY DOCKER USERS MONITOR
    • ステータスみたい
    • Docker Engineが壊れているの?特定のコンテナ?それとも周辺ツール?というのが知りたい。
  • タグや正規表現によってグループ化できる監視ツールでないと、コンテナの監視は辛い。
  • dockerのメトリクス取れる場所(後者2つは正しくない。)
    • cgroups
    • docker api
    • in-container agent direct monitoring
    • kernel hacking
  • NewReric - eventとmetricsを紐付ける機能が弱い。
  • SYSDIG・・・カーネルハッキングしている。
  • SIGNALFX・・・今後注目。メトリクスの関連性の取り方とかいい。後発で、勉強してきたイメージ。 メトリクスの測り方は他と違う。
  • LIBRATO・・・fluentd
  • PROMETHEUS

感想

  • コンテナの監視を設計する日が来たらとりあえずdatadogのblogを読んでみようと思った。

最前線で戦う若手インフラエンジニアたちが語る「技術トレンド」と「数年後の未来」(@y_uuk1, @catatsuy, @hfm, @deeeet, @rrreeeyyy)

資料

若手インフラエンジニアたちが語る技術トレンドと数年後の未来

概要

感想

  • プロビジョニングツールの話のところで、サーバ設定の"設計の難しさ"とプロビジョニングツール自身の扱いの難しさが混同されることが多いから、そこは話解き分けたほうがいいという話があって、それは確かに気をつけたほうがいいと思った。
  • プロビジョニングツールやコンテナなど技術的な話も参考になったが、それよりもチームとして成果を出すためにどんな取り組みをしているかという話が参考になった。特に@hfmさんの研修の話やチームメンバのアウトプットが共有される仕組みづくりの話など。

運用に自動化を求めるのは間違っているだろうか(@zembutsu)

資料

概要

資料を読めばOK。

感想

発表中に出てきた次の2つの考え方がすごくしっくりきた。

  • 働いたら負けでござる。刺身タンポポ業や写経文化の中で働いたら負けでござる。
  • DockerやHashiCorpのプロダクトが流行っているが、一つのツールが全ての課題を解決できる銀の弾丸になるはずはない。
    なのでそれらを手札と捉えて、使えるツールを増やしていき、最強のカードデッキを作るようなイメージを持つ。

おわりに

  • 今年もいろいろな話が聞けて楽しかった。来年の参加したい。
  • 電源が欲しい、電源が欲しい、電源が欲しい。
  • 休憩時間にやっているスポンサーのハイアリングセッションが面白かった。