Slide 1

Slide 1 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB  Internals -‐‑‒    詳細InfluxDB  -‐‑‒ Gree,  Inc. Shuhei  Tanuma ఱԼҰInfluxDBษڧձ 27, June, 14

Slide 2

Slide 2 text

Copyright © GREE, Inc. All Rights Reserved. 免責事項 •  2014年年6⽉月時点(v0.7系)の情報なので今後⾊色々 変わることがあります •  流流⽯石に全部調べきれてないので間違ってることも あるのでその際はマサカリお待ちしてます! •  ⻑⾧長くなっちゃったんで⾊色々端折るんで興味ある⽅方 はあとでupされる資料料をご確認ください

Slide 3

Slide 3 text

Copyright © GREE, Inc. All Rights Reserved. •  API •  AdminUI •  Coordinator •  Shards •  Query  Engine •  Write  ahead  log  /  Writer  Buffer •  開発の⼿手引 •  アプリケーションの実例例 Agenda 3

Slide 4

Slide 4 text

Copyright © GREE, Inc. All Rights Reserved. About  Me chobi_e (Shuhei Tanuma) GREE, inc. Infrastructure Department Service Reliability Team Major: PHP(core), MySQL, KVS PECL Maintainer (ProtocolBuffers, Sundown. and several experimental extensions) 最近フリー素材化されたけどふとましい https://github.com/blog/1854-‐‑‒octotales-‐‑‒gree

Slide 5

Slide 5 text

Copyright © GREE, Inc. All Rights Reserved. •  Goで書かれたアプリケーション •  時系列列データに特化した構造で簡単に扱える •  Clustering構成でスケールアウトできる InfluxDBの特徴 5

Slide 6

Slide 6 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB  Internals Query Engine WAL Shards Coordinator API Endpoint Admin UI Shards Shards Database leveldb, hyperleveldb, rocksdb, mdb http, graphite, udp...

Slide 7

Slide 7 text

API

Slide 8

Slide 8 text

Copyright © GREE, Inc. All Rights Reserved. APIの基本 Coordinatorの機能を外部へ提供する Coordinator Insert Query API HTTP Graphite UDP... 8

Slide 9

Slide 9 text

Copyright © GREE, Inc. All Rights Reserved. HTTP  API InfluxDB MainのProtocol •  HTTP+json簡単に使えるプロトコル •  HTML5  Applicationとの親和性が⾼高く、クライアントライ ブラリの作成も簡単 InfluxDBのHTTP  APIを使ったGrafana 9

Slide 10

Slide 10 text

Copyright © GREE, Inc. All Rights Reserved. HTTP  API ■データの挿⼊入 curl -X POST -d \ '[{"name":"foo", \ "columns":["val"],\ "points":[[23]]\ }]' \ 'http://localhost:8086/db/mydb/series? u=root&p=root'

Slide 11

Slide 11 text

Copyright © GREE, Inc. All Rights Reserved. HTTP  API ■データベースの作成 curl -X POST –d \ '{"name": "access"}’ \ 'http://localhost:8086/db? u=root&p=root' -d

Slide 12

Slide 12 text

Copyright © GREE, Inc. All Rights Reserved. HTTP  API ■データベースの削除 curl -X DELETE \ 'http://localhost:8086/db/access? u=root&p=root'

Slide 13

Slide 13 text

Copyright © GREE, Inc. All Rights Reserved. HTTP  API ■クエリの実⾏行行 curl -G 'http://localhost:8086/db/mydb/ series?u=root&p=root&pretty=true' \ --data-urlencode \ "q=select * from log_lines limit 1” chunked=trueͰchunked transferͰฦ͢ pretty=trueͰprettify͢Δ

Slide 14

Slide 14 text

Copyright © GREE, Inc. All Rights Reserved. HTTP  API ■結果 [{ "name": "influxdb.macbook.local.mem", "columns": [ "time", "sequence_number", "used" ], "points": [[ 1403619622285, 318690001, 14255144960 ]] }]

Slide 15

Slide 15 text

Copyright © GREE, Inc. All Rights Reserved. UDP  API write専⾨門の軽量量なAPI Endpoint write専⾨門のjson  API。他のプラグインと⽐比べgoroutineの 増加が抑えられるメリットも有る。 type SerializedSeries struct { Name string `json:"name"` Columns []string `json:"columns"` Points [][]interface{} `json:"points"` } [[input_plugins.udp_servers]] enabled = false port = 5551 database = "db1” 15

Slide 16

Slide 16 text

Copyright © GREE, Inc. All Rights Reserved. Graphite  API Graphite向けの代替バックエンド [input_plugins.graphite] enabled = true port = 2003 database = ”graphite” 私Graphite使ってないので詳細みてないけど便便利利な⼈人には すごく便便利利なエンドポイントだと思う ううん、知らないけど絶対そう 16

Slide 17

Slide 17 text

Copyright © GREE, Inc. All Rights Reserved. Mackerel  API Mackerel  Meetupで振る舞われた鯖サンドが美味しかった ので作ってみたAPI  (野良良パッチ) [input_plugins.mackerel] enabled = true port = 4000 database = ”mackerel” https://mackerel.io/ https://github.com/chobie/influxdb/tree/mackerel ./agent  -‐‑‒apibase  =  “http://localhost:4000”  -‐‑‒apikey=“SABA” 等でapibaseを指定すればmackerelのメトリクスをそのままInfluxDBで 収集することも出来ます。その他のAPIは実装してません。

Slide 18

Slide 18 text

Copyright © GREE, Inc. All Rights Reserved. API  まとめ 基本的にAPIのレイヤーはCoordinator  Interfaceへの薄い ラッパーとなっているので実装が簡単。 今後実例例なども増えていくと⾃自分たちのニーズに合ったAPI   Pluginが増えていくのが予想される

Slide 19

Slide 19 text

Admin UI

Slide 20

Slide 20 text

Copyright © GREE, Inc. All Rights Reserved. https://github.com/influxdb/influxdb-‐‑‒admin Middleman,  Angular.js等を使ったhtml5  application. Release版のInfluxDBに同梱されている。 現状ではInfluxDBの管理理と簡易易的なクエリ実⾏行行、Plotが Webから実⾏行行できる Admin  UI Middleman × HTML5のInfluxDB管理理ツール 20

Slide 21

Slide 21 text

