У нас есть сервер сокетов TCP, который получает данные с различных устройств IoT, обрабатывает их и выводит в базу данных Azure. Прямо сейчас он размещается на виртуальной машине Azure Linux. Однако будет ли размещение его в приложении-функции или службе контейнера более рентабельным?
И вариант перехода к контейнеру, и вариант создания бессерверной функциональной архитектуры должны быть более рентабельными, чем vm.
Функция
Я бы сказал, что в подавляющем большинстве случаев функциональная архитектура будет значительно дешевле. Но в вашем конкретном случае это зависит от частоты ваших сообщений IoT.
С функцией вы не платите фиксированную цену за круглосуточную работу сервера. Ваш код будет запускаться только при каждом вызове функции, и вы платите только за ресурсы, которые используете каждый раз при запуске функции. Это приводит к значительной экономии в ситуациях, когда у приложений бывают периоды бездействия, поскольку в периоды неиспользования плата не взимается.
Но в ситуации IoT, если вы получаете сообщения непрерывно, вы можете не заметить, что экономическая выгода будет такой значительной (но это все равно действительно будет зависеть от объема).
При этом есть и другие плюсы и минусы, которые следует учитывать помимо стоимости:
Контейнер
Контейнеры - это дополнительный шаг вперед от запуска виртуальной машины. Они предлагают повышенную эффективность за счет запуска контейнеров на движке докеров и в операционной системе хоста, а не в создании новой гостевой ОС для каждого экземпляра, как это сделали виртуальные машины. Ссылка на визуализацию разницы между контейнером и виртуальной машиной
Контейнер будет дешевле, но экономия средств действительно возрастет, когда вы имеете дело с переносом большого количества виртуальных машин. Я не уверен, что для одной виртуальной машины это будет иметь огромную разницу в стоимости.
При этом полезная выгода помимо стоимости - время запуска. Контейнеры, благодаря тому, что не запускаются новые гостевые ОС, такие как виртуальные машины, запускаются намного быстрее, что может быть особенно полезно в сценариях масштабирования или восстановления.
TL; DR
Функции могут быть намного дешевле, но это может быть уменьшено за счет очень частых вызовов. Они по-прежнему предлагают преимущества помимо стоимости, но для перехода на них требуются нетривиальные усилия.
Контейнеры будут дешевле (особенно для большого количества виртуальных машин), но если стоимость является вашим единственным движущим фактором и вы используете только 1 виртуальную машину, этого может быть недостаточно, чтобы окупить ваше время.