NATS Streaming Server

When attempting to design microservices on windows, you inevitably want to use a tool that only runs on *nix. This lead me down the path of wanting to run windows and linux containers side-by-side.

While watching a video on running a hybrid docker swarm, the speaker mentioned he was using NATS as a message queue. In a windows container.

NATS is a highly performant, extremely lightweight, open source messaging system written in Go.

NATS streaming adds reliable streaming to NATS core.

So, if you are in the market for a message queue for your microservices architecture, be sure to give NATS a spin!

Learn how to design large scale systems

Learning how to design scalable systems will help you become a better engineer.

System design is a broad topic. There is a vast amount of resources scattered throughout the web on system design principles.

This repo is an organized collection of resources to help you learn how to build systems at scale.

https://github.com/donnemartin/system-design-primer/blob/master/README.md

Reducing work using pull request refs

Refspecs are cool and you should not fear them. They are simple mappings from remote branches to local references, in other words a straight forward way to tell git “this remote branch (or this set of remote branches), should be mapped to these names locally, in this name space.”

http://blogs.atlassian.com/2014/08/how-to-fetch-pull-requests/

To checkout a pull request locally:

git fetch origin +refs/pull-requests/your-pr-number/from:local-branch-name

Or add the refspec that will map remote pull requests heads to a local pr name space. You can do it with a config command

git config --add remote.origin.fetch '+refs/pull-requests/*/from:refs/remotes/origin/pr/*'
git fetch origin
git checkout pr/1

From Transactions to Streams

Martin Kleppmann explores using event streams and Kafka for keeping data in sync across heterogeneous systems, and compares this approach to distributed transactions, discussing what consistency guarantees can it offer, and how it fares in the face of failure.

https://www.infoq.com/presentations/event-streams-kafka

The Hardest Part About Microservices is your Data

Of the reasons we attempt a microservices architecture, chief among them is allowing your teams to […] be autonomous, capable of making decisions about how to best implement and operate their services, and free to make changes as quickly as the business may desire.

To gain this autonomy, […] don’t share a single database across services because then you run into conflicts like competing read/write patterns, data-model conflicts, coordination challenges, etc. But a single database does afford us a lot of safeties and conveniences: ACID transactions, single place to look, well understood (kinda?), one place to manage, etc. So when building microservices how do we reconcile these safeties with splitting up our database into multiple smaller databases?

http://blog.christianposta.com/microservices/the-hardest-part-about-microservices-data/