Skip to content

Latest commit

 

History

History
43 lines (28 loc) · 5.62 KB

Annotation.md

File metadata and controls

43 lines (28 loc) · 5.62 KB

Сравнительный анализ и реализация различных конкурентных паттернов для работы с асинхронным вводом и выводом с использованием Kotlin и библиотеки kotlinx.coroutines

Компания: JetBrains d.o.o. Beograd

Уровень: бакалаврская

Описание предметной области
Проблема C10k, заключающаяся в сложности одновременной обработки сервером большого количества соединений, была обозначена еще в конце 1990-х, но является актуальной и на сегодняшний день. В процессе создания высоконагруженных серверов применялись различные стратегии: от блокирующего подхода до асинхронной работы с серверными сокетами. К примеру, NGINX, разработанный на асинхронной архитектуре, был создан как раз для решения проблемы C10k. Были разработаны и различные конкурентные паттерны, такие как proactor и reactor. В фреймворке Ktor, для которого и пишется дипломная работа, одной из важных частей является полностью асинхронный движок CIO на основе kotlin корутин, в котором для работы с серверными сокетами используется свой компонент.

Актуальность:
В настоящее время у пользователей Ktor усиливается потребность в написании высоконагруженных серверов, способных обрабатывать множество одновременных соединений. Для того чтобы оставаться конкурентоспособными и улучшать пользовательский опыт, нужно развивать и совершенствовать существующие решения и находить новые способы работы с асинхронным вводом и выводом. К тому же одним из фокусов в Ktor является собственный написанный мультиплатформенный движок CIO, для которого и будет создаваться решение. Kotlin сейчас делает большой акцент на мультиплатформенную разработку и поэтому официальные библиотеки во главе с Ktor также ставят это одной из главных своих задач. В то же время существует открытый вопрос какой из паттернов наиболее эффективно работает с корутинами.

Цель работы:
Реализация и улучшение компонента библиотеки Ktor для работы с асинхронным вводом и выводом. Планируется улучшение отзывчивости серверных приложений, сокращение времени ожидания ответов от сервера и обеспечение высокой производительности в условиях интенсивного ввода-вывода.

Что следует сделать:

  • Реализовать сервера с различными паттернами для работы с асинхронным вводом и выводом: блокирующие, неблокирующие, асинхронные
  • Разработать несколько сценариев работы клиента и сервера: один клиент и один сервер, 1000 клиентов и один сервер
  • Измерить характеристики (пропускная способность, время отклика) серверов в сценариях работы
  • Оценить проблемные места и сравнить паттерны используемые в серверах
  • Внедрить итоговый паттерн в модуль Ktor

Ожидаемые результаты: внедренный в модуль Ktor компонент для работы с асинхронным вводом и выводом с использованием kotlin корутин

Способ верификации результатов:
Нагрузочное тестирование и сравнительный анализ метрик, таких как пропускная способность и время отклика, после реализации каждого паттерна, с учетом различных сценариев клиент-серверного взаимодействия

Источники:
C10k problem http://www.kegel.com/c10k.html
Reactor https://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf
Ktor https://ktor.io/
Comparing Two High-Performance I/O Design Patterns https://www.artima.com/articles/comparing-two-high-performance-io-design-patterns Wrk https://github.com/wg/wrk
kotlinx.coroutines https://github.com/Kotlin/kotlinx.coroutines
Kotlin https://kotlinlang.org/