01 / 07 Ръководство за архитектура

Кога Rust си струва за бекенд системи?

Rust оправдава цената си, когато грешка по време на работа струва повече от по-бавното първо пускане: споделено състояние при паралелна работа, забавяне, което трябва да остане предвидимо, и основна логика, от която няколко продукта ще зависят години наред. За повечето друга работа по-бързият за писане език е по-доброто бизнес решение.

Автор: Явор Колев, софтуерен архитект и продуктов разработчик

14

Rust пакета в работното пространство на Market Data Platform

87

Cargo пакета в работното пространство на рамката RustDX

3

Клиента на NativeCharts, които споделят едно Rust ядро

02 / 07 Принцип

Избирайте езика според цената на грешката

Използвайте Rust там, където грешка по време на работа струва повече от времето, нужно да удовлетворите компилатора. Навсякъде другаде оптимизирайте за това колко бързо се учите.

Iavor Kolev

Споровете за езици обикновено сравняват скорост или популярност. По-полезното сравнение е къде се хващат грешките. Rust премества голям клас грешки, включително състезания за данни, липсващи стойности и много грешки при собствеността, от продукция към компилация. Това е ценно точно там, където тези грешки са скъпи, и излишно там, където кодът ще бъде пренаписан след месец.

Решението не трябва да обхваща цялата система. Моделът, който работи най-добре на практика, е малко Rust ядро, което притежава правилата и състоянието, заобиколено от адаптери, скриптове и интерфейси, написани на това, което е най-бързо за съответната задача.

03 / 07 Подходящо

Четири сигнала, че Rust ще се изплати

Ако нито един от тях не описва вашата система, Rust вероятно е разход, а не предимство.

01 / Паралелност

Споделеното състояние трябва да остане вярно под натоварване

В Market Data Platform централен възел проверява всяко нормализирано събитие и му задава монотонна поредност, преди да го разпредели към доставката на живо и към съхранението. Грешка в подредбата там би повредила всеки следващ получател.

02 / Забавяне

Времето за отговор трябва да е предвидимо, не само бързо средно

Rust няма събирач на отпадъци, затова няма паузи за почистване в критичния път. Това е важно за пазарни данни на живо и почти без значение за форма за контакт.

03 / Общо ядро

Една реализация трябва да обслужва няколко продукта

NativeCharts използва едно и също Rust ядро без интерфейс за абонаменти, откриване на остарели данни, повторно свързване и контролни точки в настолния, уеб и мобилния клиент, вместо три разминаващи се копия.

04 / Дълготрайност

Архитектурата трябва да издържи години промени

RustDX обхваща 87 пакета с премерена посока на зависимостите от ядрото към приложението. Компилаторът и границите между модулите пазят тази структура цяла, докато расте.

04 / 07 Не Rust

Кога друг език е по-добрият избор

Да изберете Rust навсякъде е същата грешка, като да не го изберете никъде.

  • Автоматизация и данни

    Python за скриптове, изследвания и интеграции

    Когато задачата е обработка на данни, проверка на хипотеза или свързване на API, скоростта на промяна и наличните библиотеки са по-важни от гаранциите по време на работа.

  • Сайтове със съдържание

    Важно е какво стига до браузъра, не на какъв език е сървърът

    Този сайт се генерира с Rust, но посетителите получават статичен HTML. За екип, който редактира съдържание всеки ден, система за управление на съдържанието обикновено е по-добрият избор.

  • Ранен продукт

    Популярен стек за форми, табла и първи версии

    Административните панели, CRUD API и първите версии се променят всяка седмица. Популярен стек с голям избор от разработчици обикновено стига по-бързо до проверен продукт.

Rust не прави неясния продукт ясен. Първо решете какво трябва да гарантира системата; изборът на език следва от това.

05 / 07 Разходи

Разходите, които да планирате предварително

Разходите на Rust са реални, предвидими и управляеми, когато се планират, а не се откриват в движение.

Обучение

Собствеността и времето на живот изискват време за усвояване

Екипите, нови в Rust, в началото работят по-бавно. Заложете това в плана или дръжте Rust в ограничено ядро, поддържано от хора, които вече го познават.

Компилация

Компилирането е по-бавно, отколкото при интерпретируемите езици

Големите работни пространства изискват премерени граници между пакетите и инкрементално изграждане, за да остане обратната връзка бърза.

Наемане

По-малко опитни инженери

Rust разработчиците са по-малко от тези с Python или TypeScript. Малко, добре документирано ядро с ясни граници намалява колко от тях са ви нужни.

Интеграции

Някои екосистеми са по-бедни

Библиотеки на доставчици и специфични интеграции може да липсват в Rust. Изолирането им зад адаптери, както Market Data Platform спира форматите на доставчиците още на входа, пречи тази липса да оформя ядрото.

07 / 07 Следваща стъпка

Отговорете на тези пет въпроса, преди да изберете Rust

Ако повечето отговори са „да“, Rust вероятно ще се изплати. Ако повечето са „не“, изберете по-бързия път и преразгледайте решението, когато продуктът се докаже.

Пет въпроса

  1. Би ли грешка в паралелността или паметта довела до загуба на данни, финансови загуби или прекъсване?
  2. Трябва ли забавянето да остане предвидимо под натоварване, а не само ниско средно?
  3. Ще зависят ли няколко приложения или платформи от една и съща основна логика?
  4. Ще се поддържа ли ядрото години наред, вместо да бъде пренаписано след проверката?
  5. Може ли екипът да поддържа ограничено Rust ядро или да привлече някой, който може?