This is the most difficult Georgia Tech course I’ve taken, and that includes CSE6220 Intro To High Performance Computing. I’ll share with you my strategies for a couple of the labs and some general class advice to make it through.Continue reading “Surviving CS7210 Distributed Systems – Paxos Is Tough”
As containerized environments become prevalent (like Kubernetes), knowing the physical memory that will be used by the JVM becomes ever more important. Typical thread-per-request web frameworks can easily use thousands of threads, which can contribute to the memory footprint. In this article I explore the base amount of physical memory a JVM thread stack uses on Linux. This can help guide decisions on sizing of thread pools.
I’m a bit of a home networking nerd. After many iterations, I’ve settled on a custom built Linux home router. My goals are:
- Secure as possible.
- Supports fq_codel and the ability to disable kernel offloads to favor latency and eliminate bufferbloat.
This is going to be a post on my gear and approach to studying for OMSCS.
When I first started OMSCS, and had to open a textbook and take lecture notes for the first time in a long time, I was at a bit of a loss of the best way to organise myself. Back in my undergrad degree, I was strictly a notebook+pencil+highlighter kind of person. These days with my daily commute and frequent work space hopping, carrying around 10lbs of textbooks and notebooks and pencils is not really ideal. I also didn’t really want to accumulate dozens of notebooks and textbooks – physical space is a premium for me.
updated: 2018-06-05 Replace gorb with merlin.
In addition to the Kubernetes stack on AWS, I’m also helping to build an on-premise Kubernetes platform. We want to continue to leverage feed, the ingress controller we built. Ingress generally requires an external IP load balancer to front requests from the internet and elsewhere. In AWS we use ELBs. For on-premise, we need to build our own.
The solution we’ve settled on for now is:
- IPVS with consistent hashing (using built-in source hash module) and direct-return.
- merlin to provide an API for ipvs so our ingress controller can attach and detach itself.
- VIPs registered to a DNS entry with active/passive failover, handled by keepalived.
Compare these two songs, with otherwise identical lyrics:
Do you hear a difference? One was written and performed by musicians. The other by an algorithm (Microsoft’s Songsmith). Which would you prefer to listen to?
Over the last two years I’ve been building an in house PaaS system based on Kubernetes at Sky. We started on Kubernetes 1.0, which was early days. It’s been a challenging and fun experience.
Continue reading “A Kubernetes Stack from Scratch”
I’ve just finished my first semester at Georgia Tech, in the amazing OMSCS program. I spent a lot of time trying to figure out what courses to take, and thought I’d share my course plans for those in the same boat. I’ve put together a computing systems and machine learning plan.
I’ve been meaning to blog a lot more. It improves my writing skills, and also gives me a nice place to capture my thoughts in a long form before I forget.
One of the main impediments for me is the blogging platform I’ve been using – Jekyll with Github pages. It’s simply too much to quickly write a post. In an attempt to blog more, I’ve moved my site to wordpress.com.
I never did XP style pairing until I arrived in London. My experience had been mostly solo work, with plenty of team collaboration, and some rare pairing on tough problems. I was pretty excited about trying something new. And it’s part of why I picked my first role in London.
Every now and then a bit of networking knowledge comes in handy.
We’re using Cassandra for some fallback behaviour in my current project. Whenever a downstream system is successfully hit, we store a copy of the data locally that we can fall back to in case of downsystem failure.
During load tests of the fallback behaviour, we starting getting really long, crazy timeouts on reads.
I’ve been working on a CI trigger that runs particular jobs depending on which project changed. The tricky aspect is we have a single git repository. So given a commit hash, we want to determine which projects to trigger builds for.
I moved to the UK a few months ago. One of the first things I did was pick up a Brompton for my multimodal commute. I ride to the station in the morning, take the train, then go from the station to my office by bike. I save quite a bit on travel card costs (which let’s one use a railcard for the London underground), so my bike will pay for itself before too long.
Finding the right route for me took some trial and error, and I’m still improving it. Here’s what I have so far.
VisualVM and jconsole are two useful tools for debugging JVM issues. However they both rely on a JMX port to be open on the remote instance. You can work around this on the fly by running
jstatd on the remote host, but you’ll find certain things disabled. So ideally, the jmx port will be enabled on startup.
After returning my previous company’s Macbook Air, I was in the market for a laptop for doing personal stuff and software dev. The MBA is almost the perfect hardware in my mind – it’s extremely light, has a quality build, 8 hours of battery life, a really amazing TN screen, and i7 processor. With linux loaded on it, it flies. But, unfortunately, there are a couple drawbacks that led me to look elsewhere. The horrible chiclet keyboard and – the ultimate dealbreaker – the price. A fully loaded 12” MBA costs around $1800, and they don’t resell for much less.
I was born in Johannesburg, South Africa to Jorgen and Shane Ravn. My dad was born in Denmark and my mom was born in Rhodesia (now known as Zimbabwe). They both immigrated to South Africa as kids where later they met and had me.