Containerization And System Design
Containerization is the packaging of software code with its dependencies to create a container that can run on any infrastructure. We can think of containers as more lightweight versions of virtual machines that dont need their own operating system. All containers on a host share that hosts operating system, which frees up a lot of system resources. Containerization wasnt very accessible until Docker came along. Docker is an open-source containerization platform that we can use to build and run containers. Docker containers create an abstraction layer at the application layer.
Docker often gets confused with Kubernetes, which is another popular containerization tool. The two technologies complement each other and are frequently used together. While Docker is a containerization platform, Kubernetes is a containerization software that allows us to control and manage containers and VMs. With Kubernetes, you can run Docker containers and manage your containerized applications. Containers are grouped into pods, and those pods can be scaled and managed however you want. To dive deeper into these two technologies, we recommend this resource: Docker vs Kubernetes.
Similar to ML technologies, containerization technologies are also growing in popularity and are becoming more widespread across various industries. Because of this, the design and implementation of containerization systems are also gaining ground.
Keep It Simple Stupid Kiss
A very famous acronym among programmers, KISS, states that most systems work best when they are kept simple instead of being overly complicated. Therefore, a rule of thumb is to strive for simplicity. Goods ideas are often made irrelevant due to product complexity. On the other hand, system designers refine complex stands to derive a simpler and stronger result.
So, you do not want to pick up one point of the system and go on about it. Furthermore, the more you get into the specifics of architecture, the narrower your view becomes. Take a step back, view your diagram on the whiteboard, and evaluate its entire architecture. Then, check if one part of the system is outsized while others appear minuscule. If this is the case, consider changing your system or simplify it by extracting components from one part and extending them to others.
Why Asking A Good Clarification Question Is Important
A good clarification question helps you achieve one, or more, of several things:
- Helps you narrow the scope of what youre supposed to do.
- Helps clarify what the user expectation of the system is.
- Gives you direction about where to proceed.
- Informs you of possible bottlenecks/problem areas.
If we follow this formula, a set of criteria or steps you will be able to cover most of it.
Some of the things in my mind when I work on a new system are:
- What is the goal of the system?
- Who are the users of the system?
- What is the scale were working with?
- Is this a new/old system? How do we handle versioning?
Don’t Miss: Best Interview Attire For A Woman
How To Prepare For System Design Interview Best Practices
System design interviews use open-ended questions to discover how well you can work on a team and your approach to arriving at solutions to problems. The interview analyzes your problem-solving process and system designs. This interview allows you to present your skills and expertise concretely, while also portraying yourself as a valuable asset to the hiring manager.
Following are the best practices to employ while preparing for system design interview:
Systems Design Interview Guide
As an ML Engineer, I had to go through 2 types of design interviews: standard distributed systems and ML systems. In this article, Ill discuss high level advice that can be applied to both types of interviews. Im going to write specific articles for distributed system and ML system design interview questions.
Heres a summary of my advice:
Special thanks to my friends Masud Khan , Michael Ritche , Curren Pangler and Mehdi Ben Ayed for reviewing this giving their input
Recommended Reading: Design Interview Preparation
Diagram A Quick Data Model
The next step is to begin to define the data model. Different data will need to be stored and accessed differently. Fundamentally, diagramming the relationships between the different data types you’ll handle will help eliminate many component decisions that don’t make sense.
How to do this on a whiteboard: For relational data, add small tables for each database you’ll use. One column will hold the ID and the other will hold the data itself See below for details.
Example: “Design Instagram” data modelling
Generally, we need to store users, photos, and “user interactions.” You’ll need to choose between a relational vs. non-relational database. We’ll go with a relational database structure for now – something like MySQL or Postgres â because you can imagine that relational queries, like “fetch all photos posted by X user” will be run frequently.
If we’re using a relational database, we may draw three tables on our whiteboard. One for users, one for photos, and one for user interactions. Our data models for the user and photo databases will look something like this:
Dont Show Up With A Solution
Youve likely worked in a few different architectures, and you might even have a favorite design or pattern that you think works best. Experience and opinions are great, but this can be a trap when answering system design questions. It is best to avoid approaching systems with rigid pre-existing solutions or designs.
For example, suppose you are a big fan of event-driven architectures and are already set on or fantasizing about how youll apply this pattern to whichever scenario the interviewer describes. In that case, youll quickly fall short when the functional or non-functional requirements of the system dont lend themselves to the limitations of your predetermined solution.
Rather than showing up with an architecture already in mind, it is best to understand standard components and approaches and where they can be employed to satisfy different requirements of any given scenario. While the list below is not comprehensive, and the best components and approaches will vary heavily based on the system, it is recommended to understand where each offers value and which tradeoffs they present. These topics are likely to be expected knowledge for mid-level and higher backend engineering interviews.
- Vertical vs. Horizontal Scaling
- Database Approaches
- Event/Message Queues
You May Like: System Design Interview Prep
Tactic 2 Start With The Big Picture
Your first draft should capture the entire system, including its users or clients. For our chat app, place a couple of boxes on the whiteboard to show two chat clients, add another one for the chat server, then add the database.
Explain to the interviewers that you are starting at a high level, that this is the first draft, and you will explore components and add details next.
Your big-picture design should include all significant system components but not their implementation details. You will add them when you start refining it to meet functional and non-functional requirements that youve just captured and that you will discover along the way.
Pick A System You Are Familiar With
A system design interview entails asking a candidate to design a system that solves a specific problem. The interview, which typically takes about an hour, is mostly an open-ended conversation – the goal is to get a sense of the candidates experience and problem-solving skills while working with them as they were your coworker.
You want to pick a system you worked on in the past, or at the very least, know well. Ideally, it should be something relevant to what your team or your company does so that the candidate gets the chance to see the kind of projects they will be working on if they join your team. Dont forget that its not just you evaluating them – they are also evaluating you.
Another reason to pick a system you know well is that you have spent a considerable amount of time internalizing its solution space, scalability limitations, tradeoffs, and failure modes. Its not only easier for you to prepare for the interview, but it also gives you the ability to compare their solution to what you, or your team, came up with. And who knows, they might even give you some insights that you missed – I call this a win-win.
Whatever you do, dont ask them how to design a Twitter clone , or any other typical design interview question. When you are in the hotel booking business and ask to design a Twitter clone during the interview, you are telling the candidate that there is nothing interesting going on where you work. Its a big red flag for a senior engineer, and rightly so.
Also Check: Questions To Ask A Cfo During An Interview
Google Software Engineer Interview Guide
Google is one of the popular FAANG companies where most job seekers aspire to work at. Desirable for its unique work culture and enviable perks, it opens the door for passionate candidates in tech to solve real problems and make an impact through their work. Programmers spend a lot of effort and time to build a resume and that can help them get through the first step of landing an interview call. Preparing for Google Software Engineer interviews is challenging, but the right mentorship and preparation can make it easier.
We have everything you need to know for candidates planning to apply for SWE positions at Google, have already applied, or have a Google SWE interview lined up. This blog covers the following topics:
Lld Or Low Level System Design
LLD is about coming up with the class diagrams, methods, the relations between classes, program specifications and other low level details for a given system. In these type of interviews, a candidate is expected to create a modular, flexible and reusable design for software by using Object Oriented Design Principles and Design Patterns. Some popular questions are: Design a Parking Lot, Design a Banking Management System etc.
The only resources I used for LLD are :
Don’t Miss: Questions To Ask Cfo During Interview
Use The Star Response Technique
Formatting your responses using the STAR interview response technique is a strategy to help you craft answers that illustrate your knowledge and qualifications through specific experiences. STAR is an acronym for Situation, Task, Action and Result. Using the STAR method, discuss an applicable situation, identify the task you needed to complete, outline the actions you took and reveal the results of your efforts to demonstrate your skills to the interviewer.
Better Than A Database
So why bother with this? Why not just persist all data to a database and consume it directly from there? Well, you need a system to queue up the messages because each message corresponds to a task that needs to be done based on that message’s data. So in our ticketing example, if 100 people make a booking in 35 minutes, putting all that in the database doesn’t solve the problem of emailing those 100 people. It just stores a 100 transactions. Pub/Sub systems handle the communication, the task sequencing and the messages get persisted in a database. So the system can offer useful features like “at least once” delivery , persistent storage, ordering of messages, “try-again”, “re-playability” of messages etc. Without this system, just storing the messages in the database will not help you ensure that the message gets delivered and acted upon to successfully complete the task.
Read Also: How To Prepare System Design Interview
How Do You Design A Web Crawler And When Should It Be Used
A crawler is a program designed to visit other sites and read them for information. This information is then used to create entries for a search engine index. It is typically called a ‘bot” or “spider.” Be certain to show within your explanation that you know the intricacies of web crawling.
Example:”Although crawling the web is a challenging task, I have managed to build one for a previous project. The crawler scrapes data from a specific sector, in this case, the fashion industry. I needed to integrate a URL dispatcher, which is a server whose responsibility is to distribute seed URL to a multitude of servers. Next, the crawl supervisor passed the URL to bots using the designed messaging queue. The spider, the basis for any crawler, extracted the data from the web page and loaded it into my file system. Next, the extract, transform and load cleaned up the content and reformatted it to store it into the database. In such a way, I was able to crawl the web looking for and organizing the information needed.”
Learn From The Tech Giants
This is probably not going to help in the short term. But in the long term, to become an expert in System Design, its best to look at the Tech blogs of various tech companies and see how they are solving various technical problems.
This would paint a clear picture of the real problems that they face and how innovatively they solve them. Understanding these things would help you become better at system design and also keep you up to date with the latest innovations in tech.
Some of the best blogs to follow are:
Don’t Miss: What To Wear For An Interview Women
How To Prepare For The System Design Interview In 2022
For many software engineers, the System DesignIinterview remains a mysterious challenge.
Most engineers have never actually worked on large-scale systems before, so having to explain how to build one seems daunting. And because system design interview questions can be so open-ended, it is hard to know the right way to prepare.
Before I spent eight years working on distributed systems at Microsoft and Facebook, I definitely felt this way. But now, as someone who has participated in hundreds of system design interviews, I can assure you that there is a way through.
In this post, I will discuss:
What interviewers are looking for in a System Design Interview
How any developer can prepare to confidently answer System Design questions
The Article Consists Of 3 Parts A Preparation Guide A System Design Template And Design Questions With Links
For my system design interview with Amazon, I watched video lectures, read blog posts, and discussed with my friends’ various approaches to design a system. After my extensive preparation, I came up with a template that I followed during my interview and wanted to share and hoping it would help anyone preparing for a system design interview.
You May Like: System Design Interview Preparation
Section 1: Endpoint Protection
When you build large scale systems it becomes important to protect your system from too many operations, where such operations are not actually needed to use the system. Now that sounds very abstract. But think of this – how many times have you clicked furiously on a button thinking it’s going to make the system more responsive? Imagine if each one of those button clicks pinged a server and the server tried to process them all! If the throughput of the system is low for some reason then each of those clicks would have made the system even slower because it has to process them all!
Sometimes it’s not even about protecting the system. Sometimes you want to limit the operations because that is part of your service. For example, you may have used free tiers on third-party API services where you’re only allowed to make 20 requests per 30 minute interval. if you make 21 or 300 requests in a 30 minute interval, after the first 20, that server will stop processing your requests.
That is called rate-limiting. Using rate-limiting, a server can limit the number of operations attempted by a client in a given window of time. A rate-limit can be calculated on users, requests, times, payloads, or other things. Typically, once the limit is exceeded in a time window, for the rest of that window the server will return an error.
Rate limiting can be made as complicated as the rules you want to enforce, but the above section should cover the fundamentals and most common use-cases.
Introduction To System Design Interviews
This article will overview practices and areas to focus on when navigating a systems design interview at a high level. I expect this information to be most helpful to engineers in the 1 – 3 years of experience range or those who have never done a systems design interview.
Additionally, this article is expected to be used as a jumping-off point, and readers will likely need to leverage other resources to dig deeper into the referenced concepts and terms.
Don’t Miss: Questions To Ask A Cfo
Layer 4 Load Balancing
Layer 4 load balancers look at info at the transport layer to decide how to distribute requests. Generally, this involves the source, destination IP addresses, and ports in the header, but not the contents of the packet. Layer 4 load balancers forward network packets to and from the upstream server, performing Network Address Translation .
Why Should I Learn System Design
Over the last two decades, there have been a lot of advancements in large-scale web applications. These advancements have redefined the way we think about software development. All of the apps and services that we use daily, like Facebook, Instagram, and Twitter, are scalable systems. Billions of people worldwide access these systems concurrently, so they need to be designed to handle large amounts of traffic and data. This is where system design comes in.
As a software developer, youll be increasingly expected to understand system design concepts and how to apply them. In the early stages of your career, learning system design will allow you to tackle software design problems with more confidence and apply design principles to your everyday work. As you progress through your career and begin interviewing for higher-level positions, system design will become a larger part of your interview process. So, no matter what your level is, system design matters to you.
Because of its increasing importance, we wanted to create a resource to help you navigate the world of system design. This guide details the fundamental concepts of system design and also links you to relevant resources to help you gain a deeper understanding and acquire real-world, hands-on experience.
This guide covers:
For a guide specific to the System Design Interview, check out The complete guide to the System Design Interview in 2022.
Also Check: Interview With Cfo