Назад | Перейти на главную страницу

Решение Azure для TCP Socket server

У нас есть сервер сокетов TCP, который получает данные с различных устройств IoT, обрабатывает их и выводит в базу данных Azure. Прямо сейчас он размещается на виртуальной машине Azure Linux. Однако будет ли размещение его в приложении-функции или службе контейнера более рентабельным?

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

Функция

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

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

Но в ситуации IoT, если вы получаете сообщения непрерывно, вы можете не заметить, что экономическая выгода будет такой значительной (но это все равно действительно будет зависеть от объема).

При этом есть и другие плюсы и минусы, которые следует учитывать помимо стоимости:

  • Плюсы
    • Масштабируемость - С помощью функций вы сможете автоматически и легко масштабировать вычислительный компонент приложений, не беспокоясь о виртуальных машинах, экземплярах контейнера или управлении.
    • Устойчивость - С функциями вам не нужно беспокоиться о сбое виртуальных машин или контейнеров, вам не нужно решение для оркестровки, облако, в котором работает ваш код, будет обрабатывать все это на своей внутренней стороне. Все, что вам кажется, - это работающая надежная функция как услуга.
  • Минусы
    • Развитие - Переход на функциональную архитектуру не так прост, как переход от виртуальной машины к контейнеру. Вы не можете просто перенести существующее решение, и вам нужно будет потратить некоторое время на разработку, чтобы создать соответствующие функции, которые вам понадобятся.

Контейнер

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

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

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

TL; DR

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

Контейнеры будут дешевле (особенно для большого количества виртуальных машин), но если стоимость является вашим единственным движущим фактором и вы используете только 1 виртуальную машину, этого может быть недостаточно, чтобы окупить ваше время.