Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

What it's like to bet your entire startup on Rabbit - Nathan Herald

348 Aufrufe

Veröffentlicht am

Watch the full lecture on YouTube: https://www.youtube.com/watch?v=9FtMvYHS8Uk&list=PLDUzG2yLXrU4Lz33ZzSdHyfqdHJ8Zum5A

Wunderlist made big bets on two technologies: AWS and rabbit. I will give an overview of what it’s like to live with rabbit for years, the tools and practices we built up around rabbit, and as many tips and learnings as I can.

In this talk you'll see real world data, hear anecdotes from using RabbitMQ at various scales. You should feel more comfortable making a bet on RabbitMQ as a critical part of your infrastructure after my presentation.

--

The first RabbitMQ Summit connected RabbitMQ users and developers from around the world in London on November 12, 2018. Learn what's happening in and around RabbitMQ, and how top companies utilize RabbitMQ to power their services.

https://www.rabbitmqsummit.com

RabbitMQ Summit was organized by:
- Erlang Solutions, offering world-leading RabbitMQ Consultancy, Support, Health Checks & Tuning solutions https://www.erlang-solutions.com/
- CloudAMQP, offering fully managed RabbitMQ clusters https://www.cloudamqp.com

RabbitMQ Summit 2018 was sponsored by the following companies.

Platinum sponsors:
Pivotal
LShift

Gold sponsors:
Trifork
AWS

Silver sponsor:
Cogin Queue Explorer

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

