»°!½° Cassandra

Click here to load reader

download »°!½° Cassandra

of 45

  • date post

    16-Jun-2015
  • Category

    Technology

  • view

    3.192
  • download

    0

Embed Size (px)

description

В этой презентации мы расскажем о своем опыте применения этого хранилища на примере одной из самых высоконагруженных подсистем — хранилища Класс!ов. В данный момент в системе хранится около 50 миллиардов записей о Класс!, что занимает в сумме около 8 Тб. Для того чтобы реализовать такое хранилище пришлось отойти от классического способа работы с Cassandra. Мы расскажем об этом, а также о том, как Cassandra устроена под капотом, её сильные и слабые стороны, какие решения мы принимали и что мы изменили в Cassandra, чтобы сделать наше хранилище более высокопроизводительным и надежным.

Transcript of »°!½° Cassandra

  • 1. ! Cassandra ,

2. > 6 M 290 000 /, 20 ms >240 /> 5 000 4 99.9% java 3. = NoSQL 4. Cassandra @ ! ... 5. Cassandra ( ) 6. Cassandra- , gossip- ,- 0 - - - () ()192-...0-63192 64 R3R1 () () 128-19164-127128R2 7. 0 THRIFT 19264HintStorage 128 8. 0 THRIFT 19264HintStorage 128 9. 0 resolved result 192 64 Read Repair128 10. Column Family name0:byte[]... nameN:byte[]byte[] value0:byte[] valueN:byte[] timestamp0:long timestampN:long name0:byte[]... nameK:byte[] ... 11. Write (Key, Column) namevalue tsCommit LogMemtableFlusher ThreadSSTable 1 SSTable 2 SSTable 3SSTable 4Compaction Thread SSTable 5 ! 12. name valuets 1resolve Memtable 2 3SSTable 1SSTable 4 SSTable 5- get( Key, columnNames ... )- slice( Key, from, to, count, direction )- key_range( fromKey, toKey, count, slice(...) ) 13. SSTableSSTable-5-Filter.db SSTable-5-Index.db SSTable-5-Data.db - => , , - :- , - 1 , - 2 - 3 - 14. SSTable AccountStatements-3456Memtable AccountStatementsRowKey = Oleg_AnastasyevRowKey = Oleg_AnastasyevColumn=LV05HABA95142357516Column=LV05HABA95142357516 vsValue= $1,000,000 Value= $10 ? 15. SSTable AccStatements-3456 MemtableRowKey = Oleg_Anastasyev RowKey = Oleg_AnastasyevColumn=LV05HABA95142357516 Column=LV05HABA95142357516vsValue= $1,000,000Value= $10Timestamp = 13:00:05 Timestamp = 13:00:01 timestamp. 16. $101. AccountStatement Key=Oleg 1. AccountStatement Key=Oleg ( $10, TS=12:00:00) ( $10, TS=12:00:00) 2. $1,000,0003. Key=Oleg, 2. $1Value=$1,000,010 TS=12:00:01.000 3. Key=Oleg,Value=$9TS=12:00:01.005 $9 17. : :- - ACID, - - - - NoSQL => JOIN- - - - - 18. ? 19. ! 4256 20. ! 4256 4256 21. ! 4256 4256 22. RefId:longRefType:byte UserId:longCreated 9999999999STATUS(2)1111111111111:00 COUNT ( RefId,RefType=? ): 80% => 0 4256 EXISTS( RefId,RefType,UserId=? ): 98% => RefId,RefType=? ORDER BY Created DESC -- ? 23. RefId:longRefType:byte UserId:long Created 9999999999STATUS(2)11111111111 11:00 COUNT ( RefId,RefType=? ): 80% => 0 4256 EXISTS( RefId,RefType,UserId=? ): 98% => RefId,RefType=? ORDER BY Created DESC -- ? ... 24. 25. 26. 8 ! 27. RefId:longRefType:byte UserId:long Created9999999999STATUS(2)11111111111 11:00 8 16 (~ 300 000/) 100 M ! ( ~ 2500/ ) 2TB RefId,RefType=? ORDER BY 40% EXISTS(RefId,UserId) 28. : 8 SQL ( ) 12 ( ) CPU, 8 29. ? SQL 8, 32 ( + MS) SQL - ( 64 => 128 =>256 ) NOT EXISTS + => LRU 100% ! 2TB ( 2 3 ) 30. Cassandra ! NOT EXISTS ( - ) ACID Eventual Consistency ! compaction 31. ! LikeByRef ! LikeCount LikeByUser ! 32. ! LikeByRef Key ColumnColumn ValueTimestamp Type+RefIduserId:byte[8]Created EXISTS ( Type,RefId=?, UserId=?) 98% calls => NOT EXISTS WHERE Type,RefId=? ORDER BY LIMIT XX ... Cassandra - 33. - (Key, Column name) SSTable *-Filter.db NOT EXISTS ... 98% => false positives - .. GC Promotion Failures ( long[]) (CASSANDRA-2466) cassandra 1.0 34. LikeCountKey Column Column ValueTimestampType+RefIdnodeIp:byte[4] nodeCounter:int Created COUNT ( RefType,RefId=?) 80% calls => NOT EXISTS ... Cassandra RR 35. application server 1. COUNT() 2. EXISTScassandra- DTO hector THRIFT cassandra- THRIFT - - - RR- LRU, 36. application server one-nio odnoklassniki-likecassandra- Cassandra JVM- - one-nio 37. COUNT(RefId), EXISTS(RefId,UserId) - , off heap ... 40M -> 1G RAM 38. 0 m64 128 39. 0 m64 128 40. 0 m64 128 41. 0 m * 50 m64 m * 50 128 42. 0 TS = TS m64 - - 128 - 8 43. 12 cassandra nodes 8 SQLs + + 12 : RF = 3, : 1M / : 10 , 1.5 : 12 -> 24 -> 48 : 8 TB, + 15 G 44. !Odnoklassniki.ru Odnoklassniki.ruhttp://v.ok.ru http://connect.ok.ruone-nio Cassandraslideshare.net/m0nstermind/presentationsgithub.com/odnoklassniki/one-nio github.com/odnoklassniki/apache-cassandra cassandra.apache.org oa@odnoklassniki.ru odnoklassniki.ru/oa 45. !connect.ok.ru