Проекты
Проект sdCloud — это не совсем проект лаборатории COSM. Вернее будет сказать, что лаборатория COSM появилась как часть процесса расширения этого проекта с целью укоренения в университете и объединения всех тех новых активностей, которые стали выделяться из основного проекта.

Первые наброски идей для этого проекта появились в 2015 году в Кембридже на международной конференции по системной динамике, на которой мы с Robert Ward представляли работу по созданию конвертора системно-динамических моделей из одного формата в другой. Было очень интересно; конвертор, кажется, мы так и не доделали — но параллельно с этим, общаясь с разными членами сообщества, мы пришли к выводу, что есть две трудности, которые всем хотелось бы преодолеть:
  1. Инструменты для моделирования (особенно разрабатываемые энтузиастами) не очень просты в использовании, и о них не очень много известно в сообществе тех, кто использует моделирование для решения реальных практических задач;

  2. Те, кто хорошо разбираются в моделировании и предметных областях, не очень сильны в том, чтобы доставать какие-то инструменты из репозиториев, собирать их из исходников и настраивать что-то для запуска.
В качестве решения была предложена идея создать облачный сервис, который, возьмёт на себя сложности с настройкой и подготовкой тех или иных инструментов и предоставит пользователям возможность сфокусироваться не на технических и инфраструктурных вопросах, а на реальных прикладных задачах, инструментом для работы с которыми была выбрана системная динамика.

В настоящее время, существует много различных методов и инструментов, применяющихся для моделирования систем и процессов. Системная динамика является одним из вариантов имитационного моделирования. Относительная простота его применения, активность международного сообщества и широкий спектр применения в различных областях человеческой деятельности сделали этот подход удачным выбором для развития нашей лаборатории именно в этом направлении. Этот подход хорошо зарекомендовал себя для моделирования различных систем изменяющихся во времени в таких областях как экономика, технические системы, оциальные процессы, медицина и многие другие.

Больше об истории начала проекта можно прочитать как на русском, так и на английском в блоге проекта (WE ARE LIVE!!!!).

С тех пор уже около семи лет мы делаем свою собственную облачную платформу для работы с системно-динамическими моделями, которая активно используется студентами и исследователями по всему миру для решения практических задач. В настоящее время мы видим около 400 постоянных активных пользователей нашей платформы — что для научного проекта достаточно неплохо.

Так чем же мы занимаемся в этом проекте?

На него — как и на другие проекты, над которыми работает наша лаборатория — можно смотреть с нескольких сторон.

