В этом мире главное - гибкость и скорость доставки приложений. Но я часто попадаю в ловушку нетворкинга. Как мои микросервисы будут взаимодействовать? Это животрепещущий вопрос. Худшая часть? Каждый раз, когда мы начинаем проект, мы испытываем одну и ту же боль.

Но ведь микросервисы должны были сделать нас более гибкими, верно? Такое ощущение, что это делает нашу жизнь немного сложнее.

Прежде чем мы перейдем к тому, как функциональная сетка упрощает написание микросервисов, я хотел бы поговорить о проблемах, которые она пытается решить. Если вы достаточно разочарованы существующей практикой в ​​отношении микросервисов, не стесняйтесь пропустить следующий фрагмент и погрузиться прямо в решение.

Что не так с микросервисами?

Собственно ничего.

Я очень люблю микросервисы. Но в силу своей природы некоторые вещи становятся действительно трудными. Вот некоторые из них, которые особенно выделяются.

Сочетаемость

Вся суть микросервисов в том, чтобы помочь абстрагироваться от конкретного ресурса.

Например, это должна делать биллинговая служба. Он полностью контролирует эту часть базы данных. Но это также означает, что никакая другая служба не должна реализовывать или использовать те же функции. Биллинговый сервис должен быть как можно более универсальным, чтобы учесть все шаблоны доступа без утечки логики в другие микросервисы.

Это становится действительно сложно понять, особенно если дерево зависимостей микросервисов является глубоким.

Коммуникация

Как эти микросервисы будут общаться? Если вы планируете придерживаться нашего старого доброго друга HTTP, как они узнают друг друга?

Это некоторые вопросы, на которые вам нужно ответить, прежде чем начинать разработку. Хуже всего то, что они даже не являются частью нашей бизнес-логики.

Правильно понять шаблоны взаимодействия микросервисов непросто. Если все сделано неправильно, это может серьезно ограничить, а иногда даже нарушить работу нашего приложения.

Балансировки нагрузки

Я чувствую, что многие люди не говорят об этом. Это как бы проходит под знаком общения.

Конечно, в любой момент времени у вас может быть запущено 100 микросервисов. Но у вас, вероятно, даже есть от 3 до 5 экземпляров каждого микросервиса, работающих параллельно. Как сделать так, чтобы у них была примерно одинаковая нагрузка.

Конечно, вы можете интегрироваться с системами обнаружения сервисов, такими как Consul. Но это всего лишь дополнительная часть, с которой вам нужно явно интегрироваться.

Мониторинг и контроль доступа

Итак, вы добавили несколько новых обновлений. Все твои тесты проходили. Но вдруг ваши запросы терпят неудачу. Сбои каскадные. Все горит, и вы не понимаете почему.

Я тебя чувствую, если что-то подобное случалось раньше. Если нет, обнимите себя, потому что это возможно.

Вам нужен эффективный механизм, который поможет вам точно отслеживать, какой вызов api терпит неудачу.

Сервисная сетка действительно помогает. Но кажется, что это лишний предмет, который нужно изучать и поддерживать.

Входит функциональная сетка

Функциональная сетка очень похожа на служебную. Он предоставляет вам контроль доступа к тому, кто и к чему имеет доступ. Помогает вам открыть для себя другие микросервисы. Он также имеет встроенный мониторинг, чтобы сделать работу намного проще.

Позвольте мне также добавить, что функциональная сетка - это концепция, которую мы представляем в Космическом облаке.

Так в чем же разница?

Вместо того, чтобы предоставлять функциональные возможности как конечные точки HTTP, вы предоставляете их как функции.

Почему функционирует?

Функции - это наиболее компонуемая программная конструкция. Ладно, возможно, он не находится в верхней части этого списка. Но функции очень гибкие в использовании. Самое главное, это первое, что мы узнаем, когда начинаем писать код. Рассмотрение функциональных возможностей как функций значительно упрощает работу.

Запутались?

Позвольте мне показать вам фрагмент кода функции пробела для сложения двух чисел:

// Initialize api with the project name and url of space cloud
const { API } = require('space-api'); 
const api = new API('demo-app', 'https://localhost:4122'); 
// Make a service 
const service = api.Service('arithmetic'); 
// Create a function to add two numbers 
const add = (params, auth, cb) => { 
  // Add the numbers received from the client 
  const sum = params.num1 + prams.num2; 
  // Send back a response 
  cb('response', { result: sum });
} 
// Register function with the service 
service.registerFunc('add', add) 
// Start the service 
service.start()

