WHATSAPP System Design: Chat Messaging Systems for Interviews

The Whatsapp system architecture is a common system design interview question. This interview question asks us to select a set of features like sending chat messages, read receipts, group messaging and last seen visibility.
The chat system must be scalable and have other non functional requirements like message ordering, retrial, idempotency, load balancing and image sharing.
Recommended system design video course:
interviewready.io
Along with video lectures, this course has architecture diagrams, capacity planning, API contracts and evaluation tests. It's a complete package.
Use the coupon code 'earlybird' for a 20% discount!
Check out the other system design videos on the channel here:
• System Design for Begi...
References:
Designing Data-Intensive Applications - amzn.to/2yQIrxH
spectrum.ieee.org/tech-talk/c...
highscalability.com/blog/2014/...
highscalability.com/blog/2014/...
Tinder video - • System Design: TINDER ...
System Design Playlist - • System Design for Begi...
Load balancer - • What is LOAD BALANCING...
Consistent Hashing - • What is CONSISTENT HAS...
Message Queues - • What is a MESSAGE QUEU...
Messaging idempotency and ordering - • System Design - Messag...
Chapters
00:00 Requirement Setting
02:35 Image storage
03:07 System Design
15:00 Load balancer
21:00 Consistent Hashing
21:55 Message Queues
23:05 Messaging idempotency and ordering
#SystemDesign #DesignWhatsapp #gkcs
You can follow me on:
LinkedIn: / gaurav-sen-56b6a941
Instagram: / applepie404
Quora: www.quora.com/profile/Gaurav-...
GitHub: github.com/coding-parrot

