Upload
-
View
2.077
Download
3
Embed Size (px)
Citation preview
Use Cases of Elasticsearch AND
Considerations in Multi-tenancy
2016-09-14
eurie Inc. Takahiro Ikeuchi
AgendaAbout us and our product
Our use cases of Elasticsearch
Combination with RDB
Considerations in Multi-tenancy
How do we search private documents ?
Self-Manage vs Amazon ES
2
Conclusionマルチテナント利用においては認可/認証を サーバーサイドアプリケーションに委ねるとよい
厳密な同期が必要ない場合、 AWS Lambda を利用した非同期更新が検討できる
REST API のバックエンドに配置し Interface 統一のための wrapper logic を実装するとよい
VPC 対応までは Amazon ES よりも Self Manage がおすすめ (用途による)
4
君の名は。Takahiro Ikeuchi @iktakahiro
Company / Community
eurie Inc. Founder & CEO
SQUEEZE Inc. Tech Adviser
PyData.Tokyo Organizer
Specialties (or just a dabbler :-D
Go lang, Python, React.js, TypeScript
Cloud Infrastructure, UI Design etc...
6
ArchitecturesRESTful API
Go lang (framework: echo)
Single Page Application
React.js + Typescript
Elasticsearch
Cloud Native
AWS Aurora, Lambda, CloudFront, WAF...
Microservice Architecture
9
Why Elasticsearch?全文検索
形態素解析
ハイパフォーマンス / スケーラブル
重み付け検索やさまざまなソート、絞り込み
類似文書の提示
REST API, 豊富な Client Library
15
検索の流れ
1. Web App からキーワードを入力 API へ GET Request
2. Web API が Request を受けとる 2-1. 認証 認可
3. Elasticsearch へ Request
4. Elasticsearch から検索結果を受け取る
5. Response Header / Body を作成し返却
6. Web App が Response を受けとり UI を構築
19
API 設計GET /meesage/search?q=word&page=1&per_page=10
Response Body
{ "took": 36, "_scroll_id": "", "hits": { "total": 1,
Elasticsearch の Response をそのまま返却
22
API 設計Response Header
Link:
Elasticsearch の total などの値から Response Header : Link を生成
RFC 5988 - Web Linkinghttps://tools.ietf.org/html/rfc5988
</messages/search?q=gmail&page=1&per_page=10>; rel="first",</messages/search?q=gmail&page=2&per_page=10>; rel="next", </messages/search?q=gmail&page=2&per_page=10>; rel="last"
23
RDB との併用における検討事項
Elasticsearch のみで構成できないか?
厳密な同期は必要か?
更新、削除は頻繁に行われるか?
eurie Desk では...
データは RDB (Amazon Aurora) に保存
RDB への登録時に非同期で Elasticsearch へ登録
(現状は)更新と削除がないポイントで利用している
25
マルチテナントサービスでの採用
Issues
権限を持つユーザーのみ参照したい
アカウントをまたいで参照できてはいけない
Solutions
Elasticsearch を Internal network に配置
認証/認可は Web API で行う
アカウントごとに Index を作成
30
Amazon ES Pros/Cons
Amazon ES = Amazon Elasticsearch Service
https://aws.amazon.com/elasticsearch-service/
Pros
HA構成を含めた構築が非常に容易
Kuromoji プラグインがバンドルされており 最低限の利用がすぐにできる
32
Amazon ES Pros/Cons
Cons
Global 領域にしか配置できない
IP 制限可/ただし Secuirty Groups の制限不可
(IAM と連係した権限の管理は可能)
最新バージョンへの追従スピードの懸念
(2.3 系は導入可。5.0 にすぐ対応する??)
Plug-in の自由な導入ができない
33
Self-Manage vs Amazon ES
パブリックドキュメントへ気軽に検索サービスを導入したいなら Amazon ES の利用を検討
とにかく簡単に構築できる
プライベートドキュメントの場合 Self-Manage し Internal に配置すると捗る
RDB と同じレイヤととらえる
Amazon ES が VPC 対応した場合は切替を 検討できるはず
34
Conclusionマルチテナント利用においては認可/認証を サーバーサイドアプリケーションに委ねるとよい
厳密な同期が必要ない場合、 AWS Lambda を利用した非同期更新が検討できる
REST API のバックエンドに配置し Interface 統一のための wrapper logic を実装するとよい
VPC 対応までは Amazon ES よりも Self Manage がおすすめ (用途による)
35
AppendixElasticsearch o�cial site
Elasticsearch client library for Go lang:olivere/elastic
eurie.io
36