diff options
author | Pablo Carranza <pcarranza@gmail.com> | 2016-11-17 20:02:14 +0300 |
---|---|---|
committer | Pablo Carranza <pcarranza@gmail.com> | 2016-11-17 20:02:14 +0300 |
commit | fc2718f8698e17fe65b5f4e530b3c881b5d45e7c (patch) | |
tree | 03ab0c2766ba49f9876771ab378827b22d4d8fce | |
parent | 263836d88d3ca792f45c96d84c5d005b453135b2 (diff) |
Add What if section
-rw-r--r-- | design/diagrams/what-if-we-remove-the-shared-fs.graffle | bin | 0 -> 3805 bytes | |||
-rw-r--r-- | design/what-if/README.md | 9 | ||||
-rw-r--r-- | design/what-if/more_power.png | bin | 0 -> 5814 bytes | |||
-rw-r--r-- | design/what-if/we-remove-shared-filesystems.md | 33 | ||||
-rw-r--r-- | design/what-if/we-remove-shared-filesystems.png | bin | 0 -> 66913 bytes |
5 files changed, 42 insertions, 0 deletions
diff --git a/design/diagrams/what-if-we-remove-the-shared-fs.graffle b/design/diagrams/what-if-we-remove-the-shared-fs.graffle Binary files differnew file mode 100644 index 000000000..1262d85af --- /dev/null +++ b/design/diagrams/what-if-we-remove-the-shared-fs.graffle diff --git a/design/what-if/README.md b/design/what-if/README.md new file mode 100644 index 000000000..98f38f2d0 --- /dev/null +++ b/design/what-if/README.md @@ -0,0 +1,9 @@ +# What If + +Once we have the basics we could take different paths to move forward, either by making GitLab technology more boring, or by improving performance, or availability, or just pure good old power until we can blow the moon away. + +![Black Hat guy providing useful tips](design/what-if/more_power.png) + +## Crazy ideas ahead + +* [What if we remove shared filesystems as a whole, how could we do it?](design/what-if/we-remove-shared-filesystems.md) diff --git a/design/what-if/more_power.png b/design/what-if/more_power.png Binary files differnew file mode 100644 index 000000000..c1dee487c --- /dev/null +++ b/design/what-if/more_power.png diff --git a/design/what-if/we-remove-shared-filesystems.md b/design/what-if/we-remove-shared-filesystems.md new file mode 100644 index 000000000..d6a808ddd --- /dev/null +++ b/design/what-if/we-remove-shared-filesystems.md @@ -0,0 +1,33 @@ +# What if we remove the shared filesystem + +Once we have it all under control and it all just works (TM) we could think if this approach makes any sense. + +## What would be the starting point for this? + +We should have already an API for talking to git behind the Git Access Daemons in a way that we don't reach any file from git perspective anymore. Some form of RPC. +We should also have an API for the rest of the resources like LFS files, etc. + +## How does it look like? + +To remove shared filesystems, NFS or CephFS or whatever else, we need to take the following steps: + +* Remove all mountpoints. +* Change shards in the application to also take a host and a port for git protocol. + * We may need to add an endpoint for http API per shard depending on how we do API communication. +* With the Git Access Daemons working as the front end, we should build an HA filesystem underneath + * Add 2 or 3 hosts with a Git Access Daemon in front. + * Add a system like Corosync and Pacemaker in front to only allow one of the hosts to be accessible at any time. + * Add BRBD underneath to keep the filesystems in sync. + * Configure corosync to keep the cluster in good shape and failover to the secondary in case the primary goes away. + +With this configuration the workers would have a network endpoint they talk to, which would make them independent and will allow us to use floating ips to point to hosts that will be taking the calls when they are enabled as master, otherwise they would just reject the calls completely. + +![How shards could just keep growing](design/what-if/we-remove-shared-filesystems.md) + +## What would we win with this? + +This would remove the craziness of a system like CephFS, or the slowness of a system like NFS for something that is boring (BRBD). + +In exchange this would introduce the problem of having one shard becoming a hot one. We could work a bit further and investigate what the possibility of using the primary for writes and the secondary as reads, but this would increase the complexity of the routing layer because we would need to understand when a command is a read command to redirect it to the secondary notes. + +So, more complexity for more performance. diff --git a/design/what-if/we-remove-shared-filesystems.png b/design/what-if/we-remove-shared-filesystems.png Binary files differnew file mode 100644 index 000000000..2bd4a8934 --- /dev/null +++ b/design/what-if/we-remove-shared-filesystems.png |