Что такое внутренняя инфраструктура?
Выбор правильной инфраструктуры бэкенда имеет решающее значение при разработке бэкенда. Она может повлиять на производительность, гибкость и ремонтопригодность бэкенда.
В этой статье мы объясним, что такое инфраструктура бэкенда, рассмотрим различные типы инфраструктур бэкенда и обсудим основные факторы, о которых следует помнить при принятии решения.
Кроме того, мы рассмотрим, как создать внутреннюю инфраструктуру с помощью Back4app.
Contents
Цели
К концу этой статьи вы сможете:
- Объясните, что такое внутренняя инфраструктура
- Обсудите различные типы инфраструктур бэкенда (включая IaaS, PaaS и BaaS).
- Выберите подходящую инфраструктуру бэкенда для вашего проекта
- Создайте свой собственный бэкэнд с помощью Back4app
Что такое внутренняя инфраструктура?
Инфраструктура бэкенда – это совокупность программных и аппаратных компонентов, поддерживающих систему бэкенда. Сюда входят серверы, контейнеры, сетевые компоненты, брандмауэр и другие ресурсы.
Внутренняя инфраструктура отвечает за высокую доступность, масштабирование, балансировку нагрузки, безопасность, маршрутизацию и т. д. Внутренняя инфраструктура должна быть спроектирована таким образом, чтобы обеспечить бесперебойную работу пользователей.
Что нужно учитывать при выборе инфраструктуры бэкенда?
Давайте обсудим основные факторы, которые необходимо учитывать при выборе бэкэнд-инфраструктуры.
Скорость
Скорость – одна из важнейших характеристик инфраструктуры бэкенда. Ваши пользователи хотят, чтобы приложение работало как можно более плавно. Поэтому вам необходимо оптимизировать обмен данными между клиентской частью и бэкендом.
Чтобы смягчить ощущение задержки связи, можно использовать некоторые хитроумные приемы. Например, в пользовательском интерфейсе можно реализовать скелетные экраны, полосы загрузки, а также отображать советы и подсказки.
Скорость также является одним из наиболее важных факторов в SEO.
Гибкость
Гибкость относится к тому, какие языки программирования, фреймворки и другие технологии (например, базы данных) поддерживает ваша внутренняя инфраструктура. Выбирая инфраструктуру бэкенда, убедитесь, что она поддерживает различные технологии.
Масштабируемость
О масштабируемости нужно думать с самого начала создания приложения. Подумайте о том, как будет использоваться ваше приложение. Будет ли у вас постоянное количество пользователей, или их число будет иногда увеличиваться?
Ваша внутренняя инфраструктура должна быть построена таким образом, чтобы выдерживать экстремальные рабочие нагрузки. Чтобы минимизировать расходы на серверы, экземпляры приложений должны создаваться и уничтожаться на лету.
Ремонтопригодность
Разработка и публикация приложения – это только 80 % работы. После этого вам придется потратить много времени на поддержку приложения. Обновление серверного программного обеспечения и установка исправлений безопасности должны быть максимально простыми.
Выберите бэкэнд-инфраструктуру со встроенной системой CI/CD или создайте свою собственную.
Требования DevOps
Некоторые типы бэкэнд-инфраструктур сложнее в использовании. Выбирайте ту внутреннюю инфраструктуру, на управление которой у вас есть время и ресурсы. Если вы решите использовать внутреннюю инфраструктуру более низкого уровня, например IaaS, вам понадобится специализированная команда DevOps для управления ею.
Безопасность
Вы несете полную ответственность за сохранность данных своих пользователей. В связи с ростом числа кибератак вы должны убедиться, что ваша внутренняя инфраструктура соответствует последним стандартам безопасности.
Используйте надежные автоматически генерируемые пароли, настройте брандмауэр, не запускайте на своих серверах недоверенное программное обеспечение, регулярно проводите проверки безопасности и т. д.
Типы внутренней инфраструктуры
Вы можете использовать свои серверы (так называемая традиционная инфраструктура) или задействовать облачную инфраструктуру для развертывания бэкенда.
В последнее десятилетие многие компании перешли на облачные модели, поскольку они позволяют им экономить время и деньги.
Давайте проанализируем некоторые из самых популярных.
Инфраструктура как услуга или IaaS
Инфраструктура как услуга (IaaS) – это наименее абстрактная модель облачных вычислений. В этой модели поставщик облачных вычислений предоставляет вычислительные ресурсы в виртуализированной среде, такие как серверы, хранилища, ОС и сетевые компоненты.
IaaS существует с 2010 года и до сих пор является самой популярной моделью облачных вычислений. Ее плюсы – отличная масштабируемость, высокоуровневый контроль и ценовая эффективность. Минусы – сложное управление и более высокая стоимость обслуживания по сравнению с другими облачными моделями.
Платформа как услуга или PaaS
Платформа как услуга (PaaS) – это модель облачных вычислений, предлагающая удобную среду для разработки, управления и доставки приложений. Она включает в себя различные встроенные инструменты разработки приложений, что позволяет легко запустить ваше приложение.
PaaS упрощает управление инфраструктурой, обеспечивая более быстрый выход на рынок, повышенную безопасность, экономию средств, масштабируемость, высокую доступность и сокращение объема кодирования. С другой стороны, он может привязать вас к возможностям поставщика, создать риски блокировки поставщика и ограничить гибкость и контроль.
Бэкэнд как услуга или BaaS
Backend as a Service (BaaS) автоматизирует разработку на стороне сервера и управление облачной инфраструктурой. Он предлагает базы данных в реальном времени, управление пользователями, аутентификацию, уведомления, интеграцию с социальными сетями и так далее.
BaaS освобождает разработчиков от забот о бэкенде, позволяя им сосредоточиться на фронтенде и основной деятельности. BaaS сочетает в себе преимущества IaaS и PaaS с абстракцией от бэкенда, что позволяет ускорить выход на рынок и сократить расходы. Недостатками являются отсутствие контроля, риск привязки к поставщику и относительно высокая стоимость.
Контейнеры как услуга или CaaS
Containers as a Service (CaaS) – это модель облачных вычислений для загрузки, создания, масштабирования и управления контейнерами. CaaS обычно включает в себя среду выполнения контейнеров, реестр контейнеров, функцию автоматического масштабирования, встроенную систему CI/CD, балансировку нагрузки и многое другое!
CaaS упрощает работу с контейнерами, избавляя от забот о базовой инфраструктуре. Это стимулирует гибкую разработку, облегчает микросервисную архитектуру и ускоряет создание высокомасштабируемых приложений.
Как создать внутреннюю инфраструктуру?
В этой части статьи мы создадим инфраструктуру бэкенда с помощью Back4app.
Что такое Back4app?
Back4app – это исключительная платформа Backend as a Service (BaaS). Она позволяет быстро создавать бэкенды для веб- и мобильных приложений.
Платформа построена с использованием технологий с открытым исходным кодом и имеет множество функций. Среди ее возможностей – базы данных, похожие на электронные таблицы, хранение файлов, управление пользователями, аутентификация, автоматически создаваемые API, уведомления и многое другое!
Back4app поможет вам значительно ускорить выход на рынок. Используя его, вы сможете сосредоточиться на основных направлениях своей деятельности, а не беспокоиться о бэкенде или базовой инфраструктуре.
Вам не понадобятся специализированные инженеры DevOps, а затраты на обслуживание будут ниже.
Самое лучшее в Back4app то, что он поставляется с бесплатным уровнем. Бесплатный уровень отлично подходит для тестирования платформы или размещения домашних проектов. Если ваше приложение станет успешным, вы сможете перейти на премиум-уровень.
Чтобы узнать больше о Back4app, ознакомьтесь с разделом Что такое Back4app?
Обзор проекта
Чтобы показать, как создавать бэкенд, мы создадим простой бэкенд службы электронной коммерции. Бэкэнд позволит нам управлять товарами, категориями и заказами.
ER-диаграмма нашего проекта будет выглядеть следующим образом:
Мы сделаем бэкенд с минимальным количеством кода и продемонстрируем, как его можно использовать на стороне клиента (через SDK, REST API и GraphQL API).
Создать приложение
Чтобы следить за происходящим, необходимо иметь учетную запись Back4app. Нужна? Зарегистрируйтесь сегодня!
После входа в свою учетную запись Back4app вы увидите список своих приложений. Нажмите на кнопку “Создать приложение”, чтобы начать процесс создания приложения.
Далее выберите “BaaS”, потому что мы настраиваем бэкэнд.
Выберите название приложения, выберите “NoSQL” и создайте приложение.
Back4app потребуется некоторое время, чтобы все настроить. Он будет управлять уровнем приложений, базой данных, резервным копированием, масштабированием и многим другим.
Как только приложение будет создано, вы попадете в базу данных вашего приложения в режиме реального времени.
Настройка базы данных
Теперь, когда мы создали наше приложение, давайте позаботимся о базе данных.
Сначала нам нужно создать класс для хранения данных в базе данных. Классы можно рассматривать как таблицы (терминология SQL) или модели (терминология ORM). По умолчанию каждый класс имеет следующие четыре поля:
+-------------+-------------+------------------------------------------+
| Type | Name | Description |
+-------------+-------------+------------------------------------------+
| String | objectId | Object's unique identifier |
+-------------+-------------+------------------------------------------+
| Date | updatedAt | Date time of the last update |
+-------------+-------------+------------------------------------------+
| Date | createdAt | Date time of creation |
+-------------+-------------+------------------------------------------+
| ACL | ACL | Access Control List |
+-------------+-------------+------------------------------------------+
Как уже упоминалось в обзоре проекта, в нашем проекте будет три класса. Создайте первый из них, нажав кнопку “Создать класс” на боковой панели. Назовите его ProductCategory
:
Добавьте следующие поля:
+-----------------------------+-------------+---------------+----------+
| Type | Name | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| String | name | <leave blank> | yes |
+-----------------------------+-------------+---------------+----------+
| String | description | <leave blank> | no |
+-----------------------------+-------------+---------------+----------+
Выполните те же действия для класса Product
:
+-----------------------------+-------------+---------------+----------+
| Type | Name | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| String | name | <leave blank> | yes |
+-----------------------------+-------------+---------------+----------+
| String | description | <leave blank> | no |
+-----------------------------+-------------+---------------+----------+
| Relation -> ProductCategory | categories | <leave blank> | no |
+-----------------------------+-------------+---------------+----------+
| Number | price | 0 | yes |
+-----------------------------+-------------+---------------+----------+
Мы использовали тип данных
Relation
для работы с отношениями “многие-ко-многим”.
Наконец, создайте класс Order
:
+-----------------------------+------------+---------------+----------+
| Data type | Name | Default value | Required |
+-----------------------------+------------+---------------+----------+
| Pointer -> Product | product | <leave blank> | yes |
+-----------------------------+------------+---------------+----------+
| String | cFirstName | <leave blank> | yes |
+-----------------------------+------------+---------------+----------+
| String | cLastName | <leave blank> | yes |
+-----------------------------+------------+---------------+----------+
| String | cAddress | <leave blank> | yes |
+-----------------------------+------------+---------------+----------+
| Number | delivered | false | yes |
+-----------------------------+------------+---------------+----------+
Мы использовали тип данных
Pointer
для работы с отношениями “один-ко-многим”.
После этого вы увидите классы на боковой панели.
Наполните базу данных
Продолжаем, давайте заполним базу данных.
Начните с создания нескольких категорий товаров, продуктов и заказов (именно в таком порядке). Если у вас нет идей, не стесняйтесь импортировать это приспособление.
Чтобы импортировать JSON-файл, воспользуйтесь командой “Другие опции > Импорт > Данные класса > Выбрать файл”. Убедитесь, что вы импортируете файлы JSON в следующем порядке:
- ProductCategory.json
- Product.json
- _Join꞉categories꞉Product.json
- Order.json
После завершения работы в вашей базе данных должно быть несколько товаров, категорий и заказов. Этот шаг необходим, потому что нам понадобятся некоторые данные для тестирования бэкенда на последующем этапе.
Защита базы данных
По умолчанию классы баз данных создаются в “защищенном режиме”. В защищенном режиме единственным способом взаимодействия и управления объектами является использование мастер-ключа. Это неоптимально, поскольку мы не можем получить или управлять объектами со стороны клиента.
Чтобы иметь такую возможность, мы должны ослабить некоторые ограничения. Back4app/Parse поставляется с двумя механизмами ограничения:
- Разрешения на уровне класса (CLP)
- Разрешения на уровне доступа (ACL)
CLP позволяют нам применять ограничения на уровне классов, а ACL – на уровне объектов. Оба механизма могут ограничивать класс или объект определенной ролью
или пользователем
.
Выберите класс продукта
на боковой панели и нажмите на текст “Protected” в верхней части экрана. Затем измените CLP:
Выполните те же действия для модели ProductCategory
.
Затем обновите CLP для класса Order
:
Обратите внимание на изображение. Здесь мы также включаем разрешение
"Создать
“.
Новые CLP позволят неавторизованным пользователям получать, запрашивать и подсчитывать продукты
и категории продуктов
, но не изменять их. То же самое относится и к классу Order
, но здесь пользователи также смогут создавать новые заказы.
Чтобы узнать больше, ознакомьтесь с нашей статьей Безопасность сервера Parse.
Приложение администратора
На данный момент единственным способом управления объектами в базе данных является использование представления базы данных. Хотя это подходит для разработчиков, это не интуитивно понятно для нетехнических пользователей. Кроме того, это дает пользователям слишком много контроля и чревато человеческими ошибками.
К счастью, Back4app позволяет вам легко включить функцию “Admin App”. Admin app – это простая в использовании панель администрирования, адаптированная под классы вашей базы данных.
Чтобы включить его, сначала перейдите в раздел “Еще > Приложение администратора” на боковой панели. Затем нажмите “Включить”:
Back4app предложит вам выбрать имя пользователя, пароль и поддомен. Я решил выбрать следующее:
user: root
pass: complexpassword123
subdomain: https://binfra.admin.back4app.com/
Отлично, это все, что вам нужно сделать.
Вы можете получить доступ к панели администрирования, нажав на “Admin App URL”. При нажатии откроется новое окно браузера, в котором вам будет предложено ввести свои учетные данные администратора. Войдя в систему, вы сможете создавать, обновлять и удалять объекты.
Попробуйте поиграть с приборной панелью, чтобы привыкнуть к ней.
Облачный код
Back4app позволяет запускать пользовательский JavaScript-код через так называемый Cloud Code. С помощью Cloud Code вы можете определять функции, которые могут запускаться с помощью Parse, HTTP-запросов или выполняться периодически. Кроме того, Cloud Code можно использовать для создания веб-приложений с помощью Express.
Функция облачного кода
Предположим, нам нужна функция Cloud Code, которая вычисляет текущие продажи.
Сначала перейдите к разделу “Cloud Code > Функции и веб-хостинг” на боковой панели. Вы заметите, что вид Cloud Code разделен на две части. В левой части вы видите структуру каталогов, а в правой – код.
Затем откройте файл cloud/main.js и вставьте в него следующий код:
// cloud/main.js
Parse.Cloud.define("calculateSales", async (request) => {
const orderClass = Parse.Object.extend("Order");
const orderQuery = new Parse.Query(orderClass);
let sales = 0;
try {
const orders = await orderQuery.find();
for (var i = 0; i < orders.length; i++) {
let order = orders[i];
let productId = order.get("product")["id"];
const productClass = Parse.Object.extend("Product");
const productQuery = new Parse.Query(productClass);
const product = await productQuery.get(productId);
sales += product.get("price");
}
return {
sales: sales,
};
} catch (error) {
console.error("Error calculating the sales: " + error.message);
return {
sales: 0,
}
}
});
Parse.Cloud.job("printSales", async (request, status) => {
try {
const result = await Parse.Cloud.run("calculateSales");
console.log("Sales: " + result.sales + "$");
} catch (error) {
console.error("Error calculating the sales: " + error.message);
}
});
- Мы определили функцию Cloud Code под названием
calculateSales()
. Эта функция перебирает все заказы, получает соответствующие товары и суммирует их цены. - Мы определили задание Cloud Code Job под названием
printSales()
, позволяющее запускать функцию из приборной панели Parse и периодически планировать ее выполнение.
И наконец, нажмите кнопку “Развернуть”, чтобы развернуть облачный код.
Убедитесь, что задание работает, перейдя в раздел “Cloud Code > Jobs” на боковой панели, а затем запустив задание printSales()
. Если все работает нормально, при проверке журналов вы должны увидеть сообщение, например, Sales: 1440$
.
Планирование облачного кода
Чтобы запланировать задание, перейдите в раздел “Настройки приложения > Настройки сервера” на боковой панели. Прокрутите страницу вниз до раздела “Фоновые задания”, нажмите “Запланировать задание” и заполните форму.
Чтобы убедиться, что все работает, еще раз проверьте журналы.
Сторона клиента
Существует множество способов взаимодействия с вашим бэкэндом на базе Back4app:
- Parse SDK
- RESTful API (автоматически генерируется)
- API GraphQL (создается автоматически)
Как правило, вы всегда должны использовать Parse SDK, если он доступен для вашей платформы. Если нет, используйте либо RESTful API, либо GraphQL API. Выбор между этими API зависит от ваших данных.
Узнайте, как использовать Parse SDK с различными фреймворками, изучив документацию.
Тем не менее, давайте протестируем наш бэкэнд с помощью встроенной REST-консоли.
Перейдите к разделу “API > REST” на боковой панели и попробуйте запросить все продукты, заполнив форму:
Вы должны получить аналогичный ответ:
{
"results": [
{
"objectId": "4ZyHH3X0RQ",
"name": "Fitness Tracker Watch",
"description": "...",
"price": 80,
"createdAt": "2023-10-17T20:03:55.424Z",
"updatedAt": "2023-10-17T20:24:12.322Z",
"categories": {
"__type": "Relation",
"className": "ProductCategory"
}
},
{
"objectId": "cDqlGJzT5U",
"name": "Organic Fruit Basket",
"description": "...",
"price": 40,
"createdAt": "2023-10-17T20:04:10.063Z",
"updatedAt": "2023-10-17T20:24:00.382Z",
"categories": {
"__type": "Relation",
"className": "ProductCategory"
}
},
// ...
}
Попробуйте выполнить следующие запросы:
- Получите все товары, которые стоят дороже 50
- Получите все заказы, которые еще не были доставлены
- Создайте новый продукт и добавьте к нему категорию
- Удалить заказ
Заключение
В заключение можно сказать, что теперь вы знаете, что такое инфраструктура бэкенда, знакомы с различными типами инфраструктур бэкенда и умеете выбирать подходящую инфраструктуру для своего проекта.
Кроме того, вы узнали, как создать инфраструктуру бэкенда на Back4app. Вы позаботились о базе данных, безопасности базы данных, пользовательском коде, планировании заданий и тестировании API.
О том, как создать клиентскую часть для бэкенда на базе Back4app, читайте в других наших статьях:
- Как разместить фронтенд и бэкенд?
- Как разработать приложение для социальных сетей?
- Как создать чатбота с помощью React?
Дополнительные ресурсы статьи находятся в открытом доступе на GitHub.