What it's like to bet your entire startup on Rabbit - Nathan Herald

  1. 1. Hi
  2. 2. 👋
  3. 3. I’m Nathan
  4. 4. I go by @myobie on almost every website
  5. 5. Berlin
  6. 6. Product designer and developer
  7. 7. I worked at Wunderlist
  8. 8. Now I work at Microsoft
  9. 9. Now I work at Microsoft They acquired Wunderlist
  10. 10. They are very nice
  11. 11. They are very nice I can recommend them
  12. 12. Also
  13. 13. Also, I like sneakers
  14. 14. Wunderlist
  15. 15. Wunderlist is a todo list app
  16. 16. Realtime collaboration ⚡
  17. 17. Our goal:
  18. 18. Our goal: Take less than 5 seconds for a change to propagate to anywhere in the world
  19. 19. Our goal: Take less than 5 seconds for a change to propagate to anywhere in the world Using our app on one device should feel like a remote control for the other device
  20. 20. Wunderlist v1
  21. 21. Single user
  22. 22. Customers loved it
  23. 23. Titanium
  24. 24. Titanium OG
  25. 25. Titanium OG Pre-electron
  26. 26. Titanium OG Pre-electron Pre-react-native
  27. 27. Wunderlist 2
  28. 28. Share a list
  29. 29. Fully native apps
  30. 30. Customers loved it
  31. 31. Had difficulties scaling
  32. 32. A few data synchronization bugs
  33. 33. A few data synchronization bugs Never use timestamps for anything
  34. 34. They decided to rewrite everything
  35. 35. I decided to join and help
  36. 36. 🎉
  37. 37. Wunderlist 3
  38. 38. Wunderlist 3
  39. 39. Realtime
  40. 40. Realtime Reliable data sync
  41. 41. Realtime Reliable data sync Easier to build new features
  42. 42. Realtime Reliable data sync Easier to build new features
  43. 43. 13 months rewriting the backend 
 and most of the client applications
  44. 44. Decided to use rabbit
  45. 45. Decided to use rabbit
  46. 46. @pangopup Sophia https://twitter.com/pangopup/status/1061279230053531648 Ur gonna do great today
  47. 47. Decided to use CloudAMQP
  48. 48. Decided to use CloudAMQP #shoutout
  49. 49. Why rabbit?
  50. 50. Shift in mindset
  51. 51. Shift in mindset Evented architecture
  52. 52. ?
  53. 53. emit() listen()
  54. 54. Simple APIs can be powerful
  55. 55. Simple APIs can be powerful
  56. 56. Replaceable
  57. 57. Design is a team sport
  58. 58. Important
  59. 59. Important Learn how to use rabbit
  60. 60. What is an exchange?
  61. 61. What is an exchange? What is a queue?
  62. 62. What is an exchange? What is a queue? What is a binding?
  63. 63. What is an exchange? What is a queue? What is a binding? How expensive is a binding?
  64. 64. What is an exchange? What is a queue? What is a binding? How expensive is a binding? How expensive is a connection?
  65. 65. How would rabbit want me to solve my problem?
  66. 66. Push to an exchange
  67. 67. Push to an exchange Consume from a queue
  68. 68. Push to an exchange Consume from a queue Bindings translate
  69. 69. Push to an exchange Consume from a queue Bindings translate
  70. 70. We could not have built our own versions of what rabbit does while also building our product.
  71. 71. Aside: I get angry now when I use a streaming system that doesn’t support routing keys 😡
  72. 72. *cough* … ka
  73. 73. We have four primary exchanges
  74. 74. We have four primary exchanges: creates, updates, destroys, and touches
  75. 75. Mutation
  76. 76. Routing key is set to the object type
  77. 77. Routing key is set to the object type
  78. 78. Mutations
  79. 79. River
  80. 80.
  81. 81.
  82. 82.
  83. 83. Touch
  84. 84. Touch
  85. 85. New Comment ↑ Task ↑ List ↑ User
  86. 86. Sync
  87. 87. List 1 ↓ User ↓ List 2 ↓ Task 1 ↓ Task 2 ↓ New Comment
  88. 88. Cascading deletes
  89. 89. Events
  90. 90. Cerebro
  91. 91. Cerebra
  92. 92. https://www.marvel.com/items/cerebra
  93. 93. Cerebra @bscofield
  94. 94. Important
  95. 95. Codify exchange and queue creation
  96. 96. Codify exchange and queue creation Version it in source control
  97. 97. Codify exchange and queue creation Version it in source control
  98. 98. Default to durable
  99. 99. Default to durable
  100. 100. Important
  101. 101. Two connections per app
  102. 102. Don’t cheat
  103. 103. Implicit consumption
  104. 104. Implicit consumption Usually I don’t like implicit code
  105. 105. Implicit consumption Usually I don’t like implicit code Coupling is worse
  106. 106. Publishers and consumers 
 agree on a basic schema
  107. 107. Publishers and consumers 
 agree on a basic schema Publishers shouldn’t know too
 much about what consumers 
 intend to do
  108. 108. Asynchronous
  109. 109. Gotta account for time
  110. 110. Gotta account for time Don’t use timestamps
  111. 111. Gotta account for time Don’t use timestamps Monotonic clocks are fine
  112. 112. Gotta account for time Don’t use timestamps Monotonic clocks are fine
  113. 113. To be able to send and receive changes quickly, 
 we needed to localize data and side effects.
  114. 114. We decided changes can only happen 
 to one object (row of data) at a time.
  115. 115. We decided changes can only happen 
 to one object (row of data) at a time.
  116. 116. Atomicity
  117. 117. Atomicity
  118. 118. Everything else is async. No exceptions.
  119. 119. Everything else is async. No exceptions.
  120. 120. One of our rabbits delivers 3 billion events every day to several scala applications
  121. 121. One of our rabbits delivers 3 billion events every day to several scala applications so they can let connected clients know about changes they might be interested in
  122. 122. One of our rabbits delivers 3 billion events every day to several scala applications so they can let connected clients know about changes they might be interested in
  123. 123. One of our rabbits delivers 3 billion events every day to several scala applications so they can let connected clients know about changes they might be interested in
  124. 124. We don’t push 3 billion messages
  125. 125. We don’t push 3 billion messages We let rabbit fan things out
  126. 126. Rabbit has very much been up to the task of multiplying out from an exchange to many queues
  127. 127. Graphs
  128. 128. OK
  129. 129. Bindings are expensive
  130. 130. Don’t create half a million bindings
  131. 131. Connections are expensive
  132. 132. Shovel
  133. 133. Shovel rabbitmq.com/shovel.html
  134. 134. HA
  135. 135. HA We cannot recommend rabbit in an HA setup
  136. 136. Things appear to be maybe better today with HA
  137. 137. 🤔
  138. 138. Data loss backup plan
  139. 139. Data loss backup plan
  140. 140. Aside: create tools to stress test
  141. 141. #shoutout @duncan
  142. 142. Functional sharding
  143. 143. Server: crash immediately. Client: don’t crash.
  144. 144. Discard messages you don’t understand.
  145. 145. Discard messages you don’t understand.
  146. 146. The bunny gem was problematic for us
  147. 147. Backlogs are bad
  148. 148. Backlogs are bad
  149. 149. Don’t host your own
  150. 150. 2–3 years just running
  151. 151. 2–3 years just running
  152. 152. Rabbit has worked well for years
  153. 153. What did I miss?
  154. 154. Should you bet on rabbit?
  155. 155. Questions?

×