I'm growing interest in building highly concurrent distributed web applications that can serve millions of users. There are so many technologies and resources. I think the best way to learn them is by building something so that I will be able to use them when needed.
Functional requirements:
- User register, login.
- One to one chat room.
- Deliver messages in real time.
- Restore chat history when a conversation starts.
Non functional requirements:
- Easy horizontal scaling in the server layer.
This is the high level design that I am trying to achieve.
Official Language Guide of protocol buffers(https://developers.google.com/protocol-buffers/docs/proto3): You should always check the official document first.
Protobuf Uber V1 Style Guide: Google provides a Style Guide. But I think Uber's is easier to follow.
gRPC Quick Start & Basics tutorial: Hands-on exercise with gRPC.
Go Generated Code: I was quite confused with the protoc
and how to manage generated code at first. But after reading this doc, things become much more clear.
Error Handling: It contains sample code about using status
and codes
in client and server.
A high level design of distributed systems.
Although it's not directly related, I found that getting a better understanding of TCP/IP protocols helps to understand web technologies much better.
TCP/IP Guide: I highly recommend this book. It covers everything I need to understand how the Internet works in a very easy to understand way.
TCP Fundamentals - Wireshark Talks at Sharkfest Part 1 & Part 2: Seeing how the packages are passed around the network really helps me a lot to understand things I read from the book. The lecturer has some hands-on courses on Pluralsight. Very high quality. You can find them in the description of his videos.