Copyright © GREE, Inc. All Rights Reserved. Admin  UI 接続画⾯面 指定したHostの管理理がここから⾏行行える。 ブラウザバックはまだ対応できていないのでついつい⼿手癖で 押さないようにしとくと吉

Slide 22

Slide 22 text

Copyright © GREE, Inc. All Rights Reserved. Plot画⾯面 データ挿⼊入、クエリの実⾏行行、簡易易的なPlotが⾏行行える データ量量が多いとTableの描画が重くブラウザがハングすることもある Admin  UI

Slide 23

Slide 23 text

Copyright © GREE, Inc. All Rights Reserved. Cluster  /  Shards画⾯面 Admin  UI

Slide 24

Slide 24 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDBを操作するのには便便利利だが⾊色々と課題は多い http://influxdb.com/jobs.html Goとfront-‐‑‒endエンジニアを募集中なので今後の発展に期待 Admin  UI  まとめ

Slide 25

Slide 25 text

Coordinator

Slide 26

Slide 26 text

Copyright © GREE, Inc. All Rights Reserved. Coordinator クラスタ間での協調動作やDB操作を扱う InfluxDBのNode間での情報のSyncやレプリケーション、クエリの実⾏行行などを司る 主にConsensusをとる部分(Raft)とCoordinationをする2つのパートから成り⽴立立つ 主要操作はCoordinatorを通して⾏行行われるので重要な部分 •  Consensus Meta  Dataの共有等(Account,  DB情報等) •  Coordination クラスタ間/local処理理の協調動作/Replication等 26

Slide 27

Slide 27 text

Copyright © GREE, Inc. All Rights Reserved. Coordinator  (RAFT) クラスタ間でのメタデータ(User、Permission)の共有 (seeds) RAFT(HTTP) •  Sync  metadata  (User,  Permission,  etc) (node) 27

Slide 28

Slide 28 text

Copyright © GREE, Inc. All Rights Reserved. Coordinator  (RAFT) type ClusterConsensus interface { CreateDatabase(name string) error DropDatabase(name string) error CreateContinuousQuery(db string, query string) error DeleteContinuousQuery(db string, id uint32) error SaveClusterAdminUser(u *ClusterAdmin) error SaveDbUser(user *DbUser) error ChangeDbUserPassword(db, username string, hash []byte) error ChangeDbUserPermissions(db, username, readPermissions, writePermissions string) error AssignCoordinator(coordinator *CoordinatorImpl) error CreateRootUser() error ForceLogCompaction() error }

Slide 29

Slide 29 text

Copyright © GREE, Inc. All Rights Reserved. Coordinator  (TCP  Protobuf) ノード間のデータ転送やクエリ実⾏行行、リモート越しの操作 (seeds) TCP  +  ProtocolBuffers •  replicate  series •  throw  query  /  aggregate  query (node) 29

Slide 30

Slide 30 text

Copyright © GREE, Inc. All Rights Reserved. Coordinator  (TCP  Protobuf) type Coordinator interface { WriteSeriesData(user User, db string, series []*Series) error DropDatabase(user User, db string) error CreateDatabase(user User, db string) error ForceCompaction(user User) error ListDatabases(user User) ([]*Database, error) DeleteContinuousQuery(user User, db string, id uint32) error CreateContinuousQuery(user User, db string, query string) error ListContinuousQueries(user User, db string) ([]*Series, error) RunQuery(user User, db, query string, seriesWriter SeriesWriter) error }

Slide 31

Slide 31 text

Copyright © GREE, Inc. All Rights Reserved. Coordinator  (TCP  Protobuf) message Request { enum Type { WRITE = 1; QUERY = 2; DROP_DATABASE = 3; HEARTBEAT = 7; } optional uint32 id = 1; required Type type = 2; required string database = 3; repeated Series multi_series = 4; optional uint64 sequence_number = 5; optional uint32 shard_id = 6; optional string query = 7; optional string user_name = 8; optional uint32 request_number = 9; optional bool is_db_user = 10; }

Slide 32

Slide 32 text

Shards Clustering

Slide 33

Slide 33 text

Copyright © GREE, Inc. All Rights Reserved. Shards Shards / TimeBucket 期間毎にTimeBucket,  Shardという単位でデータの格納先が分けられてい る (Series)  access TimeBucketの中にShardがいくつも⼊入っているイメージ。 物理理的なShardを分割することでSeek時間の短縮や並列列でのがFetchが容易易 6/30  –  6/20 6/20  –  6/10 6/10  –  6/01 Short  time 3/1  –  5/30 Long  time 33

Slide 34

Slide 34 text

Copyright © GREE, Inc. All Rights Reserved. Shards Shards Configuration (Scaling out) [sharding]      [sharding.short-‐‑‒term]          duration  =  “7d”          split  =  1      [sharding.long-‐‑‒term]          duration  =  “30d”          split  =  1 34

Slide 35

Slide 35 text

Copyright © GREE, Inc. All Rights Reserved. 今後のShardsについて 近いうちに任意のShardやデータの保持期間を設定することがで きるようになる。Continuous Queryと組み合わせることでRRD的 な使い方も簡単になる見込み

Slide 36

Slide 36 text

Copyright © GREE, Inc. All Rights Reserved. Clustering Clustering Configuration •  所謂マスタノードのconfigで[seed-‐‑‒servers]をコメン トアウトする(defaultではコメントアウトされてるは ず) •  別ノードのconfigでseed-‐‑‒servers  =  [“seed-‐‑‒server: 8090”]を指定する master  nodeを⽴立立ち上げた後に別ノードを⽴立立ち上げれば ⾃自動的にクラスタリングができる 36

Slide 37

Slide 37 text

Copyright © GREE, Inc. All Rights Reserved. Clustering Clustering Configuration 同⼀一マシン内で複数台のノードを⽴立立ち上げる場合は •  portを重複させないようにする •  admin,  api,  protobuf,  raft等 •  storage,  walのディレクトリを分ける という⾵風に指定しておけばOK 37

Slide 38

Slide 38 text

Copyright © GREE, Inc. All Rights Reserved. Clustering Clusteringの現状 •  Should  be  able  to  remove  server  from  cluster https://github.com/influxdb/influxdb/issues/322 というIssueがあるようにClusteringができるけれど異異 常系の動作などが⾃自動で⾏行行えるわけではなさそう。 go-‐‑‒raftがわかっていれば⼿手動でどうにでもなる部分なの でゴリゴリできるならClusteringもありだと思う。 38

