SlideShare a Scribd company logo
1 of 24
Download to read offline
秒間3万の広告配信ログをElasticSearchで 
リアルタイム集計してきた戦いの記録 
2014年9月16日 第6回ElasticSearch勉強会 
山田 直行
目次 
• 自己紹介 
• ディスプレイ広告配信DSP「Smalgo」について 
• インフラ選定と設計 
• データ構造とリアルタイム集計 
• 運用開始して分かったこと 
• トラブルとその対応
自己紹介 
• 山田 直行(やまだ なおゆき) 
Twitter @satully 
blog.kirishikistudios.com 
• 株式会社サイバーエージェント アドテクスタジオ エンジニア 
2011年入社。前職はソーシャルゲームのエンジニア 
• 担当分野:DevOps 
インフラ設計/運用・データ集計/分析・CIなど 
• AWS認定ソリューションアーキテクト アソシエイト 
• データの活用について、インフラ構築から分析、実サービスへの適用までを通して 
できるエンジニアを目指しています
ディスプレイ広告配信DSP「Smalgo」について 
プロダクト概要 
• ディスプレイ広告(≒バナー広告)の配信プラットフォーム 
• 2014年5月から提供(前身となるプロダクトを含めると2014年2月から) 
• スマートフォン向けがメインだが、PC向け配信も行っている 
• RTBがメインだが、第三者配信など他の配信方法にも対応 
• 成果報酬型課金が特徴
ディスプレイ広告配信DSP「Smalgo」について 
DSPの位置づけ 
引用元:日本一やさしいアドテク教室 https://www.cyberagent.co.jp/ir/personal/adtech/adtech_05/
インフラ選定と設計 
DSPの配信~集計の全体像 
様々なログを集計し、そのデータを使って配信、の繰り返し 
メメデディィアアメメデディィアアメディア 
Bid/Ad 
サーバー 
Impression 
サーバー 
Click 
サーバー 
アドネットワーク 
またはSSP 
Conversion 
サーバー 
Mark 
サーバー 
Fluentd 
ElasticSearch 
クラスタ 
MySQL 
Redis 
S3
インフラ選定と設計 
データインフラとして何を使うか? 機能要件 
• 柔軟なスキーマ 
ログのデータ構造は機能追加に伴って変化していく。キャンペーンやクリエイティブの情報の他、広 
告枠の情報やレスポンスタイムなどをまず含め、それ以降のデータ拡張にも対応したい 
ネストしたデータ形式を扱えるようなドキュメントDBを検討した 
• 小さく始められ、かつスケールアウトが容易であること 
当初は10億req/monthからスタート。そこから2000億req/monthまでスケールアウトできること 
がいったんの目標。できればスケールアウトを無停止で行いたい 
• リアルタイムとバッチでの両方の分析ができること 
リアルタイムにデータを集計できると、クリックやコンバージョンのテスト、レスポンスタイムのモ 
ニタリング、リアルタイムのターゲティングが可能になる。ログが吐かれて数秒以内にはデータを利 
用可能にしたい。それと同時に、任意のデータ列を軸にした集計処理にも活用したい
インフラ選定と設計 
ElasticSearchを採用 
• 前ページの要件を全て満たしていた 
• Kibanaの存在が採用を後押しした。データの分析・可視化ツールを独自に開発する 
よりも、良い選択肢だと考えた 
• 当初は、全件データサービスとしての利用を主目的として考えていた。これまでは広 
告運用者は「集計されたデータ」を扱うことは多くても、「生の配信データ」にアク 
セスするには一手間かかっており、これを直接検索できるようにして分析や調査に利 
用できるようにしたいという狙いがあった 
• ただし、ElasticSearchの”何でもできる感”と、急激なプロダクトの拡大と機能追加 
により、ElasticSearchを広告配信のためのバッチ集計にも利用していくことになる 
• 多くの要件を一度に満たせる夢のデータベースなんてあるの? 
→運用には苦労することに
インフラ選定と設計 
ElasticSearchクラスタの2014年7月ごろの構成 
Fluentd 
ElasticSearch 
Search Nodes 
ElasticSearch 
Coordinate Nodes 
ElasticSearch 
Search Nodes 
ElasticSearch 
Coordinate Nodes 
master: false 
data: false 
2ノード 
r3.large 
ElasticSearch 
Data Nodes 
ElasticSearch 
Data Nodes 
ElasticSearch 
Data Nodes 
master: true 
data: false 
2ノード 
r3.large 
ElasticSearch 
Data Nodes 
ElasticSearch 
Data Nodes 
バッチ 
サーバー 
Kibana 
REST 
Client 
ELB ELB 
master: false 
data: true 
28ノード 
12シャード & 1レプリカ 
r3.xlarge/1GB SSD 
バッチは1時間に1回 
その中で数回のaggregationクエリ 
KibanaやRESTクライアントは 
任意のタイミングで使われる 
fluentd(td-agent)は10ノード 
5ノードがBidログ用 
3ノードがそれ以外のログ用 
2ノードがアクティブスタンバイ 
! 
月間ログ数400億行 
ピーク時秒間30000writes
データ構造とリアルタイム集計 
Bid RequestからConversionまでをデータ格納時にひもづける 
• DSPのログは、Bid Request - Bid Response- WinNotice - 
Impression - Click - Conversionといった種類があり、これらのどの 
ログとどのログが対応しているかをひもづけていく必要がある 
Bid Request/Response 
(bidした) (bidしなかった) 
Impression 
Win Notice 
Click 
Conversion 
• Bid Requestログは最も多量であり、 
そこからBidしたものの中からオーク 
ションに勝利したものがインプレッショ 
ンとなり、そこからクリックされたも 
の、コンバージョンしたもの、という 
具合で減少していく
データ構造とリアルタイム集計 
インデックスとデータスキーマ 
{ 
"_index": "deliver-2014.09.15", 
"_type": "unite", 
"_id": "T4xi1p67y6l6gk2bnsf0oib5g6", 
"_score": 1, 
"_source": { 
"bid": { 
"time": "2014/09/15 20:41:40", 
"host": "bid16", 
... 
}, 
"wn": { 
... 
}, 
"imp": { 
... 
}, 
"click": { 
... 
}, 
"cv": { 
... 
} 
} 
} 
• インデックスは1日ごとに1個切る。 
ただしbidしたものとbidしていないも 
のを別インデックスとした(集計時に 
どちらかしか見ないことが多いため) 
つまり1日あたり2つのインデックス 
が作られる 
• データは右図のように、ひもづいたロ 
グを1つのドキュメントに格納するデー 
タ形式を取る。そのためにデータ更新 
時に1回search queryを投げ、ひもづ 
くドキュメントにappendする処理に 
した(fluentdのpluginを書いてその中 
で処理)
運用開始して分かったこと 
クラスタデータベース + リアルタイム集計ならではの問題 
• 新しい配信の機能をElasticSearchを使って実現することで、リリースをどんどん 
していくことができた 
• Kibanaが活用され、多くのダッシュボードが作られた。それらはリアルタイムのモ 
ニタリングや配信ログの調査に効果を発揮した 
• ただし、Kibanaの利用のされ方が読めず、重いクエリが流れてKibanaがクラスタ 
に負荷をかけることが頻繁にあった 
• ピーク時に書き込みが間に合わず、データ格納が遅延することが多くあった 
• 別データベースでバッチ処理でやっている集計との間で集計結果に微妙なズレが生 
じて、一致させることが困難だった 
• シャードの再配置中には負荷が高まり、それを静めるのに苦労した
運用開始して分かったこと 
どういう設定が最適か、を事前に見極めるのが難しい 
• インデックスとドキュメントの設計は非常に大切 
当初はbidしたログとbidしていないログが1つのインデックス内にあり、負荷が非常に高 
かったが、分割したことでかなり負荷が下がった 
ドキュメントの設計は最適だったのかどうかは今でも悩むところ 
• シャード数をいくつにするか 
4 -> 8 -> 12と増やしてきた 
増やしすぎることで運用が難しくなるのではないかという懸念があって増やすのに慎重だっ 
たが、もっと多くても良いかもしれない。1ノードあたりに同一インデックスは1シャード 
までという構成をとったが、そうする必然性はない 
• production環境でないと分からないことが多い 
development環境、staging環境はあったが、構成の確認はできても負荷チューニングは 
できず。本番で実際適用してみて分かることが多かった。負荷試験の環境をもっとうまく 
作れたらよかった
トラブルとその対応 
バージョンアップ & SSDへの変更が大きかった 
• バージョンアップでかなり安定した 
当初はver1.0.2でサービスイン。Out of memoryでノードが反応しなくなる問題に悩まされた。 
ver1.2.3にしてからかなり安定。 
• データドライブのEBSをSSDに変更して高速化 
Amazon Web Services ブログ: 【AWS発表】新しいSSDベースのElastic Block Storage 
http://aws.typepad.com/aws_japan/2014/06/new-ssd-backed-elastic-block-storage.html 
このリリースで、EBSを全てSSDに入れ替えたところ、書き込みのスループットが改善 
• 検索処理のキャッシュ化 
当初はデータノードにc3.2xlarge(8CPU 16GB)を利用していた。データ格納時の事前検索で多量の 
CPUを使っていたためだが、ElastiCacheを使ってひもづくデータのキーをキャッシュすることに 
よりCPU使用率を大幅に下げて、メモリ重視のインスタンス(r3.xlarge(4CPU, 30GB))にすること 
により検索が高速化し、パフォーマンスが安定した
トラブルとその対応 
運用ツール 
• ElasticSearch Head http://mobz.github.io/elasticsearch-head/ 
シャードの状況把握にはこれ 
• bigdesk for elasticsearch http://bigdesk.org/ 
細かな負荷監視に利用 
• ElasticHQ - ElasticSearch monitoring and management application. 
http://www.elastichq.org/ 
全体の俯瞰とチューニング箇所の特定に利用 
• Homepage of Zabbix :: An Enterprise-Class Open Source 
Distributed Monitoring Solution http://www.zabbix.com/ 
全般的な死活監視と、Fluendからの書き込みの監視
トラブルとその対応 
Fluentdのチューニング 
• FluentdでElasticSearchに書き込むのと同じデータをS3にも 
保存しておき、S3のデータから復旧するスクリプトを用意 
• ElasticSearch自体が持つバックアップ機能は非使用 
• Fluentd(td-agent)のパラメータをチューニングして最適値を 
探した 
<match es.app.bid> 
flush_interval 1s 
buffer_type file 
buffer_chunk_limit 8m 
buffer_queue_limit 10000 
retry_limit 5 
</match>
トラブルとその対応 
elasticsearch.ymlの設定値 
• 正直なところ、最適な値がいくつかは今でもわかっていない。 
その都度試行錯誤している 
• オンラインで変更可能なものと、再起動が必要なものがある 
• いろいろなウェブサイトを参考に設定値を変えて試してみたが、 
大きなパフォーマンスアップは見られず、デフォルトに近いパ 
ラメータで運用している 
index.number_of_shards: 12 
index.number_of_replicas: 1 
indices.fielddata.cache.size: 50% 
script.disable_dynamic: false 
bootstrap.mlockall: true
トラブルとその対応 
基本の確認コマンド 
• クラスタの設定を確認 
curl -XGET localhost:9200/_cluster/settings?pretty 
• クラスタの設定を確認 
curl -XGET localhost:9200/_cluster/health?pretty 
• シャードの配置状況を確認 
curl -XGET localhost:9200/_cat/shards 2>/dev/null
トラブルとその対応 
ノードの入れ替え 
• ノードをグレードアップするときには、新しいインスタンスを 
同数用意して、全部入れ替える手法を取った 
バージョンアップ時やインスタンスタイプを変えたときなど。例えば16台のデー 
タノード運用していたときは、同数の16の新しいデータノードを用意し、合わ 
せて32台にして、そこからcluster.routing.allocation.exclude._nameを使って 
古いノードから新しいノードにシャードを移動させ、全部移動し終わったら古 
いノードを全て止めて削除する、というようにした。新しい構成で何か問題が 
発生した際に、戻すということを可能にするため。 
curl -XPUT localhost:9200/_cluster/settings -d '{ 
"transient" : { 
"cluster.routing.allocation.exclude._name" : “logananlytics-data10,loganalytics-data11“ 
} 
}'
トラブルとその対応 
特定のノードにシャードが固まっているときに移動をさせる 
• あるノードが落ちたときなど、特定のノードにシャードが固 
まっていて負荷になっていたときは、手動で再配置をかけて対 
応したことも 
curl -XPOST 'localhost:9200/_cluster/reroute' -d '{ 
"commands" : [ { 
"move" : 
{ 
"index" : "deliver-nobid-2014.06.23", "shard" : 1, 
"from_node" : "loganalytics-data38", "to_node" : "loganalytics-data37" 
} 
} 
] 
}'
トラブルとその対応 
unassignedのシャードをノードに割り振る 
• たまにunassignedになったままのシャードがあるので、自動 
での割り当てを待たずにRESTで割り当てノードを指定 
curl -XPOST 'localhost:9200/_cluster/reroute' -d '{ 
"commands" : [ { 
"allocate" : 
{ 
"index" : "deliver-2014.06.29", "shard" : 4, "node": "loganalytics-data25", 
"allow_primary": true 
} 
} 
] 
}'
トラブルとその対応 
initializingのままのシャードをキャンセル 
• 原因不明だが、initializingのままずっとスタックしている 
シャードがあった。そのときはシャードをキャンセル 
curl -XPOST 'localhost:9200/_cluster/reroute' -d '{ 
"commands" : [ { 
"cancel" : 
{ 
"index" : "deliver-2014.07.03", 
"shard" : 2, 
"node" : "loganalytics-data24" 
} 
} 
] 
}'
トラブルとその対応 
同時に再配置を行う数をコントロール 
• 時間帯をみて、再配置を行う数を変更して負荷を調整 
Excludeしたノードから一気に引っ越しさせるときもこれ 
curl -XPUT localhost:9200/_cluster/settings -d '{ 
"transient" : { 
"cluster.routing.allocation.cluster_concurrent_rebalance" : 8 
} 
}'
まとめ 
• データインフラにElasticSearchを採用した経緯とメリット・ 
デメリットについて話しました 
• システム全体の中で、どういう位置づけで、どういうSLAで運 
用していくかを明確にしておくことが大事だと感じました 
• 構成や設定については日々悩みながら運用していて、最適値に 
ついても試行錯誤中です 
• ある程度の規模で構築・運用した事例として、参考になれば幸 
いです

