Skip to content
This repository was archived by the owner on May 22, 2021. It is now read-only.

Commit 54761a2

Browse files
committed
Documented architecture
1 parent a371b9d commit 54761a2

File tree

4 files changed

+46
-0
lines changed

4 files changed

+46
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
[Home](../../../README) > [Documentation](../documentation) <!-- Breadcrumb -->
2+
3+
# Architecture
4+
5+
![Architecture](architecture.png)
6+
7+
## Service Scaling
8+
9+
All of the services in the orange box (Gateway, MicroServices) will scale automatically
10+
based on the load to handle the incoming user traffic.
11+
12+
Every service is cloud native so they won't persist data on their storage - instead they'll send everything to the database.
13+
14+
## Round Robin
15+
16+
Currently our plan is to use Round Robin for Gateway load balancing which enables us to distribute "new" users between the gateway instances.
17+
This strategy also has negative drawbacks, but in general it's more platform independent than saying things like "we use X from company Y".
18+
19+
When we decide to use one specific service, we still could migrate to the provided option.
20+
21+
## Database Cluster
22+
23+
To handle the enormous amount of queries we will use read replicas.
24+
Read replicas handle all the read-operations so that the master instance doesn't have to.
25+
26+
Because of our micro service structure it's also possible to have separated clusters for every micro service.
27+
28+
The only bottleneck currently could be write-operations. Here we have to discuss how to handle these without running into concurrency/persistence problems.
29+
30+
## PubSub Cluster
31+
32+
Because of the Redis PubSub Scaling problems (discussed in [Redis PubSub](/blog/technical/articles/redis-pub-sub)) we use a cluster of independent Redis nodes which distribute messages from every service instance to every service instance which has subscribed to the topic.
33+
34+
The Redis Discovery Cluster in this case is responsible for telling every service to connect to all Redis PubSub instances. Because of that every Redis PubSub instance reports its current state to the Discovery Cluster (e.g. shutdown, startup).
35+
36+
## Frontend CDN
37+
38+
Today it's common practice to use CDNs for static content. In our case we have a server side rendered React frontend which we plan to deliver using CDNs.
39+
40+
The great advantages of CDNs are the price (just paying for traffic) and the performance because of the distance to the user.
41+
42+
### [Back](../../../README)
142 KB
Loading
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<mxfile host="app.diagrams.net" modified="2020-04-12T18:21:50.927Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/80.0.3987.87 Chrome/80.0.3987.87 Safari/537.36" etag="egRuxbochrM27Xkgp_g0" version="12.9.11" type="device"><diagram id="t1igOBXYn9eeKMkBmqPa" name="Page-1">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</diagram></mxfile>

documentation/dev/documentation.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
# Documentation
44

5+
## [Architecture](architecture/architecture)
6+
57
## Swagger Endpoint Documentation
68

79
### YAML

0 commit comments

Comments
 (0)