forked from v.moiseev/distributed-computing
Compare commits
1 Commits
kazakov-ev
...
kazakov-ev
| Author | SHA1 | Date | |
|---|---|---|---|
| e8b7c46d06 |
Binary file not shown.
|
Before Width: | Height: | Size: 55 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 18 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 18 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 18 KiB |
@@ -1,30 +0,0 @@
|
||||
# Отчет по лабораторной работе №6
|
||||
|
||||
Выполнил студент гр. ИСЭбд-41 Казаков Е.В.
|
||||
|
||||
## Создание приложения
|
||||
|
||||
Выбрал язык Pythone.
|
||||
|
||||
Приложение на вход получает кол-во поток, далее у нас происходит последовательный расчет детерминанта. После чего выводит всё в консоль
|
||||
|
||||

|
||||
|
||||
|
||||
## Бенчмарки
|
||||
|
||||
Протестируем обычный и параллельный алгоритм матрицах 100х100, 300х300 и 500х500.
|
||||
|
||||
Матрицы 100х100
|
||||
|
||||

|
||||
|
||||
Матрицы 300х300
|
||||
|
||||

|
||||
|
||||
Матрицы 500х500
|
||||
|
||||

|
||||
|
||||
Вывод: Чем больше у нас кол-во данных, тем разница между параллельным и последовательных становится меньше Как видно из скриншотов для матрицы 500x500 параллельный алгоритм завершил быстрее чем, последовательный.
|
||||
@@ -1,61 +0,0 @@
|
||||
import numpy as np
|
||||
import time
|
||||
from multiprocessing import Pool
|
||||
|
||||
def determinant(matrix):
|
||||
return np.linalg.det(matrix)
|
||||
|
||||
def parallel_determinant(matrix, num_threads):
|
||||
size = matrix.shape[0]
|
||||
step = size // num_threads
|
||||
pool = Pool(processes=num_threads)
|
||||
blocks = []
|
||||
for i in range(0, size, step):
|
||||
blocks.append(matrix[i:i+step, i:i+step])
|
||||
dets = pool.map(determinant, blocks)
|
||||
return np.prod(dets)
|
||||
|
||||
def benchmark(num_threads):
|
||||
matrix1 = np.random.rand(100, 100)
|
||||
start_time = time.time()
|
||||
det1 = determinant(matrix1)
|
||||
end_time = time.time()
|
||||
execution_time = end_time - start_time
|
||||
print("Матрица 100x100:", matrix1)
|
||||
print("Детерминант матрицы 100x100:", det1)
|
||||
print("Последовательное время выполнения:", execution_time, "сек")
|
||||
start_time = time.time()
|
||||
detp1 = parallel_determinant(matrix1, num_threads)
|
||||
end_time = time.time()
|
||||
execution_time = end_time - start_time
|
||||
print("Пареллельное время выполнения:", execution_time, "сек")
|
||||
matrix2 = np.random.rand(300, 300)
|
||||
start_time = time.time()
|
||||
det2 = determinant(matrix2)
|
||||
end_time = time.time()
|
||||
execution_time = end_time - start_time
|
||||
print("Матрица 300x300:", matrix2)
|
||||
print("Детерминант матрицы 300x300:", det2)
|
||||
print("Последовательное время выполнения:", execution_time, "сек")
|
||||
start_time = time.time()
|
||||
detp2 = parallel_determinant(matrix2, num_threads)
|
||||
end_time = time.time()
|
||||
execution_time = end_time - start_time
|
||||
print("Пареллельное время выполнения:", execution_time, "сек")
|
||||
matrix3 = np.random.rand(500, 500)
|
||||
det3 = determinant(matrix3)
|
||||
end_time = time.time()
|
||||
execution_time = end_time - start_time
|
||||
print("Матрица 500x500:", matrix3)
|
||||
print("Детерминант матрицы 500x500:", det3)
|
||||
print("Последовательное время выполнения:", execution_time, "сек")
|
||||
start_time = time.time()
|
||||
detp3 = parallel_determinant(matrix3, num_threads)
|
||||
end_time = time.time()
|
||||
execution_time = end_time - start_time
|
||||
print("Пареллельное время выполнения:", execution_time, "сек")
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Введите кол-во поток")
|
||||
n = int(input())
|
||||
benchmark(n)
|
||||
39
tasks/kazakov-ev/lab_7/README.md
Normal file
39
tasks/kazakov-ev/lab_7/README.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Отчет по лабораторной работе №7
|
||||
Выполнил студент гр. ИСЭбд-41 Казаков Е.В.
|
||||
|
||||
## Вопросы
|
||||
Написать небольшое эссе (буквально несколько абзацев) своими словами. А помогут Вам в этом вопросы из списка:
|
||||
|
||||
1.Какие алгоритмы и методы используются для балансировки нагрузки?
|
||||
|
||||
2.Какие открытые технологии существуют для балансировки нагрузки?
|
||||
|
||||
3.Как осуществляется балансировка нагрузки на базах данных?
|
||||
|
||||
4.Реверс-прокси как один из элементов балансировки нагрузки.
|
||||
|
||||
## Эссе
|
||||
|
||||
1. Алгоритмы и методы балансировки нагрузки
|
||||
- Раунд-робин: Запросы распределяются между серверами в равных долях, каждый сервер получает запрос в порядке очереди.
|
||||
- Взвешенный раунд-робин: Запросы распределяются между серверами с учетом их пропускной способности или нагрузки, чтобы более мощные серверы получали больше запросов.
|
||||
- IP хэширование: Используется IP-адрес клиента для распределения запросов. Каждый клиент получает один и тот же сервер при повторном обращении.
|
||||
- Алгоритмы предсказывающего анализа: Используются статистические данные и анализ прошлых запросов для предсказания оптимального распределения нагрузки.
|
||||
|
||||
2. Открытые технологии балансировки нагрузки
|
||||
- Nginx: Легкий веб-сервер, способный работать как прокси-сервер и балансировщик нагрузки.
|
||||
- HAProxy: Балансировщик нагрузки с открытым исходным кодом, специализирующийся на высокой доступности и производительности.
|
||||
- Apache HTTP Server с модулем mod_proxy_balancer: Популярный веб-сервер, позволяющий выполнить балансировку нагрузки с помощью модуля mod_proxy_balancer.
|
||||
- Microsoft Network Load Balancing (NLB): Решение для балансировки нагрузки в среде Windows, встроенное в ОС Windows Server.
|
||||
|
||||
3. Балансировка нагрузки на базах данных
|
||||
Балансировка нагрузки на базах данных может быть достигнута с использованием следующих методов:
|
||||
- Репликация: Создание дубликатов баз данных для распределения нагрузки между серверами.
|
||||
- Шардинг: Разбиение данных на отдельные серверы, каждый из которых отвечает за определенную часть информации.
|
||||
- Кластеризация: Совместное использование ресурсов нескольких серверов для достижения более высокой производительности и отказоустойчивости.
|
||||
|
||||
4. Реверс-прокси как один из элементов балансировки нагрузки
|
||||
Реверс-прокси является компонентом, который обрабатывает входящие запросы от клиентов и перенаправляет их на соответствующие серверы. Он может быть сконфигурирован для выполнения балансировки нагрузки, решая такие задачи, как:
|
||||
- Распределение запросов между несколькими серверами.
|
||||
- Мониторинг состояния серверов и исключение недоступных серверов из пула.
|
||||
- Кеширование ответов для улучшения производительности.
|
||||
Reference in New Issue
Block a user