Sunday, June 14, 2015

Hiredintech - How to Prepare System Design



Hiredintech - How to Prepare System Design
Design a URL shortening service like bit.ly.
How would you implement the Google search?
Design a client-server application which allows people to play chess with one another.

How would you store the relations in a social network like Facebook and implement a feature where one user receives notifications when their friends like the same things as they do?

the right strategy and knowledge.
focus on the right things while discussing a problem.

Problems:
Approach questions in a chaotic way and get ratholed, or
Lack solid understanding of how to properly design architectures that scale.

kick off by replacing chaos with a structured approach to system design
Hearing the problem to declaring it solved.

Designing Scalable Architectures
Step 1: Constraints and use cases, scope the system first
The very first thing you should do with any system design question is to clarify the system's constraints and to identify what use cases the system needs to satisfy.
Spend a few minutes questioning your interviewer and agreeing on the scope of the system.

Step 2: Abstract design
Outline all the important components that your architecture will need.
draw a simple diagram of your ideas.
make sure you sketch the important components and the connections between them. 
Justify your ideas in front of the interviewer and try to address every constraint and use case.

Step 3: Understanding bottlenecks
Perhaps your system needs a load balancer and many machines behind it to handle the user requests. Or maybe the data is so huge that you need to distribute your database on multiple machines. What are some of the downsides that occur from doing that? Is the database too slow and does it need some in-memory caching?

trade-offs.

Vertical scaling
Horizontal scaling
Caching
Load balancing
Database replication
Database partitioning

Using NoSQL instead of scaling a relational database
Being asynchronous
HAProxy, nginx, memcached, Redis, Lucene, RabbitMQ, Munin, NodeJS.

Everything is a tradeoff
it all boils down to balancing between time to market, system complexity, cost of development, cost of maintenance, availability, and many other things.

Don't get defensive: outline the advantages and disadvantages of your choice. 
Be open to new constraints to pop up during the discussion and to adjust your architecture on the fly.

You first build a high-level architecture by identifying the constraints and use cases, sketching up the major components and the relationships between them, and thinking about the system's bottlenecks.

You then apply the right scalability patterns that will take care of these bottlenecks in the context of the system's constraints.

TODO:
Vertical scaling, Horizontal scaling, Caching, Load balancing,
Database replication, Database partitioning, avoid single point of failure

Scalability for Dummies

Hiredintech - How to Prepare System Design

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts