You can watch more system design videos here: interviewready.io
@architkapoor25033 ай бұрын
Gaurav, there is one thing you missed discussing here. How is the service-to-service communication bidirectional here. Gateway and Sessions are also peer-to-peer. But perhaps, that can achieved via gRPC, or again through web-sockets, or asynchronously through an event bus. Great if you can clarify.
@vanhungbkcbg114 күн бұрын
@@architkapoor2503 yeah, same from me, how to connect between gateway and session service in bidirectional? we are having multiple session service instance
@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.
@gkcs5 жыл бұрын
Thank you Louis! 😁
@BackToBackSWE5 жыл бұрын
nice
@jawwadismail94194 жыл бұрын
@@BackToBackSWE r u real?
@umangmalhotra12224 жыл бұрын
@@jawwadismail9419 Apparently Yes.
@judisjeevan49083 жыл бұрын
43 years..!!!! wtf..which language did you use..what kind of developer you have been..? World wide web just came into existence on 1989.
@zippytyro5 жыл бұрын
I learn more on KZbin than school !!
@gkcs5 жыл бұрын
Yey!
@dailyupdates72824 жыл бұрын
Learn from pune University It is very tough Very difficult subjects
@developerforcloud14784 жыл бұрын
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.
@marioleon864 жыл бұрын
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
@headoverbars87504 жыл бұрын
I would say by now that is true for me as well and I have a college education
@asurakengan71734 жыл бұрын
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).
@StanleySathlerАй бұрын
@@asurakengan7173 Hi bud. If HTTP supports server push, does it mean we no longer need WebSockets out there?
@ashishchourasia28304 жыл бұрын
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 :)
@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.gupta9012 жыл бұрын
He meant Ajax polling probably, a lot of people refer to normal polling as long polling
@RaghvendraSinghIIITA2 жыл бұрын
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.
@shilashm56912 жыл бұрын
Yes, if he is worried about sending messages from server to client. He can use Server Side events
@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.
@joshuakoehler64577 ай бұрын
Yep, he meant to say *short* polling.
@varunmahanot57664 жыл бұрын
occasions like good morning in India putting a lot of pressure on the servers🤣🤣
@gkcs4 жыл бұрын
Hahaha!
@krithikasaikrishnan6224 жыл бұрын
You forgot about forwards that must be forwarded within 3 seconds :P
@reyazahmed34274 жыл бұрын
Hahahaha 🤣🤣
@rckstrbhushan4 жыл бұрын
Hahaha
@TheRealKitWalker4 жыл бұрын
Bwahahahahaha!! 😂😂
@abhisheknair_music4 жыл бұрын
These videos clearly shows how far away are university syllabuses from the real-world problems
@ImEli22153 ай бұрын
4 years ago and your comment is still valid today.
@inasuma81802 жыл бұрын
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!
@maggiemu46504 жыл бұрын
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! ❤️
@gkcs4 жыл бұрын
Thanks!
@dieddzaandam2 жыл бұрын
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.
@shenth272 жыл бұрын
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
@chrisburd97514 жыл бұрын
Excellent video - as a former data architect from JP Morgan Chase looking to expand their knowledge for social applications - excellent.
@gkcs4 жыл бұрын
Thank you 😁
@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?
@ankitjain67872 жыл бұрын
Same question
@aditya.chandel2 жыл бұрын
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.
@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
@gkcs5 жыл бұрын
Glad to help 😁
@iitgupta20105 жыл бұрын
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.
@shivujagga2 жыл бұрын
For point 2 - Notification service and chat-service will be push, whereas, first time client connection would be pull.
@shubhimohta84882 жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
@@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 .
@kartik180rajesh14 жыл бұрын
You're really underrated in the developer circle. People need to watch all this a lot more than programming basics.
@varunmanjunath62043 жыл бұрын
He doesn't have enough videos .plus partial knowledge. Although he us very good
@codewithidan7 ай бұрын
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.
@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!
@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.
@DebajyotiDev2 жыл бұрын
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.chandel2 жыл бұрын
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.
@kushagrak9604 жыл бұрын
KZbin recommendation, thank you so much for this gem
@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
@gkcs5 жыл бұрын
Lol 😛
@adamhughes99384 жыл бұрын
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"
@gkcs4 жыл бұрын
Exactly! I've seen this happen in real life 🙈😂
@harsh_garg3 ай бұрын
Hi, you mentioned how we determine online status, what if the user opened the whatsapp but hasn't done any activity post that on whatsapp, just sitting idle [how we determine online status as per the discussion], but still online.
@hridayeshsharma10582 жыл бұрын
12:43 Now I understand why my gf would still show online for sometime even after we have sent goodnight messages. 😂😂
@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-ds2 жыл бұрын
maybe store the message in the db, and when client status changes retry
@paulhatcher951 Жыл бұрын
+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".
@rajchoudhary43494 жыл бұрын
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 .
@miafar72122 жыл бұрын
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
@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.
@lloydlasrado2 жыл бұрын
Wow Gaurav you should tap your back for being so popular. Lyft HR in USA forwarded this link of yours as an example to get acquittance to System Design interviews. Kudos on this achievement.
@gkcs2 жыл бұрын
Yeah!
@lloydlasrado2 жыл бұрын
@@gkcs Quit your Tech job and become professor in IIT. Students need a positive smiling professor like you :)
@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)?
@gkcs5 жыл бұрын
That's a really good idea...it should save a lot of bandwidth in general. It would also be quite accurate. Nice point!
@hemantjain60165 жыл бұрын
@@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.
@hiteshgoyal16205 жыл бұрын
Nice idea..well thought..!!
@mrgotu5 жыл бұрын
There might be chance that user lost internet connectivity before exiting app
@toddmoore1125 жыл бұрын
why don't you create one watshapp like app when you know the design and overtake it ?
@balaramkantipudi37285 жыл бұрын
With this video I got interest in the topic of system design completely,even I don't know what it was before...
@gkcs5 жыл бұрын
Glad to hear that!
@aww_rijit4 жыл бұрын
How does Telegram can function having lakhs of members in each group?
@therealb8885 жыл бұрын
Finally an Indian tech/engineering related youtuber who can speak English! But more importantly a very well explained video. Keep it up!
@gkcs5 жыл бұрын
That's quite a demeaning comment b888, considering English is rarely our first language. Thanks for the compliment though 🙂
@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. :)
@gkcs5 жыл бұрын
Congratulations Ashish! Thanks for the feedback 😎 P.S. You could be a channel member now if you like 😉
@gkcs5 жыл бұрын
It's explained by me here :D gkcsblog.wordpress.com/2018/11/06/gaurav-sen-channel-memberships/
@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.
@gkcs5 жыл бұрын
Thanks Sharik!
@ammarshareef4625 жыл бұрын
Yet another great video on system design! Keep up the good work, also now I can watch in 1080p YAY!
@gkcs5 жыл бұрын
Yey!
@shubham.60592 ай бұрын
Came here for revision observed that the video has dual audio option now as Hindi and English. Great work!
@gkcs2 ай бұрын
Thank you!
@PradeepMahato0074 жыл бұрын
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.👍
@mulllhausen3 жыл бұрын
7:40 what you describe here is just regular polling. long polling does indeed operate on a near real-time basis - the connection is held open and the server can respond to the client in real time. the difference between long polling and web sockets is that with long polling you have to drop and re-establish the connection after the client receives data from the server, since this terminates the connection. whereas a web socket stays open indefinitely.
@BiancaAguglia5 жыл бұрын
Yours are some of the most helpful videos I've come across. Thank you for doing such a wonderful job.
@gkcs5 жыл бұрын
Thank you!
@dalitex-c48855 жыл бұрын
HTTP Long polling is NOT polling. It is just Client sends request and Server only responds when they have any messages and client initiates fresh request as part of ACK to previous message. Web sockets are persistent connection mainly meant for real-time communications.
@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
@gkcs5 жыл бұрын
Have a look at the playlist mentioned in the description. Each feature is explained with alternatives.
@kushal15 жыл бұрын
@@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.
@gkcs5 жыл бұрын
@@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.
@kushal15 жыл бұрын
@@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.
@gkcs5 жыл бұрын
@@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 :)
@cmdaltctr2 жыл бұрын
I found your channel randomly and I was so grateful, thank you so much.
@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.
@gkcs5 жыл бұрын
I'll check out Telegram and see if I can make time for it 🙂
@adambright54162 жыл бұрын
And here I am, looking at some guy teaching IT things I should probably know already... Thanks :D
@yangangye58194 жыл бұрын
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?
@phildinh8522 жыл бұрын
Probably for vertically partitioning table?
@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.
@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.
@deepbrar61524 жыл бұрын
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.
@bhavikgarg56624 жыл бұрын
@@deepbrar6152 Yes Whatsapp uses EJabbered which is implemented in ErLang
@adamhughes99384 жыл бұрын
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?
@nehadalvi4094 жыл бұрын
@@adamhughes9938 I think the websocket connection is between both A and the server and also between B and the server.
@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).
@TheOriginalDonPablo5 жыл бұрын
I have hit the like button. I have subscribed. You are awesome!. So happy I found your channel.
@rekhahindwar225521 күн бұрын
I think we can design a chat system using the topic subscription method the topic could be named using group ID and in the case of simple chat, we can take the topic by joining the ID of two chat users. Also, for the last seen activity, we can trigger the event when the user closes the WhatsApp app. So we can also design a WhatsApp app by triggering events and topic subscriptions method.
@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?
@Cidloverr5 жыл бұрын
Brilliant communication skills and very good English accent... great job keep it up
@mitgundigara4664 ай бұрын
I personally felt this is too abstract however it's good place to start. There are multiple scenarios which is not handled and it's assumed that it's happy case. I request to go slight deeper in each feature. The design explained in the video is "common sense", any software developer would have think of it. But I really request if you can answer some of the below questions which interviewer can ask us during the interview, if we would have explain the same. 1) You first explained we would store the mapping of each client to the gateway box. But there will be multiple clients will be connected to same gateway. let's say A is on gateway no 1 and B & C is on gateway no 2. then let's say A sends message to B. How would gateway-2 know where we need to route the message for B and C. My hunch is gateway will be storing this information. 2) I really wanted to understand when you will use Gateway vs Load Balancer. In your all videos somewhere you have used gateway and some places you used Load Balancer. You should explain why gateway over load balancer. 3) How are you maintaining the sequence of the message is not explained, this should be a very basic message. A and B can see different view of the message. 4) Why do we need message queue to store the failed message? IMO we should maintain 3 DBs. Sent, Delivered & NotDelivered with userId as key and Map. This will be easier. Whenever A sends message and chat server receives the message you can probably initiate two thread where one thread store message in NotDelivered table and the other thread calls SessionService to fetch the B's gateway box and send the message. Once B send acknowledgement then we can remove message from the NotDelivered and put in Delivered table. You can delete the message from the DB and archive the message in the low cost storage like S3 after 30 days or data is backup. Generally it happens every day night. The advantage of this is let's say B is offline then we do have store all the message that B got from all user's in B's contact list in Not Delivered table. Once B turns internet on their app will send long polling request and then can easily fetch all the data. Is this good design? I might be wrong but this is my thought. 5) You should mention what data we can cache and at which layer. 6) I think you should be more clear when your connection will be active, when it will not. I think if someone has opened whatsapp application or as long as it is there in app background stack the connection should be open. Once we remove the application from the background stack then connection will be lost. Once the connection is lost then your application will continue to send the long polling request until internet is on at certain interval. This kind of arch will have benefit of both websocket and long polling. Once internet is off it can't do even long polling. 7) What type of database and what are the data we are storing. I read in grokking system book that we can use Cassandra (wide column family) But I didn't understood why. So What I am suggesting if possible rather than making too much abstract information, make videos little more systematic it can help us. I think there are multiple counter questions interviewer can ask. why to choose this database over other. what data you would cache, which cache policy would you use (write back/around/through). 8) Here API gateway is just routing the chat server right? It's very difficult to put all the information together. But making video more systematic would certainly help me and others. You can have define structure while making system design video. at least following structure might help better. If you can even explain 5 mins for each of the section could be very helpful to all of us doing system design preparation. 1) Requirement 2) Define constraint/limitation/ data constraint like no of server, Incoming/outgoing data/memory storage 3) High level design for each feature 4) API Gateway/ Load Balancer 5) Data layer what data you will be storing 6) Caching 7) Sharding
@curs3m4rk26 күн бұрын
good observations
@revanshraman17 күн бұрын
@@mitgundigara466 yes, indeed. It is too high level. I wish the interviewers are satisfied with such explanations.
@msms32604 жыл бұрын
He is a master of block diagrams
@RicardoSilvaTripcall5 жыл бұрын
Amazing content, kudos from Brazil !!!
@gkcs5 жыл бұрын
Thank you!
@shreyasns12 жыл бұрын
Hello Gaurav, Great video. You did not explain how the messages are stored in database, what DB to chose and how to handle retries in case offline user. So here are my questions to you. 1. How are you storing the 1:1 messages in the DB? and How do you retry if the user if offline? 2. How are you storing the sequence of the messages to shown the right order for the client side? 3. How are you storing group messages in DB and the same questions like above.
@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 Жыл бұрын
This didn’t age well
@charlieporciuncula33004 жыл бұрын
Dude! As a beginner, I'm mind blown! Subscribed!
@elachichai3 жыл бұрын
Good info. Thanks Gaurav. A suggestion. It is a good idea not to throw up a full chart (like at 15:10) at once, but take the viewer with you in developing it. Else it breaks context. Almost like seeing maths in slides.
@vijaybabaria32534 жыл бұрын
thanks for the amazing contents, brother.. another topic suggestion is system design for payment processing system like venmo or paypal
@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 :)
@gkcs5 жыл бұрын
Thanks! I forgot to record the microphone for that time, so had to make do with the camera audio 😛
@abhijit-sarkar Жыл бұрын
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.
@YeetYeetYe10 ай бұрын
Yeah there is A LOT missing here. Like.. A LOT
@anchalsharma08436 ай бұрын
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 )
@saurabhmittal69472 ай бұрын
One important point to focus would when session service is fetching the group users list and delivering the messages to all the group users.. what if it session server fails in between ? How do we track to which messages has been delivered ? We can't retry whole message, that will be sending duplicate message to the clients.
@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 :)
@gkcs5 жыл бұрын
I'll add this to my list of videos to do 😁
@shoban20905 жыл бұрын
Wow! Thanks Gaurav 😊
@rabindrapatra71512 жыл бұрын
the database may be overloaded with read queries
@NeemiasJunior14 жыл бұрын
7:15 "This can't be done with HTTP". Actually this is wrong, it's only true for HTTP1, but it is possible using HTTP2 using a mechanism called server push: en.wikipedia.org/wiki/HTTP/2_Server_Push
@vaddiparthivenkatamuralikr83345 жыл бұрын
I have been following your videos but never commented before. They contain very intellectual stuff mostly, could I request you to please concentrate on below average guys like me who can understand better with few examples. You are a great narrator.
@gkcs5 жыл бұрын
Sure Vaddiparthi, thanks!
@dinotumu4 жыл бұрын
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?
@moviesandchill78694 жыл бұрын
Very nice video but I have a concern. You dont go in detail about the type of database you are going to use for storing information for example cassandra or hbase. which one you'll prefer for storing chat messages . In interviews, interviewers are very much interested in all the tables that you need and what kind of database you'll use and why.I think this is the thing that should be discussed as well
@abhinee Жыл бұрын
Absolutely you are right
@VenturesWithVenk5 жыл бұрын
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.
@nitinagarwal40684 жыл бұрын
Hey Gaurav, 1) For first feature, why you are re-directing whole data traffic through session service ? Gateways can find the mapping through session service, and send one gateway can send data directly to other Gateway. 2) Why MQTT is not preferred over Web-socket ?
@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?
@gkcs5 жыл бұрын
Thanks! Heartbeat for everyone would be too expensive. Especially as many users are active for a short period of time. 🙂
@aditya.chandel2 жыл бұрын
A better approach would be to log the timestamp at which the user last interacted with the client application (android, ios, etc).
@rules4363 жыл бұрын
Last seen option in whatsapp works via notification Client (the whatsapp apk ) registers to server for the notification and when number is online and offline Whatsapp server sends the notification (separate one) based on this the client determines online and last seen.
@StefAmpersand4 жыл бұрын
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.
@LettersByPooja4 жыл бұрын
Bang on! the tech depth, the teaching style. extra +1 for making the learner think. Great video. Thanks Gaurav
@gkcs4 жыл бұрын
😁
@saurabhmittal69475 жыл бұрын
Thanks brother ! Can u make a video on system design of Ola or Uber too ? Please please ,🙏
@gkcs5 жыл бұрын
I don't think I will. I work at Uber, so 😛
@saurabhmittal69475 жыл бұрын
@@gkcs what about Ola??
@tarunpothulapati34255 жыл бұрын
I would definitely suggest the Uber Engineering Blog i.e eng.uber.com/ to know more about the internals of Uber's Design :)
@rahulsharma50303 жыл бұрын
thanks for nice video. 1.Can you tell me @22:24, why do we need message queues here? The message queues it seems between session and group service because actual message is sent by session service. So session service is asking for synchronous response to its request.Give me users for this groupID, why do we need to push this request message to message queue? 2. Also, how does client knows which api gateway to connect?They must be hitting some loadbalancer, which will balance connections across load api gateway?
@malikasharma15224 жыл бұрын
Doctor recommended not to watch the group messaging feature design. But i watched that and now Corona is having one to one chat with me . 😂😂
@gkcs4 жыл бұрын
Hahaha 🙈😂
@michaeldang81894 жыл бұрын
Making educational video in a happy mode desires a big thumb up!
@anurag34875 жыл бұрын
Great video brother...There seems to be fluctuations in the room lights where in you're recording... Subscribed
@gkcs5 жыл бұрын
Will keep that in mind, thanks!
@MagicWeiCN4 жыл бұрын
nice video, however, I want to point out that the WebSocket is not for peer to peer communication, certainly, you can use it to achieve the goal, but it is c/s model rather than p2p.
@sshiv9084 жыл бұрын
it makes me feel sad to realize that the clg years r wasted and I didn't learn such cool stuff
@aayushsaini93633 жыл бұрын
Ahh man same regrets
@garrysohi56234 жыл бұрын
I know html, css, js, reactjs for frontend, python for backend, and mysql. Now I want to understand how to glue these together, build an application and deploy on server. What do I need to learn next? Is this the right video?
@spetsnazGru4873 жыл бұрын
you dont need to glue.They are deployed seperately in server but communicate using http request.
@saurabh30325 жыл бұрын
Hi. Great video. Can you please consider ticket booking system like irctc or flight ticket system for your next video.
@gkcs5 жыл бұрын
I'll add it to my list of topics! Thanks 😁
@saurabh30325 жыл бұрын
@@gkcs Thank you for such great vidoes
@songs4enjoy5 жыл бұрын
A correction You seemed to have confused Long polling with polling. Both are not same. One is blind polling where server sends empty response if no data is available, where as on the other case, server will not complete request till either new data is available (or) timeout is reached. So the client will get the response as soon as the data is available on the server. If times out, client reconnects again immediately till he gets data/timesout
@gkcs5 жыл бұрын
Thanks for the correction. I think I should read more on this subject. Any system design resources you would like to share? 😋
@gkcs5 жыл бұрын
Also, these comments are very useful to the community in general. Do you have any blogs you have written? I would love to share them 😁
@songs4enjoy5 жыл бұрын
@@gkcs Tho I would love to help, I am a self taught person so most of the knowledge is current stashed in the wrong place. i.e in my head. Am planning to write few blogs on reactive streams very soon. Will share it as soon as it is ready. Not sure if it will be of much help as its more of an implementation detail most of the time Thanks for all the algorithms videos. Looks like I am quite dumb/backwards in this area, when it comes to efficiency. A lot of the questions you presented are completely new to me
@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?
@gkcs5 жыл бұрын
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.
@liuckan5 жыл бұрын
@@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).
@gkcs5 жыл бұрын
@@liuckan This sounds interesting, l will read up on it. Thanks!
@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😂
@gkcs5 жыл бұрын
Hahaha, thanks Parashara! We can always try and delegate though :P
@arvindgb79954 жыл бұрын
You have a resemblance to the actor from "slumdog millionaire", anyone told you that? Okay sorry about the personal reference, your videos are dope and very informative. Keep up the great work!
@gkcs4 жыл бұрын
😁
@raviraj82094 жыл бұрын
@@gkcs Dev Patel :P
@shruthirakesh78272 жыл бұрын
It would be best to even talk about scale estimation numbers too. For example, what is the load that this system can load and to what scale does this system handle. Basically, what should this system be a distributed problem and the estimation numbers would help in quantifying the scale.
@riazbacchus39625 жыл бұрын
dude you are the man.
@mightytechno3 жыл бұрын
One of the best channel to learn system design. Good work.
@harisbashir60745 жыл бұрын
You are amazing . love from Pakistan
@gkcs5 жыл бұрын
Love from India :D
@harisbashir60745 жыл бұрын
@@gkcs Thanks brother
@harisbashir60745 жыл бұрын
@@ff20e03bbc Shut Up :)
@alibarznji20002 жыл бұрын
First minute into the video, already subbed and clicked the bell icon
@Jc12x068 ай бұрын
This video is good enough for an engineering project, with less than maybe a thousand users. The video also doesn’t refer to any new technologies like Kafka or Kubernetes.
@gkcs8 ай бұрын
This works on prod for more than 100 thousand users. Kafka and Kubernetes aren't silver bullets, they are tech to be used only when needed. I suggest going through the basics of system design before making such a comment. kzbin.info/www/bejne/d5y0aoyMpZdkeZo
@yuvrajgupta30923 жыл бұрын
Today,I found it as KZbin recommendation.It really a grate video👍👍. Bhaiya please make the same series for the zomato like app..
@atassun5 жыл бұрын
Really great content... what abt XMPP protocol over websocket ..?
@gkcs5 жыл бұрын
That's a good way to go. I used that in my Tinder design video too 🙂
@siddheshrane90235 жыл бұрын
How about using MQTT protocol?
@KushChoudhary5 жыл бұрын
finally someone who is making unique content. Much love to u brother.
@TheGhumanz3 жыл бұрын
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!
@chandrasekharpatra24165 жыл бұрын
Hi Gaurav, I have a small doubt, how we should do routing of messages to a particular machine (the machine where user is connected) ? Should we have a queue(RMQ or Kafka) where all the messages will be pushed and workers will be reading from the queue and send to specific machine. If so does it affect to user experience ? If not other alternatives ?? Thanks for great videos.
@gkcs5 жыл бұрын
That is a good idea. Allows rate limiting and back pressure. I haven't seen it in practice though, as the services can queue the message themselves. Might be a good idea for very large applications though. Good thoughts! Cheers!