Перейти до основного вмісту

Веб-сервер

інформація

Бізнес-схема ядра обчислень складається з сервісу або групи сервісів, які являють собою серверний застосунок. В залежності від потреб та реєстрації необхідних сервісів на конкретному ядрі обчислення, завантажувач бізнес-схеми ядра обчислення здійснить реєстрацію бізнес-схеми в ядрі обчислень для подальшого прослуховування подій, оброки подій запитів тощо.

Сервіс

Сервіс у сервісно-орієнтованій архітектурі - це незалежний компонент програмного забезпечення, який надає певну функціональність і може взаємодіяти з іншими сервісами через стандартизовані інтерфейси, такі як http, ws тощо. Кожен сервіс має чітко визначену відповідальність і може бути розгорнутий, масштабований та керований незалежно від інших сервісів у системі. Такими сервысами можуть виступати Інтернет-магазин, Сервіс сповіщень, Сервіс статистики, тощо.

порада

X-Fiber розглядає сервіс як один простір контексту. Розділяйте кодову базу на групу сервісів лише тоді, коли чітко розумієте розділ контексту однієї групи бізнес-процесів від інших. X-Fiber дозволяє зробити такий поділ якісно та швидко, шлях зміни реєстрації прикладних областей з одного сервісу в інший на будь-якому етапі розробки застосунку.

Реєстрація сервісу

Для успішного використання функціональності відповідного сервісу, кожен сервіс повинен бути записаний в вбудовану функцію, яка надається X-Fiber - setServices. При запуску ядра обчислень, завантажувач бізнес-схеми завантажить саме ті сервіси, які записані в функцію setServices

import { initiator, setServices } from "@x-fiber/proton";
import { CatService } from "./server";

const start = async () => {
setServices([CatService]);
await initiator.start();
};

const stop = async () => {
await initiator.stop();
process.removeAllListeners();
process.exit(0);
};

// ... other code
порада

Виклик функцію setServices та реєстрація сервісів повинна відбуватись перед запуском ініціатора ядра. Деталі запуску конкретного ініціатора ядра обчислень дивись розділ "Давайте почнем"

Предметна область

Предметна область сервісу описується згідно з методологією Domain-Driven Design (DDD). Вона визначає ключові сутності, їх взаємодію та бізнес-правила, які характеризують цю сутність. Такими сутностями можуть бути "Користувачі", "Товари", "Транспорт" і т.д.

примітка

X-Fiber описує власну методологію побудови предметних областей, а також створення звʼязків між цими сутностями. Окрім цього методологія X-Fiber надає вичерпний опис як розміщувати предметні області в файловій структурі, а також які імена їм присвоювати.

Деталі створення та реалізації предметних областей дивись:

Специфіка

Створення веб-сервера супроводжується проєктуванням бази даних та описом методів взаємодії з цією базою даних. Окрім цього сутності можуть мати потребу в комунікації з іншими предметними областями одного і того ж сервісу або мати потребу в взаємодії з іншими сервісами. На основі цієї специфіки X-Fiber підтримує ряд спеціалізованих серверних документів.

Групування бізнес сервісів

інформація

Групування сервісів дозволяє керувати гнучко використовувати ядра обчислень під необхідні потреби. Якщо сервіс є високонавантажених та потребує горизонтального масштабування, необхідно записувати лише його, в іншому випадку, групуйте сервіси в рамках одного ядра обчислень. Групування дозволяє побудувати архітектуру за принципом "Плати лише за те, чим користуєшся".

warning

Обʼєктивно оцінити навантаження на сервіс можливо лише навантажувальними тестуваннями. З виходом релізу v2.0.0 X-Fiber запровадить функціонал створення такого навантаження завдяки інструменту Artillery. Artillery дозволяє симулювати необхідну кількість запитів на певний кінцевий маршрут, або групу кінцевих маршрутів. Окрім цього опис Artillery можливо вбудувати в CI / CD, що дозволить здійснювати навантажене тестування під час алгоритму викладки кодової бази на відповідне середовище роботи програми.

Реєстрація групи сервісів

import { initiator, setServices } from "@x-fiber/proton";
import { Service1, Service2, Service3 } from "./server";

const start = async () => {
setServices([Service1, Service2, Service3]);
await initiator.start();
};

const stop = async () => {
await initiator.stop();
process.removeAllListeners();
process.exit(0);
};

// ... other code