More Related Content

What's hot

MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介Tetsutaro Watanabe
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)NTT DATA Technology & Innovation
 
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#135ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13Uptime Technologies LLC (JP)
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!Etsuji Nakai
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...NTT DATA Technology & Innovation
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo!デベロッパーネットワーク
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316Nozomi Kurihara
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)Takanori Sejima
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
FlutterでGraphQLを扱う
FlutterでGraphQLを扱うFlutterでGraphQLを扱う
FlutterでGraphQLを扱うIgaHironobu
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 

What's hot (20)

MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
がっつりMongoDB事例紹介
がっつりMongoDB事例紹介がっつりMongoDB事例紹介
がっつりMongoDB事例紹介
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#135ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
Yahoo! JAPANのコンテンツプラットフォームを支えるSpring Cloud Streamによるマイクロサービスアーキテクチャ #jsug #sf_52
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
FlutterでGraphQLを扱う
FlutterでGraphQLを扱うFlutterでGraphQLを扱う
FlutterでGraphQLを扱う
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 

Viewers also liked

検索のダウンタイム0でバックアップからindexをリストアする方法
検索のダウンタイム0でバックアップからindexをリストアする方法検索のダウンタイム0でバックアップからindexをリストアする方法
検索のダウンタイム0でバックアップからindexをリストアする方法kbigwheel
 
elasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたelasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたfurandon_pig
 
ElasticSearchでいろいろやってる話
ElasticSearchでいろいろやってる話ElasticSearchでいろいろやってる話
ElasticSearchでいろいろやってる話Shinya Takara
 
elasticsearchプラグイン入門
elasticsearchプラグイン入門elasticsearchプラグイン入門
elasticsearchプラグイン入門Shinsuke Sugaya
 
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015Shunsuke Kozawa
 
Elasticsearchを用いたはてなブックマークのトピック生成
Elasticsearchを用いたはてなブックマークのトピック生成Elasticsearchを用いたはてなブックマークのトピック生成
Elasticsearchを用いたはてなブックマークのトピック生成Shunsuke Kozawa
 
はてなブックマークに基づく関連記事レコメンドエンジンの開発
はてなブックマークに基づく関連記事レコメンドエンジンの開発はてなブックマークに基づく関連記事レコメンドエンジンの開発
はてなブックマークに基づく関連記事レコメンドエンジンの開発Shunsuke Kozawa
 
DSP基礎講座(フリークアウト 佐藤裕介氏)|マナビトオンライン
DSP基礎講座(フリークアウト 佐藤裕介氏)|マナビトオンラインDSP基礎講座(フリークアウト 佐藤裕介氏)|マナビトオンライン
DSP基礎講座(フリークアウト 佐藤裕介氏)|マナビトオンラインTATEITO株式会社
 
