home development system design Linux databases Docker kubernetes about me contact
Architectures and System Design

Cloud based systems, virtualization, and containerization have dramatically changed Architectures and System Design requirements today.

Systems have evolved greatly in the last couple of decades. For example, in 2010 I worked with Boeing as Software Architect on a large no-SQL document serving system that involved large databases, virtualized Linux and Unix servers and HTTP clients. Software was written in Java using IBM Websphere for the client. It was a big system with lots of users, so load balancing and scaling were issues.

Today, a new system design would look very different. Issues of scale and load are mostly taken care of by Docker and Kubernetes, and rather than using huge monolithic servers, architectures are split up into microservices running on manged containers that can scale up and down as needed. Code written previously in Java or C++ can now be written in Go, which is perfect for this environment.

Microservices can be a big advantage for scaling, but they aren't a panacea. Sam Newman is an expert and coined the term microservice. He recommends understanding why you might need them before diving in, especially for startups. On a new project, domain boundries can change during development, which can add a huge burden for developers as they have to rewrite large portions of code to reflect the changes. Newman recommends starting with a monolithic architecture, and then breaking up the structure into separate services once the domain boundries are understood. This is also a good plan for scaling up monolithic "brownfield" projects to a cloud architecture.

An advantage of containerization is that it's easier to deploy on cloud services. Cloud services like Amazon's various AWS offerings and Google cloud are getting more popular all the time because they remove the burden of local system administration and upkeep. It's easy to develop and test locally, then push everything out to the cloud for production. A container has no outside dependencies, so they work the same way everywhere.

For local development and in-house services, Virtualization can be a good option. I have experience in VMware, VirtualBox, and more recently KVM with Qemu.

I also write front ends, using HTML5, CSS3, React and JavaScript.

I've been designing systems both large and small for decades, and love to keep up with current technologies. If you agree, Let me know.