ao-log

インフラ系ITエンジニアのメモ帳です。

「第8回Jenkins勉強会」参加レポート

参加してきました。告知されていたページはこちら。
http://connpass.com/event/3660/

私は普段は Jenkins をほぼ使っておらず、自動化というキーワードについて興味があったので参加しました。参加してみて、Jenkins を開発されている方は凄くアツい人で、開発は勢いがあって、また Yahoo! 様の事例を聞くことで自動化する流れがどんどん浸透しているし、これからもっと普及するだろうなという空気を感じました。また、エンタープライズ版があることも初めて知り、大規模な組織での Jenkins の利用を促進する機能が多くあるなと感じました。なので、堅気な企業にも導入が広がっていくかもしれません。また、LT 発表などで Immutable Infrastructure のお話もあり、アジャイル開発の現場の Dev よりの人が行っているようなフロー、使っているツールを Ops 側、インフラ側にもあてはめていくような世の流れがあると感じました。Docker や Serverspec など様々なソフトウェアがありますが、こちらは黎明期といえそうですが進展が楽しみな分野です。

以下、私なりにまとめた内容になります。公式とは関係のない、私が個人で記録した内容になります。誤っている内容がありましたら申し訳ございません。

2013年Jenkinsの歩み

Jenkins の開発者、川口さんの発表。
初めに開発の盛んさや、インストレーションベースでの拡大について。1090 人がコミットしてくれ、一人当たり 20 のコミット、62 コミット/ day、Linux カーネルと比べても約半分と非常に盛ん。約 18万台で動いており、インストレーションベースで + 45 % と、Jenkins が結構コンピュータリソースを使っている状況で、勢いが凄すぎると感じる数値でした。