株式会社サイバーエージェント アドテクスタジオの技術と開発
株式会社サイバーエージェント アドテクスタジオの技術と開発株式会社サイバーエージェント アドテクスタジオの技術と開発
株式会社サイバーエージェント アドテクスタジオの技術と開発Naoyuki Yamada
 
Ad tech 勉強会 20140115
Ad tech 勉強会 20140115Ad tech 勉強会 20140115
Ad tech 勉強会 20140115ajiyoshi
 
[db tech showcase OSS 2017] A22: NoSQL:誰のための、何のためのデータベース?その将来は?by Aerospike, ...
[db tech showcase OSS 2017] A22: NoSQL:誰のための、何のためのデータベース?その将来は?by Aerospike, ...[db tech showcase OSS 2017] A22: NoSQL:誰のための、何のためのデータベース?その将来は?by Aerospike, ...
[db tech showcase OSS 2017] A22: NoSQL:誰のための、何のためのデータベース?その将来は?by Aerospike, ...Insight Technology, Inc.
 
ScalaでDSP作ってみた
ScalaでDSP作ってみたScalaでDSP作ってみた
ScalaでDSP作ってみたJiro Hiraiwa
 
AdTech Scala Meetup 7 spray-can
AdTech Scala Meetup 7 spray-canAdTech Scala Meetup 7 spray-can
AdTech Scala Meetup 7 spray-canShuya Tsukamoto
 
アドテクな話
アドテクな話アドテクな話
アドテクな話Jun Ichikawa
 
モバイルサイト配信と広告の課題
モバイルサイト配信と広告の課題モバイルサイト配信と広告の課題
モバイルサイト配信と広告の課題Yoichiro Takehora
 
Adtech2013 audiencemerger
Adtech2013 audiencemergerAdtech2013 audiencemerger
Adtech2013 audiencemergerRyoji Yanashima
 
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題Yasushi Hara
 

Viewers also liked (20)

検索のダウンタイム0でバックアップからindexをリストアする方法
検索のダウンタイム0でバックアップからindexをリストアする方法検索のダウンタイム0でバックアップからindexをリストアする方法
検索のダウンタイム0でバックアップからindexをリストアする方法
 
elasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたelasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみた
 
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjpElasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
 
ElasticSearchでいろいろやってる話
ElasticSearchでいろいろやってる話ElasticSearchでいろいろやってる話
ElasticSearchでいろいろやってる話
 
elasticsearchプラグイン入門
elasticsearchプラグイン入門elasticsearchプラグイン入門
elasticsearchプラグイン入門
 
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015
 
Elasticsearchを用いたはてなブックマークのトピック生成
Elasticsearchを用いたはてなブックマークのトピック生成Elasticsearchを用いたはてなブックマークのトピック生成
Elasticsearchを用いたはてなブックマークのトピック生成
 
はてなブックマークに基づく関連記事レコメンドエンジンの開発
はてなブックマークに基づく関連記事レコメンドエンジンの開発はてなブックマークに基づく関連記事レコメンドエンジンの開発
はてなブックマークに基づく関連記事レコメンドエンジンの開発
 
DSP基礎講座(フリークアウト 佐藤裕介氏)|マナビトオンライン
DSP基礎講座(フリークアウト 佐藤裕介氏)|マナビトオンラインDSP基礎講座(フリークアウト 佐藤裕介氏)|マナビトオンライン
DSP基礎講座(フリークアウト 佐藤裕介氏)|マナビトオンライン
 
ネット広告のシステム関連の話
ネット広告のシステム関連の話ネット広告のシステム関連の話
ネット広告のシステム関連の話
 
株式会社サイバーエージェント アドテクスタジオの技術と開発
株式会社サイバーエージェント アドテクスタジオの技術と開発株式会社サイバーエージェント アドテクスタジオの技術と開発
株式会社サイバーエージェント アドテクスタジオの技術と開発
 
Ad tech 勉強会 20140115
Ad tech 勉強会 20140115Ad tech 勉強会 20140115
Ad tech 勉強会 20140115
 
[db tech showcase OSS 2017] A22: NoSQL:誰のための、何のためのデータベース?その将来は?by Aerospike, ...
[db tech showcase OSS 2017] A22: NoSQL:誰のための、何のためのデータベース?その将来は?by Aerospike, ...[db tech showcase OSS 2017] A22: NoSQL:誰のための、何のためのデータベース?その将来は?by Aerospike, ...
[db tech showcase OSS 2017] A22: NoSQL:誰のための、何のためのデータベース?その将来は?by Aerospike, ...
 