Slide 39

Slide 39 text

Copyright © GREE, Inc. All Rights Reserved. Clustering Replication Factor / Split •  Replication  Factor(RF)を変更更することでデータ をクラスタ間で複製することができる •  Splitを使うことでSeries内のデータを分散させる ことができる •  Write  /  Selectのスケールアウトが期待できる ここらへんの設定はShardが作られた時に決まるので後から ⾜足した場合は次のShardから有効になるはず 39

Slide 40

Slide 40 text

Copyright © GREE, Inc. All Rights Reserved. Shards Shards type  Shard  struct  { Id  uint32 StartTime  time.Time EndTime  time.Time ServerIds  []uint32 } Replication  Factor 例例えばClusterが2台でServerIdsが1,  2ならreplication  factorは2ってこと 40

Slide 41

Slide 41 text

Copyright © GREE, Inc. All Rights Reserved. Replication Factor = 2 Access Coordinator Coordinator Access Seeds Node 41

Slide 42

Slide 42 text

Copyright © GREE, Inc. All Rights Reserved. Replication Factor = 2 Access Coordinator Coordinator Access Seeds Node 42

Slide 43

Slide 43 text

Copyright © GREE, Inc. All Rights Reserved. Replication Factor = 2 Access Coordinator Coordinator Access Seeds Node 43

Slide 44

Slide 44 text

Copyright © GREE, Inc. All Rights Reserved. Split = 2 Access Coordinator Coordinator Access Seeds Node 44

Slide 45

Slide 45 text

Copyright © GREE, Inc. All Rights Reserved. Split = 2 Access Coordinator Coordinator Access Seeds Node 45

Slide 46

Slide 46 text

Copyright © GREE, Inc. All Rights Reserved. Split = 2 Access Coordinator Coordinator Access Seeds Node 46

Slide 47

Slide 47 text

お分かりいただけただろうか?

Slide 48

Slide 48 text

Query Engine

Slide 49

Slide 49 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDBは⾃自分たちでParser、Engineのメンテナンスをし ている CGo+  flex  &  Bison SQL-‐‑‒ish  Query  Language クエリ⾔言語とエンジンを早期に実装した事によりInfluxDBの 魅⼒力力が⼀一気に⾼高まったと感じている Query  Engine オリジナルのQuery Parser / Engine 49

Slide 50

Slide 50 text

Copyright © GREE, Inc. All Rights Reserved. Query  Engine CGO + flex & Bison ɾSQL-ish Query Language SQLっぽいけどSQLと期待して書くとハマるところがある select  ua,  count(ua)  from  series  group  by  ua  order  by  count   desc  limit  10 order  by句句は存在せずtimeに対してのorder句句のみ。上述のクエリは後 で説明するhaving  patchを追加することで1queryで実⾏行行可能になる select  *  from  series  where  time  >=  now()  -‐‑‒1h 時間に対しての>=,  <=は使えない 50

Slide 51

Slide 51 text

Copyright © GREE, Inc. All Rights Reserved. Query  Engine Select Query Syntax SELECT COLUMN_NAMES FROM_CLAUSE GROUP_BY_CLAUSE #whereͷલͰ΋ޙΖͰ΋OK WHERE_CLAUSE LIMIT_AND_ORDER_CLAUSES INTO_CLAUSE 特徴的な部分のみ紹介 51

Slide 52

Slide 52 text

Copyright © GREE, Inc. All Rights Reserved. FROM_CLAUSE: FROM TABLE_VALUE |FROM SIMPLE_TABLE_VALUES |FROM SIMPLE_TABLE_VALUE |FROM SIMPLE_TABLE_VALUE MERGE SIMPLE_TABLE_VALUE |FROM SIMPLE_TABLE_VALUE ALIAS_CLAUSE INNER JOIN SIMPLE_TABLE_VALUE ALIAS_CLAUSE TABLE_VALUE: SIMPLE_NAME_VALUE | TABLE_NAME_VALUE | REGEX_VALUE ਖ਼نදݱͰTableΛࢦఆͰ͖Δͷ͕ಛ௃త Query  Engine

Slide 53

Slide 53 text

Copyright © GREE, Inc. All Rights Reserved. Query  Engine LIMIT_AND_ORDER_CLAUSES: ORDER_CLAUSE LIMIT_CLAUSE |LIMIT_CLAUSE ORDER_CLAUSE ORDER_CLAUSE: ORDER ASC # ORDER HOGE DESCͰ͸ͳ͍ |ORDER DESC LIMIT_CLAUSE: LIMIT INT_VALUE # ·ͩOffsetࢦఆ͕ग़དྷͳ͍

Slide 54

Slide 54 text

Copyright © GREE, Inc. All Rights Reserved. Query  Engine ORDER句句はIteratorの⽅方向指定 [1,  13934035005,  10001]  {} [1,  13934035004,  10001]  {} [1,  13934035003,  10001]  {} [1,  13934035002,  10001]  {} [1,  13934035001,  10001]  {} [1,  13934035000,  10001]  {} [2,  13934035005,  10001]  {} [2,  13934035004,  10001]  {} [2,  13934035003,  10001]  {} [2,  13934035002,  10001]  {} [2,  13934035001,  10001]  {} [2,  13934035000,  10001]  {} σϑΥϧτͰ͸ORDER DESCͱͳΔ SQLͰΑ͋͘ΔORDER BY COUNT DESC LIMIT 10͸ࢦఆग़དྷͳ͍ͷͰ ஫ҙ ORDER  ASC ORDER  DESC 54

Slide 55

Slide 55 text

Copyright © GREE, Inc. All Rights Reserved. Query  Engine 参考情報 ・CGoでYacc & Bison http://qiita.com/chobie@github/items/8bc8d1c7104f0a3ad3fe InfluxDBの初期のParserを切切り出した物。Cgoで遊ぶのにちょうどいい 感じのサイズ 55

Slide 56

Slide 56 text

Copyright © GREE, Inc. All Rights Reserved. Query  Engine Query Pipeline Server  /  Shard Server  /  Shard Server  /  Shard Server  /  Shard Client Select  count(elapsed)  from  access  group  by  time(5m) 1)  Query 2)  Server/Shardsに対して        Query実⾏行行 3)  Compute  Locality  (shard内でAggregationする) 4)  処理理結果をStreamで返す 5)  結果を集約して返す 56

