36
Use Cases of Elasticsearch AND Considerations in Multi-tenancy 2016-09-14 eurie Inc. Takahiro Ikeuchi

eurie の Elasticsearch 活用事例とマルチテナント利用時の設計あれこれ

  • 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

3

Conclusionマルチテナント利用においては認可/認証を サーバーサイドアプリケーションに委ねるとよい

厳密な同期が必要ない場合、 AWS Lambda を利用した非同期更新が検討できる

REST API のバックエンドに配置し Interface 統一のための wrapper logic を実装するとよい

VPC 対応までは Amazon ES よりも Self Manage がおすすめ (用途による)

4

About us and our product

5

君の名は。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

7

A Customer Support Tool for Innovative Teams

8

ArchitecturesRESTful API

Go lang (framework: echo)

Single Page Application

React.js + Typescript

Elasticsearch

Cloud Native

AWS Aurora, Lambda, CloudFront, WAF...

Microservice Architecture

9

Now in Private Beta!!

https://eurie.io

10

Our use cases of Elasticsearch

11

Searching Message

12

13

Why Elasticsearch ?

14

Why Elasticsearch?全文検索

形態素解析

ハイパフォーマンス / スケーラブル

重み付け検索やさまざまなソート、絞り込み

類似文書の提示

REST API, 豊富な Client Library

15

Architecture

16

Architecture

17

GET docs from Elasticsearch

18

検索の流れ

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

GET docs from Elasticsearch

20

API 設計

21

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

Combination with RDB

24

RDB との併用における検討事項

Elasticsearch のみで構成できないか?

厳密な同期は必要か?

更新、削除は頻繁に行われるか?

eurie Desk では...

データは RDB (Amazon Aurora) に保存

RDB への登録時に非同期で Elasticsearch へ登録

(現状は)更新と削除がないポイントで利用している

25

POST docs to RDB

26

PUT docs to Elasticsearch (Async)

27

Considerations in Multi-tenancy

28

マルチテナント【Software Multi-tenancy】

単一 (とみなせる) アプリケーション (群) に 複数の契約者が同居するタイプのサービスモデル

29

マルチテナントサービスでの採用

Issues

権限を持つユーザーのみ参照したい

アカウントをまたいで参照できてはいけない

Solutions

Elasticsearch を Internal network に配置

認証/認可は Web API で行う

アカウントごとに Index を作成

30

RDB and ES instances boot in the Private Network

31

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