
Вітаю спільноту Хабра! Нещодавно я писав про нашу кластерну плату першої версії []. І сьогодні хочу розповісти, як ми працювали над версією оперативної пам'яті.
Ми захоплюємося міні серверами, які можна використовувати як для локальної розробки так і для хостингу локально. На відміну від настільних комп'ютерів або лептопів, наші сервери створені для роботи 24/7 їх швидко можна з'єднувати у федерацію, наприклад було 4 процесори в кластері, а через 5 хвилин стало 16 процесорів (без додаткового мережевого обладнання) і все це в компактному форм-факторі , безшумно та енергоефективно.
У основі архітектури наших серверів — кластерний принцип побудови тобто. ми робимо кластерні плати, які за допомогою ethernet мережі на платі з'єднують кілька обчислювальних модулів (процесорів). Для спрощення ми поки що не робимо своїх обчислювальних модулів, а використовуємо Raspberry Pi Compute Modules і ми дуже сподівалися на новий модуль CM4. Але все пішло врозріз планам з їх новим форм-фактором і думаю багато хто розчарований.
Під катом як ми йшли від V1 до V2 та як нам довелося викручуватися з новим форм-фактором Raspberry Pi CM4.
Отже, після створення кластера на 7 нід, питання що далі? Як збільшити цінність товару? 8, 10 або 16 нід? Які виробники модулів? Думаючи над продуктом у комплексі ми зрозуміли, що основна тут не кількість нід чи хтось виробник, а сама суть кластерів як будівельного блоку. Потрібно шукати мінімальний будівельний блок, який
Перше, буде кластером і при цьому мати можливість підключення дисків і плат розширень. Кластерний блок повинен бути самодостатнім базовим вузлом і з широкими можливостями розширення.
Друге, щоб мінімальні кластерні блоки можна було з'єднувати між собою вибудовуючи кластери більшого розміру і щоб це було ефективно з погляду бюджету та швидкості масштабування. Швидкість масштабування має бути вищою ніж з'єднання звичайних комп'ютерів у мережу і набагато дешевше серверного обладнання.
Третє, мінімальні кластерні блоки повинні бути достатньо компактними, мобільними, енергоефективними, cost-effective і не вимогливими до умов експлуатації. Це одна з ключових відмінностей від server racks і всього, що з ними пов'язано.
Ми почали з визначення кількості нід.
Кількість нід
Простими логічними міркуваннями ми зрозуміли, що 4 ноди найкращий варіант для мінімального кластерного блоку. 1 нода це не кластер, 2 ноди мало (1 майстер 1 воркер, немає можливості масштабування в рамках блоку, особливо для гетерогенних варіантів), 3 ноди виглядає ок, але не кратно ступеням 2 і лімітовано масштабування в рамках блоку, 6 нод виходить за ціною майже як 7 нід (з нашого досвіду це вже велика собівартість), 8 багато, не вміщається у міні ITX форм факторі та ще дорожче рішення для PoC.
Чотири ноди на блок вважаємо золотою серединою:
- менше матеріалів на кластерну плату, отже дешевше виробництво
- кратно 4, всього 4 блоки дають 16 фізичних процесорів
- стабільна схема 1 майстер і 3 воркери
- більше гетерогенних варіацій, general-compute + accelerated-compute модулі
- міні ITX форм-фактор з SSD дисками та платами розширення
Обчислювальні модулі
Друга версія базується на CM4 ми думали що її випустять у SODIMM форм-факторі. Але...
Ми вирішили зробити дочірню плату SODIMM і збирати CM4 відразу в модулі, щоб користувачі не думали про CM4.

