誕生日

にっきみたいなBlog

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

でっかいシステム

でっかいもの作りたいよね、と大成建設のテレビ新CM「新ドーハ国際空港篇」を見て涙するエンジニアです。
形あるものいいよなぁ、こんちくしょう。

そういうわけでマイブーム英語教材SE RadioよりEpisode 109: eBay's Architecture Principles with Randy Shoupだ。
日本ではヤホーが強いのであれだが海外ではデフォルトはeBayだ。
でかいサイトだ。そこのアーキテクトのインタビュー。
でかい、というかユーザー数、アクセス数がとんでもないサイトのデザインをどうすればScalabilityやAvailability、その他もろもろを満たせるのか、という点で興味深い。

どのくらいでかいサイトかというと、(以下2008/3のLondonでのカンファレンスの資料から抜粋)
2億7千万登録ユーザー
20億毎以上の画像データ
平均毎秒$2039のトランザクション
10億ページview/day
2Petabyteのデータ
2週毎に100,000行程度の機能がリリース
48億回のSQL実行/day

おまけで、
毎年225トンのキムチがeBayで売れてる
らしい。
(上記全て単位とか変換間違っていないことを祈る)


このインタビューでは4つ(くらい)のeBayのアーキテクチャ上の特徴、彼らが力を入れている所を紹介している。
色んな所で講演をしているみたいで、いい資料も落ちている。(上のリンクからたどれる)
たどりまくると日本語のものもあった。

あまり(面白くはないと)期待せずに聞いてみたけど、わたしゃこういうタイプ(こういう、は適当に補完してくれ)のシステムはやったことないこともあってとても面白かった。
同業者はプレゼン用のファイルに目を通すくらいはオヌヌメする。

以下、個人的にこういうやり方するんだあああ、と思った点。

1. トランザクションは保障しません
これは、Scalability(拡張性)とAvailability(可用性)の向上から来ている。
それは主に、機能分割、水平分割(DB含む)から実現されるのだが、そうすると(普通に考えて)分散トランザクションが必要になる。2フェーズコミットやらXAやらの利用ですね。

で、こんなのは一切しない。

(゚Д゚ )ハァ?トランザクション保障しないって、どうしてくれんの?
となるのだが、「ほんとによく考えるとトランザクションを保障しなければならない場面は少ない」「DBのアクセス順で(論理的には)どうにかなる」「仮に整合性が必要でも即時性が求められるものはさらに少ない。後でバッチとかでどうにかすりゃいいんじゃん」等で解決しているそう。

2. セッション持たないよー

初心者がWebサイトJ2EEで作ってみよーとか演習やると、ショッピングカートのデータはセッション(オブジェクト)に入れて、となるのが定番。
というか普通持つだろ。
無しでどうすんだよ。

eBayではURL(rewriting?)や、Cookie(!)やらどうしても、な所ではセッションではなく、適当にDBに書いたりしているみたい。
なので、アプリケーションとしては完全にステートレスとして作られている、と。
これもScalability、そしてAvailabilityの向上にすげえ貢献するというか、その規模だとこうしないと無理なんだろう。

これはちょっと古臭い頭でいると中々思いつかないなぁ。


検索系のところはちょっと元々の知識が足りないのでパス。
あとは、同期処理は減らして非同期メイン使うとか、他にもいろいろありました。
そういえば最近、楽天もこの手の資料を公開していたような。そっちはRubyベース、こっちはJ2EEベース。
スポンサーサイト
  1. 2008/12/12(金) 13:54:52|
  2. えいご勉強
  3. | トラックバック:0
  4. | コメント:0

なんだかんだ言ってまだちゃんと勉強してないもの

過去なんども触れようとして触れずじまいというか、ちょっと触ってそのまま放置になってるもののひとつがRuby
あー。言語の話。プログラミング言語の話。スクリプト言語の話。オブジェクト指向スクリプト言語の話。

そんなわけで(どんなわけ)、Software Engineering radioよりEpisode 13: Ruby in Practice、聞いてみたよー。

帰宅時のバスとかで聞くので、眠くなり途中から怪しい。
Rubyはおもしろそーおもしろそーとはいつも思いながらどうせ仕事じゃ(少なくとも当面は)使わないしなぁ、とか思うとなかなか時間取って学ばないわけである。
このインタビューの回では、実プロジェクトでもRubyを使ったよ、というintervieweeに商用システムで使えるの?とかそういう話をする。
ちなみに2006年4月の記事なんで今はまた違うと思うよ。あくまでメインは英語聞く、なのさ。

下記はtranscriptもざっと見たんで大きなウソはないと思うけど内容は保障しない。
また他にもいっぱいしゃべってるが割愛。

当たり前だが知らない単語は聞き取れない、もしくは違う単語と認識する。
Duck typingってずっとDoc typingって聞こえてた。どっちも知らない用語なんでどっちにしろ意味わかんなかったのだけど。
mixinも知らないと、ミクシーに聞こえるのだろう。


どうしてRubyになったの?
アプリを作ることになった時に約2週間くらいでprototypeを提供しなくちゃいけなかった。
Javaはのろくて複雑すぎるのでスクリプト言語探してて、Rubyにいきついた。
RubyはUIのためのERBやらMySQLコネクタとかもってたから。

これまでRubyの経験なしでどうやって勉強したの?
例の有名な本で。章ごとに読んで例を見たりしてさ。
それで2週間でプロトタイプできた。

プロトタイピングの話だととりあえず動いた、というだけに聞こえる。
まだ多くの商用のRubyプロジェクトはないんで多くの人がRubyの状況を心配してると思うんだけど、Rubyどう評価する?

Rails出てから勢いあると思うよ。

プロトタイピングのほかにどんなプロジェクトでRubyをすすめる?
1つはすでにRailsが示しているようにWebアプリケーションだね。
他にもRichClientとしていいんじゃないかな。(そりゃー意外だね、という話が続く)

じゃ逆にどういう時にJavaを使い続ける?Javaまだ使う?
あったりまえだ。Webアプリケーションより複雑なものだってよく作ってるよ。
Transaction monitor使って動くやつとかね。それらがRubyに取って変わられるとは思わない。

Javaが持ってなくて好きだったり、Javaの開発者が知っておくべきRubyの機能教えて。
よくRubyでするのはduck typingってテクニックかな。
プログラマみたいに好きに機能を付けられるように特定の型に属さないでいいオブジェクトのことだよ。
(そいつはすげーや、みたいな話が続く。メソッドとか後付けできるでOK?)
あとmixinも好き。

Rubyで不利な点は?
IDEで開発できないのでrefactoringとかやりにくい。(最近はそうでもないかも)
クライアントアプリだとしたら、ソース丸見えになるね。Phthonみたいにbytecodeにする方法がないから。

  1. 2008/12/03(水) 21:32:28|
  2. えいご勉強
  3. | トラックバック:0
  4. | コメント:1
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。