Skip to main content

System Design | Design Scalable Systems


✋System design is the process of designing the elements of a system such as the architecture, modules, and components, the different interfaces of those components, and the data that goes through that system.

The purpose of the System Design process is to provide sufficient detailed data and information about the system and its system elements to enable the implementation consistent with architectural entities as defined in models and views of the system architecture.

1) Requirements Clarification:

the beginning point of software development activity. Software requirement is one such area to which little importance was attached in the early days of software development, as the emphasis was on coding and design. The main assumption was that the developers understood the problem clearly when it was explained to them, generally informally. Therefore, the need for a more rigorous requirement analysis phase arose. Now, for large systems

2) System Interface Definition:

Interface = System ∩ Environment
A System interface can be thought of as a contract between the system and the environment. the 'environment' is the rest of the project. The interface formally describes what can pass between the system and the environment. An 'implementation' can be defined as the system minus the interface. The types of interfaces used can affect the amount of technical debt that is created (a mathematical formula is provided), and programmer productivity.

3) Back-of-the-envelope estimation:

How many servers would we need?
Back-of-the-envelope calculations are estimates you create using a combination of thought experiments and common performance numbers to get a good feel for which designs will meet your requirements.
  • if the architecture can fulfill the functional requirements, for example, the number of supported users, response latency,
  • the resource requirements.

4) Defining data model:

Data modeling (data modeling) is the process of creating a data model for the data to be stored in a database. This data model is a conceptual representation of Data objects, the associations between different data objects, and the rules.
Data Model is like an architect's building plan which helps to build a conceptual model and set the relationship between data items.
The two types of Data Models techniques are
  • Entity Relationship (E-R) Model
  • UML (Unified Modelling Language)

5) High-level design:

Design is not just what it looks like and feels like. Design is how it works.
The high-level design provides a view of the system at an abstract level. It shows how the major pieces of the finished application will fit together and interact with each other.
A high-level design should also specify assumptions about the environment in which the finished application will run. For example, it should describe the hardware and software you will use to develop the application and the hardware that will eventually run the program.

6) Component Design:

Abstraction and divides the problem into sub-problems
Component design is viewed as a set of one or more cooperating classes. Each problem domain interface (analysis) and infrastructure entity (design) are explained to identify all attributes and operations that apply to its implementation. It also involves defining the interfaces that enable classes to communicate and cooperate.
  • the development cost by reusing existing components.
  • Increased reliability with the reuse of the existing components.

7) Identifying and resolving bottlenecks:

Bottlenecks are setbacks or obstacles that slow or delay a process, knowing that you've got a bottleneck, however, it doesn't necessarily mean that you'll know where it is. You may not be aware of what goes on at each stage of a process, or you might be the bottleneck yourself!
There are two basic options for unblocking bottlenecks:
  1. Increase the Efficiency of the Bottleneck Step: Assign your most skilled team members to the bottleneck. They'll likely be the most productive, too. Or find ways to add capacity in the bottleneck. As the saying goes, many hands make light work!
  2. Decrease Input Into the Bottleneck Step: Decreasing input is an appropriate response if one part of a process has the potential to produce more output than you ultimately need. An alternative way to decrease input may be to reallocate tasks where there is more capacity.
Reference :

Comments

Popular posts from this blog

Java Currency Formatter Solution

Given a  double-precision  number,  , denoting an amount of money, use the  NumberFormat  class'  getCurrencyInstance  method to convert   into the US, Indian, Chinese, and French currency formats. Then print the formatted values as follows: US: formattedPayment India: formattedPayment China: formattedPayment France: formattedPayment where   is   formatted according to the appropriate  Locale 's currency. Note:  India does not have a built-in Locale, so you must  construct one  where the language is  en  (i.e., English). Input Format A single double-precision number denoting  . Constraints Output Format On the first line, print  US: u  where   is   formatted for US currency.  On the second line, print  India: i  where   is   formatted for Indian currency.  On the third line...

Java Loops II print each element of our series as a single line of space-separated values.

We use the integers  ,  , and   to create the following series: You are given   queries in the form of  ,  , and  . For each query, print the series corresponding to the given  ,  , and   values as a single line of   space-separated integers. Input Format The first line contains an integer,  , denoting the number of queries.  Each line   of the   subsequent lines contains three space-separated integers describing the respective  ,  , and   values for that query. Constraints Output Format For each query, print the corresponding series on a new line. Each series must be printed in order as a single line of   space-separated integers. Sample Input 2 0 2 10 5 3 5 Sample Output 2 6 14 30 62 126 254 510 1022 2046 8 14 26 50 98 Explanation We have two queries: We use  ...

Java Static Initializer Block

Static initialization blocks are executed when the class is loaded, and you can initialize static variables in those blocks. It's time to test your knowledge of  Static initialization blocks . You can read about it  here. You are given a class  Solution  with a  main  method. Complete the given code so that it outputs the area of a parallelogram with breadth   and height  . You should read the variables from the standard input. If   or    , the output should be  "java.lang.Exception: Breadth and height must be positive"  without quotes. Input Format There are two lines of input. The first line contains  : the breadth of the parallelogram. The next line contains  : the height of the parallelogram. Constraints Output Format If both values are greater than zero, then the  main  method must output the area of the  parallelogram . Otherwise, pri...