Compare commits

..

2 Commits

2 changed files with 118 additions and 0 deletions

43
distributed-computing.sln Normal file
View File

@ -0,0 +1,43 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.002.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tasks", "tasks", "{224C88C4-CE1E-473D-AE79-1834542D1192}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "moiseev-vv", "moiseev-vv", "{CF77CC64-0D67-45B7-AEBD-177B182FAEE2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lab_2", "lab_2", "{167DA3B2-5001-43BD-8029-D980B3AC3DB2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "worker-1", "tasks\moiseev-vv\lab_2\worker-1\worker-1.csproj", "{713B1088-763A-49FA-A6F5-BC1A12631F7A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "worker-2", "tasks\moiseev-vv\lab_2\worker-2\worker-2.csproj", "{DB20606C-AD61-4A0E-825D-6DA8BB71D3C2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{713B1088-763A-49FA-A6F5-BC1A12631F7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{713B1088-763A-49FA-A6F5-BC1A12631F7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{713B1088-763A-49FA-A6F5-BC1A12631F7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{713B1088-763A-49FA-A6F5-BC1A12631F7A}.Release|Any CPU.Build.0 = Release|Any CPU
{DB20606C-AD61-4A0E-825D-6DA8BB71D3C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DB20606C-AD61-4A0E-825D-6DA8BB71D3C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DB20606C-AD61-4A0E-825D-6DA8BB71D3C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DB20606C-AD61-4A0E-825D-6DA8BB71D3C2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{CF77CC64-0D67-45B7-AEBD-177B182FAEE2} = {224C88C4-CE1E-473D-AE79-1834542D1192}
{167DA3B2-5001-43BD-8029-D980B3AC3DB2} = {CF77CC64-0D67-45B7-AEBD-177B182FAEE2}
{713B1088-763A-49FA-A6F5-BC1A12631F7A} = {167DA3B2-5001-43BD-8029-D980B3AC3DB2}
{DB20606C-AD61-4A0E-825D-6DA8BB71D3C2} = {167DA3B2-5001-43BD-8029-D980B3AC3DB2}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D13A4C12-DAC7-43D7-B3CC-CFD6D4EEEA6B}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,75 @@
# Отчет по лабораторной работе №8
Выполнил студент гр. ИСЭбд-41 Мельников К.Ю.
## Задачи
Написать небольшое эссе (буквально несколько абзацев) своими словами. А помогут Вам в этом вопросы из списка:
1. Зачем сложные системы (например, социальная сеть ВКонтакте) пишутся в "распределенном" стиле, где каждое отдельное приложение (или сервис) функционально выполняет только ограниченный спектр задач?
2. Для чего были созданы системы оркестрации приложений? Каким образом они упрощают / усложняют разработку и сопровождение распределенных систем?
3. Для чего нужны очереди обработки сообщений и что может подразумеваться под сообщениями?
4. Какие преимущества и недостатки распределенных приложений существуют на Ваш взгляд?
5. Целесообразно ли в сложную распределенную систему внедрять параллельные вычисления? Приведите примеры, когда это действительно нужно, а когда нет.
## Эссе
1. Cложные системы (например, социальная сеть ВКонтакте) пишутся в "распределенном" стиле, для достижения следующих преимуществ:
Масштабируемость: Когда количество пользователей и объем данных постоянно растут, необходимо распределить нагрузку и обеспечить высокую производительность системы. Распределенный подход позволяет горизонтально масштабировать систему путем добавления новых приложений или сервисов. Каждое из них может быть настроено на обработку определенного набора задач, таких как управление профилями пользователей, обработка сообщений или хранение изображений. Это позволяет балансировать нагрузку и распределить задачи между различными компонентами системы.
Гибкость и независимость: Разделение функциональности на отдельные приложения или сервисы позволяет разработчикам работать над ними независимо друг от друга. Это упрощает сопровождение и развитие системы, поскольку изменения в одном компоненте, например, в системе аутентификации, не затрагивают другие компоненты, такие как система чата или новостная лента.
Балансировка нагрузки: Если один компонент становится перегруженным, другие могут взять на себя часть нагрузки, обеспечивая более равномерное распределение работы: В распределенной системе наличие отдельных приложений или сервисов означает, что если один из них выходит из строя или недоступен, остальные все еще могут работать. Системы могут быть спроектированы с использованием механизмов отказоустойчивости, таких как репликация данных, чтобы обеспечить непрерывную работу системы даже при возникновении сбоев.
Производительность: Распределение задач между различными компонентами позволяет параллельно обрабатывать запросы, оптимизировать производительность и улучшать отзывчивость системы. Например, каждый компонент может иметь свою собственную базу данных, что уменьшает конфликты при параллельной обработке запросов к данным.
2. Системы оркестрации приложений были созданы для управления и координации работы распределенных систем. Они упрощают разработку и сопровождение распределенных систем, предоставляя автоматизацию процессов развертывания, масштабирования, управления и мониторинга приложений. Это позволяет снизить вероятность ошибок, упростить работу разработчиков и операторов,обеспечить гибкость внесения изменений и обновлений системы, а также обеспечить мониторинг и отказоустойчивость.
Однако использование систем оркестрации приложений может усложнить разработку и сопровождение распределенных систем из-за необходимости изучения новых инструментов и концепций, дополнительных зависимостей и требований к окружению, а также возможного усложнения конфигурации и управления системой.
3. Очереди обработки сообщений являются мощным инструментом для управления и координации асинхронной обработки информации. Они позволяют разделить отправку и получение данных, обеспечивая асинхронность и возможность обработки задач в определенном порядке.
Под сообщениями может пониматься различная информация, которую требуется передать или обработать. Например, это могут быть запросы от пользователей, события системы, уведомления, задачи на обработку данных и т.д. Все эти сообщения могут быть различного типа и носить разную смысловую нагрузку.
Очереди сообщений позволяют эффективно управлять потоком информации, реализовывать механизмы повторной обработки, обеспечивать масштабируемость и гибкость системы. Они также увеличивают надежность и отказоустойчивость, позволяя сохранять сообщения и обрабатывать их в случае возникновения ошибок или сбоев.
4. Преимущества распределенных приложений:
Масштабируемость: легко масштабируются для обработки большого количества запросов и удовлетворения потребностей пользователей.
Гибкость и универсальность: Гибкость и универсальность: позволяют использовать различные технологии и платформы для создания гибкой и функциональной системы.
Надежность и отказоустойчивость: Надежность и отказоустойчивость: предотвращают единую точку отказа, обеспечивают доступность и сохранность данных даже при сбое компонентов системы.
Недостатки распределенных приложений:
Сложность разработки: требуется более сложное проектирование и разработка из-за взаимодействия компонентов через сеть.
Управление сетью: требуется внимание к управлению сетью для обеспечения надежной коммуникации между компонентами.
Безопасность: требуется использование механизмов шифрования и аутентификации для защиты информации и предотвращения несанкционированного доступа.
5. Внедрение параллельных вычислений в сложную распределенную систему может быть целесообразным, если:
Необходимо обрабатывать большие объемы данных, чтобы разделить задачи на более мелкие части и выполнять их параллельно, ускоряя обработку.
Используются сложные аналитические задачи, такие как машинное обучение или анализ больших данных, чтобы повысить производительность.
Требуется обрабатывать запросы в реальном времени от множества пользователей одновременно, чтобы эффективно распределять нагрузку.
Однако, внедрение параллельных вычислений может быть излишним или нецелесообразным в случаях:
Когда задачи в системе являются простыми и не требуют большого количества вычислительных ресурсов.
При обработке небольших объемов данных, где применение параллельных вычислений не принесет заметных преимуществ.
Когда у системы ограниченные ресурсы или ограничения по масштабируемости, что может привести к использованию ресурсов неэффективно.
Итак, внедрение параллельных вычислений следует рассматривать в зависимости от задач, требований и ограничений системы для определения его целесообразности.