There are a few factors you need to confirm to decide if a system is fault tolerant or not. Think of each device/point as a pool, and the lines as pipes.
If you were to pour water into any pool, can the other pools access the water? (can data be accessed from all points?)
If one pipe were to be cut, can the other pools still access the water? (If a path fails, can data be accessed from all points?)
If one pool is removed, can the other pools still access water from eachother? (If one device fails, can the other points receive data?)
If to answer to all of these are “Yes,” then the system is Fault Tolerant.
Redundancy: Fault Tolerant networks typically have extra components and pathways to ensure reliability, making them have redundancy.
“Essential Knowledges” from College Board
The Internet has been engineered to be fault-tolerant, with abstractions for routing and transmitting data.
Redundancy is the inclusion of extra components that can be used to mitigate failure of a system if other components fail.
One way to accomplish network redunadancy is by having more than one path between any to connected devices.
If a particular device or connection on the Internet fails, subsequent data will be sent via a different route if it’s possible to reach that.
Redundancy within a system often requires additional resources but can provide the benefit of fault tolerance.
The redundancy of routing options between 2 points increases the reliability of the Internet and helps it scale to the more devices and more people.
Answer here: False
Data has more than one path to travel from one device to another.
If part of the network fails, the network can still function by using other paths.
More devices creates more connections and makes the network stronger.
Is this network above Fault Tolerant? If not, what changes can you make that can make this a fault tolerant network?
- A: connection from *A ---> B*
- B: connection from *B ---> D*
- C: connection from *E ---> F*
- D: connection from *B ---> C*
Answer here: A
System tasks: Tasks that are done for the operating system, such as managing hardware, network configuration, file management, and security tasks.
User tasks: Tasks that the user themself has selected, such as running a search engine, opening a video game, and running MS paint.
Because computers have many tasks to manage, they need to balance the tasks so all CPUs are being utilized evenly and fully.
Not efficient. A computer would use sequential computing if its hardware is limited, or if the tasks requested are dependent on eachother.
Useful because it requires less resources and is easier to manage, and has a lower chance of error compared to parallel computing.
Takes long for computer to execute all tasks. If Task X takes 30 ms, Y takes 40 ms, and Z 20 ms, and the order executed is X-Y-Z, then the total processing time is 90 ms.
Hardware Driven: newer hardwares have several processers in one system called cores. One CPU can have 64+ cores. This speeds up the processing time greatly.
Faster Operations: links CPUs together to work the same problem.
Data Driven: Data can be processed the same way called Single Instruction Multiple Data.
Processing time is the longest time taken for the procressors. Example Core 1 takes 50 ms, Core 2 100 ms, Core 3 10 ms, total time taken is 100 ms. This is why parallel processing works best when tasks are independent from eachother.
Speedup Time: The speedup of a parallel solution is measured in the time it takes to complete the task sequentially divided by the time it takes to complete the task in parallel. Example Sequential time is 120 ms, parallel time is 60 ms, speedup time is 2 ms
Can mix sequential and parallel computing, based on how it sends out tasks to other computers to work.
Allows problems to be solved that aren’t possible on a single computer due to storage limitations and processing time.
For example, when you search something up on google, Google sends the request to thousands of servers in the backround for your answers.
Web Services: Standards on how computers can ask for tast execution over the web, including protocols
Beowolf Clusters: special software grouping different computers together
Essential Knowledges from College Board:
Sequential computing is a computational model in which operations are performed in order one at a time.
Parallel computing is a computational moder where the program is broken into multiple smaller sequential computing operations, some of which are performed simultaneously.
Distributed computing is a computational model in which multiple devices are used to run a program.
Comparing efficiency of solutions can be done by comparing the time it takes them to perform the same task.
A sequential solution takes as longas the sum of all its steps.
A parallel computing solution takes as long as its sequential tasks plus the longest of its parallel tasks.
The “speedup” of a parallel solution is measured in the time it took to complete the task sequentially divided by the time it took to complete the task when done in parallel.
Parallel computing consists of a parallel portion and a sequential portion.
Solutions that use parallel computing can scale more effectively than solutions that use sequential computing.
Distributed computing allows problems to be sovled that ould not be solved in a single computer because of either the processing time or the stroage needs involved.
Distributed computing allows much larger problems to be solved quicker than they could be solved using a single computer.
When increasing the use of parallel computing in a solution, the efficiency of the solution is still limited by the sequential portion. This means that at some point, adding parallel portions will no longer meaningfully increase efficiency.
Explain the difference between Sequential, Parallel, and Distributive computing in 1-2 sentences. Try to not look at answers above, and put it in your own words.
Make two data flowcharts like the examples above, you can use MS paint, canva, any design website. Make one Fault Tolerant and one not fault tolerant, and explain what needs to be changed to the flowchart in order to make the network fault tolerant. Doing these will get you over a .90:
# Sequential code:
for i in range(10):
print(i * i-1)
-1
0
3
8
15
24
35
48
63
80
#Parallel Code
import concurrent.futures
def parallel_task(i):
result = i * i - 1
print(result)
return result
def parallel_loop():
with concurrent.futures.ThreadPoolExecutor() as executor:
futures = [executor.submit(parallel_task, i) for i in range(10)]
results = [future.result() for future in concurrent.futures.as_completed(futures)]
parallel_loop()
-1
0
3
8
15
24
35
48
63
80