Каталог решений - Идем в Serverless с кодом 1С

Описание

Данная публикация является логическим продолжением статей других авторов:

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions 

Знакомимся с HTTP-сервисами в OneScript

И новости:

OneScript для «облачных функций» вызвал интерес у 1С-разработчиков

Мой взгляд на это всё)

В ИТ есть тренды, которые придется так или иначе принять. Одним из них являются serverless вычисления, когда вы загружаете свой код в облако и он отрабатывает по определенному событию (расписание, http-вызов и другие события, которые поддерживает конкретный провайдер)

Одна из ссылок выше  — это статья Олега Филиппова по теме. В комментариях были разные отзывы: отписались наши "штатные" негативщики, но основная масса поддержала, в том числе, запрос на добавление языка в поддержку Cloud Functions. Причем поддержали так, что общим количеством подавили другие предложения, отправив тему на первое место.

На самом деле, Яндекс функции не включают ряд других языков, и для решения этой проблемы в облако "выкатили" Serverless Containers. Это, по сути, аналог Cloud Functions, только вы используете не готовое окружение, а собираете все, что требуется сами.

Примечание

Все, что касается Yandex Cloud, Docker, Реестры с образами — все берется из документации облака и из интернета. Статей много, повторяться смысла нет.

Есть курс "Инженер облачных сервисов" на Яндекс.Практикуме. Он бесплатный. 

Информацию о HTTP в OneScript берем из документации на сайте разработчиков .

Платформа 1С здесь не используется

Теперь к делу

Будем выполнять вот такой код для примера

script.os

Функция ОбработкаВызоваHTTPСервиса(Запрос) Экспорт
	Ответ= Новый HTTPСервисОтвет(200);
	Ответ.УстановитьТелоИзСтроки("OK");
	Возврат Ответ;	
КонецФункции

Создадим папку и накидаем в нее файлов:

 

 

  • script.os — наш код, который должен выполняться
  • web.config — параметры приложения
  • dockerfile — алгоритм сборки образа
  • Bin — бинарники OneScript из аналогичной папки дистрибутива (*.deb)

web.config

<configuration>   
   <system.web>
      <httpHandlers>
       <add verb="*" path="*.os" type="OneScript.ASPNETHandler.ASPNETHandler" />
      </httpHandlers>
      <customErrors mode="Off"/>
   </system.web>
    <system.webServer>
        <handlers>
		 <add name="OneScript" verb="*" path="*.os" type="OneScript.ASPNETHandler.ASPNETHandler" />
        </handlers>
    </system.webServer>
<appSettings>
	<add key="CachingEnabled" value="false"/>
</appSettings>
</configuration>

dockerfile

FROM ubuntu:16.04
RUN apt-get update -y
RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata
RUN mkdir /project
WORKDIR /project
COPY web.config ./
COPY script.os ./
WORKDIR /project/Bin
COPY Bin ./
WORKDIR /project
RUN apt-get install mono-complete -y
RUN apt-get install mono-xsp4 -y
ENTRYPOINT xsp4 --port ${PORT} --nonstop

 

Выполняем сборку и отправляем образ в реестр:

docker build .  -t cr.yandex/<Идентификатор реестра>/ubuntu-os:latest

docker push cr.yandex/<Идентификатор реестра>/ubuntu-os:latest

Образ появится в облаке

 

 

Можно использовать другой реестр, при желании.

 

Запускаем код в работу:

Для этого просто выберем образ при создании Serverless Container

 

 

Сделаем контейнер публичным, и можно проверять в браузере

 

 

Немного цифр

Первый запуск функции превышает секунду. Тарифицируется 1200 мс. В этой части решение уступает, например, функции на .NET Core (400 мс)

Но последующие вызовы близки по времени выполнения и затратам: 5-6 мс (тарифицируется 100 мс — такие условия). Если контейнер не вызывается некоторое время, то опять потребуется "прогрев".

Зачем оно вообще

Я уже больше года использую Cloud Functions на .NET для решения некоторых задач. Пока все укладывается во "Фри тир", поэтому в финансовом плане это дело не обременяет совсем. Мне нравится.

А так… Боты, Алиса, и все, что держали в голове 400+ проголосовавших за фичу, теперь может быть запущено в облаке.

has been added to your cart:
Оформление заказа