Contenu connexe Similaire à Vespa 機能紹介 #yjmu (20) Plus de Yahoo!デベロッパーネットワーク (20) Vespa 機能紹介 #yjmu6. チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
5
• Vespaはrpmパッケージ or Dockerイメージとして提供
• 他と同じように全ノードに同じものをインストールすればよい
• Solrだけ別途ZooKeeperが必要 (bundle版もあるけど非推奨)
インストール方法
Vespa Solr Elasticsearch
提供方法 rpm, docker tgz, docker tgz, rpm, deb,
msi, docker
必要な
パッケージ
vespa solr
zookeeper
elasticsearch
10. チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
9
• Vespaはコンポーネント毎に実装が大きく違います
• フロントエンド側はJava、バックエンド側はC++
• コード量が非常に多いのもこの辺が起因してそう
• コア実装を拡張するのは至難の業 (Javaプラグインは楽)
Vespaの構成 (cont’d)
グループ コンポーネント 実装 役割
admin
Config Server Java 設定ファイルの管理 (ZooKeeperもどき)
Admin Server Java クラスタの状態管理、ログの収集
container
Query/Rewrite Server Java 検索リクエスト・レスポンスの加工
Document Processor Java 更新ドキュメントの加工
content
Distributor C++ ドキュメント分散のメタ情報管理、分散制御
Search Node C++ インデックス管理、検索・ランキングの実行
※実際はもっと細かいプロセスに分かれます
12. チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
11
• Vespaも基本型はSolr/Elasticsearchとほぼ同じ
• Vespaでは多次元を扱う型が強い
フィールド定義
フィールド型 中身
string 文字列型 (トークナイズの有無は別途指定)
integer 32-bit 整数の数値型
long 64-bit 整数の数値型
byte 8-bit 整数の数値型
float 単精度浮動小数点型
double 倍精度浮動小数点型
raw バイナリ型
array<element-type> 配列型、element-typeで要素の型を指定
weightedset<element-type> 辞書型、element-typeでキーの型を指定、値はinteger
tensor(dimention-1, ...) テンソル型、dimention-1, ...で次元を指定
16. チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
15
• 更新した内容が検索可能になるまでの時間はVespaの方が速い
• Vespa : 更新リクエストが完了した時点
• Solr/Elasticsearch : soft commitの間隔に依存
• soft commitの間隔と検索性能がトレードオフの関係
リアルタイム性
tlog…
segments
memory
index
disk
index
tlog
soft commit実行時に
更新差分がvisibleになる
更新リクエストが完了
した時点でvisibleになる
18. チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
17
• よくある検索はVespaも網羅
• Solr/Elasticsearchと大差なし
検索
検索内容 クエリ
defaultフィールドに対して “foo” を検索 query=foo
titleフィールドに対して “foo” を検索 (フィールド指定検索) query=title:foo
“foo” かつ “bar” を含むものを検索 (AND検索) query=foo bar
“foo” もしくは “bar” を含むものを検索 (OR検索) query=(foo bar)
“foo” を含むが “bar” を含まないものを検索 (NOT検索) query=foo -bar
“foo bar” というフレーズを検索 (フレーズ検索) query="foo bar"
1000<=price<=10000 なものを検索 (範囲検索) query=price:[1000;10000]
“foo” に150%の重みを付与して検索 (重み付き検索) query=foo!150 bar
20. チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
19
• Vespaでは集約はDSLを用いて表現
• ex) 各ジャンルから1件ずつドキュメントを取得
Vespaと集約
select=
all(
group(genres)
each(
max(1)
each(
output(summary())
)
)
)
...
“children”: [
{“id”: “grouplist:genres”,
“children”: [
{“id”: group:string:Elasticsearch,
”children”: [ document ]},
{“id”: group:string:Java,
”children”: [ document ]},
{“id”: group:string:Python,
”children”: [ document ]},
...
]
]
...
21. チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
20
• DSLではどのグループになにをするかを再帰的に定義
• ネストしていくことで多段の集約が実行可能
Vespaと集約 (cont’d)
…
Elasticsearch Java Python
…
…
…
select=
all(
group(genres)
each(
max(1)
each(
output(summary())
)
)
)
検索結果全体を
genresでグループ分け
各グループの中から
最大1件を取得
グループ内の各ドキュメント
について内容を出力
後述のランキング
で各グループをソート
24. チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
23
• フィールド自体に条件式を埋め込む検索
• クエリの属性情報を元に対象文書をフィルタリング
• 各ドキュメントが個別に条件式を持つところがポイント
• ex) 広告配信での対象ユーザ指定とか
Predicateフィールド
gender=male
age=31
docid gender age
1 female 20 <= age < 40
2 male OR female 30 <= age <= 39
3 male 25 <= age < 35
…
文書側に埋め込まれた
条件式を元に絞り込む
35. チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
34
• Vespaでは所属ホストを設定ファイルで管理
• 設定ファイルを修正・デプロイするだけでノードの増減が可能
• 必要なデータ分散なども自動で実行されます
クラスタの管理
Vespaクラスタ
admin
container
content
設定ファイル
プラグイン
モデル
最新設定のアップロードと反映
# vespa-deploy prepare CONFIG
# vespa-deploy activate
新しいcontentノード群
の中でリバランシング
最新の設定の基づき
クラスタ構成を更新