ScalaでDSP作ってみた
ScalaでDSP作ってみたScalaでDSP作ってみた
ScalaでDSP作ってみた
 
AdTech Scala Meetup 7 spray-can
AdTech Scala Meetup 7 spray-canAdTech Scala Meetup 7 spray-can
AdTech Scala Meetup 7 spray-can
 
アドテクな話
アドテクな話アドテクな話
アドテクな話
 
モバイルサイト配信と広告の課題
モバイルサイト配信と広告の課題モバイルサイト配信と広告の課題
モバイルサイト配信と広告の課題
 
Adtech2013 audiencemerger
Adtech2013 audiencemergerAdtech2013 audiencemerger
Adtech2013 audiencemerger
 
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
Elasticsearchと科学技術ビッグデータが切り拓く日本の知の俯瞰と発見 前半(15分): SPIAS のご紹介と主な課題
 
広告の最適化
広告の最適化広告の最適化
広告の最適化
 

Similar to ElasticSearch勉強会 第6回

Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類Shuzo Kashihara
 
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所真吾 吉田
 
データ分析で Excel を活用しよう
データ分析で Excel を活用しようデータ分析で Excel を活用しよう
データ分析で Excel を活用しようTsuyoshi Kitagawa
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングYosuke Mizutani
 
.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデートTomomitsuKusaba
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理keki3
 
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓Insight Technology, Inc.
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナーTakahiro Iwase
 
Cloud DatalabとBigQueryを使ったアドホックデータ解析
Cloud DatalabとBigQueryを使ったアドホックデータ解析Cloud DatalabとBigQueryを使ったアドホックデータ解析
Cloud DatalabとBigQueryを使ったアドホックデータ解析hagino 3000
 
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装Satoshi Nagayasu
 
わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料Shinichiro Isago
 
わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料guest628c07
 
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用Tatsuro Hisamori
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネスMie Mori
 
メディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearchメディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearchYasuhiro Murata
 
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)Developers Summit
 
Toxic comment classification
Toxic comment classificationToxic comment classification
Toxic comment classificationNasuka Sumino
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展Recruit Technologies
 

Similar to ElasticSearch勉強会 第6回 (20)

Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類
 
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
 
データ分析で Excel を活用しよう
データ分析で Excel を活用しようデータ分析で Excel を活用しよう
データ分析で Excel を活用しよう
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート.NET 6の期待の新機能とアップデート
.NET 6の期待の新機能とアップデート
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
 
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
 
BPStudy20121221
BPStudy20121221BPStudy20121221
BPStudy20121221
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
Cloud DatalabとBigQueryを使ったアドホックデータ解析
Cloud DatalabとBigQueryを使ったアドホックデータ解析Cloud DatalabとBigQueryを使ったアドホックデータ解析
Cloud DatalabとBigQueryを使ったアドホックデータ解析
 
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
 
わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料
 
わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料わんくま東京勉強会#46 Azureセッション資料
わんくま東京勉強会#46 Azureセッション資料
 
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
平均レスポンスタイム50msをPerlで捌く中規模サービスの実装/運用
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネス
 
Angularreflex20141210
Angularreflex20141210Angularreflex20141210
Angularreflex20141210
 
メディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearchメディアコンテンツ向け記事検索DBとして使うElasticsearch
メディアコンテンツ向け記事検索DBとして使うElasticsearch
 
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【A4】コード品質は曖昧なままか(安竹由起夫氏)
 
Toxic comment classification
Toxic comment classificationToxic comment classification
Toxic comment classification
 
ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展ビッグデータ&データマネジメント展
ビッグデータ&データマネジメント展
 

More from Naoyuki Yamada

KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢Naoyuki Yamada
 
いわき情報技術研究会20170513
いわき情報技術研究会20170513いわき情報技術研究会20170513
いわき情報技術研究会20170513Naoyuki Yamada
 
浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ
浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ
浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみNaoyuki Yamada
 
東北Tech道場郡山20151031
東北Tech道場郡山20151031東北Tech道場郡山20151031
東北Tech道場郡山20151031Naoyuki Yamada
 
AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介
AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介
AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介Naoyuki Yamada
 
Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析
Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析
Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析Naoyuki Yamada
 
CAジャーナルクラブ TAO: Facebook’s Distributed Data Store for the Social Graph
CAジャーナルクラブ TAO: Facebook’s Distributed Data Store for the Social GraphCAジャーナルクラブ TAO: Facebook’s Distributed Data Store for the Social Graph
CAジャーナルクラブ TAO: Facebook’s Distributed Data Store for the Social GraphNaoyuki Yamada
 
Adtech College#7 GitHubを中心とした開発フロー
Adtech College#7 GitHubを中心とした開発フローAdtech College#7 GitHubを中心とした開発フロー
Adtech College#7 GitHubを中心とした開発フローNaoyuki Yamada
 
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale DatasetsCAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale DatasetsNaoyuki Yamada
 
ADTECH COLLEGE #2 近い将来、開発責任者になるあなたへ
ADTECH COLLEGE #2 近い将来、開発責任者になるあなたへADTECH COLLEGE #2 近い将来、開発責任者になるあなたへ
ADTECH COLLEGE #2 近い将来、開発責任者になるあなたへNaoyuki Yamada
 
Functional Programming in Scala Reading #2
Functional Programming in Scala Reading #2Functional Programming in Scala Reading #2
Functional Programming in Scala Reading #2Naoyuki Yamada
 
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまでCode for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまでNaoyuki Yamada
 
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作るJAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作るNaoyuki Yamada
 
