Streaming utility to build largely-scalable, highly available, fast, and secure distributed streaming APIs!
- Simple reason is that distributed systems are cool because of many reasons and some of these reasons are largely-scalability, high availability, secure, and fast.
- With this project, I attempt to go in-depth on how to build a system that grows in functionality as well as users and the team developing it.
- It's my attempt to broaden my knowledge and make it strong by developing this real-world end-to-end product.
- Simplicity
- Strongly typed and compiled
- Compiles to a single binary with no external dependencies
- Fast and lightweight
- Good coding practices
- Excellent support for network programming and concurrency
- Easy to deploy
- Go 1.16+
| Parameters | Type | Usage |
|---|---|---|
| DataDir | string | Path to the directory to store data locally. |
| BindAddr | string | The address that Goutube will bind to for communication with other members on the ring. |
| RPCPort | int | The port that Goutube will bind to for the member's RPC server. |
| ReplicationPort | string | If this server allows replication (by setting the ParticipationRule). This is the port where leader and its follower will communicate to sync with each other. (eventually consistent) |
| NodeName | string | Unique node name to identify this member. |
| SeedAddresses | []string | Addresses of other members to join the ring upon start up. |
| VirtualNodeCount | int | Number of virtual nodes to create on the ring for this member. |
| ACLModelFile | string | Path to the model file for authorization using casbin |
| ACLPolicyFile | string | Path to the policy file for authorization using casbin |
| ServerTLSConfig | *tls.Config | To configure the server for authentication. |
| PeerTLSConfig | int | To configure the client for authentication (to connect to other servers for replication, forwarding, etc.) |
| LeaderAddresses | []string | Hash function to calculate position of the server on the ring. |
| Rule | ParticipationRule | Participation rule to define the boundary and extension of the server. |
| MaxChunkSize | uint64 | Size of the chunk that can be processed by this server. |
| MultiStreamPercent | int | Percents of the number of followers to return upon GetMetadata request? |
Feel free to create a PR, I’m more than happy to review and merge it.
- Onboard videos and documentation
- Clean code, full test coverage and minimal tech debt
Feel free to create an issue, if you have any problem running this distributed system or any suggestions.