Slide 57

Slide 57 text

Copyright © GREE, Inc. All Rights Reserved. QueryEngine Shard QueryEngine Shard QueryEngine Shard Query  Engine Query Pipeline Inside Coordinator PassthorughEngine QueryEngine   (Aggregation) Database Shard Select  count(elapsed)  from  access  group  by  time(5m) Shard内でGroup  Byが計算できるので 上位のPassthorughEngineにcount(elapsed)の結果を渡す 57

Slide 58

Slide 58 text

Copyright © GREE, Inc. All Rights Reserved. Query  Engine Query Pipeline (no locality) Server  /  Shard Server  /  Shard Server  /  Shard Server  /  Shard Client Select  count(elapsed)  from  access  group  by  time(5m) 1)  Query 2)  Server/Shardsに対して        Query実⾏行行 3)  Streamでそのまま帰す 4)  結果を集約して返す 58

Slide 59

Slide 59 text

Copyright © GREE, Inc. All Rights Reserved. QueryEngine Shard QueryEngine Shard QueryEngine Shard Query  Engine Query Pipeline Inside (no locality) Coordinator QueryEngine (Aggregation) PassthroughEngine Database Shard Select  count(elapsed)  from  access  group  by  time(5m) Shard内でGroup  Byが計算できないので結果をstreamで 返し上位のEngineでcount(elapsed)を計算する えっ、countなら(ryとかもあるけどまだEngineが最適化に対応してないと思う 59

Slide 60

Slide 60 text

Copyright © GREE, Inc. All Rights Reserved. Query  Engine InfluxDBの特徴的なクエリシンタックス例例 ■stats.にマッチするseriesで 1時間前から現在までのpointsを返す SELECT   *   FROM  /^stats\./i   WHERE   time  >  now()  -‐‑‒  1h; 60

Slide 61

Slide 61 text

Copyright © GREE, Inc. All Rights Reserved. Query  Engine InfluxDBの特徴的なクエリシンタックス例例 ■server.host1.cpuのseriesから1分毎で平均を算出した結果 を返す SELECT   MEAN(cpu_̲user)  as  user_̲mean FROM  server.host1.cpu  GROUP  BY  TIME(1m)  WHERE   time  >  now()  -‐‑‒  1h; 61

Slide 62

Slide 62 text

Copyright © GREE, Inc. All Rights Reserved. Query  Engine InfluxDBの特徴的なクエリシンタックス例例 ■server.host1.cpuのseriesから1分毎で平均を算出した結果 を返す。値がない場合は0.0で埋める(地味に便便利利) SELECT        MEAN(cpu_̲user)  as  user_̲mean FROM  server.host1.cpu  GROUP  BY  TIME(1m)  FILL(0.0)   WHERE  time  >  now()  -‐‑‒  1h; 62

Slide 63

Slide 63 text

Copyright © GREE, Inc. All Rights Reserved. Query  Engine その他の特徴的な機能 Continuous Query select percentile(value, 95) from response_times group by time(5m) into response_times.percentiles.5m.95 Fanout, downsampling select max(value) from /stats\.*/ group by time(5m) into max.:series_name select  *  from  access  into  access.[action] into句句を使うこと別seriesにfanoutすることができる。 Continuous Query͸まだまだ⾊色々制限が多いが今後改善される⾒見見込み 63

Slide 64

Slide 64 text

Write Ahead Log Database

Slide 65

Slide 65 text

Copyright © GREE, Inc. All Rights Reserved. WriteBuffer  /  WAL WriteSeriesの書き込み時のパフォーマンス安定(leveldb   compactionを避ける)やReplication時の書き込みの保証とし てWritteBufferとWAL(Write  Ahead  Log)を使っている。 MySQLのInnoDBのようにDB組み込みの機能ではないので⾼高 負荷時にDBレイヤに反映されるまで時間がかかる、というこ ともある。 WALの説明はググって

Slide 66

Slide 66 text

Copyright © GREE, Inc. All Rights Reserved. 初期はLevelDBのみだったがデータベース操作が抽象化され leveldb系(hyperleveldb, rocksdb), mdbがサポートさ れている Database  (AbstractionLayer) データベース操作は抽象化され、Database実装が楽になった 66

Slide 67

Slide 67 text

Copyright © GREE, Inc. All Rights Reserved. Database  (AbstractionLayer) type Engine interface { Name() string Path() string Put(key, value []byte) error Get(key []byte) ([]byte, error) BatchPut(writes []Write) error Del(first, last []byte) error Iterator() Iterator Compact() Close() } type Write struct { Key []byte Value []byte }

Slide 68

Slide 68 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDBではProtocolBuffersを積極的につかっており、 データの保存時のフォーマットもProtocolBuffersを使って いる 型表現を独⾃自に考えるのは⾯面倒だし、⾊色々つくるのも ProtocolBuffersは楽なのでうまくOSSを使えるところは 使って機能を素早く実現している Database  (Value) ProtocolBuffers 68

Slide 69

Slide 69 text

Copyright © GREE, Inc. All Rights Reserved. Database  (Value) message FieldValue { optional string string_value = 1; optional double double_value = 3; optional bool bool_value = 4; optional int64 int64_value = 5; // tag 6はnullの表現用で保存しない optional bool is_null = 6; }

Slide 70

Slide 70 text

Copyright © GREE, Inc. All Rights Reserved. ProtocolBuffers タグ, データタイプ, データ...という構造のバイナリフォーマット。IDL からコードを生成できるので色々楽 InfluxDBのFieldValueとして保存される場合は大抵数バイト or 文 字列+αなサイズになる

Slide 71

Slide 71 text

Copyright © GREE, Inc. All Rights Reserved. Database Key – 24bytes [id,  time,  sequence] ID:  8bytes  int64  identifies  database,  series,  column Time:  8bytes  uint64  microsecond  epoch Sequence:  8bytes  最初の3bytesがサーバーID 71

Slide 72

Slide 72 text

Copyright © GREE, Inc. All Rights Reserved. Database Ordered Keys [1,  13934035006,  60001]  {} [1,  13934035005,  50001]  {} [1,  13934035004,  40001]  {} [1,  13934035003,  30001]  {} [1,  13934035002,  20001]  {} [1,  13934035001,  10001]  {} [2,  13934035006,  60001]  {} [2,  13934035005,  50001]  {} [2,  13934035004,  40001]  {} [2,  13934035003,  30001]  {} [2,  13934035002,  20001]  {} [2,  13934035001,  10001]  {} [3,  13934035006,  60001]  {} [3,  13934035005,  50001]  {} [3,  13934035004,  40001]  {} [3,  13934035003,  30001]  {} [3,  13934035002,  20001]  {} [3,  13934035001,  10001]  {} 例例えばaccess  seriesのua(1),   elapsed(2),  url(3)という3カラムが あった場合はそれぞれが左記のよう なsort済みの状態で保存されている 72

Slide 73

Slide 73 text

Copyright © GREE, Inc. All Rights Reserved. Database  (Pointの拾拾い⽅方) Select ua, elapsed, url from events where time > now() -1h [1,  13934035000,  10001]  {} [1,  13934035001,  10001]  {} [1,  13934035002,  10001]  {} [1,  13934035003,  10001]  {} [1,  13934035004,  10001]  {} [1,  13934035005,  10001]  {} [2,  13934035001,  10001]  {} [2,  13934035002,  10001]  {} [2,  13934035003,  10001]  {} [2,  13934035004,  10001]  {} [2,  13934035005,  10001]  {} [2,  13934035006,  10001]  {} [3,  13934035001,  10001]  {} [3,  13934035002,  10001]  {} [3,  13934035003,  10001]  {} [3,  13934035004,  10001]  {} [3,  13934035005,  10001]  {} [3,  13934035006,  10001]  {} Shard Query   Engine DB Iterator

Slide 74

Slide 74 text

Copyright © GREE, Inc. All Rights Reserved. Database  (Pointの拾拾い⽅方) Select ua, elapsed, url from events where time > now() -1h FieldValue Point(s) 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} 001]  {} Query  Engine API Client Iteratorで各FieldValueを集め、PointにまとめてEngineに渡す

