株式会社サイバーエージェント様
会社概要
サイバーエージェントは、インターネットにて、各種ブログ、オンラインゲームやモバイルサービスの提供、インターネット広告事業、投資育成事業などといった事業を総合的に展開しています。
事例概要
『Ameba』 のミニブログ『Ameba なう』は、ブログに書くほどでもないちょとしたつぶやきを気軽に投稿したり、気になる人のつぶやきを簡単にフォロー(お気に入り登録)することができるサービスです。 また、 Apatch Solr をベースに『Amebaなう』に検索機能を追加したことにより、月間約 2,300万件(2010年11月時点)投稿されるつぶやきを、ほぼリアルタイムで検索結果に反映させ、さらには話題のキーワード表示も可能にしました。このように利便性の高いサービスが好評となり、ブログ内検索「Ameba Search」においても同様の対策をはかっています。
Solr 導入背景
Q:検索を自社で開発しようと思った理由はなんですか?
コストを抑え、かつ自社で自由に機能をカスタマイズして、顧客のニーズにタイムリーかつ的確に応えるべき、と考えるからです。 弊社では、可能なかぎりシステムを内製化、という目標を掲げていて、オープンソースの利用に積極的に取り組んでいます。
Q:検索システム技術にSolrを採用した理由はどのような点ですか?
以前から 『Ameba ブログ』 の検索でApache LuceneとRMI、NFSを 利用して分散検索機能を実現しようとしていたのですが、スケールしにくく、またLucene のバージョンアップもできず、しばらく検索機能が実質使えない状態となってしまったことがありました。そんな時にちょうど第一回の Solr 勉強会があって Solr を知ったのです。分散検索機能があってスケールもできるし、スキーマ定義が XML 等で構築も簡単そうなので、「これだ!」と思いました。
Solrで開発を始めた当時のブログ記事数は4.5億くらいで、データ量は、記事 370GB に対して、索引 430GB でした。 現在では、7億記事(記事460GB、索引540GB)程度を扱っていますが、このような大量のデータ処理にも十分対応可能です。パフォーマンスに関しては、Solr のキャッシュ機構 と Linux のページキャッシュでサーバー1台あたり100qps 以上を捌いています。
Q: 商用検索エンジンの導入も検討されましたか? また、オープンソースのものを使うことへの抵抗はありましたか?
検索エンジンの導入には、パフォーマンスに関して社内基準があるので、それを満たしているかどうか等、ほかの商用製品とも数値を比較し検討しました。Solrは、弊社の必要とする機能の点では、他の商用製品と比べて遜色がないとみています。
Luceneを利用していたため、オープンソースの利点はよく理解していましたからSolrの採用に迷うことはありませんでした。Lucene/Solr は活発なコミュニティがあり、最新情報の収集にも便利です。この点も、技術選定するうえで重要視した点の一つでした。
Q:情報収集などにおいて、言葉の壁はなかったのですか?
コミュニティのドキュメントは英語なので、たしかに最初は不安がありましたが、実際に取り組み始めてみたら、問題ありませんでした。最新の技術情報等が入手しやすいので、とても便利です。
Q:開発期間、人員は?
予備調査には1ヶ月程度で、実装には二人で1ヶ月程度でした。検証環境のサーバー数が数台だったため、大量のデータを入れてのチューニングに多少時間がかかりましたが、開発は短期間ですみました。
導入効果
Q:Solrの最も良い点、また導入してよかった点は?
まずは低コストという点です。 オープンソースなので、ベンダー製品とは異なり、その仕様に制限されることなく自由にカスタマイズできるので、企業として検索結果に出したいものを常にチューニングして出すことができることも魅力の一つです。社内システムの内製は、弊社の方針でもあります。特に、Lucene/Solrに関しては、これが簡単にできてしまうのが便利でかつありがたいです。 また、Lucene/Solr には関数クエリや便利な拡張機能があるので、自分でスコアリングの実装などをするときにはとても参考になります。
コメント
Q: 今後の課題と目標をお聞かせください。
Lucene/Solr に自分たちでいろいろとプラグインし、機能追加していく予定です。たとえば、リアルタイム検索についてもまだまだ改善していきたいです。また、大容量データの処理に関しては、インデックスデータ配備、自動スプリット、データ量のリバランシングなどを工夫し、効率的な処理を実現していきたいと思います。 そして、ユーザーが、「見つけたいブログが見つけられる」よう、検索ランキング、スコアリング部分のオプションを充実させたいです。 今はスコアリングだけのサブシステムを構築しているので、Solr と連携させて機能充実をはかります。
システム概要
| ブログ検索 | なう検索 | |
|---|---|---|
| Solr バージョン | Ver.1.4.0 | Ver. 1.4.1 |
| ドキュメント数 | 7億記事 | 4500万投稿(2か月分) |
| ドキュメントサイズ | 460 GB | 6 GB |
| 索引サイズ | 540 GB | 4 GB |
| 検索結果への反映 | 1〜5分 | 1〜5秒 |
| クエリ数 | 400〜500万 クエリ/ 日 | 15〜35万クエリ/ 日 |
| 検索処理速度(ピーク帯) | 90-120 qps | 3-100 qps |
| 分散検索の環境 (パーティション) |
70shards+当日分 (ハッシュ分割)x2 *記事IDで分割 *1シャードあたり 1000万記事ID(11-16GB) |
12 shards * 記事IDの剰余による ハッシュと時間範囲で分割 |
| 平均レスポンスタイム | 30ms | 10ms |
| 索引更新頻度 | 1~5分 | 1~5秒 |
| Solr サーバー数 | マスター2台、 スレーブ17台、 ブローカー2台 |
マスター 1台、 スレーブ2台、 ブローカー2台 |
構成図
①ブログ検索

②なう検索

