Thanks for your interest in Yugabyte DB! This is definitely a great use-case. Please see the answers inline.
I’m interested in global replication with YugaByte. At the moment I have built an abstraction over BadgerDB, a Key-Value database written in GoLang. Our abstraction maintains indexes, is kind of graphql-ish, and extremely FAST. Is it possible to use YugaByte DB with global replication as a Key Value store, instead of GoLang? I’m aiming for the performance of KeyValue, Globally Distributed.
Yes, you can absolutely achieve a high-peformance, globally distributed key-value deployment with Yugabyte DB. You can see an example of a globally distributed deployment here.
As I understand the speed of writes decreases with each additional replicated node. Is that right? Is it possible to instead favour speed and have an eventually-consistent model across the nodes instead?
As a general rule, yes, latency increases with replication factor. Replication factor is primarily meant to improve fault tolerance, but looks like you want to serve reads close to the end user. In this scenario, you have two options:
Read Replicas are a read-only extension to the primary data in the cluster. In this scenario, the primary data of the cluster is deployed across multiple zones in one region, or across nearby regions. Read replicas do not add to the write latencies since the write does not synchronously replicate data to them - the data gets replicated to read replicas asynchronously. You can write to a replica, but the write gets internally redirected to the source of truth.
Multi-master deployments are currently being released as a part of our 2.0 version in beta. This feature allows independent clusters to replicate to each other with last writer wins semantics. Here is a detailed design doc about multi-master deployments.
Assuming you want global reads and a single cluster, I think read replicas may be what you are looking for.
So we need an authentication layer on the server between YugaByte and the client, ideally this layer would provide the same abstraction we currently have written in Go.
Yes, Yugabyte DB supports authentication and RBAC for authorization in the Go client drivers.
What about load-balancing between nodes routing requests to the closest geographical location?
The YCQL API currently supports reading from the nearest geographic region today, so you should be able to achieve this easily already. The YCQL API is semi-relational, but for purposes of a key-value app, that should suffice plenty!
Hope that helps, and let me know if you have any further questions!