Slide 75

Slide 75 text

開発関連情報

Slide 76

Slide 76 text

Copyright © GREE, Inc. All Rights Reserved. 情報取得元 •  Speaker Deck: Paul Dix https://speakerdeck.com/pauldix とりあえずここらへん見よう •  InfluxDB Group (ML) https://groups.google.com/forum/#!forum/influxdb •  Github Issues https://github.com/influxdb/influxdb/issues •  IRC #influxdb ad freenode Discussionをする場所としてはInfluxDB Groupが適切。 新機能の提案や質問はMLでやりましょう

Slide 77

Slide 77 text

Copyright © GREE, Inc. All Rights Reserved. OSXでの開発環境セットアップ brew install protobuf bison flex leveldb go hg bzr git clone https://github.com/influxdb/influxdb cd influxdb export GOPATH=`pwd` # assume your flex and bison version. ./configure --with-flex=/usr/local/Cellar/flex/2.5.37/ bin/flex --with-bison=/usr/local/Cellar/bison/3.0.2/ bin/bison && make build sed -i ‘s/log/stdout/’ config.sample.toml ./daemon -config=config.sample.toml # Testing make test, make test

Slide 78

Slide 78 text

Copyright © GREE, Inc. All Rights Reserved. ディレクトリ構成 admin  -‐‑‒>  admin  ui api  -‐‑‒>  coordinatorのコマンド実⾏行行するラッパ cluster  -‐‑‒>  coordinatorから参照する設定とか configuration  -‐‑‒>  config coordinator  -‐‑‒>  coordination関連 daemon  -‐‑‒>  influxdbのエントリポイント datastore  -‐‑‒>  shards,  database engine  -‐‑‒>  query  engine integraton  -‐‑‒>  結合テスト parser  -‐‑‒>  parser protocol  -‐‑‒>  protobufのproto定義 server  -‐‑‒>  api,  coordinatorなどのまとめ wal  -‐‑‒>  wal

Slide 79

Slide 79 text

Copyright © GREE, Inc. All Rights Reserved. データディレクトリ構成 ├──  db │      └──  shard_̲db ├──  raft │      ├──  conf │      ├──  log │      └──  name └──  wal        ├──  bookmark        ├──  index.100002        └──  log.100002 walぶっ壊した時はwalディレクトリの中⾝身消したりすれば (復復旧前のデータは消えるけど)動かせるようになってる。

Slide 80

Slide 80 text

Copyright © GREE, Inc. All Rights Reserved. 開発時に遭遇した問題 •  Why  the  memory  is  not  free  by  GC? https://groups.google.com/forum/#!topic/golang-‐‑‒nuts/vfmd6zaRQVs どうやらOSXで動かしてるとメモリキープしたまんまで減りづらいらしい? linuxだと問題ない •  ulimitにひっかかる sudo  ulimit  -‐‑‒n  4098 InfluxDBの使い⽅方だとleveldbが結構file  descriptorを開くので仕様 •  時まえでAdmin  Interface  not  found. ⾃自前でbuildするとAdminInterfaceがないために管理理画⾯面が表⽰示できないこ ともある。release版のadminディレクトリを拾拾ってセットするのがお⼿手軽。 ⾯面倒なのでその場限りの操作は⼤大抵curlでやってる Patchをあてて運⽤用しているので⾃自分でやらかした問題のほうが多い

Slide 81

Slide 81 text

Copyright © GREE, Inc. All Rights Reserved. 初めてのGo 他の⾔言語やってればだいたいこんな感じでやれば2〜~3週間でなんとなくやりたい ことはできるようになると思います •  A  tour  of  Goをひと通りやる(数時間?⼟土⽇日でがっとやっちゃうのが吉) •  http://tour.golang.org/ •  難しいのは⾶飛ばしちゃっていいから最後までやろう。 •  15分ぐらいで終わる写経⽤用のプログラムを⽤用意して毎⽇日続ける •  ⾃自分はKobitoに20⾏行行前後で動くプログラムを数⼗十個メモして毎⽇日写経してた •  例例えば: WebServerを動かす、JsonをDecodeする、XMLをDecodeする、TCPでやりとりする、とか https://github.com/golang-‐‑‒samples  とかQiitaのGoタグを⾒見見てみるのもいいかもしれない GolangはLL的なイメージが⾃自分にとってはなぜか強かったので最初struct定義とか⼾戸惑ったけど ちょっと楽なCと思い始めてからは結構すんなり学習できた •  その問題が解決されないと⾃自分が困るプロジェクトのIssuesを直してみる •  ⾃自分で1から設計して⼩小規模な問題を解決するプログラムを書いてみる •  ⾃自分はWALのファイル書き込み処理理をgoで書くには?というのをやってた •  ドキュメントを全部読む ⾃自分のメモを⾒見見返す限りだとGo書き始めたの5/1ぐらいだった。 InfluxDBにPR送ったのが5/18ぐらいだからやっぱ⽚片⼿手間だとそんぐらいかかる。

