Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепелица (Mail.Ru)

2,370 views

Published on

NoSQL key-value — популярное решение, но какие преимущества и какой ценой оно даёт?

Скорость? Возможно, но ценой урезанного, по сравнению с реляционными базами данных, функционала. Но данные и приложение всё еще разделены сетевым стеком, а иногда и десятками километров оптоволокна. В крупном проекте, работающем на десятках или сотнях серверов нельзя обеспечить высокую скорость доступа к данным с каждой машины. Если хранилище достаточно быстро, то время обработки запроса окажется значительно меньше затрат на работу с сетью, а производительность приложения будут определять сетевые задержки и частота запросов к БД.

В проекте Облако@Mail.Ru мы ушли от использования чистых key-value хранилищ в пользу микросервисов на Tarantool, что позволило свести общение с хранилищем данных к минимуму.
Да, Tarantool — это еще одна NoSQL база данных, но еще это полноценный сервер приложений. Приложений, расположенных рядом с данными!

Я расскажу, как мы пришли к использованию микросервисов на основе Tarantool. Приведу несколько сценариев использования, которые работают в Облаке и могут быть легко адаптированы для другого web-проекта. Вы узнаете о компонентах, которые разработаны и опубликованы нами уже сейчас, и о дальнейших планах развития.

Published in: Engineering
  • Be the first to comment

Tarantool как платформа для микросервисов / Антон Резников, Владимир Перепелица (Mail.Ru)

  1. 1. Tarantool as a microservices platform Anton Reznikov Vladimir Perepelitsa
  2. 2. 100k+ RPS per cpu core
  3. 3. $1 000 000+ comparing to big cluster
  4. 4. What else…
  5. 5. SQL?
  6. 6. Memcached?
  7. 7. Queues?
  8. 8. $$$
  9. 9. Roadmap
  10. 10. Roadmap KV with expiration
  11. 11. Roadmap KV with expiration Smart caching proxy
  12. 12. Roadmap KV with expiration Smart caching proxy Complex queues
  13. 13. Roadmap KV with expiration Smart caching proxy Complex queues Application server
  14. 14. Roadmap KV with expiration Smart caching proxy Complex queues Application server Custom cluster solutions
  15. 15. Get your data in RAM Compute close to data Enjoy the performance
  16. 16. Average performance Operation Req / s / CPU Select: 150k Insert: 75k Update: 75k Delete: 90k LuaCall: 75k
  17. 17. Indexes: HASH
  18. 18. Indexes: HASH TREE: SG, AVL (1.5) | B+* (1.6)
  19. 19. Indexes: HASH TREE: SG, AVL (1.5) | B+* (1.6) RTREE (1.6)
  20. 20. Indexes: HASH TREE: SG, AVL (1.5) | B+* (1.6) RTREE (1.6) BITMAP
  21. 21. Indexes: HASH TREE: SG, AVL (1.5) | B+* (1.6) RTREE (1.6) BITMAP Composite
  22. 22. Indexes: HASH TREE: SG, AVL (1.5) | B+* (1.6) RTREE (1.6) BITMAP Composite Multiple
  23. 23. Lua
  24. 24. Luajit!
  25. 25. Luajit! fibers (green threads) Cooperative multitasking
  26. 26. Luajit! fibers (green threads) Cooperative multitasking channels (fiber communicaion) Synchronization primitives
  27. 27. Luajit! fibers (green threads) Cooperative multitasking channels (fiber communicaion) Synchronization primitives sockets (client & server) Pure raw, like in C and with helpers
  28. 28. Luajit! fibers (green threads) Cooperative multitasking channels (fiber communicaion) Synchronization primitives sockets (client & server) Pure raw, like in C and with helpers FFI (foreign function interface) Ability to call C/C++ (dlopen)
  29. 29. 8 lines Lua: join by hand function custom_join( key ) local result = {} for tuple in space:iterator('EQ', key) do local joined = other:select(0,tuple[1]) table.insert(result,{ tuple, joined }) end return result end
  30. 30. Access tokens Provides access by URL to specific feature without additional authorization Durable Temporary Consistent
  31. 31. Token Payload
  32. 32. Token Payload
  33. 33. index Lua Token Expire time Payload fiber
  34. 34. index Lua Token Expire time User id Payload index fiber fiber
  35. 35. Classic SQL App Web application with 20k requests for select and 2k requests for update Have memcached Have SQL replica
  36. 36. get set App miss Memcache SQL
  37. 37. App Tarantool SQL
  38. 38. App Tarantool SQL
  39. 39. App Tarantool SQL
  40. 40. App Tarantool replica SQLSlave
  41. 41. chanscache query 1 query SQL query 2 reply 2 chan SQL responsereply 1 query 3 reply 3
  42. 42. 20 lines! Aggregation: example function select(key) local tuple = cache:select {key} if not tuple then if locks[key] then local ch = fiber.channel(1) locks[key][ch] = ch return ch:get() else locks[key] = {} local ret = sql:execute('select * from ...') for ch in pairs(locks[key]) do ch:put(ret) end locks[key] = nil return ret end else return tuple end end
  43. 43. OAuth tokens Storage for 10M OAuth access+refresh tokens with deadline refreshing Keep minimal expired tokens Balance load over time
  44. 44. App Worker Tokens queue Sched
  45. 45. App Worker Tokens queue G MS Y Я Sched
  46. 46. App Worker Tokens queues G MS Y Я Sched
  47. 47. Queue priority to refresh no need to refreshexpired 60s first order old age second order 5 min third order
  48. 48. App Worker Tokens G MS Y Я
  49. 49. Subscription verification Mobile application provide subscription id, that must be verified in store Don't duplicate requests Reply as soon as possible Provide service if client gone
  50. 50. App Worker wait create task wait have task x3 done task id Apple
  51. 51. Database application Replicated database with a lot of business logic inside Multiple APIs Failsafe deploy Monitoring Informative logs
  52. 52. App
  53. 53. API v1 App Lua
  54. 54. API v1 App App v2 Lua
  55. 55. API v1 App App v2 Lua logs  Mon Stat world fiber
  56. 56. Sharding is unavoidable Data does not fit in RAM of a single instance or many CPU cores required Database as a service Consistency checking
  57. 57. #1 #2 #3 App Sh prx f(k) App App Sh prx f(k) Sh prx f(k)
  58. 58. #1 #2 #3 App Sh prx f1(k) App App Sh prx f(k) Sh prx f(k)
  59. 59. #1 #2 ?? #3 App Sh prx f(k) App App Sh prx f(k) Sh prx f(k)
  60. 60. #1 f(k) #2 f(k) #3 f(k) App App App
  61. 61. Access tokens (v2) Provides access by URL to specific feature without additional authorization High availability Allow loss of majority
  62. 62. M M M APP #1 APP #2
  63. 63. M M M APP #1 APP #2
  64. 64. M M M APP #1 APP #2
  65. 65. Get your data in RAM Compute close to data Enjoy the performance
  66. 66. tarantool.orgDocumentation: try.tarantool.orgTry it online: github.com/tarantoolExplore it: github.com/mons/tnt-luasLuas: Questions?

×