What is a MESSAGE QUEUE and Where is it used?

Поділитися
Вставка
  • Опубліковано 10 чер 2024
  • Messaging Queues are widely used in asynchronous systems. Message processing in an asynchronous fashion allows the client to relieve itself from waiting for a task to complete and, hence, can do other jobs during that time. It also allows a server to process its jobs in the order it wants to.
    Messaging Queues provide useful features such as persistence, routing, and task management. We will be discussing the benefits of a message queue in future videos.
    A system having a message queue can move to higher-level requirements while abstracting implementation details of message delivery and event handling to the messaging queue.
    The 'queue' is just a name for this data structure. In practice, it could be storing messages using any policy. Some examples of message queues are Kafka and RabbitMQ. They are widely used for various purposes, such as command query request segregation (CQRS) and event sourcing.
    00:00 Pizza Shop Example
    01:40 Benefits of Asynchronous Processing
    02:44 Scaling Shops (Horizontally)
    03:10 Fault Tolerance
    04:09 Features of a message queue
    08:38 Encapsulation
    09:38 Thank you!
    Code: github.com/coding-parrot/Low-...
    Looking to ace your next interview? Try this System Design video course! 🔥
    interviewready.io
    With video lectures, architecture diagrams, capacity planning, API contracts, and evaluation tests. It's a complete package.
    Asynchronous Request-Response:
    stackoverflow.com/questions/1...
    www.enterpriseintegrationpatte...
    Message Queue:
    blog.codepath.com/2013/01/06/a...
    highscalability.com/blog/2012/...
    www.cloudamqp.com/blog/2014-1...
    www.rabbitmq.com/getstarted.html
    Load Balancing:
    • What is CONSISTENT HAS...
    You can find me here:
    / gkcs0
    www.quora.com/profile/Gaurav-...
    github.com/gkcs/
    #message-queue #system-design #scalability #server

