Малые компьютерные системы со свойствами масштабируемости и высокой доступности (Юрий Шевчук, OSEDUCONF-2023) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) (Новая страница: «;{{SpeakerInfo}}: {{Speaker|Юрий Шевчук}} <blockquote> </blockquote> {{VideoSection}} {{vimeoembed||800|450}} {{youtubelink|}} {{SlidesSection}} Fi…») |
StasFomin (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии этого же участника) | |||
;{{SpeakerInfo}}: {{Speaker|Юрий Шевчук}} <blockquote> Рассматривается подход к организации отказоустойчивых информационно-вычислительных систем в виде распредёленных программных систем, работающих на сети одноплатных компьютеров. Описывается разработанный авторами одноплатный компьютер, специализированный для использования в таких мультикомпьютерных системах. Приводятся примеры свободного программного обеспечения, применимого для таких систем. </blockquote> {{VideoSection}} {{vimeoembed|906182468|800|450}} {{youtubelink|}} |A5bLN--NioY}} {{SlidesSection}} [[File:Малые компьютерные системы со свойствами масштабируемости и высокой доступности (Юрий Шевчук, OSEDUCONF-2023).pdf|left|page=-|300px]] {{----}} == Thesis == === Введение === С внедрением информационных технологий во все сферы общественной жизни разработчикам информационных систем приходится решать задачи обеспечения высокой доступности (<tt>high availability</tt>) и постепенной масштабируемости (<tt>incremental scalability</tt>). Недоступность критических информационых сервисов парализует работу любого цифровизованного предприятия. Невозможность наращивания характеристик системы (производительности, объёма памяти) без замены серверной платформы на более мощную влечёт неоптимальные финансовые вложения (установка серверов с избытком ресурсов -- «на вырост»), и риск временной нестабильности сервиса при каждой замене серверной платформы. Современным решением обеих проблем является переход предприятий с собственной серверной инфраструктуры на облачные сервисы. Ведущие облачные провайдеры (<tt>AWS, Azure, Yandex,</tt> ...) поддерживают доступность серверной инфраструктуры на уровне 99.95 … 99.99. Арендованный в облаке сервер легко масштабируется путём выбора более высокого тарифного плана. И есть ещё много преимуществ в использовании арендованных облачных серверов, но есть и аргументы против: * если пользователи системы не рассредоточены по Интернет, а находятся на территории предприятия (пример: кассы супермаркета), доступность сервера нужно домножить на коэффициент доступности канала от предприятия до облачного провайдера, который может быть существенно ниже единицы; * масштабируемость облачного сервера ограничена размером физического сервера, используемого облачным провайдером; * тарифная сетка облачных провайдеров может не соответствовать потребностям реализуемой системы; особенно это касается систем, требующих больших объёмов дискового пространства при сравнительно небольших требованиях к ресурсам процессора и оперативной памяти; * лимитированный объём трафика и/или пропускная способность; * риск изменения (ухудшения) условий предоставления облачных сервисов после того как система создана, отлажена и от неё зависит работа предприятия; * обратной стороной удобства сервисов <tt>PaaS</tt> являются трудности перехода к другому провайдеру (<tt>vendor lock-in</tt>); * если есть требования конфиденциальности данных, ресурсы публичных облачных провайдеров использовать нельзя. Альтернативный способ получения информационной системы с высокой доступностью и масштабируемостью—реализация системы на кластере компьютеров в локальной сети предприятия в виде распредёленной программной системы. Коэффициент снижения производительности системы при отказе одного компьютера <m>K_d = 1 - 1/N</m>, где N — число компьютеров в кластере, т.е. влияние отказов на производительность системы тем меньше, чем больше компьютеров в кластере. Но стоимость кластера <m>C = \sum_{i=1}^{N}C_i</m>, и экономически неэффективно увеличивать N так, чтобы суммарный объём ресурсов кластера <m>P = \sum_{i=1}^{N}P_i </m> значительно превышал необходимый для работы системы объём ресурсов <m>P_{\mathrm{min}}</m>. Таким образом, для предприятий с небольшим <m>P_{\mathrm{min}}</m> единственный способ получения экономически эффективной системы с высокой доступностью это использование компьютеров с небольшой стоимостью <m>C_i</m> и объёмом ресурсов <m>P_i</m>. В настоящее время существует и бурно развивается класс недорогих одноплатных компьютеров (SBC—Single Board Computer), наиболее известным представителем которого является компьютер Raspberry Pi (2012—н.вр.). Сейчас рынке <tt>SBC</tt> работаeт значительное число производителей, выпускающих <tt>SBC</tt> на базе микросхем SoC (System-on-Chip—система на кристалле) фирм Broadcom, Allwinner, Amlogic, NXP, Samsung, Mediatek, Rockchip с архитектурами armhf и arm64, работающие под управлением ОС Linux. Их производительность уже достаточна для использования в качестве персонального компьютера или небольшого сервера, и их можно было бы использовать для построения кластера для информационно-вычислительных систем с высокой доступностью. Но несмотря на многообразие представленных на рынке SBC, не удаётся найти моделей, сочетающих необходимые характеристики: * достаточный объём оперативной памяти (не менее 4ГБ); * интерфейс <tt>SATA</tt> для подключения внешних накопителей массового класса; * два или более коммуникационных интерфейса Gigabit Ethernet для организации отказоустойчивой локальной сети; * схема питания с резервированием для исключения одновременного выхода из строя нескольких узлов системы при отказе внешних компонентов системы электропитания, таких как <tt>UPS</tt> и конверторы <tt>AC-DC</tt>. В то же время, конструкция коммерческих <tt>SBC</tt> в значительной степени открыта: используется свободное ПО, доступны электрические принципиальные схемы, хотя и недоступны топологии печатных плат. Это даёт возможность при сравнительно небольших трудозатратах разработать специализированный <tt>SBC</tt> для распредёленных информационных систем с высокой доступностью и масштабируемостью. Разработке такого <tt>SBC</tt> (семейства <tt>SBC</tt>) и посвящена настоящая работа. === Состояние работ === Разработан специализированный <tt>SBC</tt>: принципиальные схемы, топологии печатных плат. Выпущено несколько первых образцов, начата сборка небольшого кластера. Конструкция <tt>SBC</tt>: [[File:2023-sbc-photo.png|center|640px]] Отметим основные особенности: * конструкция одноплатного компьютера на самом деле двухплатная<ref>ЕлистратовА.В., КоваленкоМ.Р., ПономарёвА.Ю., ШевчукЮ.В. <tt>Компактный вычислительный модуль для распределённых систем управления и хранения данных.</tt> [https://2021.nscf.ru/Presentations/01_Apparatura/03_ShevchukYV.pdf]</ref>: маленькая плата с процессором и памятью (<tt>SoM -- System on Module</tt>) требует дорогой технологии, а большая несущая плата сравнительно дешёвая. Такая конструкция позволяет быстро и недорого создавать модификации <tt>SBC</tt>, если это требуется для конкретного применения. Конструкция безразъёмная, платы соединяются пайкой; * на <tt>SoM</tt> находятся процессор (<tt>SoC Rockchip RK3328</tt>, 4 ядра <tt>ARM64 Cortex A53</tt>), оперативная память <tt>DDR4</tt>, <tt>flash</tt>-память <tt>eMMC</tt> и микросхема коммутатора <tt>Gigabit Ethernet</tt> с одним внутренним и тремя внешними портами; * на несущей плате находятся все крупногабаритные детали, разъёмы <tt>Ethernet, SATA, MicroSD</tt> и подсистема резервированного питания, включающая два входа внешнего питания и встроенный аккумулятор <tt>Li-ion</tt>. Ресурс аккумулятора выбран так, чтобы в случае отказа внешнего электропитания узел смог сохранить данные из оперативной памяти на диск и корректно остановить систему до восстановления внешнего электропитания; * питание от источника 10..15В; можно питать от свинцово-кислотного аккумулятора, работающего в буферном режиме (постоянно находящегося на зарядке). Сеть <tt>Gigabit Ethernet</tt>, конечно, не идёт в сравнение в быстрыми сетями кластеров, такими как <tt>Infiniband</tt>. Зато <tt>Ethernet</tt> позволяет разнести узлы по разным помещениям с независимым электропитанием, уменьшить физические риски, такие как пожар или затопление. <tt>Gigabit Ethernet</tt> это массовая технология, позволяющая при небольших затратах организовать отказоустойчивую сеть. Приведём два примера сетей: минимальный на встроенных коммутаторах: [[File:2023-lan-minimal.png|center|640px]] и максимальный на внешних 48-портовых коммутаторах: [[File:2023-lan-d2.png|center|640px]]} === Программное обеспечение === В настоящий момент на <tt>SBC</tt> работает <tt>Armbian Linux</tt>. Используются загрузочные образы для близких по архитектуре компьютеров Rock64<ref><tt>PINE64: A Small Form-Factor Single Board Computer Capable of 4K playback</tt> [https://www.pine64.org/devices/single-board-computers/rock64/] </ref> или [https://en.t-firefly.com/product/rocrk3328cc.html Firefly ROC-RК3328-CC]. В образе заменены ядро Linux, загрузчик uboot и описание аппаратуры компьютера (<tt>device tree</tt>). <tt>Armbian Linux</tt> использует репозиторий пакетов <tt>Debian GNU/Linux</tt>, т.е. доступен для установки большой объём пре-компилированного свободного программного обеспечения. И ещё в репозитории <tt>Debian</tt> нет ряда программных продуктов со свободными лицензиями, которые мы планируем применять на сети малых компьютеров для построения систем с высокой доступностью и масштабируемостью. Кратко перечислим их. ==== Riak KV ==== [https://github.com/basho/riak Riak KV] -- распредёленное масштабируемое хранилище данных типа «ключ -- значение» с высокой доступностью. Одна из свободных реализаций принципов <tt>Amazon Dynamo</tt><ref>G.DeCandia, D.Hastorun, M.Jampani, G.Kakulapati, A.Lakshman, A.Pilchin, S.Sivasubramanian, P.Vosshall, W.Vogels <tt>Dynamo: Amazon's Highly Available Key-Value Store</tt>. SOSP-2007. [http://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf]</ref>. Полностью децентрализовано: все узлы равноправны. Сохраняет доступность на запись при отказе до $N-1$ из $N$ узлов. NoSQL, не даёт гарантий <tt>ACID</tt>, реализует «согласованность в конечном счёте» -- <tt>eventual consistency</tt>. ==== Riak CS ==== Реализация над <tt>Riak KV</tt> файлового хранилища, совместимого <tt>API Amazon S3</tt>. Открывает возможность использовать готовые программные средства, работающие с этим популярным <tt>API</tt>, например fuse-монтируемые файловые системы 3sfs<ref>«[https://github.com/s3fs-fuse/s3fs-fuse FUSE-based file system backed by Amazon S3]»</ref> или s3ql<ref>«[https://github.com/s3ql/s3ql/ s3ql: Full-featured file system for online data storage]»</ref>. ==== Riak Core ==== <tt>[https://github.com/basho/riak_core Riak Core]</tt><ref>[https://github.com/lambdaclass/riak_core_tutorial Riak Core tutorial]</ref> -- библиотека для распредёленного программирования на языке <tt>Erlang</tt>, выделенная из <tt>Riak KV</tt>. Обеспечивает мониторинг состояния вычислительного кластера и автоматическое перераспределение нагрузки между узлами при выходе узлов из строя или добавлении в кластер новых узлов, используя метод консистентного хэширования. <tt>Riak Core</tt> это один из возможных путей к созданию собственных программных систем с высокой доступностью и масштабируемостью. ==== Apache Kafka ==== [https://kafka.apache.org/ Apache Kafka] — это распредёленный брокер (архитектура издатель-подписчик) и архив сообщений. Позволяет создавать распредёленные программные системы с потоковой обработкой данных, сочетая различные языки программирования, для которых реализованы Kafka API, в частности Си, Golang, Python, Perl, Erlang. === Заключение === Приведённый список свободных программных систем для распредёленных архитектур, конечно, далеко не полон и отражает в первую очередь предпочтения авторов. Он начинается с систем <tt>Riak KV</tt> и <tt>Riak CS</tt>, позволяющих организовать отказоустойчивые масштабируемые хранилища данных, которые используются традиционными, не распредёленными программными системами (например, сервер электронной почты <tt>dovecot</tt>). В этом случае высокая доступность сервера может достигаться известными методами [http://www.linux-ha.org Linux High Availability], есть масштабируемость хранилища, но нет распределения нагрузки на сервер по кластеру. Чтобы достичь распределения нагрузки, новые программные системы нужно сразу проектировать как распредёленные системы, в расчёте на мультикомпьютерную архитектуру. <tt>Riak Core</tt> и <tt>Apache Kafka</tt> могут быть полезны для реализации таких распредёленных программных систем. Мультикомпьютерные системы на сравнительно недорогих одноплатных компьютерах позволят даже организациям с небольшим бюджетом пользоваться преимуществами распредёленных систем -- отказоустойчивостью и горизонтальной масштабируемостью. {{----}} [[File:{{#setmainimage:Малые компьютерные системы со свойствами масштабируемости и высокой доступности (Юрий Шевчук, OSEDUCONF-2023)!.jpg}}|center|640px]] {{LinksSection}} <!-- <blockquote>[©]</blockquote> --> <references/> [[Категория:OSEDUCONF-2023]] [[Категория:Draft]] [[Категория:СПО в образовании]] |
Текущая версия на 00:53, 29 марта 2024
- Докладчик
- Юрий Шевчук
Рассматривается подход к организации отказоустойчивых информационно-вычислительных систем в виде распредёленных программных систем, работающих на сети одноплатных компьютеров. Описывается разработанный авторами одноплатный компьютер, специализированный для использования в таких мультикомпьютерных системах.
Приводятся примеры свободного программного обеспечения, применимого для таких систем.
Содержание
Видео
Презентация
Thesis
Введение
С внедрением информационных технологий во все сферы общественной жизни разработчикам информационных систем приходится решать задачи обеспечения высокой доступности (high availability) и постепенной масштабируемости (incremental scalability). Недоступность критических информационых сервисов парализует работу любого цифровизованного предприятия. Невозможность наращивания характеристик системы (производительности, объёма памяти) без замены серверной платформы на более мощную влечёт неоптимальные финансовые вложения (установка серверов с избытком ресурсов -- «на вырост»), и риск временной нестабильности сервиса при каждой замене серверной платформы.
Современным решением обеих проблем является переход предприятий с собственной серверной инфраструктуры на облачные сервисы. Ведущие облачные провайдеры (AWS, Azure, Yandex, ...) поддерживают доступность серверной инфраструктуры на уровне 99.95 … 99.99.
Арендованный в облаке сервер легко масштабируется путём выбора более высокого тарифного плана. И есть ещё много преимуществ в использовании арендованных облачных серверов, но есть и аргументы против:
- если пользователи системы не рассредоточены по Интернет, а находятся на территории предприятия (пример: кассы супермаркета), доступность сервера нужно домножить на коэффициент доступности канала от предприятия до облачного провайдера, который может быть существенно ниже единицы;
- масштабируемость облачного сервера ограничена размером физического сервера, используемого облачным провайдером;
- тарифная сетка облачных провайдеров может не соответствовать потребностям реализуемой системы; особенно это касается систем, требующих больших объёмов дискового пространства при сравнительно небольших требованиях к ресурсам процессора и оперативной памяти;
- лимитированный объём трафика и/или пропускная способность;
- риск изменения (ухудшения) условий предоставления облачных сервисов после того как система создана, отлажена и от неё зависит работа предприятия;
- обратной стороной удобства сервисов PaaS являются трудности перехода к другому провайдеру (vendor lock-in);
- если есть требования конфиденциальности данных, ресурсы публичных облачных провайдеров использовать нельзя.
Альтернативный способ получения информационной системы с высокой доступностью и масштабируемостью—реализация системы на кластере
компьютеров в локальной сети предприятия в виде распредёленной программной системы.
Коэффициент снижения производительности системы при отказе одного компьютера , где N — число компьютеров в кластере, т.е. влияние отказов на производительность системы тем меньше, чем больше компьютеров в кластере.
Но стоимость кластера , и экономически неэффективно увеличивать N так, чтобы суммарный объём ресурсов кластера значительно превышал необходимый для работы системы объём ресурсов . Таким образом, для предприятий с небольшим единственный способ получения экономически эффективной системы с высокой доступностью это использование компьютеров с небольшой стоимостью и объёмом ресурсов .
В настоящее время существует и бурно развивается класс недорогих одноплатных компьютеров (SBC—Single Board Computer), наиболее известным представителем которого является компьютер Raspberry Pi (2012—н.вр.).
Сейчас рынке SBC работаeт значительное число производителей, выпускающих SBC на базе микросхем SoC (System-on-Chip—система на кристалле) фирм Broadcom, Allwinner, Amlogic, NXP, Samsung, Mediatek, Rockchip с архитектурами armhf и arm64, работающие под управлением ОС Linux.
Их производительность уже достаточна для использования в качестве персонального компьютера или небольшого сервера, и их можно было бы использовать для построения кластера для информационно-вычислительных систем с высокой доступностью. Но несмотря на многообразие представленных на рынке SBC, не удаётся найти моделей, сочетающих необходимые характеристики:
- достаточный объём оперативной памяти (не менее 4ГБ);
- интерфейс SATA для подключения внешних накопителей массового класса;
- два или более коммуникационных интерфейса Gigabit Ethernet для организации отказоустойчивой локальной сети;
- схема питания с резервированием для исключения одновременного выхода из строя нескольких узлов системы при отказе внешних компонентов системы электропитания, таких как UPS и конверторы AC-DC.
В то же время, конструкция коммерческих SBC в значительной степени открыта: используется свободное ПО, доступны электрические принципиальные схемы, хотя и недоступны топологии печатных плат. Это даёт возможность при сравнительно небольших трудозатратах разработать специализированный SBC для распредёленных информационных систем с высокой доступностью и масштабируемостью. Разработке такого SBC (семейства SBC) и посвящена настоящая работа.
Состояние работ
Разработан специализированный SBC: принципиальные схемы, топологии печатных плат. Выпущено несколько первых образцов, начата сборка небольшого кластера.
Конструкция SBC:
Отметим основные особенности:
- конструкция одноплатного компьютера на самом деле двухплатная[1]: маленькая плата с процессором и памятью (SoM -- System on Module) требует дорогой технологии, а большая несущая плата сравнительно дешёвая. Такая конструкция позволяет быстро и недорого создавать модификации SBC, если это требуется для конкретного применения. Конструкция безразъёмная, платы соединяются пайкой;
- на SoM находятся процессор (SoC Rockchip RK3328, 4 ядра ARM64 Cortex A53), оперативная память DDR4, flash-память eMMC и микросхема коммутатора Gigabit Ethernet с одним внутренним и тремя внешними портами;
- на несущей плате находятся все крупногабаритные детали, разъёмы Ethernet, SATA, MicroSD и подсистема резервированного питания, включающая два входа внешнего питания и встроенный аккумулятор Li-ion. Ресурс аккумулятора выбран так, чтобы в случае отказа внешнего электропитания узел смог сохранить данные из оперативной памяти на диск и корректно остановить систему до восстановления внешнего электропитания;
- питание от источника 10..15В; можно питать от свинцово-кислотного аккумулятора, работающего в буферном режиме (постоянно находящегося на зарядке).
Сеть Gigabit Ethernet, конечно, не идёт в сравнение в быстрыми сетями кластеров, такими как Infiniband. Зато Ethernet позволяет
разнести узлы по разным помещениям с независимым электропитанием, уменьшить физические риски, такие как пожар или затопление.
Gigabit Ethernet это массовая технология, позволяющая при небольших затратах организовать отказоустойчивую сеть. Приведём два примера сетей: минимальный на встроенных коммутаторах:
и максимальный на внешних 48-портовых коммутаторах:
}Программное обеспечение
В настоящий момент на SBC работает Armbian Linux. Используются загрузочные образы для близких по архитектуре компьютеров Rock64[2] или Firefly ROC-RК3328-CC. В образе заменены ядро Linux, загрузчик uboot и описание аппаратуры компьютера (device tree). Armbian Linux использует репозиторий пакетов Debian GNU/Linux, т.е. доступен для установки большой объём пре-компилированного свободного программного обеспечения.
И ещё в репозитории Debian нет ряда программных продуктов со свободными лицензиями, которые мы планируем применять на сети малых компьютеров для построения систем с высокой доступностью и масштабируемостью. Кратко перечислим их.
Riak KV
Riak KV -- распредёленное масштабируемое хранилище данных типа «ключ -- значение» с высокой доступностью. Одна из свободных реализаций принципов Amazon Dynamo[3]. Полностью децентрализовано: все узлы равноправны. Сохраняет доступность на запись при отказе до $N-1$ из $N$ узлов. NoSQL, не даёт гарантий ACID, реализует «согласованность в конечном счёте» -- eventual consistency.
Riak CS
Реализация над Riak KV файлового хранилища, совместимого API Amazon S3. Открывает возможность использовать готовые программные средства, работающие с этим популярным API, например fuse-монтируемые файловые системы 3sfs[4] или s3ql[5].
Riak Core
Riak Core[6] -- библиотека для распредёленного программирования на языке Erlang, выделенная из Riak KV. Обеспечивает мониторинг состояния вычислительного кластера и автоматическое перераспределение нагрузки между узлами при выходе узлов из строя или добавлении в кластер новых узлов, используя метод консистентного хэширования. Riak Core это один из возможных путей к созданию собственных программных систем с высокой доступностью и масштабируемостью.
Apache Kafka
Apache Kafka — это распредёленный брокер (архитектура издатель-подписчик) и архив сообщений. Позволяет создавать распредёленные программные системы с потоковой обработкой данных, сочетая различные языки программирования, для которых реализованы Kafka API, в частности Си, Golang, Python, Perl, Erlang.
Заключение
Приведённый список свободных программных систем для распредёленных архитектур, конечно, далеко не полон и отражает в первую очередь предпочтения авторов. Он начинается с систем Riak KV и Riak CS, позволяющих организовать отказоустойчивые масштабируемые хранилища данных, которые используются традиционными, не распредёленными программными системами (например, сервер электронной почты dovecot).
В этом случае высокая доступность сервера может достигаться известными методами Linux High Availability, есть масштабируемость хранилища, но нет распределения нагрузки на сервер по кластеру. Чтобы достичь распределения нагрузки, новые программные системы нужно сразу проектировать как распредёленные системы, в расчёте на мультикомпьютерную архитектуру. Riak Core и Apache Kafka могут быть полезны для реализации таких распредёленных программных систем.
Мультикомпьютерные системы на сравнительно недорогих одноплатных компьютерах позволят даже организациям с небольшим бюджетом пользоваться преимуществами распредёленных систем -- отказоустойчивостью и горизонтальной масштабируемостью.
Примечания и ссылки
- ↑ ЕлистратовА.В., КоваленкоМ.Р., ПономарёвА.Ю., ШевчукЮ.В. Компактный вычислительный модуль для распределённых систем управления и хранения данных. [1]
- ↑ PINE64: A Small Form-Factor Single Board Computer Capable of 4K playback [2]
- ↑ G.DeCandia, D.Hastorun, M.Jampani, G.Kakulapati, A.Lakshman, A.Pilchin, S.Sivasubramanian, P.Vosshall, W.Vogels Dynamo: Amazon's Highly Available Key-Value Store. SOSP-2007. [3]
- ↑ «FUSE-based file system backed by Amazon S3»
- ↑ «s3ql: Full-featured file system for online data storage»
- ↑ Riak Core tutorial