В технической перспективе мы занимаемся разработкой большого облачного enterprise-решения, что включает в себя много разных аспектов: это и разработка серверной части (C#/Python), и Web-приложение (ReactJS) — и мы даже совершили несколько (пока безуспешных) попыток разработать своё мобильное приложение для работы с нашей платформой. Процесс работы над проектом максимально приближен к промышленной разработке такого рода решений, что выражается в полноценной работе с репозиторием: это включает ветки и merge request'ы для доставки новых изменений, юнит- и интеграционное тестирование, практики непрерывной сборки и тестирования по каждому коммиту и полную автоматизацию поставки всех частей решения как на тестовые, так и на продуктовое окружение; в общем, промышленная разработка как она есть. Мы считаем очень важным поддерживать высокий уровень зрелости процессов в проекте, так как это дает возможность студентам освоиться и научиться работе в таком окружении, которое позволит им при трудоустройстве быть максимально подготовленными и адаптированными.

«А что же в научном плане? Лаборатория — то у вас научная, университетская»

В научном плане мы стараемся проводить много прикладных интересных исследований. Так как мы занимаемся расчётом моделей, мы постоянно ищем пути, как это можно делать эффективнее. Мы много экспериментируем аппаратными платформами: у нас есть обычные серверы x86 — таким никого не удивишь; также мы экспериментируем над запуском моделей на графических процессорах на нашем GPU кластере, но и это не всё. В распоряжении лаборатории есть очень мощные серверы на базе процессоров SPARC, на которых есть до 144 логических ядер на одном процессоре, и можно использовать особенности этой архитектуры ля повышения эффективности вычислений. И вишенкой на технологическом торте нашей команды является отечественный сервер Эльбрус с очень интересной архитектурой VLIW, грамотное использование которой может очень существенно повысить эффективность различных вычислений. Также совместно с другой университетской лабораторией мы работаем над тем, чтобы сделать собственный аппаратный ускоритель для расчёта моделей, что позволит в разы увеличить скорость их расчёта.

Однако мы не ограничиваемся только повышением эффективности наших расчётов. Мы также ищем новые способы использования системно-динамических моделей, например, как основу нашей игровой платформы (спойлер, об этом тоже расскажем в других постах) или для создания цифровых двойников сложных динамических систем. Также мы занимаемся работой над инструментами для анализа моделей, оптимизации передачи больших данных между разными частями проекта, визуализацией моделей и результатов моделирования, проведения многоэтапных модельных экспериментов с анализом его результатов и многое другое. Ещё мы разрабатываем специальные дополнения, чтобы можно было использовать нашу платформу в образовательных целях тем, кто изучает или преподаёт системную динамику.

Как видно, в рамках этого проекта можно найти задачи самого разного толка, которые могут быть представлены и как выпускные квалификационные работы у для бакалавров и магистров, так и небольшие задачи для научной или производственной практики.

Так как наш проект является международным, мы активно сотрудничаем со студентами и просто желающими к нам присоединиться из разных стран. Поэтому у нас нет ограничений на то, из какого ВУЗа будут желающие присоединиться, если им будет интересен этот или другие проекты нашей лаборатории.

Мы всегда рады рассказать больше о наших проектах и ответить на вопросы о них, так что не стесняйтесь оставлять комментарии и отправлять сообщения в нашу группу.

Официальный сайт проекта

Блог, в котором мы стараемся публиковать новости:https://blog.sdcloud.io
После того, как у проекта sdCloud появилось определённое количество пользователей, быстро стало понятно, что в плоскости компьютерного моделирования в целом и системной динамики в частности совершенно недостаточно дать пользователям возможность работать только с моделями, редактируя и запуская их. Важную роль в практическом применении компьютерного моделирования играет аналитика, построенная как на результатах моделирования, так и на параметрах запуска и свойствах модели.

В случае работы с системно-динамическими моделями, на выходе получается набор временных рядов, который описывает состояние каждого узла модели на протяжении всего процесса моделирования. Первой идеей, которую нам захотелось реализовать, был модуль простой аналитики для результатов моделирования. Это могла бы быть небольшая часть проекта sdCloud. Однако, посмотрев шире на проблему, которую мы хотели решить, мы поняли, что такой тип данных (временные ряды) имеет очень широкое применение как в научной, так и в практической плоскости. Более того, есть широчайший спектр методов, инструментов, алгоритмов и подходов к работе с такими данными и, что самое интересное, большое количество исследований в этой области.

Собрав вместе всю эту информацию, мы приняли решение о том, чтобы выделить нашу небольшую поделку для анализа результатов моделирования в отдельный проект, целью которого стала разработка открытой платформы для обработки и анализа временных рядов.

Наличие такого проекта в портфолио лаборатории оказалось полезным в силу нескольких причин.

Во-первых, мы получили возможность интегрироваться с различными научно-исследовательскими командами, которым мы можем помогать, предоставляя наши аналитические возможности. Так, например, платформа использовалась для анализа собранных метрик в рамках совместного грантового (РФФИ) международного исследования, которое мы проводили совместно с нашими коллегами из университета Тапар (Индия). Тогда мы загрузили в систему около 20Тб данных телеметрии, описывающей работу тысяч виртуальных машин в крупных ЦОД. Другое международное применение нашей платформы было, когда мы делали анализ данных для коллеги, работающего над своей кандидатской (PhD) диссертацией в одном из ВУЗов Бразилии (он удачно защитился в первом квартале этого года).

Во-вторых, помимо возможностей интеграции с другими командами, мы получили ещё одну площадку, на которой студенты могут практиковаться в разработке промышленного решения, у которого есть активные пользователи и где надо решать большое количество интересных задач, по сложности не уступающих — а во многом и превышающих — те, с которыми они столкнутся в реальной ИТ-индустрии. И всё это в рамках современных процессов разработки и оперируя наиболее популярными инструментами. В списке задач, требующих внимания — хранение и передача больших объёмов данных, обработка на одном узле и распараллеливание вычислений, работа GPU, визуализация сложных и объёмных данных и так далее; это всё не считая задач планирования, DevOps и прочих сопутствующих аспектов.

В-третьих, тематика обработки временных рядов является достаточно горячей в том плане, что существует большое количество различных исследований в этой области — как в направлении поиска новых методов анализа, так и в направлении оптимизации работы существующих. Так что проект получился богатым на темы всех видов, как для различных практик, так и для магистерских и бакалаврских выпускных квалификационных работ.

Так как мы стараемся не очень сильно расширять стек используемых в лаборатории технологий, основу проекта составляют .NetCore (C#) на стороне сервера и ReactJS на стороне клиента. Однако архитектура проекта такова, что аналитические модули могут разрабатываться на любых языках, что приводит к появлению кода на Python, R, F# и других языках.

Так что если вас интересуют такие темы, как численные методы, машинное обучение, обработка и хранение больших объёмов данных, работа с GPU, сложная визуализация и проектирование пользовательского опыта — то в этом проекте вы точно сможете найти для себя интересные задачи. В настоящее время мы рассматриваем кандидатов как для работы над серверной частью, так и над клиентской.

Официальный сайт проекта
Рассмотренные ранее проекты имеют одну важную общую черту: они создаются в основном для решения научных и исследовательских задач. С этой точки зрения можно сказать, что проект InsightProject представляет из себя решение с намного более выраженным прикладным назначением. Его основная идея состоит в обобщении идей и опыта членов нашей лаборатории, связанных с работой в различных IT-компаниях на протяжении длительного времени.

Итак, что же такое InsightProject?

Как и большинство наших проектов — это облачный сервис, который мы развернули и поддерживаем в нашей лаборатории на нашем собственном оборудовании. Основная задача этого сервиса - дать людям, работающим в области разработки программного обеспечения, возможность провести глубокий анализ того, как же работают их проекты, и какие взаимосвязи есть как между их техническими, так и организационными составляющими.

Как же это работает?

В основу системы положен реальный инженерный и управленческий опыт, накопленный за время работы над различными проектами в разных предметных областях, разрабатывавшимися в соответствии с разными моделями процессов и с использованием широкого спектра технологий. Этот опыт прошёл процедуру глубокого анализа и обобщения, что позволило для многих элементов и артефактов процессов разработки ПО выделить общие и наиболее важные и полезные составляющие.

Сбор и обобщение данных

Всё началось с разработки универсального механизма, который позволил бы получать данные из широкого спектра систем, применяемых при разработке ПО — например, таких как системы управления задачами (Jira, Mantis, …), репозитории с исходным кодом (Git, Mercurial, Subversion), системы непрерывной интеграции (Jenkins, GitLab, Travis CI), инструменты для статического анализа кода (SonarQube). Приведённый список далеко не полный и постоянно расширяется, когда к нам обращаются представители проектов, которые используют для своей работы другие инструменты, и хотят провести анализ своей работы, используя платформу InsightProject.

На этом этапе главной сложностью для нашей команды стало то, что все системы — даже относящиеся к одному классу — имеют различные наборы полей и свойств у объектов (например, у задач или сборок), которые они предоставляют. В связи с этим нам пришлось провести систематизацию и обобщение доступных данных: это делалось, чтобы оставить значительную часть этого разнообразия за пределами нашей системы, с одной стороны, а с другой — разработать такую структуру внутренних данных, которая позволила бы сохранить в нашей базе максимум полезной информации, которую мы можем получить извне для последующего анализа. Как результат, мы можем получать данные из широкого спектра источников и применять к ним одни и те же аналитические методы и средства. В общем случае можно говорить о том, что на этом уровне была реализована стратегия ETL для получения данных. Достоинством такого подхода является возможность переноса различных аналитических конфигураций между проектами вне зависимости от того, какие инструменты они используют для своей работы.

Хранение данных

После того, как была решена задача с тем, как и что можно собирать и обрабатывать, важным вопросом стал выбор хранилища для получаемых данных. В настоящее время существует широкий выбор хранилищ данных, и — проведя соответствующее исследование — в качестве ядра системы хранения информации в системе InsightProject нами было выбрано отечественное решение Tarantool. Такой выбор был сделан по ряду причин, включая богатые возможности по размещению аналитических методов рядом с данными, гибкость NoSQL-хранилища и высокая производительность этого решения на при работе с большими объёмами данных. Пользователи и пользовательский интерфейс

Следующим уровнем в логической иерархии нашего решения стала разрабатываемая аналитическая платформа. Когда все данные собраны вместе, нормализованы и упакованы в высокоэффективное хранилище, необходимо заставить их приносить пользу реальным конечным пользователям — а пользователями в контексте нашего проекта являются все участники процесса разработки ПО.
  • Инженеры — те, кто непосредственно занимается разработкой. Наша платформа может следить за обновлением исходного кода и вики-страниц, чтобы напоминать поддерживать их в актуальном состоянии. Также она может предупреждать, что кто-то на другой ветке вносит изменения в тот же код и что это может привести к конфликтам, или что при внесении изменений в какой-то участок кода в случае других задач были ещё изменения в других областях, и стоит на это обратить внимание.

  • Менеджеры — получают широкий спектр возможностей, чтобы видеть, где и как проходят те или иные изменения, какие задачи привели к каким масштабам изменений в проекте.

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

Для того, чтобы скрыть всю сложность внутренней организации нашего решения и предоставить пользователям возможность лёгкой и комфортной работы с системой, вершиной архитектурного айсберга, видимой конечным пользователям, является Web-приложение, которое позволяет как осуществить настройку системы для конкретного окружения, так и получить доступ ко всем собранным данным и аналитическим инструментам, спрятанным глубоко внутри.

Работа продолжается

Несмотря на то, что проект разрабатывается на протяжении нескольких лет, в нём есть ещё очень большое количество нерешённых задач, которые ждут тех, кто захочет присоединиться к разработке. Эти задачи лежат как в плоскости сбора и обработки данных из различных источников, так и в области оптимизации и улучшения нашего основного хранилища. Много задач есть в области разработки и адаптации аналитических инструментов. Для тех, кто хочет делать сложное и масштабное понятным, красивым и функциональным — есть обширное поле деятельности в домене web-разработки.

В проекте InsightProject, как и в других проектах лаборатории, всегда есть интересные задачи, так что если кому-то тематика этого и/или других проектов будет близкой и интересной — наша лаборатория всегда будет рада пообщаться и пригласить в нашу команду.

Официальный сайт проекта



Адрес для резюме
joinus@cosm-lab.science