Intravert atx meetup_condensed

  • 655 views
Uploaded on

What would you get if Cassandra and Vert.x had a baby?

What would you get if Cassandra and Vert.x had a baby?

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
655
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
4
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Intravert Experimental Transport for Apache CassandraFriday, April 5, 13
  • 2. Hi Folks! I’m Nate @zznateFriday, April 5, 13
  • 3. API Management API Analytics API ToolsFriday, April 5, 13
  • 4. Vert.x + Cassandra = ?Friday, April 5, 13
  • 5. But first: Architectural stuffFriday, April 5, 13
  • 6. Collapsed for brevity. see slides 6-31 from this presentation: http://www.slideshare.net/zznate/ apachecon-cassandra-transportFriday, April 5, 13
  • 7. So there are options, why create something new?Friday, April 5, 13
  • 8. Common client patterns emergedFriday, April 5, 13
  • 9. union operations aggregations filtering joins (round-trip required!) redundant data on insertionFriday, April 5, 13
  • 10. These client patterns are wasteful.Friday, April 5, 13
  • 11. Lots of CPU and memory burned (server and client) Lots of data on the wire won’t be used (ser/deSer cost)Friday, April 5, 13
  • 12. One more thing about CQL...Friday, April 5, 13
  • 13. “If [they] think that CQL is the answer to usability then I just won. We at least know where our problems are.” - 10gen exec.Friday, April 5, 13
  • 14. Transports in sumFriday, April 5, 13
  • 15. Thrift: I can has distributed computing degreeFriday, April 5, 13
  • 16. CQL: MOAR TOOLz!!!Friday, April 5, 13
  • 17. IMO: In 2013, binary protocols with idiomatic clients misses the market.Friday, April 5, 13
  • 18. I love writing apps in Java (sometimes python), but...Friday, April 5, 13
  • 19. The most popular application framework these days:Friday, April 5, 13
  • 20. The most popular application framework these days: HTML5Friday, April 5, 13
  • 21. and thus... IntravertFriday, April 5, 13
  • 22. Any new transport had to be HTTP basedFriday, April 5, 13
  • 23. Easy to use Easy to secure Easy to compress You can test with a browser!Friday, April 5, 13
  • 24. The payload had to be JSON basedFriday, April 5, 13
  • 25. Quick Vert.x summaryFriday, April 5, 13
  • 26. - Event-driven IO (Netty) - Message bus - Runtime load/unload of modules - Polyglot support via invokeDynamic in JDK7 http://vertx.ioFriday, April 5, 13
  • 27. Initial use case: Server side indexingFriday, April 5, 13
  • 28. Easy to construct most common operationsFriday, April 5, 13
  • 29. Simple REST semantics POST /myks/mycf/key1 {“uname”:”zznate”} GET /myks/mycf/key1/uname {”zznate”}Friday, April 5, 13
  • 30. Command-driven JSON payloadFriday, April 5, 13
  • 31. Extensible and transparent Ordered operations Not tied to any predefined notionsFriday, April 5, 13
  • 32. Benefits of doing this with Vert.xFriday, April 5, 13
  • 33. Message bus flexibility Configure which modules to load (read-only nodes!) Hot deploy of fixes and new featuresFriday, April 5, 13
  • 34. Cassandra is best-of- breed for a lot of things. So we used it as a framework.Friday, April 5, 13
  • 35. Example Intravert OperationsFriday, April 5, 13
  • 36. Slice: {"id":6, "type":"slice", "op":{      "end":"9",      "rowkey":"5",      "size":4,      "start":"1"} }Friday, April 5, 13
  • 37. Set: {"id":2, "type":"SET", "op":{            "rowkey":"key1",      "uname":"zznate",      "email":"zznate.m@gmail.com",      "age":37} }Friday, April 5, 13
  • 38. Easy to use CompositesFriday, April 5, 13
  • 39. {"id":1, "type":"SET", "op":{            "rowkey":"key1",      "COMP_NAME":[          "37",  "zznate"      ],      "value":"key1",      } }Friday, April 5, 13
  • 40. One or more commands per payloadFriday, April 5, 13
  • 41. Friday, April 5, 13
  • 42. Flexible batching - batch reads and writes - different keyspaces in same op - change ks/cf mid-op - streaming (soon)Friday, April 5, 13
  • 43. Server-side FilteringFriday, April 5, 13
  • 44. { "type": "CREATEFILTER", "op": { "name": "stouts", "spec": "javascript", "value": "function(row) { if (row[value] == Breakfast Stout) return row; else return null; }" } }, { "type": "FILTERMODE", "op": { "name": "stouts", "on": true } }, { "type": "SLICE", "op": { "rowkey": "beers", "start": "Allagash", "end": "Sierra Nevada", "size": 9 } }Friday, April 5, 13
  • 45. { "exception":null, "exceptionId":null, "opsRes": { "0":"OK", "1":"OK", "2":"OK", "3":"OK", "4":"OK", "5":"OK", "6":[{ "name":"Founders", "value":"Breakfast Stout" }] }}Friday, April 5, 13
  • 46. GetRef: Results of one operation as input from anotherFriday, April 5, 13
  • 47. { "type": "GET", "op": { "rowkey": "getref_test", "name": "col1" } }, { "type": "SET", "op": { "rowkey": "getref_test", "name": "col3", "value": { "type": "GETREF", "op": { "resultref": 4, "wanted": "value" } } } }, { "type": "GET", "op": { "rowkey": "getref_test", "name": "col3" } }Friday, April 5, 13
  • 48. “Triggers” - Perform complex multi-step operations server side - Examine and change request objects - Interface directly with IntraVert - Interface directly with Cassandra (StorageProxy, CFMetaData, etc)Friday, April 5, 13
  • 49. Multi-Processors: Shape results with a union of operationsFriday, April 5, 13
  • 50. Prepared Request Statement: Requests saved server side - send only the bind variablesFriday, April 5, 13
  • 51. CQL support built-in.Friday, April 5, 13
  • 52. What’s missing?Friday, April 5, 13
  • 53. Security (Shiro integration coming soon) Distribution semantics Cassandra-REST HBASE-like scannersFriday, April 5, 13
  • 54. github.com/zznate/ intravert-ugFriday, April 5, 13