*Текстът е предоставен от Ship.cars
Проблемът
Ship.cars е лидер на пазара, предоставящ платформа за отворен пазар, дигитализираща и автоматизираща доставката на превозни средства. Това е като Uber, просто малко по-сложен транспортен процес за автомобили, мотори, лодки… Като такава платформата изпитва непрекъснато нарастващо търсене, удвоявайки стотици хиляди товари всяка година.
Наскоро направихме интересно проучване, за да постигнем една от нашите цели за мащабируемост. Ето списъка с това, от което се нуждаехме като възможности за някои от нашите ключови микроуслуги:
● Трябва да сме бързи — бързи отговори на заявките — повече доволни клиенти
● Трябва да бъдем компактни — по-малко памет, много Kubernetes инстанции — по-висока производителност с по-малко ресурси.
● Трябва да бъдем яростни — минималистични времена за стартиране и по-малко използване на процесора — по-хладна планета 🙂
Approach – Подход
Проучихме съществуващи frameworks и библиотеки на Java, с които можем да постигнем целите си. Тествахме няколко популярни концепции.
В края на деня сравнихме резултатите, преценихме зрелостта и решихме кой framework отговаря най-добре на нашите цели.Накрая въведохме първоначално доказателство за концептуална услуга — направихме много тестове и бяхме много доволни от резултатите.
Frameworks
Spring Boot – https://spring.io
Улеснява създаването на самостоятелни приложения от производствен клас: Много зрял framework с голяма общност от разработчици и много готови за използване шаблони и библиотеки. Идеален, когато имате голяма сложна бизнес логика и искате да се развива бързо от разработчиците. Но това идва с цената на малко по-бавно време за стартиране и голямо ползване на паметта, за да пасне на всички използвани библиотеки.
ActiveJ– https://activej.io
Сравнително нов framework на Java за съвременната мрежа, решения за облачни микроуслуги за високи натоварвания. Има много малка общност, тъй като проектът е роден само преди 3 години. Примерите не са толкова добри и простите задачи за REST API с достъп до DB ни отнеха много време да ги внедрим с посредствени резултати.
Micronaut– https://micronaut.io
Модерн, базиран на JVM framework с пълен стек за изграждане на модулни, лесно тествани микроуслуги и приложения без сървър. Има богата общност с много примери. Той поддържа естествено компилиране с GraalVM, неговото използване на паметта е едно от най-доброто.
Това, което ни спря да го изберем, са по-малкото членове на екипа имащи опит с този framework. Повечето от нашите разработчици имат пет и повече години опит с Java и Spring Boot.
Quarkus– https://quarkus.io
Kubernetes Native Java стек, пригоден за OpenJDK HotSpot и GraalVM, създаден от най-добрите Java библиотеки и стандарти. Това е най-богатият framework с тонове библиотеки и примери, които са тествани и готови за използване със собствени компилации на GraalVM. Общността на Quarkus е достатъчно голяма, веднага след общността на Spring Boot
Използваната памет и времето за стартиране са най-добрите за native компилация; също са много обещаващи и побеждават други, когато става въпрос за чиста Java без предварително компилиран код за GraalVM.
И нашият победител:
С използване на памет от само 1/10 от традиционния стек на Java и най-малко 1/4 от времето за стартиране + реакция, ние избрахме Quarkus за бързата, компактна, яростна Java архитектура на нашите микроуслуги.
След като избрахме стака, в следващата публикация ще разгледаме по-подробно неблокиращото програмиране с реактив концепции, избрано за високото натоварване на платформата Ship.cars.