Turing Pi Compute Module з підтримкою Raspberry Pi CM4
Загалом у пошуках модулів відкрили цілий ринок обчислювальних модулів від невеликих модулів на 128 MB RAM до 8 GB RAM. Попереду модулі на 16 GB RAM та більше. Для edge хостингу додатків, що базуються на cloud native технологіях, 1 GB RAM вже мало, а нещодавня поява модулів на 2, 4 і навіть 8 GB RAM дає гарний простір для зростання. Навіть розглядали і варіанти з FPGA модулями для програм машинного навчання, але їх підтримка відкладена тому що не розвинена софтверна екосистема. Під час вивчення ринку модулів дійшли ідеї створення універсального інтерфейсу для модулів і V2 починаємо уніфікацію інтерфейсу обчислювальних модулів. Це дозволить власникам версії V2 підключати модулі інших виробників та змішувати їх під конкретні завдання.
V2 підтримує всю лінійку Raspberry Pi 4 Compute Module (CM4), включаючи Lite версії та модулі на 8 GB RAM

периферія
Після визначення вендора модулів та кількості нод ми підійшли до PCI шини, на якій знаходиться периферія. PCI шина є стандартом для периферійних пристроїв і є майже у всіх обчислювальних модулях. У нас кілька нод і в ідеалі, щоб кожна нода могла шерити PCI пристрої в режимі конкурентних запитів. Наприклад, якщо це диск підключений до шини, він доступний всім нодам. Ми почали шукати PCI свічі з можливістю підтримки мультихост і виявили, що жоден з них не підходить під наші вимоги. Всі ці рішення здебільшого обмежувалися одним хостом або мульти хостами, але без режиму конкурентних запитів до endpoints. Друга проблема - висока вартість від $1 і більше за чіп. У V50 ми вирішили відкласти експерименти з PCI свічами (ми повернемося до них пізніше у міру розвитку) і пішли шляхом призначення ролі для кожної ноди: перші дві ноди exposed mini PCI express port per node, третя нода exposed 2-ports 2 Gbps SATA контролер . Для доступу до дисків з інших нод можна використовувати мережну файлову систему у межах кластера. Why not?
Sneakpeek
Ми вирішили поділитися деякими ескізами як еволюціонував мінімальний кластерний блок з часом у процесі обговорення та обмірковування



В результаті ми прийшли до кластерного блоку з 4-ма нодами 260-pin, 2-ма mini PCIe (Gen 2) портами, 2-ма SATA (Gen 3) портами. На платі встановлено Layer-2 Managed Switch із підтримкою VLAN. З першої ноди виведено mini PCIe порт, в який можна встановити мережеву карту та отримати ще один Ethernet порт або 5G модем і зробити з першої ноди роутер для мережі на кластері та Ethernet портах.

Кластерна шина має більше функцій, включаючи можливість прошивки модулів безпосередньо через всі слоти і, звичайно, FAN конектори на кожній ноді з контролем швидкості.
Застосування
Edge infrastructure for self-hosted applications & services
Ми проектували V2 з метою використати її як мінімальний будівельний блок для consumer/commercial-grade edge інфраструктури. З V2 дешево почати перевірку концепції та масштабуватись у міру зростання, поступово переносячи додатки, які економічно та практично доцільніше хостити в edge. Кластерні блоки можна з'єднувати разом, будуючи кластери більшого розміру. Це можна робити поступово без особливих ризиків для усталених
процесів. Вже сьогодні є величезна кількість програм для бізнесу, .
ARM Workstation
З оперативною пам'яттю до 32 GB RAM на кластер першу ноду можна використовувати для desktop версії OS (наприклад Ubuntu Desktop 20.04 LTS) і 3 ноди, що залишилися, для завдань компіляції, тестування та налагодження, розробки cloud native рішень для ARM кластерів. Як вузол для CI/CD ARM периферійну інфраструктуру в проді.
Turing V2 кластер із CM4 модулями архітектурно майже ідентичний (різниця в мінорних версіях ARMv8) кластеру на базі інстансів AWS Graviton. У процесорі CM4 модулів використовується архітектура ARMv8 ви можете збирати образи та програми для AWS інстансів Graviton 1 і 2, які як відомо набагато дешевші за інстанси x86.
Джерело: habr.com