В этом фрагменте мы сначала инициализируем api с именем проекта и URL-адресом Space Cloud. Затем мы создаем сервис под названием arithmetic. Сервис - это не что иное, как набор из нескольких функций.

Внутри службы мы регистрируем функцию с именем add, которая возвращает сумму двух чисел, а затем запускаем микросервис.

Так как же вызвать эту функцию?

// Initialize api with the project name and url of space cloud 
import { API } from "space-api"; 
const api = new API("demo-app", "https://localhost:4122"); 
// Call a function 'add' on 'arithmetic' running on backend 
const res = await api.call('arithmetic', 'add', { 
  num1: 10, 
  num2: 5 
}) 
console.log(res.data.result) // Outputs -> { result: 15 }

Практически все осталось по-прежнему с одной небольшой разницей. Мы вызываем метод api.call() для вызова нашей функции. Это довольно похоже на вызов функции в той же программе.

Уже рады? Ознакомьтесь с нашим кратким руководством, чтобы сразу приступить к работе.

У нас может быть несколько экземпляров космического облака, работающих параллельно. Также на разных узлах работают сотни микросервисов. У каждого микросервиса также может быть несколько реплик. Но нам ни в коем случае не нужно беспокоиться о сети.

Если нам известен адрес любого экземпляра Space Cloud, мы сможем вызывать любую функцию в любой службе. Space Cloud заботится о балансировке нагрузки и обнаружении сервисов.

А поскольку все коммуникации проходят через Space Cloud, становится очень легко контролировать доступ и отслеживать показатели времени выполнения каждого вызова функции.

Так разве космическое облако не является узким местом?

К счастью, нет!

В такой настройке Space Cloud служит очень тонким слоем, обеспечивающим аутентификацию и авторизацию.

Большая часть сетевого джаза делегирована кластеру Nats, работающему под капотом.

Но разве это не похоже на AWS Lambda?

С точки зрения API и удобства использования? Абсолютно да.

В плане архитектуры? Не совсем.

AWS Lambda - это функция как услуга. Функция запускается всякий раз, когда делается запрос. Ничто не является долгоживущим, и оно имеет несколько ограничений, таких как базы данных и библиотеки, которые вы можете использовать с этим.

Функция Space работает как микросервис. Перефразирую, это микросервис. Эта функция - это обратный вызов, который мы вызываем всякий раз, когда Space Cloud получает запрос.

Другими словами, ваша функция не имеет ограничений по времени. Хотите потратить часы на выполнение? Никаких вопросов не было задано. Вы даже можете поддерживать пул соединений с базой данных, чтобы максимизировать производительность, или обучать модель тензорного потока, если хотите.

Получите любую библиотеку, которую хотите. Используйте тот же менеджер пакетов, который вам нравится. Докеризуйте его и отправьте на Марс!

Я уверен, что вы уже наверняка захотите испытать это на себе!

Вы можете вызывать свои функции из других микросервисов или даже из своего внешнего интерфейса. В Space Cloud есть надежный модуль безопасности, обеспечивающий контроль доступа, о котором я говорил ранее.

Заключение

Микросервисы, несомненно, хорошо подходят для решения масштабных проблем, связанных с гибкостью.

Как я уже упоминал ранее, я очень люблю микросервисы. Фактически, мы приняли архитектуру на основе микросервисов в Space Up Tech. Другое дело, что мы построили его на основе Space Functions.

Если вы хотите запачкать руки, ознакомьтесь с нашим Руководством по быстрому запуску. Очень рад узнать, как вы планируете его использовать.

Если вам нравится то, что мы делаем, отметьте нас на GitHub.

Мы также будем рады принять вас на борт! Вы можете присоединиться к нашему серверу раздора, чтобы связаться с нами напрямую. Добро пожаловать в новый способ написания микросервисов!

Space Cloud - это облачный веб-сервер, который мгновенно предоставляет API в реальном времени для любой базы данных. Он также предоставляет функциональный модуль для построения ваших микросервисов в форме функций.

Первоначально опубликовано на https://blog.spaceuptech.com.