IIJ Technical WEEK 2014 1日目 #iij_tw2014
- IIJ_doumae
- 4907
- 0
- 2
- 53
OSスレッド: 直線的なコードをそのまま再利用できる。複数のコアを自動的にOSが活用してくれる。しかし、コンテキストスイッチが発生するため、遅くなる。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:12:52イベント駆動: 今までのプログラムは捨てる。イベントハンドラに処理を分割。プロセスが切り替わらないので速い。そのままでは複数のコアを活用できないので、プロセスのpreforkしを併用することで複数コアを活用。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:15:03Haskellでは軽量スレッドが提供されている。見通しのよいコードを再利用しつつ、コンテキストスイッチを最小限に抑え、コアの性能をひい出すことができる。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:16:32ファイルのオープンはlockを伴うので遅い。ファイル記述子をキャッシュして再利用したい→Haskellは軽量スレッドで共有メモリ中にキャッシュを持てるので、これを活用することができる。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:17:26探索木を高速な辞書として利用する。ファイル名がキー、ファイル記述子を値として利用する。Haskellでは木構造は不変(書き換えできない)の安全に利用できる。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:19:20Haskellでは不変データが一般的。こういう型があるからこそ、Haskellでは軽量スレッドを作ることができた。他の言語では軽量スレッドを作ろうとして断念しているケースが多い。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:20:13Haskellで可変データを作る場合は、参照を使う。データ自身は不変だが、参照先を張り替えることにより、可変データを実現することができる。参照自体はスレッド間の競合ポイント。安全を確保するためにはロックする #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:21:16ロックを減らすために工夫していたのに、木構造を守るためにロックしていたのでは意味がない。HaskellではそこでCASを使う。CASはCPUが提供する命令。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:23:35遅延評価との併用。「あとでやる」という命令だけを発効しておくことで、CASの成功率を高める。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:24:49ロックの問題点。粒度が小さいと必要な場所のロックが漏れがち。粒度が大きいと速度が出ない。 デッドロックの発生。デッドロックの古典的な解決方法は、ロックに優先順位をつけることだが、面倒で間違えやすい。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:27:44Haskellではどうする?STMを使う。複数のロックを一つに見せる技術。デッドロックが起こらない。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:29:22翻訳しました「Haskellによる並列・並行プログラミング」oreilly.co.jp/books/97848731… #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:30:20このあと20分の休憩に入ります。再開は15:50。会場ではコーヒーブレイク中です。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:31:12軽量スレッドのような仕組みは、命令型言語では難しくて諦めたというのはそんな風にみえるけど、stm は haskell に限った話じゃなくてまだまだ命令型言語もがんばってるんじゃないのかな?時間がなかったからちょっと消化不良で終わっただけだと思うけど #iij_tw2014
2014-11-26 15:40:01IIJ社内におけるアジャイル開発、DevOpsへの取り組み
IIJプロダクト本部 基盤プロダクト開発部 応用開発課 弓山 彬
IIJのサービス開発の現場では、Gitdub Enterprise や Pivotal Tracker などを用いたアジャイル開発が徐々に浸透してきました。さらに、継続的インテグレーション、継続的デリバリーを実現するためのツールや手法も整理されつつあり、DevOps実現へ向けた動きも始まっています。
本セッションでは、新サービスの開発プロジェクトにおけるこれらの取り組みを、実際の事例を交えながらご紹介します。
次のセッションは「IIJ社内におけるアジャイル開発、DevOpsへの取り組み IIJプロダクト本部 基盤プロダクト開発部 応用開発課 弓山 彬」です。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:50:25サービスの開発の流れ。分析(要求定義)→設計・開発→テスト→リリース。これを「繰り返し」実行する。従来IIJはこの流れをウォーターフォール的に行うことが多かった。短いものでは2〜3ヶ月のサイクル。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:53:442〜3ヶ月のペースで繰り返していると、ユーザーからのフィードバックを反映するのにそれだけの期間がかかってしまう。フィードバックを速やかに反映するため、開発サイクルを短くしたい。アジャイル開発を参考に実践 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:54:37ウォーターフォールを容易に変更することは難しい。4つのフェーズについて、様々な工夫を行うことで理想の開発を目指してきた。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:55:49バージョン管理システムの変更。従来はSVN。多人数の開発には向いていない。同じファイルを複数人が編集すると正しく反映されない。規模が小さければ頑張って修正すればよいが、規模が大きくなると大変。修正時にバグが混入することも #iij_tw2014
2014-11-26 15:57:58Subversion、3way merge 入ったの結構最近で、それまでは『分岐元を自分で指定してねー』という厳しい仕様だったからなあ #iij_tw2014
2014-11-26 15:59:47SVNで共同で開発するためには、コミュニケーションを密にする必要がある。マージのコストが高い。できるだけマージしないように一つのブランチを共有すると、試行錯誤がやりにくくなる。 #iij_tw2014 bit.ly/iij_tw2014
2014-11-26 15:59:59