Slide 82

Slide 82 text

InfluxDB for internal tools

Slide 83

Slide 83 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools Applicationのパフォーマンスデータ                           収集してますか?

Slide 84

Slide 84 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools Applicationのパフォーマンスデータ                           収集してますか? •  GREEのインフラチームではサーバーやアプリケーション にまつわるMetricsを多数収集しています。 •  私の場合はPHP coreが専⾨門なのでPHP周りで運⽤用を楽をす るためにextensionを書いて⾊色々な情報を収集しています

Slide 85

Slide 85 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools パフォーマンスデータを集めるとこんな事ができる •  統計をとって糞コードが本番に出る前に叩き落落とせる 実⾏行行Opcode数,外部Middlewareへのクエリ回数、時間等が詳細に取れる •  糞クエリを開発環境で叩き落落とせる 実際に流流れるクエリや実⾏行行場所がとれるので判断が楽 Rの⾃自動レビューも考えたけど動的クエリに弱いし何よりparseが⾯面倒 •  重複クエリ等の⾃自動検出 ⼤大規模サービスでは地味に効いたりする •  サービス毎のApplication特性の⽐比較や⾼高速化のテクニック •  定量量的な数値ででるのでノウハウを共有し易易くなった •  性能劣劣化原因の調査でも切切り分けの判断が容易易になった •  コード上では複雑な変更更だったとしても統計データから判断できる

Slide 86

Slide 86 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools パフォーマンスデータを集めるとこんな事ができる •  統計をとって糞コードが本番に出る前に叩き落落とせる 実⾏行行Opcode数,外部Middlewareへのクエリ回数、時間等が詳細に取れる •  糞クエリを開発環境で叩き落落とせる 実際に流流れるクエリや実⾏行行場所がとれるので判断が楽 Rの⾃自動レビューも考えたけど動的クエリに弱いし何よりparseが⾯面倒 •  重複クエリ等の⾃自動検出 ⼤大規模サービスでは地味に効いたりする •  サービス毎のApplication特性の⽐比較や⾼高速化のテクニック •  定量量的な数値ででるのでノウハウを共有し易易くなった •  性能劣劣化原因の調査でも切切り分けの判断が容易易になった •  コード上では複雑な変更更だったとしても統計データから判断できる

Slide 87

Slide 87 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools パフォーマンスデータを集めるとこんな事ができる •  統計をとって糞コードが本番に出る前に叩き落落とせる 実⾏行行Opcode数,外部Middlewareへのクエリ回数、時間等が詳細に取れる •  糞クエリを開発環境で叩き落落とせる 実際に流流れるクエリや実⾏行行場所がとれるので判断が楽 ⾃自動レビューも考えたけど動的クエリに弱いし何よりparseが⾯面倒 •  重複クエリ等の⾃自動検出 ⼤大規模サービスでは地味に効いたりする •  サービス毎のApplication特性の⽐比較や⾼高速化のテクニック •  定量量的な数値ででるのでノウハウを共有し易易くなった •  性能劣劣化原因の調査でも切切り分けの判断が容易易になった •  コード上では複雑な変更更だったとしても統計データから判断できる

Slide 88

Slide 88 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools パフォーマンスデータを集めるとこんな事ができる •  統計をとって糞コードが本番に出る前に叩き落落とせる 実⾏行行Opcode数,外部Middlewareへのクエリ回数、時間等が詳細に取れる •  糞クエリを開発環境で叩き落落とせる 実際に流流れるクエリや実⾏行行場所がとれるので判断が楽 ⾃自動レビューも考えたけど動的クエリに弱いし何よりparseが⾯面倒 •  重複クエリ等の⾃自動検出 ⼤大規模サービスでは地味に効いたりする •  サービス毎のApplication特性の⽐比較や⾼高速化のテクニック 定量量的な数値ででるのでノウハウを共有し易易くなった •  性能劣劣化原因の調査でも切切り分けの判断が容易易になった •  コード上では複雑な変更更だったとしても統計データから判断できる

Slide 89

Slide 89 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools パフォーマンスデータを集めるとこんな事ができる •  統計をとって糞コードが本番に出る前に叩き落落とせる 実⾏行行Opcode数,外部Middlewareへのクエリ回数、時間等が詳細に取れる •  糞クエリを開発環境で叩き落落とせる 実際に流流れるクエリや実⾏行行場所がとれるので判断が楽 ⾃自動レビューも考えたけど動的クエリに弱いし何よりparseが⾯面倒 •  重複クエリ等の⾃自動検出 ⼤大規模サービスでは地味に効いたりする •  サービス毎のApplication特性の⽐比較や⾼高速化のテクニック 定量量的な数値ででるのでノウハウを共有し易易くなった •  性能劣劣化原因の調査でも切切り分けの判断が容易易になった •  コード上では複雑な変更更だったとしても統計データから判断できる

Slide 90

Slide 90 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools パフォーマンスデータを集めるとこんな事ができる •  統計をとって糞コードが本番に出る前に叩き落落とせる 実⾏行行Opcode数,外部Middlewareへのクエリ回数、時間等が詳細に取れる •  糞クエリを開発環境で叩き落落とせる 実際に流流れるクエリや実⾏行行場所がとれるので判断が楽 ⾃自動レビューも考えたけど動的クエリに弱いし何よりparseが⾯面倒 •  重複クエリ等の⾃自動検出 ⼤大規模サービスでは地味に効いたりする •  サービス毎のApplication特性の⽐比較や⾼高速化のテクニック 定量量的な数値ででるのでノウハウを共有し易易くなった •  性能劣劣化原因の調査でも切切り分けの判断が容易易になった コード上では複雑な変更更だったとしても統計データから判断できる