その後は、Jenkins の機能面やチューニングなど様々な角度での進化について。メモできたものを箇条書きすると以下の通りですが、個人的には Git Plugin の UI をすっきりさせたことのように、私のような初心者でも使いやすい配慮が嬉しく思いました。

  • サーブレットコンテナを Winstone → Jetty:// へ
  • Credentials Plugin により鍵管理を一元化できるようにした
  • Git Plugin は ver 2.0 で UI をすっきりさせたこと(Change Log Git Plugin - Jenkins - Jenkins Wiki
  • CloudBees が開発した Folders Plugin をフリーにし、このプラグインにより階層状にジョブを整理できる
  • 文藝的ビルド(Readme の内容を解釈してビルドしてくれる)
  • jar ファイルごとにスレーブにキャッシュして保存できるようにした
  • SSH フローコントロールに手を入れてマスター・スレーブ間の通信を高速化した

Jenkinsはじめました。 ~Yahoo! JapanのCI/CD~

Yahoo! Japan 内での CI/CD 化の取組み。広告配信用のサーバへの CI/CD に Jenkins を使用。規模や、プラグイン、デプロイに使用しているソフトは次の通りとのこと。

  • マスターが 3 台、スレーブがマスターごとに 10 台。
  • プラグインは Git Coverity、RunDeck など
  • デプロイは Fabric、Capistrano、Rundeck

パイプラインにして、コミット後は、コミット → コンポーネント → パッケージ → アセンブリして、スモークテスト、機能テスト、パフォーマンステスト、運用テストの順で流し、デプロイする流れ。現在は、1 クリックでのデプロイが実現し、一連の作業が 2 日から数時間で済むように、2 名 + Jenkins でできるようになったとのこと。

また、CI/CD の取り組みを組織に定着させるためのお話もありました。有志による活動から組織化し、そういった人たちの中からエバンジェリストが登場。管理者のサポートもあって CI、CD できるようになったとのことでした。ルールゆるめで挑戦してみることについても言及がありました。技術だけでなく、組織を変えるために行動する大切さも学ばさせていただきました。

Jenkinsエンタープライズについて

株式会社 SHIFT の玉川さんの発表。Jenkins Enterprise by CloudBees の紹介。
有償版の特徴としては、次のものがあるとのことです。

  • テクニカルサポートを受けられる
  • Enterprise 版独自のプラグインが使える
  • By CloudBees の強力な機能

テクニカルサポートは CloudBees と全く関係のないものまでサポートしてくれるそうで、このレベルのサポートはすごすぎると思いました。
プラグインは、大規模な開発、多種多様なチームでの運用を支えるものが提供されているとのことで、次のものが紹介されました。

  • 稼働率向上(High Availability Plugin、Folders Plugin、Template Plugin)
  • セキュリティ(Role Based Access Control Plugin、Secure Copy Plugin、Custom Update Center Plugin)
  • リソース最適化(Even Scheduler Plugin、VMware vCenter Auto-Scaling Plugin、Skip Next Build Plugin)

大きな会社で、様々な部署に使わせたい場合などに向いてそうですね。

「第43回 HTML5とか勉強会」参加レポート

参加してきました。告知されていたページはこちら。
http://atnd.org/events/46252

勉強会は大学で教授が教鞭をとるように硬派に教わる印象を持ちました。プロトコルのお話が中心の回で、日本人はプロトコル大好きといった名言も飛び出しました。個人的には楽しかった回で、内容まとめは以下の通りです。知らなかったことばかりなので勉強になりました。

WebSocket, WebRTC, Socket API, … 最新Webプロトコルの傾向と対策

長らく使われてきた、HTTP/1.1 であるが、速度面での問題が顕在化してきて、高速化するための各種技術が登場。それぞれ動作原理を解説してくださる。

HTTP/1.1

GET メソッドで、index.html や .css など一つ一つ取りに行く。高速化のための工夫として、「Concurrent HTTP」「CSS Sprite」などがある。

○Concurrent HTTP

複数の TCP コネクションを用いることで高速化する。例えば、Google Chrome だとまとめて 6 個。

CSS Sprite

複数のリソースを一つのセッションにまとめる。Static なページには特に有効だが、Twitter などのような動的なページでは使いにくいテクニック。

SPDY

1 つの TCP セッション上で、1 つではなく複数のリクエストを送受信する。
ただ、SPDY を使ったほうが遅くなる場合もあり、次のような問題がある。

Long Fat Pipe

次の URL によるとデータセグメント送信後にそれに対する ACK が到着するまでの時間を掛け合わせたものを帯域幅遅延積と呼ぶ。この値が大きくなるに従って、TCP コネクションでデータを送受信する際のスループットが低下していく現象が一般的に見られるとのこと。
http://technet.microsoft.com/ja-jp/library/cc985301.aspx

つまり ACK が来るのが遅い環境だとこの問題が発生する。ちなみに Mac でローカル環境で試験する際にレイテンシを作り出すには ipfw というコマンドを使うとできるとのこと。

Head of Line Blocking

1 車線の道路で 1 台車が止まってしまうと後ろがつかえるのと同じで、SPDY だと 1 車線なのでこの問題の影響を受ける。

これらは、TCP プロトコルの問題でもあるが、Web の進化により TCP の制限が効くようになってきた。こういった背景により、QUIC などのような技術の登場につながっている。

WebRTC

従来は、ブラウザ間の通信はサーバを介してであったが、ブラウザ同士で P2P で通信できるようにするもの。
問題点としては、P2P を張るには相手の IP アドレス、ポート番号が必要だが、NAT が障壁となること。そのため STUN により相手のアドレス、ポート番号を得たり、それでもダメな場合は TURN を使用する。こういった問題への対応を少ないコード量で実装するために PeerJS を使うと楽になるらしい。

HTTP/2.0がもたらすWebサービスの進化

MPTCP

スマートフォンを使っている場合、3G、WiFi が切り替わる時に IP アドレスが変わるので、TCP も張り直しが起こる問題がある。この問題に対しては、IP アドレスが切り替わらない MpbileIP、3 way handshake を簡略化する TCP Fast Open などの解がある。
他には、 MPTCP。TCP が動作する環境であれば必ず動作し、TCP のオプションで通信相手とネゴシエーションする。相手が対応してないければ普通の TCP で通信する。iOS 7 の Siri がMPTCP をサポートしているらしい。

HTTP/2.0 に向けて

モバイルフレンドリーなプロトコルが欲しい → SPDY
Google の独自実装だけでなく Interoperability に → HTTP/2.0

SPDY

サーバからプッシュする機能もある。セッションを張ったらサーバからもコネクションを張れる。LINE の既読機能もこういった方法で実現しているのかもしれない。

QUIC

TCP ではなく UDP 上で、セッション確立、フロー制御、エラー訂正、輻輳制御など独自実装。こうすることで、TCP の限界を乗り越えている。

「【AWS勉強会】CM re:Growth Developers.IO Meetup 01」参加レポート

参加してきました。告知されていたページはこちら。
http://connpass.com/event/4123/

クラスメソッド株式会社様の主催で、10名の方がそれぞれ持ち時間20分での発表でした。いずれの発表も濃い内容で、また数々の名言もありました。会場に来ている方も、先進的な技術者の方が多い印象で、発表者と会場が一体になった楽しい勉強会でした。

少し脱線しますが、社員の方が書かれたブログの記事数が、そろそろ 2,000 を超えそうだということで勢いがすごいです。
http://dev.classmethod.jp/

以下、10 個の発表について、個人的に印象に残った点をまとめていきます。

Redshift x EMR x Tableau Desktopで実現するCloudTrailログ解析

CloudTrail のログを整形し、最終的に Tableau Desktop で可視化するという発表。
たしか、この発表でだったと思うのですが、RedShift を使用後に落とし忘れて、しばらく稼働したままになっていて案の定そこそこの額の請求となってしまったという話がありました。使い終えたものは忘れずに落とそうといういい教訓でした。

Re:Invent報告

Re:Invent に行ってきた報告で、クラスメソッド様は発表者の方を含め 4 名の方が行ったそうです。ツアーというのがあるそうで、ツアーに沿っていくことで様々な負担が軽減されそうでした。

EMR with the MapRは何がうれしいの(仮)

MapR は Hadoopディストリビューションの一つで、Java ではなく C++ で実装されています。M3、M5、M7 があって、M3 が無償利用できるそうです。AWS にのっている M3 は若干追加費用が発生するらしいです。
[MapR: MapR エディション]
http://www.mapr.com/jp/products/mapr-m7-edition
[Amazon Web Services]
http://aws.amazon.com/jp/elasticmapreduce/mapr/

MapR の特徴は高速なことなので、EMR と比較して高速に処理できるのであれば、MapR の使用費用が若干高くなってもトータルでは安くなるのではとの仮説を立て、実証した内容でした。BigData Benchmark というものがあるそうで、このテストケースを使ってベンチマークしたそうです。
[BigData Benchmark]
https://amplab.cs.berkeley.edu/benchmark/

結果は、試したテストケースではMapR を使うと少なくとも 3 倍くらい早くなり、同程度の計算が半分程度のインスタンスでできるようになり安くなると実証できたと結論付けられていました。

ソフトウェアの取捨選択でコストがここまで変わるのは劇的で、参考になりました。

運用担当者からみた、AWS へシステム移行する際に気にしてほしい5つのこと

私も日々システム運用している立場なので、すごく共感できる内容でした。AWS を使うことで技術者にとって様々なことが簡単に実現できても、いざ運用する際は様々なステークホルダがいて、人が運用することをしっかり考えないといけないと考えさせられました。

発表内容を完全に覚えていないので私なりにアレンジした内容となってしまいますが、技術者の脳内にあるユースケースとは違って、各ステークホルダは色々なシステムの使い方をしたり要望を発生させるので、データの流れをヒアリングして聞き出したり、ログから実態を調べて、要望とのずれがないことを確認すること。また、監視の際は Web サーバ一台でも ELB を使うことでとれるデータが増えること、CloudWatch のログは 2 週間までしか残らないので Zabbix などの統合監視ツールでもとるようにしたほうがよいこと。保守員用にシステムに入る経路を用意しておくこと。などの考え方を教えてくださりました。

また、5 つめの気を付けてほしいこととして、自分が現場担当者として関われなくなった時のこと(例えば年齢が上がりマネジメント側の人間になった場合)のことも考える必要があるとのことでした。マニュアル等が残っていないと後に残った人が苦労するので、それを残す。また、何故そのような実装もしくはやり方にしているのか、思考の記録を残すことも大事で、周りの人のこと、後輩世代のこともしっかり考えないといけないと再認識させられました。

「『なれる!SE」2 巻での梢さんの明言も紹介され、これも非常に共感できました。

CloudWatchで出来ること

CloudWatch でとれるデータについて、踏み込んだ内容の発表でした。様々な情報を取得できますが、直感的な理解とは異なる情報が出力されるケースがいくつかあるようです。どのような値が出力されるのかきちんと調べて理解しておかないと、思い違いをしている可能性があるので、注意が必要だなと感じました。

Storage Gateway仮想テープライブラリによるバックアップ戦略

発表内容が変わって、壮絶なプロジェクトをどう達成したかについての発表でした。6リージョンで計180台(各リージョンで30台ずつ)のインスタンスを稼働させる。話が出たときの納期は 1 週間で、前半 3 日で実現方法の検討や社内の人材リソース調整、後半 3 日で構築というすさまじい内容でした。構築は、CloudFormation と Capistrano で行ったとのこと。

いかんせん時間がないので、ベストプラクティス的な方法というよりは力技を多用。また、CloudFormation は途中でこけるとロールバックするので、すべての構築を一気にするのではなく、3 段階程度に小分けして実行し、リスクを減らしたりなどの工夫をされていました。AMI のリージョン間コピーは前はできなかったそうなのですが、最近できるようになったそうで、これがあったので大助かりだったそうです。
[【AWS発表】EC2のAMIをリージョン間でコピー可能に]
http://aws.typepad.com/aws_japan/2013/03/ec2-ami-copy-between-regions.html

AWS SDK for .NETを利用したExcelによるAWS環境定義書自動生成

色んな意味ですごい内容でした(褒め言葉です)。会場からの反響も大きかったです。
Excel のボタンをクリックすると、AWS の様々な構成情報を拾ってきて、Excel シートに落とし、またその逆もできるという内容でした。背景として、大企業様との取引でドキュメント化のご要望もいただくことがあるようです。

CloudFormationとSerfで作る全自動インフラ

Serf を使用したデモをしてくださり、動きのイメージがわきました。デモは VPC で 2 つの NAT インスタンスを用意し、プライベートサブネットで gw となっている NAT インスタンスを落とした時の自動復旧について。gw となっている NAT インスタンスをリブートしたとき、reboot を イベントとして Serf で検出し、自動的にもう片方の NAT インスタンスに gw を切り替えて、プライベートサブネットからの通信が復旧するのを実演してくれました。今日(12/11)の CDP Advent Calendar で記事になるようです。

Infrastructure as Code からFull Reproducible Infrastructureへ

コマンドひとつでインフラを構築でき、別のアカウントでも同じようなインフラを構築できる。このようなことを実現できるソフトを書いているようです。

なお、発表者の方から「Infrastructure as Code」は知っていますか? 「Immutable Infrastructure」は知っていますか? との質問が会場の参加者に向けてありましたが、半数以上の方が挙手していて、参加者の先進的ユーザ率はやはり高かったようです。発表中「SSH したら負けだと思っている」との名言があり、これも賛同する方が多かったです。

Amazon DynamoDBによるセッション永続化とフェイルオーバー

発表内容が変わって、6 個めのプレゼンテーションで発表された壮絶なプロジェクトについて。こちらは、後半 3 日間での構築の話よりは、前半 3 日間のクライアントから依頼をもらって構想を練る段階がメインでした。

印象的なのは、マルチリージョンでの構築をした点です。さすがの AWS といえどもインフラを無限に利用できるわけではなく、ある一定量以上を使用したい場合は、上限緩和の申請が必要とのことです。
[お問い合わせ: サービス上限緩和の申請]
http://aws.amazon.com/jp/contact-us/

要件の実現を構想するにつれ、1 つのリージョンでは実現できないと分かってきたとのことですが、最終的に北米の 6 つのリージョンで解決しています。1 リージョン内での様々な制約も、マルチリージョンで解決するとのことで、リージョンでのある種のスケールは、AWS ならではだと思いました。もっと、リージョンが増えれば、ますます大規模なことができるとのことで、さらなるリージョンの追加を望んでいるとのことです(思わず笑ってしまいましたが、リージョンの増設を今までどんどん実現してきたのが AWS のすごいところです)。re:Invent でも今までマルチ AZ だったのが、マルチリージョン推しに変わってきていて、クラウドの世界のスケールの大きさを生々しく感じる事例でした。

「Japan.R 2013」参加レポート

12/7(土)に開催された、Japan.R 2013 に行ってきました。200人近くの人が参加し、大盛況でした。すべての発表ではなく、見て聞いて気になった項目をまとめておきます。

Yahoo!ビッグデータからの景気動向指数の推測について

「Yahoo! JAPANビッグデータレポート」では、Yahoo が持っている様々なデータ(検索ワード、ページビュー数、など)から、世間の関心度が高いテーマについて分析結果をレポートとして載せています。
http://docs.yahoo.co.jp/info/bigdata/

4つほどテーマがあるうちの一つ景気動向指数についての発表でした。この取り組みについては、4月に掲載された次の記事がわかりやすいです。

[ZDNet Japan: Yahoo! JAPANはビッグデータで経済指標の夢を見た]
http://japan.zdnet.com/cio/analysis/35030970/

景気動向指数自体は定期的に内閣府で発表されているようですが、リアルタイムな発表ではないのでより速く結果が出せることが重要です。また、結果が内閣府の発表とかい離しているとレポートの信頼性が下がりますが、なかなか良好な結果が出ているようで、さすがというかすごいと思いました。

Yahoo! で一定回数以上検索された約 60 万のキーワードが分析の候補となり、分析手法としては重回帰分析を使っているそうです。安定して結果を推測できるようなモデルにする必要があり、そのために stepwise 法を採用して変数を絞り込んでいるとのこと(ちょっと私の理解が及んでいない部分です)。

また、オーバーフィッティングしないように注意しているようです。分析して、横軸が時間、縦軸が指数のグラフを出しますが、時系列で現在まではかなりきれいにフィットする結果を出せても、将来の予測ではかい離する場合もよくあるからだそうです。なので、完全にフィットせず多少のずれは許容し、将来の予測も安定してできるようにする必要があって、そこが腕の見せ所のような印象を受けました。

最後の質疑応答では、選挙で人間の専門家が新聞で記事にした結果よりも、Yahoo!の分析のほうが的中率が高かった(ただし山本太郎さんは予想を外したらしい)とのやりとりがあり、「我々はデータを信じるスタンスである!」との発表者の方のお言葉が印象的でした。

実ビジネスデータへのRの活用とその限界

全体的なストーリーを書く形ではなく、個人的に注目した個所を箇条書きで書いていきます。

  • 「前処理」「分析」「レポート」の流れ。前処理が大変。泥くさい世界。
  • 何でも R でしようとする人が多い気がする。適材適所で適切な言語を使うとよい。
  • データ3か条「分析対象について理解する」「分析手法を適切に理解する」「分析結果について適切なアクション」
  • 人を動かすコンサル的な視点も必要。デール・カーネギーさんの世界的名著『人を動かす』から得た3か条も紹介される。
  • データ分析について相談に来る企業さんが多い。ただ、実際には、データ分析をすることをお勧めできないケースもある。たとえば、スタートアップは分析よりもどんどんプロダクトを投入したほうがよいし、あるいは分析以前に撤退したほうがよいフェーズに既になっているケースなど。データ分析ありきでは、うまくいかない。

LT 大会

県別美人判定

顔写真から、何県美人なのか判定する。ただ、外すケースが多く、顔写真から何県美人か判定できるのでは? という仮説は、無理だったという結論になったそう。
http://bijin.kamaku.la/

@gepuro さんの発表

R での可読性の高いコーディングについて、主に変数の命名法の提案。スライドなしで発表に臨み、持ち時間の5分でぴったり終わり、すごいの一言です。

変態にRを与えた結果がこれだよ...8

プロットしてみた例が多数!
http://www.slideshare.net/Med_KU/20131207-japanr4-lt

「グローバル人材の今を考える」第1弾: 英語を使って働く・英語を学ぶの感想

「グローバル人材の今を考える」第1弾: 英語を使って働く・英語を学ぶというセミナーに参加してきました。
http://atnd.org/event/aikyari01/0

スピーカーは、外資系企業で働いている方たちですが、幼少期に海外で過ごした経験がある人、ずっと日本で過ごしてきたが英語が必要になり英語を勉強した人、日本人以外の上司・部下を持つ人の3つの観点で集められているとのことでした。司会の方が、スピーカーの方の発言をいい具合に引き出し、良質なトークが繰り広げられました。

以下、それらのトークの中から私がこれはと思ったフレーズを箇条書きで書いていこうと思います。

  • Better Communicator = More Significant at work
  • How you speak = your image
  • 勢い、自信をもって話す
  • メモを取るだけでなく、すぐ使って覚える
  • 自分のキャラクター、TPOにふさわしい言葉を選ぶ。そのためにも語彙は必要
  • ネイティブの人が受ける印象を考える
  • 信頼性を与える声(トーンが低い)
  • シンプルに伝える
  • 英語で話すときは、間違えることを気にしない
  • 英語を学ぶデメリットは無い

以下、教えていただいた勉強法の中で参考になったものです。

  • 発音に特化した教材を何回も発声して読む
  • スピーチを丸暗記する(スピーカーの方はオバマさんの演説を採用していました)
  • シャドーイング
  • 書籍『English Grammar in Use』(海外ではよく使われている本らしい)

Amazon linux に Chef で MongoDB をインストールする

公式サイトの手順を Chef のレシピに落とし込む。
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/

次のように、よくあるパッケージインストールのレシピとなります。

#
# Cookbook Name:: MongoDB
#

yum_repository "mongodb" do
    url "http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/"
    action :add
end

%w{ mongo-10gen mongo-10gen-server }.each do |pkg|
    package pkg do
        action :install
    end
end

service "mongod" do
    supports :status => true, :restart => true
    action [ :enable, :start ]
end