社内勉強会:ソーシャルゲームのデータベース設計入門
社内勉強会:ソーシャルゲームのデータベース設計入門社内勉強会:ソーシャルゲームのデータベース設計入門
社内勉強会:ソーシャルゲームのデータベース設計入門Naoyuki Yamada
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
Social Web Japan Vol.3 "Social Application and their support services"
Social Web Japan Vol.3 "Social Application and their support services"Social Web Japan Vol.3 "Social Application and their support services"
Social Web Japan Vol.3 "Social Application and their support services"Naoyuki Yamada
 
ソーシャルアプリ業界を構成する中間サービスたち
ソーシャルアプリ業界を構成する中間サービスたちソーシャルアプリ業界を構成する中間サービスたち
ソーシャルアプリ業界を構成する中間サービスたちNaoyuki Yamada
 

More from Naoyuki Yamada (17)

KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢KubernetesでRedisを使うときの選択肢
KubernetesでRedisを使うときの選択肢
 
いわき情報技術研究会20170513
いわき情報技術研究会20170513いわき情報技術研究会20170513
いわき情報技術研究会20170513
 
浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ
浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ
浪江町タブレットで採用した、 Cordovaで作るHTML5のAndroidアプリのしくみ
 
東北Tech道場郡山20151031
東北Tech道場郡山20151031東北Tech道場郡山20151031
東北Tech道場郡山20151031
 
AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介
AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介
AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介
 
Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析
Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析
Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析
 
CAジャーナルクラブ TAO: Facebook’s Distributed Data Store for the Social Graph
CAジャーナルクラブ TAO: Facebook’s Distributed Data Store for the Social GraphCAジャーナルクラブ TAO: Facebook’s Distributed Data Store for the Social Graph
CAジャーナルクラブ TAO: Facebook’s Distributed Data Store for the Social Graph
 
Adtech College#7 GitHubを中心とした開発フロー
Adtech College#7 GitHubを中心とした開発フローAdtech College#7 GitHubを中心とした開発フロー
Adtech College#7 GitHubを中心とした開発フロー
 
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale DatasetsCAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
 
ADTECH COLLEGE #2 近い将来、開発責任者になるあなたへ
ADTECH COLLEGE #2 近い将来、開発責任者になるあなたへADTECH COLLEGE #2 近い将来、開発責任者になるあなたへ
ADTECH COLLEGE #2 近い将来、開発責任者になるあなたへ
 
Functional Programming in Scala Reading #2
Functional Programming in Scala Reading #2Functional Programming in Scala Reading #2
Functional Programming in Scala Reading #2
 
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまでCode for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
 
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作るJAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
 
社内勉強会:ソーシャルゲームのデータベース設計入門
社内勉強会:ソーシャルゲームのデータベース設計入門社内勉強会:ソーシャルゲームのデータベース設計入門
社内勉強会:ソーシャルゲームのデータベース設計入門
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
Social Web Japan Vol.3 "Social Application and their support services"
Social Web Japan Vol.3 "Social Application and their support services"Social Web Japan Vol.3 "Social Application and their support services"
Social Web Japan Vol.3 "Social Application and their support services"
 
ソーシャルアプリ業界を構成する中間サービスたち
ソーシャルアプリ業界を構成する中間サービスたちソーシャルアプリ業界を構成する中間サービスたち
ソーシャルアプリ業界を構成する中間サービスたち
 