КОМЕНТАРІ • 601

  • @UlfAslak
    @UlfAslak 2 роки тому +556

    Notes to self:
    * Servers are processing jobs in parallel.
    * A server can crash. The jobs running on the crashed server still needs to get processed.
    * A notifier constantly polls the status of each server and if a server crashes it takes ALL unfinished jobs (listed in some database) and distributes it to the rest of the servers. Because distribution uses a load balancer (with consistent hashing) duplicate processing will not occur as job_1 which might be processing on server_3 (alive) will land again on server_3, and so on.
    * This "notifier with load balancing" is a "Message Queue".

    • @ahalyapotti9905
      @ahalyapotti9905 2 роки тому +2

      Very good notes 👍

    • @mahmoudelrabee2456
      @mahmoudelrabee2456 2 роки тому +28

      I don't understand why there might be a duplicate ?
      the notifier will just query the tasks that handled by the cracked server and distribute them!

    • @sidharthsinghal1920
      @sidharthsinghal1920 2 роки тому +11

      @@mahmoudelrabee2456 That is true if we store the server id also. This is explained as the first approach at @4:52

    • @codekicks2171
      @codekicks2171 2 роки тому +1

      Consistent hashing and load balancer are 2 different things not same

    • @user-eq4oy6bk5p
      @user-eq4oy6bk5p 2 роки тому +12

      The alternative approach is, instead of assigning individual task to server, you can let servers poll from the queue. In this case, your message queue is decoupled from application servers since message queue doesn't need to know anything about servers.

  • @Montisero
    @Montisero 4 роки тому +840

    This guy reminds me of that friend that tries to explain and wrap up the whole semester for you 30 minutes right before the exam, because you didn't attend any lecture since the beginning.

  • @anulik1985
    @anulik1985 5 років тому +86

    Great job explaining everything in a way anyone can understand. You are a natural teacher! Please continue teaching and sharing your knowledge!

    • @gkcs
      @gkcs  5 років тому +6

      Thank you!

  • @corybeaver7562
    @corybeaver7562 3 роки тому +16

    Former teacher turned Linux engineer here. Very well done explanation of this concept. Easy to follow with great usage of visuals and ongoing metaphor!

  • @yusufahmed2233
    @yusufahmed2233 Рік тому +5

    Explained the whole thing in literally the first 40 seconds. Truly amazing work!

  • @mokonzi2K6
    @mokonzi2K6 5 років тому +5

    Message queue is getting lots of spot light in the industry, please keep making the video on this topic i like you way of teaching. thanks again.

  • @ish1285
    @ish1285 4 роки тому +28

    This was the best video so far. The way you explained the entire stuff without saying Message Queue the whole time awakened my grey cells. Thanks a lot!

  • @rskrao
    @rskrao 4 роки тому +2

    I like the sheer excitement with which the topic is delivered!! Kudos!!

  • @hfontanez98
    @hfontanez98 3 роки тому +26

    EXCELLENT job in all areas: Simplifying the use cases for explaining easily to non-experts, very VERY close examples to real-world instead of using hypothetical cases, starting from simple (in memory) to more complex approach (with database), and avoiding super technical jargon; yet not shying away from technical details (i.e. load balancing, hashing, etc.)
    Well done Gaurav!! I enjoyed this video.

    • @gwho
      @gwho 2 роки тому +1

      well said.

  • @rishabhagarwal9871
    @rishabhagarwal9871 5 років тому +12

    Hi Gaurav, This is the one of the best real life example (with pizza shop) showing the need of asynchronous request/response system. Thanks for the great video. Really loved it.

    • @gkcs
      @gkcs  5 років тому

      Thanks!

  • @irynasherepot9882
    @irynasherepot9882 3 роки тому +19

    Thank you! Your tutorials are great! My college did not have System Design and Analysis class, and your videos helped to learn a lot.

  • @PanKonKeso99
    @PanKonKeso99 6 місяців тому

    Brother, I've been researching about message queues and I was so confused until I saw your video, thanks alot!

  • @ralphmoran
    @ralphmoran 4 роки тому +3

    Again, thanks so much for taking the time to make this video. I've learned a lot from you. Keep it up!

    • @gkcs
      @gkcs  4 роки тому

      😁

  • @NohandleReqd
    @NohandleReqd 3 роки тому +155

    Are we just going to ignore the fact that 9 / 11 were pointing at the same server and THAT was the server that crashed! :P Your lectures are fun man!

    • @MrZyman
      @MrZyman 3 роки тому +7

      Illuminati confirmed! Well done.

  • @AhmadSayeed-plus
    @AhmadSayeed-plus 3 роки тому +2

    I am a java dev. For learning purpose I am planning to make queue system. But from your video i got idea that JMS is something I should learn now. Thanks Gaurav.

  • @timothy6966
    @timothy6966 Рік тому +1

    Your channel is amazing. Your explanations are some of the best I’ve ever heard/seen. Good job man.

  • @stillthinking6357
    @stillthinking6357 5 місяців тому +2

    know a days People like Bhaiya and didi on linkdln those who are giving lecture on system design other bla bla.. even don't know how to code, have more subscribers than this genuine talent. Hats of bro.😃

  • @mayankvora8116
    @mayankvora8116 3 роки тому +3

    Amazing explanation Gaurav. The best way to explain any concept is with practical examples, and you did the same.

  • @dilawarmulla6293
    @dilawarmulla6293 6 років тому +70

    There are very less resource available for system design in youtube so please complete series . I like the way you teach. Thanks for making videos for us. God bless you

    • @gkcs
      @gkcs  6 років тому +1

      Thanks Sameer :)

    • @Thrillseeker666
      @Thrillseeker666 4 роки тому +4

      "Very less", Very few. Indian English is hilarious though.

  • @ShubhamSingh-ku2ow
    @ShubhamSingh-ku2ow 5 років тому +26

    Bro, keep bringing up more videos like this. We are all such a big fan of yours. ALL the best! 👍
    PS: Amazon has SQS ;)

  • @gwho
    @gwho 2 роки тому +4

    great clear presentation!
    one tip: use higher contrast ink and board.
    So that means more lighting to make the board more lighter/white
    and/or using dark ink like black or brown so we can see it more clearly.
    great content. subscribed. keep up the good work!

  • @pramodkharade5373
    @pramodkharade5373 Рік тому +6

    The concept has been explained very clearly. It would be great if you would come with practical implementation using NodeJS with any MQ

  • @rahilsinha_1407
    @rahilsinha_1407 3 роки тому

    Great Explanations of Sytem Design. Made fall in love with each concept.

  • @MubashirAR
    @MubashirAR 5 років тому +42

    The only youtuber that keeps his video at 9:59

    • @gkcs
      @gkcs  5 років тому +3

      Hahaha

    • @danielk8452
      @danielk8452 4 роки тому

      HAHAHAHAHAHAHA

    • @rtwkkumar20
      @rtwkkumar20 4 роки тому

      haha :?

    • @hairypaulsack
      @hairypaulsack 4 роки тому +2

      back in the golden days of youtube everybody made videos to make videos, not to make money

  • @barimohammedabdul5166
    @barimohammedabdul5166 3 роки тому

    Explained the concept really well , easy to understand

  • @vaibhavpali
    @vaibhavpali 10 місяців тому

    kya to samjaya hai Gaurav, maza aa gaya.. Such precise explanation is so rare on online tutorials.

  • @Llink4n
    @Llink4n 5 місяців тому

    You explained it so well, thank you

  • @hvanmegen
    @hvanmegen 5 років тому +2

    As a European developer that has seen too much low-quality programming disasters from projects outsourced to low-wage Asian country developers, I must say that it's refreshing to see an Indian engineer that has actually studied for this stuff and knows what he's talking about, using the correct terminology... I'm subscribing; you're creating great content.

    • @srinathrachapudi
      @srinathrachapudi 5 років тому

      Low-quality programmers are everywhere not just in Asia.

  • @manoharsingh6050
    @manoharsingh6050 2 роки тому +1

    When to use a Topic vs a Que would have been a nice addition.

  • @rajeev812
    @rajeev812 5 років тому +11

    Gaurav, this is really a nice and knowledgeable tutorial you have made, in very sort time you have explained this topic very clearly. Can you try to make it as a practical ( how to implement RabbitMQ)

  • @user-ld8ec2sj9i
    @user-ld8ec2sj9i 2 роки тому

    Thanks for the valuable video! It really helps me to understand what the message queue is :)

  • @navjhs
    @navjhs 2 роки тому

    Nice explanation. You are actually doing excellent work. Thank you.

  • @sat1478
    @sat1478 4 роки тому

    You are the best teacher. Thank you very much.

  • @voleti19
    @voleti19 5 років тому

    Appreciate your work!! thanks for sharing.

  • @susantagouda8213
    @susantagouda8213 Рік тому

    Very good job. I had so many confusion you just cleared

  • @AmanSharma-hi3fd
    @AmanSharma-hi3fd 3 роки тому

    Thanks a lot for the content. Even I discussed the same heartbeat like mechanism (Got the idea from the video :P) in an interview. It was really helpful!

  • @mukeshbarman
    @mukeshbarman 5 років тому +21

    In a typical System design interview: Dabbe banao dabbe.. :D

  • @nomib_k2
    @nomib_k2 Рік тому

    so smart the way he is explaining. keep it up man

  • @KB-ce5sh
    @KB-ce5sh 4 роки тому +1

    Damn man you are an amazing teacher. Subscribed!

  • @vigneshwarpadmanaban7816
    @vigneshwarpadmanaban7816 4 роки тому

    Amazing work Gaurav, Keep inspiring!

  • @misaelpereira9679
    @misaelpereira9679 2 роки тому

    Your charisma and you way of teaching gain me to be your subscriber :)

  • @dianecoffee4467
    @dianecoffee4467 3 роки тому

    Excellent and lite tutorial on messaging and load balancing

  • @ashish1004tiwari
    @ashish1004tiwari 3 роки тому

    Man, You are awesome.. the way you explain is truly great.😂

  • @udayayyagari9160
    @udayayyagari9160 3 роки тому +3

    Gaurav, fantastic job with explaining the key tenants of high-level system design; how about bringing in some tooling and technology stack to support each of the architectures.

  • @elvinvalette9928
    @elvinvalette9928 3 роки тому +1

    Very clear explanation. Thank you

  • @shalinifefar4750
    @shalinifefar4750 4 роки тому

    Hey Gaurav, Thank you so much for the great explanation. Your videos are awesome. Keep up the great work.👍

    • @gkcs
      @gkcs  4 роки тому +1

      Thanks!

  • @TheGugustar
    @TheGugustar 2 роки тому

    Everyday you learn something new!
    I always thought PS3 stood for PlaStation 3, but here I learn that it stands for PizzaShop 3.

  • @mahendrajadav2286
    @mahendrajadav2286 2 місяці тому +1

    "Now I know everything about how to run a restaurant; I will be starting my own restaurant very soon."
    Thanks to the legend Gaurav.

  • @cyrilrajc
    @cyrilrajc 4 роки тому

    Thats an excellent explanation Gaurav.. Thank you.

  • @rajchoudhary4349
    @rajchoudhary4349 2 роки тому +1

    Nice narration..!! My pizza just got delivered under 30min

  • @pratikbhandarkar25
    @pratikbhandarkar25 4 роки тому +16

    Great video! This video explains the system design of a pizza shop very well. However, it spends a lot of time explaining load balancers and the notifier and very few minutes are dedicated to discussing message queues. I am more interested in the actual use of message queues in real-world systems like pizza shop here.

  • @gauravmaithani4707
    @gauravmaithani4707 4 роки тому +28

    "Filling up the coke can" 2:20 haha. Love your videos bro.

  • @zararosenrot
    @zararosenrot 3 роки тому

    Thanks for the great explanation man!!

  • @kailashc1321
    @kailashc1321 Рік тому

    Excellent explanation.
    Thanks

  • @sankalparora9374
    @sankalparora9374 Рік тому

    Amazing explanation! Thanks!

    • @gkcs
      @gkcs  Рік тому

      You're welcome!

  • @emmanueldsouza
    @emmanueldsouza 5 років тому +1

    Great video. Would like a part 2

    • @gkcs
      @gkcs  5 років тому +5

      Maybe one on Apache Kafka and it's features :)

  • @sagarmittal8392
    @sagarmittal8392 4 роки тому

    amazing series!

  • @rohitdhankar360
    @rohitdhankar360 4 роки тому

    Excellent stuff - Cheers !!

  • @Ayesha_siddiqah
    @Ayesha_siddiqah 4 роки тому +2

    Brilliant:-) good job. Really appreciable. Kindly make complete series on system design and soon start video series on python programming:-):-)

  • @VikramThakur8
    @VikramThakur8 4 роки тому

    Gaurav! Its good conceptually. Thanks

  • @gasannazer6556
    @gasannazer6556 4 роки тому

    Pretty well explained.

  • @cyrilrajc
    @cyrilrajc 4 роки тому +3

    If you could cover on the concepts of real time operating systems- which includes tasks, task states, ,message queues and mailboxes etc..., It will be definetely helpful for me and for those who are interested in embedded computing and RTOS...

  • @kalidindiprashanth7363
    @kalidindiprashanth7363 5 років тому +2

    Super!!! Thank you Bro...

  • @roooooot9545
    @roooooot9545 4 роки тому

    this is awesome explanation

  • @prativmukherjee5081
    @prativmukherjee5081 2 роки тому

    Short.. To the point.. Brilliant 👍

  • @curious1731
    @curious1731 3 роки тому

    Very giid analogies and articulation of topics..gr8 wrk.

  • @naufilshaikh09
    @naufilshaikh09 3 роки тому

    Really nice explanation, impressive.

  • @NealMadlani
    @NealMadlani Рік тому

    I've learnt a heck of a lot about how pizza shops work

  • @anindachatterjee8904
    @anindachatterjee8904 3 роки тому

    Nicely and simply explained

  • @chiragr1336
    @chiragr1336 4 роки тому +2

    @Gaurav Sen Very informative video! I request you to make a video or videos about every component of any system design. Different problems employ different components. If we first study all the different components and their properties then at least we can stay thinking in right direction. Thanks for your video series!

  • @amanbhardwaj5318
    @amanbhardwaj5318 6 років тому +167

    Hi Gaurav , can we have server id as one of the columns in the table and use that also while querying the DB , so that it picks only the undone orders by that server(dead server) only, and rest can be taken care by the load balancers which is distributing the load ?

    • @gkcs
      @gkcs  6 років тому +296

      We could, but wouldn't that complicate things? For example: A job is initially assigned to S0, then reassigned to S1 after S0 crashes. Now S1 crashes. The way to keep track of S1's jobs would be to update the server id on the DB. It's an extra update operation.
      Now let's say a new requirement comes of evenly distributed load. In this case, when a new server comes up, it will take jobs from others. The db will again have to be updated.
      Consistent Hashing seems like a cleaner solution :)

    • @Chan123mishra
      @Chan123mishra 6 років тому +17

      Nice explanation Gaurav, I was stuck on this only.

    • @amanbhardwaj5318
      @amanbhardwaj5318 6 років тому +18

      Yes, may be it requires querying DB more often to update the server ids. Its better to follow the principle of load balancing which implements the uniqueness.
      Thanks. :)

    • @shiwanggupta8608
      @shiwanggupta8608 5 років тому +11

      But, if we are not maintaining system id along with each order, then whenever a server dies, we have to again see for all the orders, their nearest server. But, if we have server ids along with them then we would only have to assign the orders which are initially handled by the server that died.
      If a new server is added, then we have to anyway check all the entries, then its fine but when a server dies wouldn't maintaining server id's would reduce our work. Anyways great video..!! thanks.

    • @Sasmit88
      @Sasmit88 5 років тому +2

      @@shiwanggupta8608 I agree, also let's say you are very large chain, and have thousands of orders in process at any given time, going though all of them seems a waste of time, when you can differentiate by just the server id.

  • @KTechy-
    @KTechy- 9 місяців тому

    great explantaion!

  • @AnirbanRoyChowdhury1987
    @AnirbanRoyChowdhury1987 4 роки тому

    Really good video. Khub valo laglo dekhe.

  • @staronkar
    @staronkar 4 роки тому +1

    Please create a video over HermesJMS. This video was really helpful in getting the basics of MQ

  • @doumkatekz
    @doumkatekz 4 роки тому

    This is very clear and understandable. Subscribing..

  • @akshadrathod9203
    @akshadrathod9203 5 днів тому

    Nicely explain

  • @iitgupta2010
    @iitgupta2010 5 років тому +6

    this is the first time I found the wrong explanation.
    1. Once you have notified and it found that server 3 is dead then it can give that specific task to "assigner" node which basically divides the task and share between other nearest server to that location (it is important).
    2. Each shop has to maintain his own task queue and "assigner node" would add those task in that queue based on priority ( but this will be least among its own task, as it requires to completes own task first then other. )
    3. there is no use of centralized queue, until n unless you provide a feature to the pizza shop and based on user location pizza shop automatically (user did not select the shop which is always the case in dominoes at least) assign this task to the nearest shop.
    4. Load balancer (if you were talking about the actual load balancer between servers) is no use for the assignment, as its responsibility to just equally divides the task across multiple servers within the same region for which this load balancer responsible for.

  • @michaelajayi2117
    @michaelajayi2117 3 роки тому

    Dude, you should get a Ph.D. for this... made it easy to understand. Thanks for sharing.

  • @maaRyneeT
    @maaRyneeT 3 роки тому

    This video ia really good, thank you

  • @lecadou
    @lecadou 2 роки тому +19

    You don't necessarily need to assign a task to a specific server. A server that is ready can go and pull the pizza order from the queue and process it.
    It is much faster

    • @kanishkamakhija9046
      @kanishkamakhija9046 2 роки тому

      But what if a task was pulled , was in progress and then the server crashes , how do we make sure that this task, is again pulled by any up & running servers ?

    • @bozhang8910
      @bozhang8910 2 роки тому +1

      @@kanishkamakhija9046 Notifier(which does the heartbeat check) could detect whether a server has crashed and mark the corresponding tasks to be unassigned.
      Alternatively, a timeout could be added to each assigned task and if the in process task times out we remark it as unassigned and pick some alive server to handle it.

    • @user-eq4oy6bk5p
      @user-eq4oy6bk5p 2 роки тому

      I also saw another approach where you can maintain a separate queue that holds in-progress tasks. If the server crashes, any other server can pick up tasks from the corresponding queue.

  • @juanmamani2110
    @juanmamani2110 5 років тому

    Cool!
    Thanks for sharing.

  • @ravishankarjoshi2952
    @ravishankarjoshi2952 6 років тому +1

    We would like to have videos on object-oriented design patterns too like observer pattern etc.
    Please keep making videos. :D

    • @redpillsatori3020
      @redpillsatori3020 4 роки тому

      OOP is overrated and people are finally moving towards functional programming with NodeJS and React as some common examples

  • @jeevithamary7781
    @jeevithamary7781 2 роки тому

    Good Teaching!!! Keep it up with great work

  • @suneelbabu6186
    @suneelbabu6186 Рік тому

    Thank you so much for good video

  • @arasdb1
    @arasdb1 4 роки тому

    I like the way you explain it

  • @juanandrescastillosoria2936
    @juanandrescastillosoria2936 4 роки тому

    This tutoria is GREAT

  • @user-mw5bm2xh9x
    @user-mw5bm2xh9x 10 місяців тому

    thanks for the informative presentation

    • @gkcs
      @gkcs  10 місяців тому

      Glad it was helpful!

  • @jimjerkty6263
    @jimjerkty6263 4 роки тому +10

    Tech interviewer: Design dominoes pizza.
    Me: :-)

  • @manishbhunwal1
    @manishbhunwal1 5 років тому

    Please confirm if my video understanding related to queues are correct :
    When S3 crashed, we wanted to re-distribute the order no 9 and 11 to other pizza stores (s0 to s2).But server did not have record or order no's which were assigned to Pizza store S3.
    Initially we thought of using 'Load Balancer' for this purpose.
    (This is clear to me, so moving to queue now)
    After that we improved our solution by using 'Message queues'. If we use 'Message queues' then we need to have one 'Queue' for each Pizza Store (Both at client and server side applications). Each pizza store will listen to its own 'Message queue'. Whenever a new Pizza is added to a 'Queue' (belonging to S3). when this Message is received by Pizza store S3 and acknowledged and then S3 starts processing it. If S3 is 'SUCCESSFULLY' able to complete it then message will be removed from the Queue at server side.
    If S3 crashes then heart beats are not received and all messages stored in the Queue [belonging to Store S3] will be added to other store's Queues.
    If S3 throws error/Exception (Enough Cheese not available for Pizza) during processing then message is still on server queue [Not a valid use case for current discussion]

  • @dheerajsree1166
    @dheerajsree1166 4 роки тому +1

    Hi Gaurav, In the video where we discussed about duplicating order no. '3' between S3 and S2, the S2 is still up and running right? So will there be a case where load from S2 should be distributed to other servers? Will we be doing load balancing even if the Server is active?

  • @madhumitabishnu606
    @madhumitabishnu606 3 роки тому

    Great explanation

  • @abShar0705
    @abShar0705 3 роки тому

    banks, thats a fairly common use case that uses messaging services/queues extensively.
    batch processing transactions, after the card scheme authorises your tx and the request is send to the issuing bank, the entire xml message is stacked up on a messaging queue that is being constantly listened to by the issuing bank messaging service

  • @madinabonualisherova8935
    @madinabonualisherova8935 2 роки тому

    Well explained!

  • @parvezmulla3324
    @parvezmulla3324 6 років тому +4

    Nice explanation! Can you suggest resources to follow for system design?

  • @shantanusinha3609
    @shantanusinha3609 4 роки тому

    Great Analogy!

  • @abheeg5041
    @abheeg5041 6 років тому +2

    for each system design if a detailed explaination is there, then, it will be helpful for all becoz i think i can learn system designs from you
    thank you for your extraordinary work

    • @gkcs
      @gkcs  6 років тому

      Thanks David :)

  • @muhammadsalmansanaullah102
    @muhammadsalmansanaullah102 2 роки тому

    Nicely done Gaurav!! Once again... :)

  • @danishakh
    @danishakh 4 роки тому +3

    That 'filling up the coke can' face! LOL :D - thumbs up for a great video explanation!

  • @manaswitadatta
    @manaswitadatta 5 років тому +54

    Please make one video on Kafka. Appreciate your work.

    • @mahesh_kndpl
      @mahesh_kndpl 4 роки тому

      Check learning journal challenge for Kafka video.