Slide 91

Slide 91 text

Copyright © GREE, Inc. All Rights Reserved. Architecture Overview with  custom  profiler  extension Protocol Buffers Go nvd3.js snappy send  profile  data  (ProtocolBuffers)

Slide 92

Slide 92 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools

Slide 93

Slide 93 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools nvd3.jsでplot

Slide 94

Slide 94 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools nvd3.jsでplot InfluxDBで時系列列データ に対しての⾼高速なフィルタリング

Slide 95

Slide 95 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools nvd3.jsでplot InfluxDBで時系列列データ に対しての⾼高速なフィルタリング Continuous  Queryで統 計情報の継続的な更更新

Slide 96

Slide 96 text

Copyright © GREE, Inc. All Rights Reserved. my_bool percentile_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { percentile_data *data; double score; ///... percentile等の計算をSQLでやるのは⾯面倒なのでUDF書いてた InfluxDB for internal tools 開発初期〜~中期はデータストアにMySQLを利利⽤用 これはこれで上⼿手く回ってたけど 96

Slide 97

Slide 97 text

Copyright © GREE, Inc. All Rights Reserved. 運⽤用の為にTableのShardをさせると今度度はUDFでの計算がしづらくなって Application側のコードが複雑になってしまう。 データの保持やダウンサンプリングなども考慮するとアプリケーション が膨らむしメンテ出来る⼈人が減るのでそういう選択はしたくなかった。 InfluxDB for internal tools ダウンサンプリングとか運⽤用周りがとても⾯面倒 Sharded  Tables Application側でShardを頑張るとShardを跨いだ計算が複雑になる 可能な限りはStorageへの薄いラッパで運⽤用できるのが好ましかった 97

Slide 98

Slide 98 text

Copyright © GREE, Inc. All Rights Reserved. 要件 •  時系列列データの⾼高速なSelectができる •  Analytics系のクエリを気軽に投げられる •  ⼀一般的なハードウェアで運⽤用ができる 欲しかったデータベース Hadoopクラスタを運⽤用したりTDを使っているのでそっちに投げても良良 かったけどPerformance  Data⾃自体サイズが⼤大きいし、⼤大規模なクラスタ で運⽤用するのはちょっと⼤大げさすぎるので丁度度いいデータベースが欲し かった

Slide 99

Slide 99 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB First impression InfluxDBが話題に上がってたので評価したけど⾊色々出来ない事 が多くて調査当時は使わなかった。 特にAnalytics周りの機能が弱く実現が難しいクエリが多かった

Slide 100

Slide 100 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB First impression InfluxDBが話題に上がってたので評価したけど⾊色々出来ない事 が多くて調査当時は使わなかった。 特にAnalytics周りの機能が弱く実現が難しいクエリが多かった 時は過ぎ、ゴールデンウィークやることがなかったのでGo⼒力力 を⾼高めてたら意外ととやりたい事が少しの努⼒力力で実現できそう に感じたのでContributionを個⼈人で始めてInfluxDBに Top/Bottom aggregation patchを送った。

Slide 101

Slide 101 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools Having clauseの対応等いくつかPRやpatchを作って⾃自分の ニーズが満たせるようになったのでMySQLからInfluxDBに 切切り替えて開発環境で運⽤用し始めた。 Application側のAggregator系のコードやPlot系のコードが InfluxDBのクエリで殆ど済むようになり、統計処理理も殆ど ContinuousQueryで事前にInfluxDB側で計算できるように なったので⼤大幅にコードを書く量量が減ったのが⼀一番嬉しい

Slide 102

Slide 102 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools InfluxDBの導⼊入ポイント ✓時系列列データを扱うこと ✓InfluxDBの機能によるコード量量削減が期待できる事 ✓クエリだけでやりたい事がある程度度実現できる事 が重要 ✓規模的にマッチしていること ✓⼩小〜~中規模なら導⼊入は難しくない。⼤大規模だと事 例例が少なく運⽤用載せるのはそれなりに⼤大変だと思う。 102

Slide 103

Slide 103 text

Copyright © GREE, Inc. All Rights Reserved. InfluxDB for internal tools InfluxDBによる開発⼯工数の削減が期待できるポイント •  アプリ側でクエリ結果を頑張って計算しなくて良良い •  QueryEngineに殆ど任せられるのは⼤大分楽 (対RDBMS的に。Shardさせるとけっこー⾯面倒) •  統計系のcron jobがContinuous Queryで代替できる •  複数ホストをサポートしてると結構⾯面倒だったりする •  スキーマレスなので型、Index設計の⼿手間が省省ける •  とはいえどういうseries、pointを持つかは重要 情熱ある⼈人いないと運⽤用⾟辛いけど。 103

Slide 104

Slide 104 text

Copyright © GREE, Inc. All Rights Reserved. Issues スキーマレスによる弊害(PHP) InfluxDBに格納されるデータはスキーマレスで基本は送信し た値そのままで保存される。 PHPのように数値と⽂文字列列が曖昧な環境の場合だと数値のつも りで送ったけど実は⽂文字列列で送ってた、とかありがちなので⽂文 字列列と数値の⽐比較演算でヒットしない場合が出てくる。 PHPの場合Client側できちんと型を強制して送信するのが重要 ⾃自分のTODOには⼊入ってるのでいつかPRを送るかもしれない 104

Slide 105

Slide 105 text

Copyright © GREE, Inc. All Rights Reserved. Issues Statistic API monitoringしたいけど内部のApplication情報がExportされ てない。ベンチマークもふんわりしたものが多いのでもっと詳 細な内部の傾向が知りたい。 PR送ったけどかなりダサダサなハードコーディングになって しまっているので、Goでモニタリング⽤用のコードを埋め込む ナイスな⽅方法があったら知りたい (Goのこういう運⽤用周りのテクニックあんまりでないよねー) https://github.com/influxdb/influxdb/pull/635 105

Slide 106

Slide 106 text

Copyright © GREE, Inc. All Rights Reserved. Issues Statistic apiを使ったInfluxDB  モニタリング 106

Slide 107

Slide 107 text

Copyright © GREE, Inc. All Rights Reserved. Issues having clause patch Analytics系のクエリをInfluxDBでやるときhaving系がな かったので⾟辛かった https://github.com/influxdb/influxdb/pull/611 このpatchによりhaving clauseが実⾏行行できるので select action, mean(elapsed) mean_elapsed from access where time > now() -7h group by time(1m) having top(mean_elapsed, 10) みたいなサマリ系のクエリが簡単にできるようになった 多分近いうちにmergeされると思う 107

Slide 108

Slide 108 text

Copyright © GREE, Inc. All Rights Reserved. Issues バイナリデータが保存できない message FieldValue { optional string string_value = 1; optional double double_value = 3; optional bool bool_value = 4; optional int64 int64_value = 5; optional bool is_null = 6; optional bytes bytes_value = 7; // ADDED } ProtocolBuffersを多様していたのでそのままRawデータを保存したかったが http  json  apiだとバイナリデータが扱えないしそもそもFieldValueにbytesが ない TimeSeriesDBにバイナリってどうよ?ってのもありつつ、さくっとbytes_̲value を追加したところ動いたので万事オッケー。QueryEngineなどのことも考えると もっと対応が必要だけどいまん所そこまでやりこんでない。 https://github.com/influxdb/influxdb/issues/573 108

Slide 109

Slide 109 text

Copyright © GREE, Inc. All Rights Reserved. Issues Experimental TCP Protobuf Plugin Half Duplex, Protobuf protocol HTTP APIと⽐比較してNetworkTraffic、messageやりとりの 削減によるパフォーマンス向上、拡張しやすいメッセージ⼿手 続き、Binaryデータのサポート、クライアントライブラリの 簡単な作成を⽬目的としている。 うちではこれで運⽤用してるけどPRとしてはまだ完成できてな いのでなうでがんばってるところ。 https://github.com/influxdb/influxdb/pull/583 109

Slide 110

Slide 110 text

Copyright © GREE, Inc. All Rights Reserved. Issues バイナリサポートによる弊害 でかいPointsがあるとQueryが遅くなる 当然1PointsのFieldValueがでかくなってIOコストが増⼤大してクエリが効 率率率的に実⾏行行できなくなった。 TimeIndexを使わない場合はshard期間内のデータを全て捜査する必要が あるため、出来る限りTimeIndexを使うようなクエリ、設計にしたほうが いい。 shard期間内にどれぐらいのデータが⼊入るか事前に計算するのはとても重 要。1台で捌き切切れないならseriesを分ける、splitで分ける等やっていく 必要がある そのうちIDに対してのデータを取るGETSERIES APIを⼊入れる予定 110

Slide 111

Slide 111 text

Copyright © GREE, Inc. All Rights Reserved. Issues 過剰なInsertでWAL性能劣劣化  (benchmark) ベンチマークやってるとinsert等でburstさせるとWALの処理理が遅くなる のがわかっている。今なおしてるみたいだし、そもそもburstさせなきゃい いんで前段にProxyかますかInsertのQueue/Consumer作って⼿手加減して 送るようにすればだいたい解決されると思う。 RDBMSにしろ過剰なトラフィックをながすとそりゃダメになるんで⾃自分 たちのハードウェアをつかってきちんと評価、キャパシティプランニング するの⼤大事 111

Slide 112

Slide 112 text

Copyright © GREE, Inc. All Rights Reserved. Issues アクセス集中でGoroutineがBurst(benchmark) 秒間のコネクション、クエリ数が増加すると当然goroutinesの数が跳ね上 がる。 goroutinesの数が数百、数千単位で跳ね上がると処理理が遅くなってしまう ので、安定性を⾼高めるためにMaxConnectionsの制限やGoroutines Pool とかそういうのが今後の運⽤用では必要になってくるんだと思う。 今のところハードコーディングでConnection数を制限してる 112

Slide 113

Slide 113 text

Copyright © GREE, Inc. All Rights Reserved. 本運⽤用に向けてのIssues •  Backup tool •  公式にはまだないけどleveldbもraftもわかるし 別にそんなに問題になってない •  Replication topology •  どういう運⽤用にしようか情報がまだ少ないので悩み中 •  障害対応時の⼿手順 •  おなじく •  Proxy •  あると便便利利なのでどっかで作って⼊入れたい

Slide 114

Slide 114 text

Copyright © GREE, Inc. All Rights Reserved. 本運⽤用に向けてのIssues •  Packaging http://qiita.com/chobie@github/items/ ff5a08587c8635fbf95d パッケージングはここにメモしてある。独⾃自のpatchを当てて る関係上本家のリリース版は使ってない。 インストール場所等も普通のスタイルにしてる。 適当にパッケージ作るときfpmは便便利利

Slide 115

Slide 115 text

Copyright © GREE, Inc. All Rights Reserved. その他InfluxDBのアイデア •  InfluxDB x Chat Application •  ほ、ほら・・・。ある種Time Seriesだし •  もしWebSocketでPubSubとかついたら単体でチャッ トが作れる •  Triggerとかが⾃自由につくれると⾯面⽩白いのかもしれない •  アホな使い⽅方すると潜在的な問題探しやすい •  ⼩小〜~中規模なAnalytics Tool •  Health Application •  移動平均(sma)とかの関数対応が欲しい •  異異常検知 •  これまたWriteSeriesのTriggerとかhookがほしい

Slide 116

Slide 116 text

Copyright © GREE, Inc. All Rights Reserved. ⾃自分たちでカスタマイズしながら歩めるならとても魅⼒力力的。 アイデアをパッとGo実現できるのはエキサイティング とはいえ⾃自分たちで運⽤用したくない、という場合はHosting Service等もあるのでそっちを使うのもありかもしれない。 https://customers.influxdb.com/ ぜひみなさまのContributionおまちしております! まとめ InfluxDBはカスタマイズ性が⾼高いMiddleware 116

Slide 117

Slide 117 text

Happy Hacking

Slide 118

Slide 118 text

そのほか

Slide 119

Slide 119 text

Copyright © GREE, Inc. All Rights Reserved. こんごへの淡い期待 Couchbase  Server(Membase)はBucketのNode感でのMigration問題に VBucketというアイデアを使ってオンラインでデータを移設できたりした。 恐らく今後InfluxDBにもこういった機能が⼊入って⾃自由にClusterを組んだ り外せたりするようになるんだろうなーという淡い期待。 http://blog.couchbase.com/scaling-memcached-vbuckets InfluxDBのクラスタリングでのデータ保持がどういうポリシーになって いくかはまだわからない