タグ

ブックマーク / mixiengineer.hatenablog.com (68)

  • mixiの年末年始対策 日記投稿システムの改善 - mixi engineer blog

    朝晩冷えてきましたね。風邪など引いていませんでしょうか。さて、年末が近づいてくるこの時期に弊社のエンジニアが最も気になるのは、お正月。それも来年1月1日を迎えた瞬間です。 1日1日0時に何があるのでしょう?そう、mixiのサービスで最も日記が書き込まれるタイミングになるのです。個人的に「あけおめことよろアタック」と呼んでいます。今年は日記だけではなく、エコーでもメッセージが飛び交うことでしょう。この時期は携帯電話のキャリアでもさまざまな対策を行っていますが、ミクシィでも年末年始でもユーザの方に快適にサービス提供ができるように努めています 以下は昨年の年末年始の日記投稿数の推移です。青色が12/31から1/1、赤色が1/1から1/2になります 1/1の方が全体的に多いですが、特に年が変わる前後の投稿数は倍近くなっていることがわかります。この時に負荷により日記の投稿がしづらい状態になっていたの

    mixiの年末年始対策 日記投稿システムの改善 - mixi engineer blog
    otsune
    otsune 2008/12/12
  • Google App EngineとMemcache API - mixi engineer blog

    こんにちは、某Perl界隈のIRCチャンネルでPythonがマイブーム的なKY誤爆をしてしまったtmaesakaです。 先日、以前から興味のあったGoogle App EngineとMemcache APIについて少し調べ、こちらに英文で報告したのですが、今日は日語で要約したまとめを紹介します。 まず軽く前置きですがGoogle App Engine (GAE)とは、Googleが提供しているウェブアプリケーションをGoogleのインフラ上でスケーリングや冗長化など、ある程度のノウハウや資金を要求される面倒な事を気にせずに運営できるプラットフォームです。つまり、典型的なPaaSの例であり、サービスの運営コストをelastic(伸縮)にします。昨今バズワード化しつつあるクラウドコンピューティングの一種でもあります。 GAEのインフラはGoogleより提供されているAPIセットを用いて利用し

    Google App EngineとMemcache API - mixi engineer blog
    otsune
    otsune 2008/11/29
  • mixi OpenIDコンテスト始まりました - mixi engineer blog

    会社にも家にもグル〜ミ〜グッズが置いてある、グル〜ミ〜好きのmilanoです。 ミクコレも当然のようにグル〜ミ〜です。 こんにちは。 このたび、mixi OpenIDコンテストというものを始めました。 mixi OpenIDといえばプラットフォーム開発チームということで、私がエンジニアブログでも紹介させてもらいます。 mixi OpenIDコンテストは学生の方を対象にしたコンテストで、mixi OpenIDを使用した新しくて楽しいサービスを公募し、私たちも気づいていないソーシャルグラフの新しい活用方法を提案していただこうというものです。 審査員はエンジニアブログでもおなじみ、弊社技術顧問の小山浩之のほか、なんとmixi公認ユーザーの高橋名人も! 見事選考を勝ち抜けば、高橋名人にプレゼンする機会に恵まれるわけです。 楽しそうですね。 果たして高橋名人はどんなサービスに興味を示すのでしょうか。

    mixi OpenIDコンテスト始まりました - mixi engineer blog
    otsune
    otsune 2008/11/25
    HASH(0x2b1168e10690)
  • mixi Engineers’ Blog » Find Job !がAutoPagerizeとLDRizeに対応

    はじめまして。めっきり寒くなってきたので短パン出社を諦めた oinuma です。求人情報サイト Find Job ! の開発や運用を担当しています。 私はいつも livedoor Reader を利用しているのですが、今更ながら登録数ランキングがAutoPagerize / LDRizeに対応しましたのエントリに触発されて、Find Job !の求人情報検索結果画面を AutoPagerize と LDRize に対応させてみました。今回はそのときに学んだことをサラサラっと書きたいと思います。 AutoPagerizeとLDRizeについて AutoPagerize は現在見ているページの一番下に来たら、次のページを自動的にロードして現在のページに表示してくれるというものです。これのおかげでマウスで「次のページ」のようなリンクをクリックする必要がなくなります。 LDRize はキーボードの

    mixi Engineers’ Blog » Find Job !がAutoPagerizeとLDRizeに対応
    otsune
    otsune 2008/11/12
  • mixi Engineers’ Blog » mixiの開発チーム紹介:プラットフォーム編

    雨の日の帰宅途中に大きなヒキガエルを見つけたカエル好きのmilanoです。 東京都内でもこんな大きなカエルがいるんだなぁ、と嬉しくなりました。 こんにちは。 さて、mixiというWebサービスの開発を行っているグループを「アプリケーション開発グループ」というのですが、そのアプリケーション開発グループは、担当している案件によっていくつかのチームに分かれています。 そのうちのひとつ「プラットフォーム開発チーム」について紹介したいと思います。 プラットフォーム開発チームの担当は、mixiのプラットフォーム展開に関するさまざまな開発です。 プラットフォーム展開と言ってもよくわからないかもしれないので簡単に説明すると、要するに日記やマイミクの一覧などの情報を外部のサービスから取得できるようにAPIを用意したり、デベロッパーが作成したアプリケーションをmixiの中で実行できるような環境を整えたり、とい

    mixi Engineers’ Blog » mixiの開発チーム紹介:プラットフォーム編
    otsune
    otsune 2008/11/01
  • mixi Engineers’ Blog >> 言語バインディングを書こう その弐

    東京ディズニーシーで買ってきたDuffyというテディベアがお気に入りで、頭に載せて寝るとよく眠れることを発見してウキウキのmikioです。さて今回は、Tokyo Cabinet(TC)のJavaバインディングとLuaバインディングの作り方と使い方について紹介します。 Javaバインディング TCのJavaバインディングの初版は昨年11月には出ていて別に新しい話題でもないのですが、以前とりあげた言語バインディングの記事ではJavaについて解説しなかったので、ここで改めてとりあげます。なお、この解説ででてくるサンプルコードを試すべく、環境変数「CLASSPATH」と環境変数「LD_LIBRARY_PATH」にカレントディレクトリを含めてください。 CLASSPATH=. LD_LIBRARY_PATH=. export CLASSPATH LD_LIBRARY_PATH Javaバインディング

    mixi Engineers’ Blog >> 言語バインディングを書こう その弐
    otsune
    otsune 2008/10/14
  • mixi Engineers’ Blog mixi有料サービス ~ payment.mixi.jpの知られざる裏側 ~

    はじめまして。開発部アプリケーション開発グループの向田(むかいだ)です。今回は、mixiの中では珍しいmixi有料サービスについて紹介したいと思います。堅い内容かもしれませんが、最後までお付き合いいただければと思います。また、今回の内容はPC版の有料サービスに限定させていただきますのでご了承ください。 ■はじめに mixi有料サービスと言っても、以前よりmixiプレミアムは存在していました。しかし、当時はお支払い用に登録していただいた決済情報が、mixiプレミアムのサービスだけでしか利用できず、今後有料サービスを追加したい、様々なサービスを提供したいという思いのさまたげになっていました。そこで、下記コンセプトを元に課金処理部分を再構築し、2008年4月1日より新たにスタートしました。 ◇コンセプト クライアントサービスとの疎結合 セキュリティリスクの軽減 利便性の向上 1. クライアントサ

    mixi Engineers’ Blog mixi有料サービス ~ payment.mixi.jpの知られざる裏側 ~
    otsune
    otsune 2008/09/22
  • mixi Engineers’ Blog » Lua on Tyrant: DBサーバにLLを組み込む

    遅めの夏休みで那須塩原に行ってきたmikioです。牧場でアルパカに触ってきたのですが、めちゃかわいかったです。さて今回は、Tokyo Tyrant(TT)にスクリプト言語Luaの処理系を組み込んで使う方法について解説します。 つか、Luaって何? Lua(公式サイトによると「るーあ(LOO-ah)」と発音)という言語の名前は聞いたことがあっても、数あるマイナー言語のひとつと思って特に気にかけていない人も多いと思います。私もそうでした。しかし、今では、C言語使いの第2言語・第3言語として使うにはとても有望な言語だと思っています。 Luaに関する日語の情報はまだ多くはないのですが、以下のサイトを順に読むとだいたいの雰囲気が掴めると思います。 Lua で組んでみる Lua 5.1 リファレンスマニュアル Luaは言語仕様が小さいので、とても習得しやすいです。上記のリファレンスマニュアルだけ読め

    mixi Engineers’ Blog » Lua on Tyrant: DBサーバにLLを組み込む
    otsune
    otsune 2008/09/22
  • かんたん友人検索 その弐 - mixi engineer blog

    朝のジョギング生活を絶賛継続中ですが、あまり体重が減らなくてショボンヌなmikioです。さて今回は、Tokyo Dystopiaを使った検索機能「かんたん友人検索」の設計と実装についてお話しします。 全体の戦略 Tokyo Dystopia(TD)は単なる全文検索用のインデックス管理ツールです。多数の文字列の中から特定のパターンを含んだ文字列を特定する処理を高速化することはできますが、逆に言えばそれしかできないのです。住所を市区町村単位で限定して結果を絞り込むとか、ログイン時間が近い順に並び替えるとかの高機能は備えていません。Hyper Estraierにはそういったアプリケーション寄りの機能を持たせていましたが、逆にコードベースが肥大化して保守や最適化がしにくくなってしまいました。その反省を踏まえて、今回は、「全文検索による対象の絞り込み」だけはTDにやらせて、その他の機能は全て専用に書

    かんたん友人検索 その弐 - mixi engineer blog
    otsune
    otsune 2008/09/16
  • ロングテールな画像配信 その2 - 3,000万の画像を配信するシステム - mixi engineer blog

    Squidを検索する度に最初に表示される画像検索の結果に吹き出しそうになる開発部・システム運用グループの長野です。前回のロングテールな画像配信のその2ということで、実際の画像配信システムについて書かせて頂きます。 ■プロフィール画像の配信について 前回紹介しましたが、mixiにおいてプロフィール写真を設定を設定しているユーザ数は全体の約70%、1,000万人の方が設定をされています。現在配信をしているプロフィール画像のサイズは180x180、76x76、40x40と3サイズあり、合計3,000万以上のファイル数になっています。また、もっともよく使われる76x76のサイズ1,000万件において、1日にアクセスされる画像の数は800万ファイル以上、うち97%が30回以下と非常に広範囲に渡ってアクセスされています。そのため大量の画像を配信できる仕組みが必要になります。 ■配信システムの全体像 プ

    ロングテールな画像配信 その2 - 3,000万の画像を配信するシステム - mixi engineer blog
    otsune
    otsune 2008/08/20
  • mixi Engineers’ Blog » かんたん友人検索 その壱

    朝7時30分に起きて駒沢公園をジョギングすること10日目のmikioです。だいぶ体が軽くなってきて、そろそろ体型にも変化が出てくるかなと期待する毎日です。さて、以前の記事で予告した通り、Tokyo Dystopiaを使ったmixi内の検索機能をインディーズ機能としてリリースしました。「かんたん友人検索」という名のとおり、mixiの登録ユーザを対象として友人や知人を簡単に検索する機能です。操作を簡潔にしながらも、マイミクシィのつながりなどを使って検索精度を高めているのが特徴です。 シンプルにした 見た目として最も大きな特徴は、従来の友人検索よりも入力フィールドの数を減らしたことです。従来では「姓」「名」「ニックネーム」「性別」「年齢(下限)」「年齢(上限)」「血液型」「現住所(都道府県)」「現住所(市区町村)」「出身地(都道府県)」「出身地(市区町村)」「趣味」「職業」「キーワード」「写真」

    mixi Engineers’ Blog » かんたん友人検索 その壱
    otsune
    otsune 2008/08/18
  • mixi Engineers’ Blog » 期間限定の新機能「エコー」登場

    こんにちは。mixi開発部のyouheiです。 今回は先日8月4日にリリースした「エコー」について書きたいと思います。 エコーとは まずはエコーとはどういう機能かのご紹介ですが、プロモーションページがございますのでそちらをご覧いただければ幸いでございます。 http://mixi.jp/guide_echo.pl いくつか抜粋しますと、 あなたの"今"を一言にしてみませんか?誰かに伝えたいこと、ひとりごと等、何でもOK! 気軽な新コミュニケーション機能です。 たとえば、「今日はいい天気だな〜」という、ひとりごとから、「お腹すいたー!誰かランチにいこうよ!」というメッセージ的な使い方まで、「エコー」の楽しみ方はあなた次第! マイミクシィ同士で「エコー」を使うとホームにお互いの書きこみが表示されます。 気になった書きこみには、返信することもできちゃいます。あなたがふと書きこんだ一言に、思わぬ返

    mixi Engineers’ Blog » 期間限定の新機能「エコー」登場
    otsune
    otsune 2008/08/06
  • mixi Engineers’ Blog » 圧縮データベースを使おう

    チャリンコ通勤による滝のような汗で、朝からTシャツがシースルーになってしまうmikioです。さて今回は、Tokyo Cabinet(TC)のデータベースを各種のアルゴリズムで圧縮して利用する方法についてご紹介します。 圧縮B+木 B+木とは、比較関数の値による順序が近いレコード群を単一のページにまとめ、各ページにB木(multiway balanced treeの略であり、二分木(binary tree)とは違います)の索引を張ったものです。理論的にはレコードの探索も更新も O(log n) の時間計算量で行え、内部ノード(B木)の操作をキャッシュすると実質的には O(1) の時間計算量で探索や更新が行えるという、かなり安定した性能を備えるデータ構造です。その上、レコードが一定の順序に基づいて並べられているので、数値の範囲検索や文字列の前方一致検索が高速に行えたり、カーソルによって順序に基

    mixi Engineers’ Blog » 圧縮データベースを使おう
    otsune
    otsune 2008/07/29
  • YAPC::Asia 2008の資料公開します - mixi engineer blog

    開発部・システム運用グループの長野です。5月15日・16日に東工大大岡山キャンパスで開催されたPerlのカンファレンス、YAPC::Asia 2008に参加してきました。2日目にはセッションの時間を2つ頂いて、発表をしてきたのでその資料を公開します。 ■memcached in mixi [pdf] memcachedはmixiのシステムでも重要なアプリケーションの1つになります。発表ではmemcachedの基から、弊社でのmemcachedの事例、そして分散方法の改善、TokyoTyrantの活用事例について説明させて頂きました。発表の最後時間が足りなくなり説明できなかったスライドも含まれていますのでご覧下さい。 memcachedについては、研究開発グループのtmaesakaによる記事が、またTokyoTyrantの活用事例については、こちらの記事にもありますので参考にして頂けたら幸

    YAPC::Asia 2008の資料公開します - mixi engineer blog
  • mixi Engineers’ Blog » Tokyo Tyrantによる耐高負荷DBの構築

    連休中はWiiのマリオカートをやりまくってやっとVR7000越えたmikioです。愛車はマッハ・バイクとインターセプターです。さて今回は、分散ハッシュデータベースサーバTokyo Tyrantでmixiの最終ログイン時刻を管理するようにした時の苦労話を書きます。 ログイン処理は負荷地獄 mixiでは、全てのユーザについて、各々の最終ログイン時刻を管理しています。「マイミクシィ一覧」や「お気に入り」などの画面で、友人が近い時間にログインしていてコミュニケーションがとりやすい状態にあるかどうか確認できるようにするためです。 mixiのほぼ全てのページはログインしないと見られないページなので、ほぼ全てのページにアクセスされるたびにログイン確認が行われます。したがって、最終ログイン時刻はほぼ全てのページにアクセスされる度に更新されることになります。mixiの中で最も重いデータベースのひとつとして「

    mixi Engineers’ Blog » Tokyo Tyrantによる耐高負荷DBの構築
    otsune
    otsune 2008/05/07
  • mixi Engineers’ Blog » memcachedの最新動向

    先週アメリカに行ってMySQLカンファレンスやmemcached hackathonに参加してきました。そこで今回はmemcachedコミュニティやhackathonで行われた多くの議論に関してご報告させていただきたいと思います。 前書き ご存知の通りmemcachedはFacebookやWikipediaをはじめとする巨大ウェブサイトのコアテクノロジーの一つとして世界中で使われるまでに到達したソフトウェアです。mixiを支えるテクノロジーの一つでもあります。 hackathonをご存知ない方のために簡単に説明すると、オープンソースプロジェクトハッカーたちが実際に集まってプロジェクトの開発をしたり仕様の議論や提案などをするイベントの事です(とても楽しいです)。 今回で4回目になるmemcachedのhackathon(議事録)ですが、東京でもやったら面白いんじゃね?的な話を結構まえにした

    mixi Engineers’ Blog » memcachedの最新動向
    otsune
    otsune 2008/04/26
  • mixi Engineers’ Blog » スマートな分散で快適キャッシュライフ

    今日は以前のエントリーで書くと述べたConsistent Hashingに関して語らせて頂こうかと思います。ただしConsistent Hashingはセミナーやカンファレンスなどでかなり語られていると思いますので、コンセプトに関しては深入りせず、実用性に着目したいと思います。 問題定義 分散されたキャッシュ環境において、典型的なレコードを適切なノードに格納するソリューションはkeyのハッシュ値に対しmodulo演算を行い、その結果を基にノードを選出する事です。ただし、このソリューションはいうまでもなく、ノード数が変わるとキャッシュミスの嵐が生じます。つまり実世界のソリューションとしては力不足です。 ウェブサイトのキャッシュシステムの基はキャッシュがヒットしなかったらデータベースにリクエストを発行し、レコードが存在したらキャッシュしてクライエントに返すという流れです。ここで問題なのが一瞬

    mixi Engineers’ Blog » スマートな分散で快適キャッシュライフ
    otsune
    otsune 2008/03/11
  • mixi Engineers’ Blog » mixiのスモールワールド性の検証

    初めまして、mixi開発部のfujisawaです。 マイミクシィの友人関係を使って、mixiのスモールワールド性について調べましたので、その結果について書きたいと思います。 スモールワールド性とは スモールワールド性とは、人間関係のネットワークなどでよく見られる性質で、文字通り「世間は狭い(It's a small world!)」ということを表しています。「知り合いを6人介するだけで、世界中の人々と間接的につながることができる」という『6次の隔たり(Six Degrees of Separations)』という言葉でもよく知られています。 一般にスモールワールドは以下の特徴を持っています。 誰に対しても少ない人数を介するだけで到達できる(平均距離が小さい) 自分の友人同士が友人関係にあることが多い(クラスタ性が高い) 1の距離とは、ネットワーク中のノードをたどった回数、すなわち友人を介し

    mixi Engineers’ Blog » mixiのスモールワールド性の検証
    otsune
    otsune 2008/02/20
  • DBMによるデータベースサーバ - mixi engineer blog

    DSのスターフォックスというゲームにはまりまくりのmikioです。最近社内外で「俺ストレージサーバ」を作るのが流行っているようなので私も参戦してみました。今回はDBMのネットワーク層をほぼスクラッチで作った話をします。 Tokyo Tyrant Tokyo Tyrant(以下TT)はTokyo Cabinet(以下TC)をラップしてネットワーク越しに操作できるようにするツールです。キャビネット(内閣)を傀儡にするタイラント(僭主)ということで名付けました。ダウンロードはこちら。 TCは高性能なDBMで、マルチスレッドモデルで高い並列性を実現していますが、逆にマルチプロセスモデルだとファイルロックがかかるので並列性が低くなってしまいます。つまり、書き込みモードでデータベースにアクセスしているプロセスがいると、その間は他のプロセスがデータベースに接続しようとするとブロックされることになります。

    DBMによるデータベースサーバ - mixi engineer blog
    otsune
    otsune 2008/01/28
  • mixi Engineers’ Blog » Inside Tokyo Cabinet その五

    先日、MySQL Conferenceという催しに行ってきました。そこでMySQLの開発者のBrian Aker氏およびMichael Widenius氏と話をする機会があったのですが、やっぱしトップランナー達と議論するのは刺激になるなぁと思ったmikioです(その時の資料)。さて、一連の連載も今回が感動の最終回で、TCの性能上の蘊蓄をお届けいたします。 なぜdynamic hashingを使わないか Brianさん達とTCの実装についても少し議論したのですが、その際にdynamic hashingをなぜ使わないのかと問われました。その背景として、TCやQDBMではハッシュのバケット数(=格納するレコード数を予測してその数倍に設定すべき値)をデータベース作成時に指定しなければならないという問題があります。バケット数が大きすぎると空間効率が劣化し、小さすぎると時間効率が劣化するというトレード

    mixi Engineers’ Blog » Inside Tokyo Cabinet その五
    otsune
    otsune 2008/01/24