Bull & NestJS = Achieving Scale in Node.js

Sdílet
Vložit
  • čas přidán 9. 07. 2024
  • Node.js is single-threaded which means it is limited to a single core. How can we achieve scale? The answer is scaling our app horizontally and distributing the work amongst these instances.
    In this video, we look at how Bull & Nest.js allow us to do this in a Kubernetes cluster.
    GitHub Repo: github.com/mguay22/nestjs-bullmq
    Task Processing Nest.js: • Nest.js | Events & Tas...
    Dockerize Nest.js: • Build Nest.js Microser...
    Nest.js BullMQ docs: docs.nestjs.com/techniques/qu...
    Helm CLI: helm.sh/docs/intro/install/
    Timestamps
    00:00:00 Integrate Bull
    00:17:50 Move to K8s
    00:29:59 Seeing it in action
    Get my highly-rated Udemy courses at a discount here: michaelguay.dev/udemy/
  • Věda a technologie

Komentáře • 57

  • @mguay
    @mguay  Před 5 měsíci +3

    Get my highly-rated Udemy courses at a discount here: michaelguay.dev/udemy/

  • @brenohenrique2208
    @brenohenrique2208 Před 6 měsíci

    This is a really incredible video. Thanks, bro.

  • @janithrandeniya4504
    @janithrandeniya4504 Před rokem

    Subscribed. Great content, keep it up!

  • @hrachhovakimyan5112
    @hrachhovakimyan5112 Před rokem

    Unique content, keep rocking!!

  • @Ballistic_Bytes
    @Ballistic_Bytes Před rokem

    Brilliant teaching quality and the amount of knowledge you have on the topics you teach is phenomenal.

  • @mystic_monk55
    @mystic_monk55 Před 6 měsíci

    Thanks for the lessons 🙏

  • @TheHardWorkingDollar
    @TheHardWorkingDollar Před rokem

    Great guide. Like and subscribed.

  • @jrs_devs
    @jrs_devs Před rokem

    Amazing tutorial, new skill added to NestJS. I've done same but using PM2 instead of Kubernetes/Docker, for sake of simplicity.

  • @kerodfresenbetgebremedhin1881

    such quality content, I am familiar with most English speaking youtubers in this space and u r simply unmatched.

  • @innocentmazando3808
    @innocentmazando3808 Před rokem

    For a newbie in Nest I didnt get quite a number but somehow this ia looking so cool and helpful.|
    Cant wait to flow in Nest and deployments with K8s like you did on this project.
    Thanks mate :)

  • @laurentlouis3509
    @laurentlouis3509 Před rokem

    Very useful, thank you!

  • @prashlovessamosa
    @prashlovessamosa Před 11 měsíci

    Thank you for making this.

  • @norhanel-nezamy6465
    @norhanel-nezamy6465 Před rokem

    great content keep rocking🚀

  • @nishanthakumara8753
    @nishanthakumara8753 Před rokem

    Great content. Thanks

  • @alvarorc28
    @alvarorc28 Před rokem +3

    Hi Michael, very nice content!! Just want to point that you need to create a LB (eg nginx) to randomly pick a pod inside the k8s and make sure that you are indeed using a distributed system.

  • @user-tt6nc6mo7k
    @user-tt6nc6mo7k Před rokem +1

    Hi Michael, great video again. Very well put together, straight to the point with a real example.
    If you don't mind me asking, what are the reasons someone would choose to use bullmq over say rabbitmq? Is there a particular reason you have started looking into it?

    • @mguay
      @mguay  Před rokem

      So I think they're different solutions to this same problem of achieving scale by distributed async processing. They obviously have their own differences between each other and it's a matter of finding what works best for you. BullMQ is "simpler" in my opinion, no need to ack messages, etc.

  • @metatronicx
    @metatronicx Před rokem

    Great tutorial. Thank you...But how do you set up the kubernetes cluster you're using ? Can you help me with that ?

  • @brianjmquio5156
    @brianjmquio5156 Před rokem +1

    Would love to see how are you going to write end-to-end test for this

  • @muhammadhaseebkhalid2966
    @muhammadhaseebkhalid2966 Před 6 měsíci

    Hi Micheal, great video!!
    Is it possible to run NestJS Bull Queues in a separate process on AWS/Heroku? If so, please provide an example.

  • @kaiwenxiao7728
    @kaiwenxiao7728 Před rokem

    Hi Michael, could you explain what difference between bull and rabiitmq? I’m an newer for backend, Thanks!

  • @buzzzom7384
    @buzzzom7384 Před rokem +7

    One remark here. Bull is not exactly the same thing as BullMQ. BullMQ is a newer version of Bull written in TS. NestJS provides separate packages for Bull and BullMQ.

  • @blender_wiki
    @blender_wiki Před rokem

    How you think this great solution compare to using an orchestrator like Netflix conductor or Netflix maestro?
    Thanks for sharing your knowledge with us.

  • @inanesilence
    @inanesilence Před 9 měsíci

    Very nice content, but I would like to ask you. How to return data from the queue to one front end via websocket?

  • @mr_ehmed
    @mr_ehmed Před rokem

    i want to attached bull-board to monitor queues
    how i can do? i don't find any helping material

  • @puntero
    @puntero Před rokem +1

    This is great! I see however usage of Bull and Redis is mostly recommended for intensive tasks. Would implementing this queue architecture on, say a REST service, beneficial?
    I'm thinking maybe the queue system can help on handling errors and probably restarting failed tasks that run daily on the application, such as a data validation task or a database mutation.

  • @thomassohet3619
    @thomassohet3619 Před 9 měsíci

    Great content again.
    Quick question though, with your first example "transcode an audio file", why choose to go for a job with BullMQ (the queueing system with Redis) instead of an event with EventEmitter (appart from showcasing it of course)?
    Both would achieve the same result right ? Not blocking the thread and decoupling the producer/emitter from the consumer/listener ?
    My question is thus : are those 2 patterns just different ways to implement a distributed system ? Why go for one or the other then ? What are the main differences ?

    • @ofuochi
      @ofuochi Před 7 měsíci +1

      There's is a fundamental difference between a QUEUE and a PUB/SUB or EVENTS.
      A queue (just like the name implies) strictly follows a FIFO sequence, meaning that, regardless of the number of replicas or instances there are, only one of this instance can dequeue and process the data in sequence (based on how they got enqueued). However, in the case of events (or pubsub), there's a producer of the event and potentially multiple subscribers (one to many). Hence, when an event is published, multiple instances could subscribe and react to that event.
      In essence, it depends on your architecture and what you're trying to achieve but that is basically the difference.

  • @youjean83
    @youjean83 Před 11 měsíci +1

    Just one thing to mention, nestjs/bull !== nestjs/bullmq!

  • @himalayaahuja7547
    @himalayaahuja7547 Před rokem +1

    So instead of using Docker and K8s orchestration what if we're using a LB with multiple ec2 instances (like in AWS) would the entire setup still pick only 1 of the consumer to process the message and not multiple consumers (from other servers) fighting to process that message?
    I mean is this the nature of distributed queuing system that allows this to happen or something else?

    • @ofuochi
      @ofuochi Před 7 měsíci

      It's a distributed queue. Doesn't matter who or what consumes it. It is guaranteed (to a very high certainty) that it's gonna be sequential (FIFO).

  • @sportyarea6951
    @sportyarea6951 Před 9 měsíci

    Can we use kafka or rabbitmq instead of bullmq? Is that the right way

  • @moylababa8196
    @moylababa8196 Před rokem

    Your tutorial is very good and advanced, if possible make a udemy course with all these topic

    • @mguay
      @mguay  Před rokem +1

      My new Ultimate Nest.js Microservices course will cover this! Stay tuned for its release in May.

  • @ekopurnomo9221
    @ekopurnomo9221 Před rokem

    waiting for full course from fundamental to advance

  • @technoinfoworldwide2329

    Can you amazon clone or any big projects using node microservice architecture and mongodb as a db.

    • @mguay
      @mguay  Před rokem +1

      My new Ultimate Nest.js Microservices course will cover this! Stay tuned for its release in May.

  • @nilanjanmajumder9831
    @nilanjanmajumder9831 Před 7 měsíci

    why not use kafka ?

  • @rakshiths.n9680
    @rakshiths.n9680 Před rokem

    When will you be launching your Udemy course, plz give us any update on that.

    • @mguay
      @mguay  Před rokem +1

      I have about 3 hours recorded so far.

  • @ConAim
    @ConAim Před rokem

    ...need to set TTL on those bull:transcode..

  • @patrik_stodola
    @patrik_stodola Před rokem

    How to scale big PostgreSQL database with + 100 milion records?

  • @Mnigos
    @Mnigos Před měsícem

    You are using bull not bullmq

  • @GabrielGasp
    @GabrielGasp Před rokem +1

    I believe the consumers should be an app separate from the API, no? The way your are doing in the video, if you have 5 replicas and send 5 requests, a 6th request will hang because the transcoding processes are blocking all 5 API nodes.

    • @mguay
      @mguay  Před rokem

      Definitely - nice add. If we want to produce as fast as possible and not be affected by the consumers, this is a great architecture you describe.

    • @raressh2712
      @raressh2712 Před rokem +1

      Well, actually, you can use the same app but offload the transcoding to a worker thread which is designed for CPU-intensive tasks, or you can spawn a process if you are using ffmpeg, for example. In this way you can put in the bull job the code that spawns the new thread/process and you will able to scale for an infinite number of concurrent transcodings, because bull will send the next job to process only after it finishes the previous one (unless you overwrite the default concurrency).

  • @md.redwanhossain6288
    @md.redwanhossain6288 Před rokem

    bullmq should be used instead of bull

  • @franciscomartos2261
    @franciscomartos2261 Před 8 měsíci

    This is not BullMQ

  • @md.redwanhossain6288
    @md.redwanhossain6288 Před 8 měsíci

    you are using bull and the video title says bullmq. This is not good.

    • @mguay
      @mguay  Před 8 měsíci

      Thanks for pointing that out. I've updated it

  • @mingli9563
    @mingli9563 Před 10 měsíci +1

    I don't like the nest.js. over engineered and complicated.