Пікірлер: 1 200

  • @gkcs
    @gkcs Жыл бұрын

    You can watch more system design videos here: interviewready.io

  • @louis-ericsimard7659
    @louis-ericsimard76595 жыл бұрын

    Hi Gaurav, I have been a developer for 43 years and a system architect for 30. As a very experienced professional all I can say is: good work ! You are the real deal.

  • @gkcs

    @gkcs

    5 жыл бұрын

    Thank you Louis! 😁

  • @BackToBackSWE

    @BackToBackSWE

    5 жыл бұрын

    nice

  • @jawwadismail9419

    @jawwadismail9419

    3 жыл бұрын

    @@BackToBackSWE r u real?

  • @umangmalhotra1222

    @umangmalhotra1222

    3 жыл бұрын

    @@jawwadismail9419 Apparently Yes.

  • @judisjeevan4908

    @judisjeevan4908

    3 жыл бұрын

    43 years..!!!! wtf..which language did you use..what kind of developer you have been..? World wide web just came into existence on 1989.

  • @zippytyro
    @zippytyro5 жыл бұрын

    I learn more on KZread than school !!

  • @gkcs

    @gkcs

    5 жыл бұрын

    Yey!

  • @dailyupdates7282

    @dailyupdates7282

    4 жыл бұрын

    Learn from pune University It is very tough Very difficult subjects

  • @developerforcloud1478

    @developerforcloud1478

    4 жыл бұрын

    Lately i started seeing so many posts all over saying "I learn more on youtube than school/college" No, need to demotivate young generation. They cannot teach you system design in school, this is specialization, not general subjects like PCM. Even in kinder garden, they teach kids about movement of hands to write, ultimately at home parents have to help kids in practice. We cannot expect nursey schools to teach kids writing.

  • @marioleon86

    @marioleon86

    3 жыл бұрын

    That is a fact. I said the same 8 years ago in some countries the quality of contents in university is really poor, so when you discover youtube is a tool for learning you agree with this sentence

  • @headoverbars8750

    @headoverbars8750

    3 жыл бұрын

    I would say by now that is true for me as well and I have a college education

  • @varunmahanot5766
    @varunmahanot57664 жыл бұрын

    occasions like good morning in India putting a lot of pressure on the servers🤣🤣

  • @gkcs

    @gkcs

    4 жыл бұрын

    Hahaha!

  • @krithikasaikrishnan622

    @krithikasaikrishnan622

    4 жыл бұрын

    You forgot about forwards that must be forwarded within 3 seconds :P

  • @reyazahmed3427

    @reyazahmed3427

    3 жыл бұрын

    Hahahaha 🤣🤣

  • @rckstrbhushan

    @rckstrbhushan

    3 жыл бұрын

    Hahaha

  • @TheRealKitWalker

    @TheRealKitWalker

    3 жыл бұрын

    Bwahahahahaha!! 😂😂

  • @yaraye5397
    @yaraye53974 жыл бұрын

    One thing I really like about your video is that you always tried to explain things from the client side, which makes it highly understandable for us as clients in our daily life. Thanks for your video!

  • @asurakengan7173
    @asurakengan71733 жыл бұрын

    This was great. A minor nitpick, this is not what peer to peer means although it can be confusing. Peer to peer would mean apart from one time registration, the connection never touches your server and instead is established directly between 2 clients(friends on whatsapp). Also HTTP now has server push and whatsapp actually uses XMPP(slightly modified).

  • @ashishchourasia2830
    @ashishchourasia28303 жыл бұрын

    I don't know anything about system design or even what it is, yet I clicked the video and watched it full. Just understood everything, great teaching skills :)

  • @maggiemu4650
    @maggiemu46503 жыл бұрын

    I really amazed by how good you are at explaining complex concept in such a simple way. I can just keep watching all your video. Great job! ❤️

  • @gkcs

    @gkcs

    3 жыл бұрын

    Thanks!

  • @rajchoudhary4349
    @rajchoudhary43493 жыл бұрын

    well narrated and presented. never knew whatsapp and tinder has so much thing at backend. interesting when you ask someone for a coffee. and she accepts the coffee invitation. both are important sugar in coffee and web sockets and the micro services. lol. Hats off. truly brilliant .

  • @kushagrak960
    @kushagrak9604 жыл бұрын

    KZread recommendation, thank you so much for this gem

  • @clinton11994
    @clinton119944 жыл бұрын

    I watched other videos on messaging systems and this video has a very detailed approach, I was hunting for videos just to know how to have multiple servers for socket processes when the client is a mobile app and I feel this video has helped me a lot with that.

  • @theverybestdev

    @theverybestdev

    3 жыл бұрын

    @@SK18459 you both didn't post anything yet

  • @svgi1210
    @svgi12104 жыл бұрын

    Age and experience doesn't matter to achieve, you proved it bro

  • @GaneshAcharyaAnEngineer
    @GaneshAcharyaAnEngineer5 жыл бұрын

    Great video, this kind of stuff is not easy to learn and not enough resources out to explain. Thank you for your great efforts

  • @gkcs

    @gkcs

    5 жыл бұрын

    Glad to help 😁

  • @F1mus
    @F1mus4 жыл бұрын

    Hey man, nice video, but there's a mistake: long polling is not polling every minute to get updates. Long polling is when you keep an HTTP request open (think: spinner in Chrome while the page is loading) forever, until the server decides to respond. This in effect makes it near real-time. It's one of the ways websockets work.

  • @puru.gupta901

    @puru.gupta901

    2 жыл бұрын

    He meant Ajax polling probably, a lot of people refer to normal polling as long polling

  • @RaghvendraSinghIIITA

    @RaghvendraSinghIIITA

    2 жыл бұрын

    I was going to mention the same. Major problem in long polling is that if the amount of data on server is too much then you need to keep creating the new paginated requests. But otherwise for small push messages long polling works well.

  • @shilashm5691

    @shilashm5691

    Жыл бұрын

    Yes, if he is worried about sending messages from server to client. He can use Server Side events

  • @kobew1351

    @kobew1351

    Жыл бұрын

    long polling still requires client to send a request first, in this case websocket works the best. or a custom protocol on top of tcp also ok.

  • @joshuakoehler6457

    @joshuakoehler6457

    2 ай бұрын

    Yep, he meant to say *short* polling.

  • @abhisheknair_music
    @abhisheknair_music4 жыл бұрын

    These videos clearly shows how far away are university syllabuses from the real-world problems

  • @suthan2003
    @suthan20033 жыл бұрын

    I really like the way he smiles and teaches. I know nothing about systems but that smile alone made me comfortable to watch the video......keep the same passion my friend......

  • @inasuma8180
    @inasuma8180 Жыл бұрын

    i'm interviewing this week for systems design for the first time in my 6 year career. this isn't part of my job. but here i am, learning an irrelevant (to me anyway) skill to be better at tech interviews. thanks for sharing!

  • @kartik180rajesh1
    @kartik180rajesh14 жыл бұрын

    You're really underrated in the developer circle. People need to watch all this a lot more than programming basics.

  • @varunmanjunath6204

    @varunmanjunath6204

    2 жыл бұрын

    He doesn't have enough videos .plus partial knowledge. Although he us very good

  • @Cyborg1170
    @Cyborg11702 жыл бұрын

    Thank you Sir. I moved from India to San Antonio as new college grad. Amazon offering me 500K per year. Excited. Thanks for video.

  • @cmdaltctr
    @cmdaltctr Жыл бұрын

    I found your channel randomly and I was so grateful, thank you so much.

  • @miafar7212
    @miafar7212 Жыл бұрын

    I'm from a non technical background and this video was super helpful and clear. On a side note, "Check with your doctor if group messaging is right for you" - hilarious :'D

  • @ammarshareef462
    @ammarshareef4625 жыл бұрын

    Yet another great video on system design! Keep up the good work, also now I can watch in 1080p YAY!

  • @gkcs

    @gkcs

    5 жыл бұрын

    Yey!

  • @BiancaAguglia
    @BiancaAguglia5 жыл бұрын

    Yours are some of the most helpful videos I've come across. Thank you for doing such a wonderful job.

  • @gkcs

    @gkcs

    5 жыл бұрын

    Thank you!

  • @arghamaz
    @arghamaz4 жыл бұрын

    Brilliant communication skills and very good English accent... great job keep it up

  • @itssantanu
    @itssantanu2 жыл бұрын

    Hi Gaurav , fantastic architecture design and explanation . But, for group massaging, "session" micro service is calling another "Group" micro service , which is kind of http chaining and potentially example of anti-pattern. Can't we implement messaging mechanism like "distributed Kafka" to make it more decoupled. Just a thought of mine. Let me know your take on this.

  • @hridayeshsharma1058
    @hridayeshsharma10582 жыл бұрын

    12:43 Now I understand why my gf would still show online for sometime even after we have sent goodnight messages. 😂😂

  • @nootics
    @nootics5 жыл бұрын

    I'm happy that I know what the most important part of programing is which is what you just showed, and not the writing part. It's the pen and paper part that matters. This really satisfies my superiority complex

  • @gkcs

    @gkcs

    5 жыл бұрын

    Lol 😛

  • @faysoufox
    @faysoufox4 жыл бұрын

    Nice, I like the fact that you put links to other videos for reference, this makes it easy for the audience.

  • @user-oy4kf5wr8l
    @user-oy4kf5wr8l4 жыл бұрын

    This video is awesome! Hoping I can find a good job after months of watching ur videos again and again! Thx! U r amazing!

  • @gkcs

    @gkcs

    4 жыл бұрын

    Thank you!

  • @shobhitsingh7735

    @shobhitsingh7735

    3 жыл бұрын

    Have you got the job?

  • @user-oy4kf5wr8l

    @user-oy4kf5wr8l

    3 жыл бұрын

    @@shobhitsingh7735 i got other thing in priority last year. but now i will have microsoft interview for sde2 in 1/2 weeks......... jesus.....so now i am reviewing everything...

  • @mahendramungamuru9500

    @mahendramungamuru9500

    Ай бұрын

    @@user-oy4kf5wr8l got placed buddy ?

  • @charlieporciuncula3300
    @charlieporciuncula33003 жыл бұрын

    Dude! As a beginner, I'm mind blown! Subscribed!

  • @venkatasundararaman
    @venkatasundararaman2 жыл бұрын

    Wonderful video which covers all the technical concepts involved. This is incomplete without any resource estimates like storage/bw and what kind of stores to use like a Key/Value store like etcd will work etc.

  • @chandanadas7860
    @chandanadas78604 жыл бұрын

    Found KZread recommendations today. Great video indeed.

  • @abhijit-sarkar
    @abhijit-sarkar7 ай бұрын

    Having sat in FAANG interviews both as an interviewer and as a candidate, I can say that this is not going to hold up for someone interviewing for a senior position.If you have less than 5-7 years of experience, you may get away with some hand waving, but for 10+ years, we want to see more depth. Some of the users have already brought up questions like delivery of offline messages, which is a basic feature missing. Apart from that, there are some crucial things missing in this video: 1. **API**: You want to discuss basic API (like REST) design, verbs supported, payload etc. You don't need to spend 30 minutes creating a JSON schema, but mention the endpoints and what's being sent and received. This matters for latency, and for some advanced things like security, API versioning, bandwidth usage etc. 2. **Back of the envelope calculations**: This is important for scalability, availability and storage. How many daily active users? Is there a limit to the message size? (you probably don't want people dropping 5 GB pirated movies in a group). How many gateway servers do you need? How long are the messages stored? Do you need to shard the DB? What is your partition key, and how do you deal with hot partitions? 3. Most importantly, **offer alternative design options and discuss trade offs**. If you can only talk about one thing, then you most likely learned it from some blog/video/whatever. There's no perfect solution in system design, so, we want to know you can think out of the box, and why you are choosing to go one way or the other.

  • @YeetYeetYe

    @YeetYeetYe

    5 ай бұрын

    Yeah there is A LOT missing here. Like.. A LOT

  • @anchalsharma0843

    @anchalsharma0843

    Ай бұрын

    thanx Abhijit! This comments gives me an idea of what else to think of rather than taking a fixed approach. If you could suggest some resources/or just general advice to me for preparing sys design, i'd really appreciate it. (I've 2 yrs of exp )

  • @samyakjain6698
    @samyakjain66983 жыл бұрын

    You did a great job of listing the microservices and interaction between them. One thing which I would like to know more is the database design. How do we maintain a system with so many chats each with thousands of messages growing over time.

  • @DebajyotiDev

    @DebajyotiDev

    2 жыл бұрын

    Once WhatsApp successfully sends a message to B, they will delete it from their end and save whatever to your GDrive / iCloud. They do not store billions of messages. N.B: I don’t work in whatsapp.

  • @aditya.chandel

    @aditya.chandel

    Жыл бұрын

    A moderately sized server can maintain around 25k-35k simultaneous TCP connections, so a single server can serve about 25k-35k users (assuming that every user uses just one client). And to handle the ever-growing user base there no option other than adding more physical servers.

  • @pradeeppradyumna601
    @pradeeppradyumna6012 жыл бұрын

    Kudos to you Gaurav. Your contents are always easy n straight forward to grasp. Thank you for making life better

  • @michaelgaines6320
    @michaelgaines63202 жыл бұрын

    Great job as always! Thank you for actually enjoying what you are explaining.

  • @TheOriginalDonPablo
    @TheOriginalDonPablo5 жыл бұрын

    I have hit the like button. I have subscribed. You are awesome!. So happy I found your channel.

  • @dieddzaandam
    @dieddzaandam Жыл бұрын

    Great video! About the 'last seen' feature: I don't think the Last Seen is based on the last activity (e.g. sending a chat) but rather when the user closed the connection to whatsapp. So in my opinion, as soon as 1) the network is interrupted or 2) the user closes the application, the 'last seen' should be updated.

  • @shenth27

    @shenth27

    Жыл бұрын

    It should be updated as well when the user comes online and every 10 or 15 secs. So simple health probing from the app to the gateway should work

  • @TheGhumanz
    @TheGhumanz2 жыл бұрын

    Within first five minutes of the video I figured it out, this is going to be a real informative video and subscribed at the end. Great job!

  • @KiprutoR
    @KiprutoR3 ай бұрын

    KZread is such an amazing platform. Thanks for the video

  • @ashishupadhyay3368
    @ashishupadhyay33685 жыл бұрын

    I wish there was a 100 like button for the video, thanks Gaurav. You've been an inspiration for me in cracking Amazon in 2018 placements. :)

  • @gkcs

    @gkcs

    5 жыл бұрын

    Congratulations Ashish! Thanks for the feedback 😎 P.S. You could be a channel member now if you like 😉

  • @gkcs

    @gkcs

    5 жыл бұрын

    It's explained by me here :D gkcsblog.wordpress.com/2018/11/06/gaurav-sen-channel-memberships/

  • @adamhughes9938
    @adamhughes99383 жыл бұрын

    interview: "ya I'd have a lst seen microservice". Reality: "ok just add that as a function in your monolith we don't have time for a new service"

  • @gkcs

    @gkcs

    3 жыл бұрын

    Exactly! I've seen this happen in real life 🙈😂

  • @codewithidan
    @codewithidan3 ай бұрын

    Hey, just wanted to clarify a bit about long polling. Long polling is actually more of a request from the client to the server and instead of the server returning a response immediately, the server is waiting for a change of some kind, and when there is a change, the server returns the response finally to the client. It was more common back in days before Websockets were introduced and adopted by browsers around 2011 roughly.

  • @parashararamesh4252
    @parashararamesh42525 жыл бұрын

    Great video Gaurav , really makes sense when it's broken down . I would say one key takeaway at least for me is that whenever a specific microservice/ component has too much on it's plate to handle you delegate that additional burden to another microservice. Wish people could be like that sometimes in real life😂

  • @gkcs

    @gkcs

    5 жыл бұрын

    Hahaha, thanks Parashara! We can always try and delegate though :P

  • @ankushmaheshwari
    @ankushmaheshwari2 жыл бұрын

    Good video! Would have liked even more if you had included following points as well becuase I felt lost there. 1. How does the gateway manage the TCP connections for each user? Is it in memory or in external store? What happens to the clients connection and messages when the gateway goes down? 2. How does the session service talks to gateway? Is it using RPC or message passing etc?

  • @ankitjain6787

    @ankitjain6787

    Жыл бұрын

    Same question

  • @aditya.chandel

    @aditya.chandel

    Жыл бұрын

    1. A map of userId and its corresponding connection object is stored in the chat server's (gateway) memory/RAM. If a gateway goes down then all of the online clients connected to the effected gateway will loose their websocket connection, but quickly they will make a new connection to the another functioning gateway.

  • @vijaybabaria3253
    @vijaybabaria32534 жыл бұрын

    thanks for the amazing contents, brother.. another topic suggestion is system design for payment processing system like venmo or paypal

  • @adambright5416
    @adambright54162 жыл бұрын

    And here I am, looking at some guy teaching IT things I should probably know already... Thanks :D

  • @ramamurthikumar3116
    @ramamurthikumar31165 жыл бұрын

    Thank you so much for the video. The best part I liked is, you asked us prior, which is the next video to be uploaded. Thanks again. Just take care of voice modulation in the video next time :)

  • @gkcs

    @gkcs

    5 жыл бұрын

    Thanks! I forgot to record the microphone for that time, so had to make do with the camera audio 😛

  • @PradeepMahato007
    @PradeepMahato0073 жыл бұрын

    Great Video, Helpful !! I feel the 'Last Seen' feature could be improved (based on the steps described in the video). The only shortcoming I see with the current approach is, 'What if the user replies a message (i.e an action taken by the user) from the notification directly without opening the application !!'. One approach could be if a flag is sent in the request { 'fromNotif': true } that could be used to determine to decide if the Last_Seen table needs to be updated. Another could be to use the WebSocket connection itself and using the disconnect callback (once the user gets out of the application, the WebSocket connection can be disconnected). Push Notification can be used to update the message count once the user is outside an application and more approaches could be formulated further. Nevertheless, your video does help for beginners in system design.👍

  • @kaushalkishore9792
    @kaushalkishore97922 жыл бұрын

    Good work. There are a few important topics worth covering though. 1. What happens to a message sent to an offline user. 2. What choices of storage do we have ? 3. What kind of load + image/video messages ?

  • @unmeshchougule5666

    @unmeshchougule5666

    Жыл бұрын

    I believe the 1st point is already covered by him, the message is stored in queue/db.

  • @aditya.chandel

    @aditya.chandel

    Жыл бұрын

    1. All messages are stored in the database. Once the receiver comes online, receiver's client application checks with the chat server if the receiver has any pending messages that he/she should receive. If there are, then those messages are delivered to the user's client application via websocket. 2. A wide column database like HBase will be good for this use-case (i.e. lots of small messages with very low relation). 3. I didn't understand what you mean here. For storing images and videos we should make use of CDNs.

  • @kobew1351

    @kobew1351

    Жыл бұрын

    for no.1 , the answer depends on how you "persist" the messages. In case of queues, a pull request can suffice as all messages in the queues are "pending to be delivered". The trouble (if it's indeed a trouble) would be how you should manage such a big amount of queues (e.g. one queue per friend pair). however if messages are stored in db, there has to be information like "what's the oldest message that client A hasn't received yet ?". this is so that message order can be retained, And more questions come like how sharding/partitioning is done...etc

  • @chrisburd9751
    @chrisburd97513 жыл бұрын

    Excellent video - as a former data architect from JP Morgan Chase looking to expand their knowledge for social applications - excellent.

  • @gkcs

    @gkcs

    3 жыл бұрын

    Thank you 😁

  • @parthasud624
    @parthasud6244 жыл бұрын

    Great work!!!! Many thanks for putting all this together, Gaurav!

  • @jonahlin6399
    @jonahlin63994 жыл бұрын

    Hey Gaurav - thanks so much for putting up such quality content! You're truly a wizard.. I've been learning so much about system design purely from your videos. I was wondering though, where exactly should I be placing the message queue in this example? Would it be after the sessions microservice confirms with the group-service which users are part of the specific group that the message is directed towards?

  • @dinotumu
    @dinotumu3 жыл бұрын

    This is just that amazing video I was looking for. Regarding de-priotising, there is this feature called broadcast messages in whatsapp which I presume is used to send messages like "happy new year" etc. Can you tell me if I am right?

  • @jeffsmith1284
    @jeffsmith12843 жыл бұрын

    This is a good explanation from the sessions micro services perspective. But one area you need to expose a bit more is client caching.

  • @anirudhrowjee1378
    @anirudhrowjee13785 жыл бұрын

    Great one! Thank you for these videos. I'm in class 11 now, and I learn a lot from these videos.

  • @gkcs

    @gkcs

    5 жыл бұрын

    Wow, awesome time to start!

  • @Gualcm
    @Gualcm4 жыл бұрын

    I love you man, I used this to get an offer in my interview today.

  • @gkcs

    @gkcs

    4 жыл бұрын

    Congratulations!

  • @vikrant4666

    @vikrant4666

    4 жыл бұрын

    u wrote same thing under facebook system design video

  • @dasamlan9874

    @dasamlan9874

    3 жыл бұрын

    @@vikrant4666 whatsapp is owned by fb, right?

  • @anurag3487
    @anurag34875 жыл бұрын

    Great video brother...There seems to be fluctuations in the room lights where in you're recording... Subscribed

  • @gkcs

    @gkcs

    5 жыл бұрын

    Will keep that in mind, thanks!

  • @therealb888
    @therealb8885 жыл бұрын

    Finally an Indian tech/engineering related youtuber who can speak English! But more importantly a very well explained video. Keep it up!

  • @gkcs

    @gkcs

    5 жыл бұрын

    That's quite a demeaning comment b888, considering English is rarely our first language. Thanks for the compliment though 🙂

  • @michaeldang8189
    @michaeldang81894 жыл бұрын

    Making educational video in a happy mode desires a big thumb up!

  • @arturkomyakov7729
    @arturkomyakov77294 жыл бұрын

    QQ: if you try to keep gateways light and delegating all complicated logic and memory usage to other services, you will still have to scale them per number of users/messages. So either there should be some discussion around batching between gateway and sessions or you can just scale the number of gateways and keep some logic there (for example parsing).

  • @shoban2090
    @shoban20905 жыл бұрын

    Your system design videos are excellent! very easy to understand when comparing to others. It would be great if you explain multiple recursion(more than one recursive call in a function). I've reffered some online resources but It looks more confusing. I know you could make it easy to understand :)

  • @gkcs

    @gkcs

    5 жыл бұрын

    I'll add this to my list of videos to do 😁

  • @shoban2090

    @shoban2090

    5 жыл бұрын

    Wow! Thanks Gaurav 😊

  • @LettersByPooja
    @LettersByPooja3 жыл бұрын

    Bang on! the tech depth, the teaching style. extra +1 for making the learner think. Great video. Thanks Gaurav

  • @gkcs

    @gkcs

    3 жыл бұрын

    😁

  • @shashankcool
    @shashankcool4 жыл бұрын

    Hi Gaurav, Thanks for sharing videos on system design. You explain very well. God bless you and keep sharing such great videos.

  • @riazbacchus3962
    @riazbacchus39625 жыл бұрын

    dude you are the man.

  • @junko78
    @junko784 жыл бұрын

    Hi Gaurav!! Thank you for educating me with all your awesome videos! I have a request for a video! Can you talk about building a cloud-native system? Things like what's the benefit of using cloud and where we should be careful when designing a system. Also, as Hadoop is dying recently, I feel like some of the solutions are out-dated. For example, HDFS and HBase won't be a good option anymore as they require Hadoop cluster.

  • @intekhab3425

    @intekhab3425

    Жыл бұрын

    This didn’t age well

  • @siddheshswnt
    @siddheshswnt5 жыл бұрын

    Thankfully I came across this channel. Really awesome videos and explained in easy way. Keep up the great work!

  • @gkcs

    @gkcs

    5 жыл бұрын

    Thank you!

  • @SahilPatel-jv1fw
    @SahilPatel-jv1fw Жыл бұрын

    Bhaiya ye video ne meri placement lagva di, thank you so much

  • @iitgupta2010
    @iitgupta20104 жыл бұрын

    Hi Gaurav, Great video few suggestions; 1. Keeping too many gateway would kill you latency [or may be I'm overthinking] but if we have some services which basically authenticate and establish the web socket connection, there after other services which work as mediator and communicate back-n-forth with client then we can simply reduce the number of gateway we need. [ essentially the gate would do this, but we don't need as many gateway as client are there; imagine 50 million clients at a time on whatsApp] 2. We should not stick with only push mechanism, where you said that "server will keep trying to to send the message to B" instead here it should be pull technique should be use. What I. mean is, once a user successfully establish the connection to Chat server, it AsK "do you any thing for me" and server response back (through queue technique so that message order are persisted ) and then after its all push technique until same thing happen for different user This way we keep server doing less and redundant work, to keep checking. Again think about 50 million user there. on Percent, 0.01% [5K users at least] of them chat each other. then there would be very high number of user might not be online, and for that server keep trying. 3. We don't need to keep checking in server database for where the user is, we should cache them. That may be 50 million entries at max at a time. As soon as the user goes off, remove him [ make sure the app should send the right information, don't send that when user just stack the application and will come back in a minute or so. it should be only when there is no internet connected.] In the essence, the connection would be of two types {1. active 2. ideal- help to build last seen too} when connection is ideal, we can utilise the connection for other chat and as soon as the user receive a message then we'll either create a new (if that connection goes off) or use the same. This is trade off you see, making a new connection is costly but keeping lot of the ideal is also poor. incase , if we mark offline the user who is connected to internet, we'll lost real time communication.

  • @shivujagga

    @shivujagga

    2 жыл бұрын

    For point 2 - Notification service and chat-service will be push, whereas, first time client connection would be pull.

  • @shubhimohta8488

    @shubhimohta8488

    2 жыл бұрын

    If first time client connection is pull, will that not create an overhead as client can connect disconnect too frequently due to unstable internet connection or is that acceptable?

  • @kobew1351

    @kobew1351

    Жыл бұрын

    no,2 makes sense when queues are in place or messages themselvs are persisted somewhere in database (so that a select can be performed). for no.1 a server box likely can only handle a few millions at most, so for whatsapp scale, several tens of gateways will be needed.

  • @kobew1351

    @kobew1351

    Жыл бұрын

    @@shubhimohta8488 that should be fine, 1. for most users, connections are there for some time. 2. the payload over a pull is generally not very big and is acceptable .

  • @Frigno
    @Frigno5 жыл бұрын

    I'm not into programming, though I appreciated this video. I'd really like you to publish a similar lesson, but for Telegram. Thanks in advance, and keep up the good work.

  • @gkcs

    @gkcs

    5 жыл бұрын

    I'll check out Telegram and see if I can make time for it 🙂

  • @utkarshkore4076
    @utkarshkore40765 жыл бұрын

    Great video brotha.. @gauravsen. Nice work you're doing thumbs up for that. Hope we had lectures for these topics and lecturers like you🤗

  • @ruchirai5775
    @ruchirai57753 жыл бұрын

    Thanks, this is good session for UI developers also to understand on high level how chat system works.

  • @vinayagamnatarajan
    @vinayagamnatarajan2 жыл бұрын

    Hi @Gaurav Sen This is very good session. Just wanted to ask, If use MQTT instead of web sockets. Does the native support for publish/subscribe would bring any advantage for the chat application?

  • @lunaRdeltaY

    @lunaRdeltaY

    Жыл бұрын

    same question here

  • @jayeshudhani99
    @jayeshudhani992 жыл бұрын

    Hi Gaurav, I have one query : How will database keep re-trying? Should we use message queue here instead of DB?

  • @sriramv4306
    @sriramv43065 жыл бұрын

    Excellent stuff buddy. Very useful. Keep up the good work.

  • @msms3260
    @msms32603 жыл бұрын

    He is a master of block diagrams

  • @RicardoSilvaTripcall
    @RicardoSilvaTripcall5 жыл бұрын

    Amazing content, kudos from Brazil !!!

  • @gkcs

    @gkcs

    5 жыл бұрын

    Thank you!

  • @hemantjain6016
    @hemantjain60165 жыл бұрын

    Great Video, Really liked this one...!!! Just wanted to ask that for the last seen timestamp wouldn't it be better if the client sends a request(Or should I say message!) to the server when the user exits the messaging app(maybe when he exits the main app activity)., Wouldn't it save a lot of overhead for the last seen timestamp(Not taking into consideration the online stamp)?

  • @gkcs

    @gkcs

    5 жыл бұрын

    That's a really good idea...it should save a lot of bandwidth in general. It would also be quite accurate. Nice point!

  • @hemantjain6016

    @hemantjain6016

    5 жыл бұрын

    @@gkcs I didn't know anything about system design until I started watching your videos. Starting to get interested in system design because of your effort.

  • @hiteshgoyal1620

    @hiteshgoyal1620

    5 жыл бұрын

    Nice idea..well thought..!!

  • @mrgotu

    @mrgotu

    5 жыл бұрын

    There might be chance that user lost internet connectivity before exiting app

  • @toddmoore112

    @toddmoore112

    5 жыл бұрын

    why don't you create one watshapp like app when you know the design and overtake it ?

  • @chandeshify
    @chandeshify3 жыл бұрын

    Very clear narration and provides a high level overview

  • @SreekarAnugu
    @SreekarAnugu3 жыл бұрын

    I only had one or two serious system design interviews till now and the face expressions of the interviewer really put you off sometimes. I have never seen anyone explaining system design like this, it's good to know that I'm not very far off.

  • @aww_rijit
    @aww_rijit3 жыл бұрын

    How does Telegram can function having lakhs of members in each group?

  • @yangangye5819
    @yangangye58193 жыл бұрын

    Thanks for your effort! It's great to learn lots of things from your video. But I still have a question after watching this video. Why consistent hashing can help to reduce duplicate information (on 20:57 explaining the group service)? Isn't it just a way of knowing which record should be found on which server?

  • @phildinh852

    @phildinh852

    2 жыл бұрын

    Probably for vertically partitioning table?

  • @saiprasannabaskaran9038
    @saiprasannabaskaran90382 жыл бұрын

    This man is a legend!

  • @balaramkantipudi3728
    @balaramkantipudi37285 жыл бұрын

    With this video I got interest in the topic of system design completely,even I don't know what it was before...

  • @gkcs

    @gkcs

    5 жыл бұрын

    Glad to hear that!

  • @StefAmpersand
    @StefAmpersand3 жыл бұрын

    Great video, Gaurav! Chapeau! I was wondering why the messages are stored in message queues. Why not a low-latency publish&subscribe mechanism? I would think a persistent event stream (e.g. Kafka topics) yields a simpler architecture for this particular use case. Just give each user group a Kafka-topic of its own. Now WhatsApp has smart software engineers on board, so I'm wondering what they have done to compare these two (MQ vs. Kafka) and why it turned out to be an MQ-architecture.

  • @susheelmadwani
    @susheelmadwani5 жыл бұрын

    @Gaurav: Man I envy you, you are a gem explaining the complex things. I have 1 basic question: As we are using websockets for communication, don't we require not million but thousands of servers to connect billions of users ?? If you can help me understand this part can help a lot.

  • @deepbrar6152

    @deepbrar6152

    4 жыл бұрын

    I don't think WhatsApp uses WebSockets. A traditional method to scale this kind of application is using telecom technologies such as Jabber or core ErLang.

  • @bhavikgarg5662

    @bhavikgarg5662

    4 жыл бұрын

    @@deepbrar6152 Yes Whatsapp uses EJabbered which is implemented in ErLang

  • @adamhughes9938

    @adamhughes9938

    3 жыл бұрын

    I also am confused here. If A and B are both connected to the server, is the websocket connection direct between A and B or is it still going through the server?

  • @nehadalvi409

    @nehadalvi409

    3 жыл бұрын

    @@adamhughes9938 I think the websocket connection is between both A and the server and also between B and the server.

  • @Torabshaikh
    @Torabshaikh4 жыл бұрын

    Hi Gaurav, thanks for your awesome videos. I am a software developer and I like to think about various famous platforms design and chat application was the most interesting system of them all. I read about various protocols for real time messaging. Which is the best among XMPP, websockets and Mqtt. I have done a lot of work in mqtt so I know this is not for chatting as it does not have message queuing but still can it be used? Also, if i want to use xmpp then how can use it in pythons or node. Thanks in advance.

  • @alsan378
    @alsan378 Жыл бұрын

    Thank you Gaurav, you cant imagine how much this video helped me last year.

  • @gkcs

    @gkcs

    Жыл бұрын

    Thanks Alvaro!

  • @kushal1
    @kushal15 жыл бұрын

    Would be great if you have another video to break it down feature wise and why these were the final choices in terms of languages/tools/concepts used to implement all this. Maybe helpful for people coming from non-backend development

  • @gkcs

    @gkcs

    5 жыл бұрын

    Have a look at the playlist mentioned in the description. Each feature is explained with alternatives.

  • @kushal1

    @kushal1

    5 жыл бұрын

    @@gkcs Concepts of system design are in place. I saw that playlist. What I mean is if one has to implement this architecture. We have to think which features in in what languages. Should this part be in Python/Node. Shall we consider gateway to database communication in Golang routines or Java etc... kind of questions.

  • @gkcs

    @gkcs

    5 жыл бұрын

    @@kushal1 Aren't those questions, too vague? I have never seen a system design interviewer ask them. At the end of the day, I may like everything implemented in binary opcodes for efficiency, but I have to perform as per the deadlines set by the product.

  • @kushal1

    @kushal1

    5 жыл бұрын

    @@gkcsWow! Someone is rude now. I never mentioned from interview perspective. It was a suggestion to dig into tech stack and make another video maybe. Thanks anyway for your content.

  • @gkcs

    @gkcs

    5 жыл бұрын

    @@kushal1 Sorry if I sounded rude, it wasn't my intention in the slightest. Replying to comments all day has taken off my tact perhaps. I'll look into this a little more and get back to you. Digging into the tech stack will certainly be of use :)

  • @letstalkalgorithms
    @letstalkalgorithms5 жыл бұрын

    Nice Video! Regarding authentication though, most of the applications in the real world rely on client directly calling the authentication service, get a valid token(JWT?) which can be used by other services before responding. This avoids the extra parsing/un-parsing hop between gateway and sessions service.

  • @MsAneesh007
    @MsAneesh0074 жыл бұрын

    Really like your videos. Keep up the good work . Cheers !!

  • @dev9033
    @dev90332 жыл бұрын

    thanks for making our life more simple with release this, so we can skip CRUD and start build whatsapp for first implementation

  • @varungupta2045
    @varungupta20452 жыл бұрын

    A critical piece that I feel is missing here is delivery of messages when the user is offline. You might not have an active connection to all users at all but you do need to deliver all the messages that were sent to them once they are connected.

  • @beibit-ds

    @beibit-ds

    Жыл бұрын

    maybe store the message in the db, and when client status changes retry

  • @paulhatcher951

    @paulhatcher951

    8 ай бұрын

    +1 I was asked this question in an interview a while back. First question when I'd done simple send receive was "What If user B is offline and not in session".

  • @raghavs750
    @raghavs7505 жыл бұрын

    Nice video. Quick question .. Why not consistent hashing to identify gateway for users and avoid session service requirement to retain a user -> gateway map?

  • @gkcs

    @gkcs

    5 жыл бұрын

    We can't keep load balancing info on the client side. Each time a server goes up or down, we'll have to tell all users in the world about it. Compared to a load balancer on the server which are few in number.

  • @liuckan

    @liuckan

    5 жыл бұрын

    @@gkcs Well that's not entirely true. You can implement client side load balancing if you're levering Service Registry (which you should in a cloud environment). You can pull the addresses of all instances of let's say Service A from the Service Registry and store them on the client. This way you can have client side load balancing (e.g. Round Robin/Zone based - whatever - but the client now has the power to decide which service to call directly). You don't need to update this cache on the client side live. You only need to update it if you are unable to find a service from the list. Then the client should pull the same list from the Service Registry (which on the other hand is live updated for all instances).

  • @gkcs

    @gkcs

    5 жыл бұрын

    @@liuckan This sounds interesting, l will read up on it. Thanks!

  • @jatinderarora2261
    @jatinderarora22615 жыл бұрын

    Thanks Gaurav. Nice explanation.

  • @andranikdhara5299
    @andranikdhara52992 жыл бұрын

    I wanted to ask something. For the online/last seen feature you mentioned, you have asked to log the latest occurrence of any request from the client. Instead, isn't it wiser to log when the client disconnected from the gateway, considering the connection are made through websockets ?

  • @Gondkar86
    @Gondkar865 жыл бұрын

    Hey Gaurav, excellent video. Learning a lot from your system design videos. However, i had a question related to last seen/online feature. Wouldn't something like hearbeat mechanism be useful for this to update the timestamp of the user?

  • @gkcs

    @gkcs

    5 жыл бұрын

    Thanks! Heartbeat for everyone would be too expensive. Especially as many users are active for a short period of time. 🙂

  • @aditya.chandel

    @aditya.chandel

    Жыл бұрын

    A better approach would be to log the timestamp at which the user last interacted with the client application (android, ios, etc).

  • @gunasekaranpalanisami6182
    @gunasekaranpalanisami61825 жыл бұрын

    nice super, and shirt like good professional look

  • @gkcs

    @gkcs

    5 жыл бұрын

    😁

  • @mohammedsharikuzama5518
    @mohammedsharikuzama55185 жыл бұрын

    I visited the Uber Hyderabad office the other day for an event. Thought of meeting you. Never had a chance to reach out hope I will meet you someday. Thanks a lot for your amazing videos man. They help a lot.

  • @gkcs

    @gkcs

    5 жыл бұрын

    Thanks Sharik!

  • @tahatungekar6809
    @tahatungekar68095 жыл бұрын

    Amazing explanation. Subscribed!

Келесі