ElasticSearch勉強会 第6回

  • 2. 目次 • 自己紹介 • ディスプレイ広告配信DSP「Smalgo」について • インフラ選定と設計 • データ構造とリアルタイム集計 • 運用開始して分かったこと • トラブルとその対応
  • 3. 自己紹介 • 山田 直行(やまだ なおゆき) Twitter @satully blog.kirishikistudios.com • 株式会社サイバーエージェント アドテクスタジオ エンジニア 2011年入社。前職はソーシャルゲームのエンジニア • 担当分野:DevOps インフラ設計/運用・データ集計/分析・CIなど • AWS認定ソリューションアーキテクト アソシエイト • データの活用について、インフラ構築から分析、実サービスへの適用までを通して できるエンジニアを目指しています
  • 4. ディスプレイ広告配信DSP「Smalgo」について プロダクト概要 • ディスプレイ広告(≒バナー広告)の配信プラットフォーム • 2014年5月から提供(前身となるプロダクトを含めると2014年2月から) • スマートフォン向けがメインだが、PC向け配信も行っている • RTBがメインだが、第三者配信など他の配信方法にも対応 • 成果報酬型課金が特徴
  • 6. インフラ選定と設計 DSPの配信~集計の全体像 様々なログを集計し、そのデータを使って配信、の繰り返し メメデディィアアメメデディィアアメディア Bid/Ad サーバー Impression サーバー Click サーバー アドネットワーク またはSSP Conversion サーバー Mark サーバー Fluentd ElasticSearch クラスタ MySQL Redis S3
  • 7. インフラ選定と設計 データインフラとして何を使うか? 機能要件 • 柔軟なスキーマ ログのデータ構造は機能追加に伴って変化していく。キャンペーンやクリエイティブの情報の他、広 告枠の情報やレスポンスタイムなどをまず含め、それ以降のデータ拡張にも対応したい ネストしたデータ形式を扱えるようなドキュメントDBを検討した • 小さく始められ、かつスケールアウトが容易であること 当初は10億req/monthからスタート。そこから2000億req/monthまでスケールアウトできること がいったんの目標。できればスケールアウトを無停止で行いたい • リアルタイムとバッチでの両方の分析ができること リアルタイムにデータを集計できると、クリックやコンバージョンのテスト、レスポンスタイムのモ ニタリング、リアルタイムのターゲティングが可能になる。ログが吐かれて数秒以内にはデータを利 用可能にしたい。それと同時に、任意のデータ列を軸にした集計処理にも活用したい
  • 8. インフラ選定と設計 ElasticSearchを採用 • 前ページの要件を全て満たしていた • Kibanaの存在が採用を後押しした。データの分析・可視化ツールを独自に開発する よりも、良い選択肢だと考えた • 当初は、全件データサービスとしての利用を主目的として考えていた。これまでは広 告運用者は「集計されたデータ」を扱うことは多くても、「生の配信データ」にアク セスするには一手間かかっており、これを直接検索できるようにして分析や調査に利 用できるようにしたいという狙いがあった • ただし、ElasticSearchの”何でもできる感”と、急激なプロダクトの拡大と機能追加 により、ElasticSearchを広告配信のためのバッチ集計にも利用していくことになる • 多くの要件を一度に満たせる夢のデータベースなんてあるの? →運用には苦労することに
  • 9. インフラ選定と設計 ElasticSearchクラスタの2014年7月ごろの構成 Fluentd ElasticSearch Search Nodes ElasticSearch Coordinate Nodes ElasticSearch Search Nodes ElasticSearch Coordinate Nodes master: false data: false 2ノード r3.large ElasticSearch Data Nodes ElasticSearch Data Nodes ElasticSearch Data Nodes master: true data: false 2ノード r3.large ElasticSearch Data Nodes ElasticSearch Data Nodes バッチ サーバー Kibana REST Client ELB ELB master: false data: true 28ノード 12シャード & 1レプリカ r3.xlarge/1GB SSD バッチは1時間に1回 その中で数回のaggregationクエリ KibanaやRESTクライアントは 任意のタイミングで使われる fluentd(td-agent)は10ノード 5ノードがBidログ用 3ノードがそれ以外のログ用 2ノードがアクティブスタンバイ ! 月間ログ数400億行 ピーク時秒間30000writes
  • 10. データ構造とリアルタイム集計 Bid RequestからConversionまでをデータ格納時にひもづける • DSPのログは、Bid Request - Bid Response- WinNotice - Impression - Click - Conversionといった種類があり、これらのどの ログとどのログが対応しているかをひもづけていく必要がある Bid Request/Response (bidした) (bidしなかった) Impression Win Notice Click Conversion • Bid Requestログは最も多量であり、 そこからBidしたものの中からオーク ションに勝利したものがインプレッショ ンとなり、そこからクリックされたも の、コンバージョンしたもの、という 具合で減少していく
  • 11. データ構造とリアルタイム集計 インデックスとデータスキーマ { "_index": "deliver-2014.09.15", "_type": "unite", "_id": "T4xi1p67y6l6gk2bnsf0oib5g6", "_score": 1, "_source": { "bid": { "time": "2014/09/15 20:41:40", "host": "bid16", ... }, "wn": { ... }, "imp": { ... }, "click": { ... }, "cv": { ... } } } • インデックスは1日ごとに1個切る。 ただしbidしたものとbidしていないも のを別インデックスとした(集計時に どちらかしか見ないことが多いため) つまり1日あたり2つのインデックス が作られる • データは右図のように、ひもづいたロ グを1つのドキュメントに格納するデー タ形式を取る。そのためにデータ更新 時に1回search queryを投げ、ひもづ くドキュメントにappendする処理に した(fluentdのpluginを書いてその中 で処理)
  • 12. 運用開始して分かったこと クラスタデータベース + リアルタイム集計ならではの問題 • 新しい配信の機能をElasticSearchを使って実現することで、リリースをどんどん していくことができた • Kibanaが活用され、多くのダッシュボードが作られた。それらはリアルタイムのモ ニタリングや配信ログの調査に効果を発揮した • ただし、Kibanaの利用のされ方が読めず、重いクエリが流れてKibanaがクラスタ に負荷をかけることが頻繁にあった • ピーク時に書き込みが間に合わず、データ格納が遅延することが多くあった • 別データベースでバッチ処理でやっている集計との間で集計結果に微妙なズレが生 じて、一致させることが困難だった • シャードの再配置中には負荷が高まり、それを静めるのに苦労した
  • 13. 運用開始して分かったこと どういう設定が最適か、を事前に見極めるのが難しい • インデックスとドキュメントの設計は非常に大切 当初はbidしたログとbidしていないログが1つのインデックス内にあり、負荷が非常に高 かったが、分割したことでかなり負荷が下がった ドキュメントの設計は最適だったのかどうかは今でも悩むところ • シャード数をいくつにするか 4 -> 8 -> 12と増やしてきた 増やしすぎることで運用が難しくなるのではないかという懸念があって増やすのに慎重だっ たが、もっと多くても良いかもしれない。1ノードあたりに同一インデックスは1シャード までという構成をとったが、そうする必然性はない • production環境でないと分からないことが多い development環境、staging環境はあったが、構成の確認はできても負荷チューニングは できず。本番で実際適用してみて分かることが多かった。負荷試験の環境をもっとうまく 作れたらよかった
  • 14. トラブルとその対応 バージョンアップ & SSDへの変更が大きかった • バージョンアップでかなり安定した 当初はver1.0.2でサービスイン。Out of memoryでノードが反応しなくなる問題に悩まされた。 ver1.2.3にしてからかなり安定。 • データドライブのEBSをSSDに変更して高速化 Amazon Web Services ブログ: 【AWS発表】新しいSSDベースのElastic Block Storage http://aws.typepad.com/aws_japan/2014/06/new-ssd-backed-elastic-block-storage.html このリリースで、EBSを全てSSDに入れ替えたところ、書き込みのスループットが改善 • 検索処理のキャッシュ化 当初はデータノードにc3.2xlarge(8CPU 16GB)を利用していた。データ格納時の事前検索で多量の CPUを使っていたためだが、ElastiCacheを使ってひもづくデータのキーをキャッシュすることに よりCPU使用率を大幅に下げて、メモリ重視のインスタンス(r3.xlarge(4CPU, 30GB))にすること により検索が高速化し、パフォーマンスが安定した
  • 15. トラブルとその対応 運用ツール • ElasticSearch Head http://mobz.github.io/elasticsearch-head/ シャードの状況把握にはこれ • bigdesk for elasticsearch http://bigdesk.org/ 細かな負荷監視に利用 • ElasticHQ - ElasticSearch monitoring and management application. http://www.elastichq.org/ 全体の俯瞰とチューニング箇所の特定に利用 • Homepage of Zabbix :: An Enterprise-Class Open Source Distributed Monitoring Solution http://www.zabbix.com/ 全般的な死活監視と、Fluendからの書き込みの監視
  • 16. トラブルとその対応 Fluentdのチューニング • FluentdでElasticSearchに書き込むのと同じデータをS3にも 保存しておき、S3のデータから復旧するスクリプトを用意 • ElasticSearch自体が持つバックアップ機能は非使用 • Fluentd(td-agent)のパラメータをチューニングして最適値を 探した <match es.app.bid> flush_interval 1s buffer_type file buffer_chunk_limit 8m buffer_queue_limit 10000 retry_limit 5 </match>
  • 17. トラブルとその対応 elasticsearch.ymlの設定値 • 正直なところ、最適な値がいくつかは今でもわかっていない。 その都度試行錯誤している • オンラインで変更可能なものと、再起動が必要なものがある • いろいろなウェブサイトを参考に設定値を変えて試してみたが、 大きなパフォーマンスアップは見られず、デフォルトに近いパ ラメータで運用している index.number_of_shards: 12 index.number_of_replicas: 1 indices.fielddata.cache.size: 50% script.disable_dynamic: false bootstrap.mlockall: true
  • 18. トラブルとその対応 基本の確認コマンド • クラスタの設定を確認 curl -XGET localhost:9200/_cluster/settings?pretty • クラスタの設定を確認 curl -XGET localhost:9200/_cluster/health?pretty • シャードの配置状況を確認 curl -XGET localhost:9200/_cat/shards 2>/dev/null
  • 19. トラブルとその対応 ノードの入れ替え • ノードをグレードアップするときには、新しいインスタンスを 同数用意して、全部入れ替える手法を取った バージョンアップ時やインスタンスタイプを変えたときなど。例えば16台のデー タノード運用していたときは、同数の16の新しいデータノードを用意し、合わ せて32台にして、そこからcluster.routing.allocation.exclude._nameを使って 古いノードから新しいノードにシャードを移動させ、全部移動し終わったら古 いノードを全て止めて削除する、というようにした。新しい構成で何か問題が 発生した際に、戻すということを可能にするため。 curl -XPUT localhost:9200/_cluster/settings -d '{ "transient" : { "cluster.routing.allocation.exclude._name" : “logananlytics-data10,loganalytics-data11“ } }'
  • 20. トラブルとその対応 特定のノードにシャードが固まっているときに移動をさせる • あるノードが落ちたときなど、特定のノードにシャードが固 まっていて負荷になっていたときは、手動で再配置をかけて対 応したことも curl -XPOST 'localhost:9200/_cluster/reroute' -d '{ "commands" : [ { "move" : { "index" : "deliver-nobid-2014.06.23", "shard" : 1, "from_node" : "loganalytics-data38", "to_node" : "loganalytics-data37" } } ] }'
  • 21. トラブルとその対応 unassignedのシャードをノードに割り振る • たまにunassignedになったままのシャードがあるので、自動 での割り当てを待たずにRESTで割り当てノードを指定 curl -XPOST 'localhost:9200/_cluster/reroute' -d '{ "commands" : [ { "allocate" : { "index" : "deliver-2014.06.29", "shard" : 4, "node": "loganalytics-data25", "allow_primary": true } } ] }'
  • 22. トラブルとその対応 initializingのままのシャードをキャンセル • 原因不明だが、initializingのままずっとスタックしている シャードがあった。そのときはシャードをキャンセル curl -XPOST 'localhost:9200/_cluster/reroute' -d '{ "commands" : [ { "cancel" : { "index" : "deliver-2014.07.03", "shard" : 2, "node" : "loganalytics-data24" } } ] }'
  • 23. トラブルとその対応 同時に再配置を行う数をコントロール • 時間帯をみて、再配置を行う数を変更して負荷を調整 Excludeしたノードから一気に引っ越しさせるときもこれ curl -XPUT localhost:9200/_cluster/settings -d '{ "transient" : { "cluster.routing.allocation.cluster_concurrent_rebalance" : 8 } }'
  • 24. まとめ • データインフラにElasticSearchを採用した経緯とメリット・ デメリットについて話しました • システム全体の中で、どういう位置づけで、どういうSLAで運 用していくかを明確にしておくことが大事だと感じました • 構成や設定については日々悩みながら運用していて、最適値に ついても試行錯誤中です • ある程度の規模で構築・運用した事例として、参考になれば幸 いです