Here again to speak about this meetup, one of the events planned by the London Microservices User Group and hosted, as usual, by Skillsmatter. Both of them were speaking about the language Go, but they faced different aspects.
The first speaker was Zak Knill (Twitter – LinkedIn), developer at Attest, a startup. He spoke us about the concept of (micro)service for a startup, basically a big Java application that accesses to a database, then refined to have multiple services and an interface to third party API. And here it comes the need for a component written in Go.
They decided to give Go a go based on some statistics they made: number of keywords, pages in refspec… but they definitely studied it before investing on it, and they found a nice list of features. Go is statically typed, garbage collected, memory safe from nil reference, it has methods, interface, type assertions (instanceOf), reflection, it is concise, fast, has good support to networking and concurrency through primitives.
He then spoke about frameworks, like awesome. But what he basically said is that it may be better to use the standard libraries for the most common usecases, because it includes already most of the functions you may want.
Then he spoke about multithreading (with the go routines) and channels, that are a way to make two thread communicate (please note that a channel read is blocking, even forever if the sender stop sending without calling a stop method), and he spoke also about Context, a way to check and react to special condition, like a timeout. He introduced also the standard library for testing and benchmarking.
The last part of the talk was related some unexpected peculiarity, like cases in which the garbage collector doesn’t work or in which variables extracted from a collection appear as only the last variable has been extracted (this is due to a particular rewriting of memory locations).
The second talker was Irina Bednova (Twitter – LinkedIn – website), backend developer at Monzo. She spoke about how funny is the work at Monzo, a new kind of bank that is paying attention to be easy to use and to understand (I got one of their credit card at the end of the talk). They have more than 250 services, all in one repository. They use docker on Aws and kubernetes as container orchestrator tool for managing and autoscaling the instances running docker images. All their services are running into Pods, grouped by replica services and boxed into a deployment stack. Their architectur is pretty standard: a device contact a load balancer that sends requests to an HTTP Api & routing layer that sends it to an API server that sends it to the backends. All the communications, internal and external, are over HTTP. They use Kafka for the asynchronous calls.
For data they use Cassandra, a distributed key-value stored. They decided for an eventually consistent distribution of data, meaning that cassandra is set for a local quorum, meaning “Strong consistency. A write must be written to the commit log and memtable on a quorum of replica nodes in the same data center as thecoordinator node. Avoids latency of inter-data center communication“. The trick is that they have only one datacenter. Other tools: big query, slog (one tool they developed for logging) and linkerd.
She explained, moreover, how their project are structured, with no package shared except the protobuf definitions. She spoke also about their context in the go services (Monzo has a microservice structure based on Go and Scala). And this basically closed the talk.