Развертывание игровых серверов с Agones на OVH Managed Kubernetes
Одним из ключевых преимуществ использования Kubernetes является огромная экосистема вокруг него. От Rancher до Istio, от Rook до Fission, от gVisor до KubeDB, экосистема Kubernetes богата, динамична и постоянно растет. Мы подошли к тому, что для большинства потребностей в развертывании мы можем сказать, что для этого существует проект с открытым исходным кодом на основе K8s.
Одним из последних дополнений к этой экосистеме является проект Agones, многопользовательский, выделенный хостинг на игровом сервере с открытым исходным кодом, построенный на Kubernetes, разработанный Google в сотрудничестве с Ubisoft. Проект был анонсирован в марте, и уже наделал немало шума…
В OVH Platform Team мы являемся поклонниками онлайн-игр и Kubernetes, поэтому мы сказали себе, что нам нужно протестировать Agones. И какой лучший способ проверить это, чем развернуть его в нашей службе OVH Managed Kubernetes, установить кластер игровых серверов Xonotic и сыграть в старом классе с коллегами?
Почему агон?
Agones (происходит от греческого слова agōn, конкурсы, проводимые во время публичных фестивалей или, в более широком смысле, «соревнование» или «соревнование в играх»), стремится заменить обычные проприетарные решения для развертывания, масштабирования и управления игровыми серверами.
www.merriam-webster.com/dictionary/agones
kubernetes.io/docs/concepts/api-extension/custom-resources/#custom-controllers
kubernetes.io/docs/concepts/api-extension/custom-resources/#customresourcedefinitions
Agones обогащает Kubernetes пользовательским контроллером и пользовательским определением ресурса. С их помощью вы можете стандартизировать инструменты и API Kubernetes для создания, масштабирования и управления кластерами игровых серверов.
Подождите, о каких игровых серверах вы говорите?
Итак, основное внимание Agones уделяют многопользовательским онлайн-играм, таким как FPS и MOBA, быстрым играм, требующим выделенных игровых серверов с малой задержкой, которые синхронизируют состояние игры между игроками и служат источником правды в игровых ситуациях.
Игры такого типа требуют относительно эфемерных выделенных игровых серверов, причем каждое совпадение выполняется на экземпляре сервера. Серверы должны быть с состоянием (они должны сохранять статус игры), причем состояние обычно хранится в памяти на время матча.
Задержка является ключевой проблемой, поскольку конкурентные аспекты игр в реальном времени требуют быстрого ответа от сервера. Это означает, что подключение от устройства игрока к игровому серверу должно быть максимально прямым, в идеале, в обход любого промежуточного сервера, такого как балансировщик нагрузки.
А как вы подключаете плееры к нужному серверу?
Каждый издатель игр имел свои собственные проприетарные решения, но большинство из них следуют аналогичному потоку, предлагая сервис по подбору игроков, который объединяет игроков в матчи, взаимодействует с менеджером кластера для предоставления выделенного экземпляра игрового сервера и отправки игрокам его IP-адрес и порт, чтобы позволить им напрямую подключаться к серверу и играть в игру.
Agones и его пользовательский контроллер и пользовательское определение ресурса заменяет сложную инфраструктуру управления кластером стандартизированными инструментами и API на основе Kubernetes. Службы сватов взаимодействуют с этими API-интерфейсами для создания новых модулей игровых серверов и передачи их IP-адресов и портов заинтересованным игрокам.
Вишня на торте
Использование Kubernetes для этих задач также дает приятный дополнительный бонус, например, возможность развертывать полную игровую инфраструктуру в среде разработчика (или даже в мини-кубе) или легко клонировать ее для развертывания в новом центре обработки данных или облачной области, но также предлагая целую платформу для размещения всех дополнительных услуг, необходимых для создания игры: управление учетными записями, списки лидеров, инвентарь
github.com/kubernetes/minikube
И, конечно же, простота эксплуатации платформ на базе Kubernetes, особенно когда они динамические, разнородные и распределенные, как большинство игровых онлайн-платформ.
Развертывание Agones на управляемых OVH Kubernetes
Есть несколько способов установить Agones в кластер Kubernetes. Для нашего теста мы выбрали самый простой: установка с помощью Helm.
helm.sh/
Включение создания ресурсов RBAC
Первым шагом для установки Agones является настройка учетной записи службы с достаточными разрешениями для создания некоторых специальных типов ресурсов RBAC.
Теперь у нас есть Cluster Role Binding, необходимая для установки.
kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding
Установка диаграммы Agones
Теперь давайте продолжим, добавив хранилище Agones в список хранилищ Helm.
И затем установка стабильной диаграммы Agones:
agones.dev/site/docs/installation/helm/
Установка, которую мы только что выполнили, не подходит для производства, так как в официальных инструкциях по установке рекомендуется использовать Agones и игровые серверы в отдельных выделенных пулах узлов. Но для нужд нашего теста достаточно базовой настройки.
Подтверждение Agones началось успешно
Чтобы убедиться, что Agones работает в нашем кластере Kubernetes, мы можем взглянуть на модули в пространстве имен agones-system:
Если все в порядке, вы должны увидеть модуль контроллера agones со статусом Running:
Вы также можете увидеть более подробную информацию, используя:
Глядя на описание agones-контроллера, вы должны увидеть что-то вроде:
Где все Условия должны иметь статус True.
Развертывание игрового сервера
Мир Agones Hello довольно скучный, простой эхо-сервер UDP, поэтому мы решили пропустить его и перейти непосредственно к чему-то более интересному: игровому серверу Xonotic.
github.com/GoogleCloudPlatform/agones/tree/release-0.9.0/examples/simple-udp
github.com/GoogleCloudPlatform/agones/blob/release-0.9.0/examples/xonotic
www.xonotic.org/
Xonotic — это многопользовательский FPS с открытым исходным кодом, довольно неплохой, с множеством интересных игровых режимов, карт, оружия и опций настройки.
Развернуть игровой сервер Xonotic поверх Agones довольно просто:
Развертывание игрового сервера может занять несколько минут, поэтому нам нужно подождать, пока его состояние не станет «Готов», прежде чем использовать его. Мы можем получить статус с:
Мы ждем, пока извлечение не даст статус Ready на нашем игровом сервере:
Когда игровой сервер готов, мы также получаем адрес и порт, который мы должны использовать для подключения к нашей игре Deathmatch (в моем примере, 51.83.xxx.yyy: 7094).
Время фрагмента
Теперь, когда у нас есть сервер, давайте проверим его!
Мы загрузили клиент Xonotic для наших компьютеров (он работает на Windows, Linux и MacOS, так что оправданий нет) и запустили его:
Затем мы идем в многопользовательское меню и вводим адрес и порт нашего игрового сервера:
И мы готовы играть!
А на стороне сервера?
Со стороны сервера мы можем следить за тем, как идут дела на нашем игровом сервере, используя логи kubectl. Давайте начнем с поиска модуля, на котором запущена игра:
Мы видим, что наш игровой сервер работает в модуле под названием xonotic:
Затем мы можем использовать логи kubectl. В модуле есть два контейнера, основной ксонотический и колонтитул Agones, поэтому мы должны указать, что нам нужны журналы ксонотического контейнера:
Добавьте друзей
Следующий шаг в основном приятен: попросить коллег подключиться к серверу и провести настоящий Deathmatch, как в Quake 2 раза.
И сейчас?
У нас есть работающий игровой сервер, но мы едва раскрыли возможности Agones: развертывание флота (набор теплых GameServer, доступных для распределения), тестирование FleetAutoscaler (для автоматического увеличения и уменьшения флота в ответ на спрос), делая некоторые фиктивные услуги распределителя. В будущих публикациях в блоге мы углубимся в это и рассмотрим эти возможности.
agones.dev/site/docs/tutorials/allocator-service-go/
agones.dev/site/docs/reference/fleet/
agones.dev/site/docs/reference/fleetautoscaler/
И в более широком контексте мы собираемся продолжить наше исследовательское путешествие по Агонесу. Проект еще очень молодой, ранняя альфа, но он показывает некоторые впечатляющие перспективы.
Одним из последних дополнений к этой экосистеме является проект Agones, многопользовательский, выделенный хостинг на игровом сервере с открытым исходным кодом, построенный на Kubernetes, разработанный Google в сотрудничестве с Ubisoft. Проект был анонсирован в марте, и уже наделал немало шума…
В OVH Platform Team мы являемся поклонниками онлайн-игр и Kubernetes, поэтому мы сказали себе, что нам нужно протестировать Agones. И какой лучший способ проверить это, чем развернуть его в нашей службе OVH Managed Kubernetes, установить кластер игровых серверов Xonotic и сыграть в старом классе с коллегами?
Почему агон?
Agones (происходит от греческого слова agōn, конкурсы, проводимые во время публичных фестивалей или, в более широком смысле, «соревнование» или «соревнование в играх»), стремится заменить обычные проприетарные решения для развертывания, масштабирования и управления игровыми серверами.
www.merriam-webster.com/dictionary/agones
kubernetes.io/docs/concepts/api-extension/custom-resources/#custom-controllers
kubernetes.io/docs/concepts/api-extension/custom-resources/#customresourcedefinitions
Agones обогащает Kubernetes пользовательским контроллером и пользовательским определением ресурса. С их помощью вы можете стандартизировать инструменты и API Kubernetes для создания, масштабирования и управления кластерами игровых серверов.
Подождите, о каких игровых серверах вы говорите?
Итак, основное внимание Agones уделяют многопользовательским онлайн-играм, таким как FPS и MOBA, быстрым играм, требующим выделенных игровых серверов с малой задержкой, которые синхронизируют состояние игры между игроками и служат источником правды в игровых ситуациях.
Игры такого типа требуют относительно эфемерных выделенных игровых серверов, причем каждое совпадение выполняется на экземпляре сервера. Серверы должны быть с состоянием (они должны сохранять статус игры), причем состояние обычно хранится в памяти на время матча.
Задержка является ключевой проблемой, поскольку конкурентные аспекты игр в реальном времени требуют быстрого ответа от сервера. Это означает, что подключение от устройства игрока к игровому серверу должно быть максимально прямым, в идеале, в обход любого промежуточного сервера, такого как балансировщик нагрузки.
А как вы подключаете плееры к нужному серверу?
Каждый издатель игр имел свои собственные проприетарные решения, но большинство из них следуют аналогичному потоку, предлагая сервис по подбору игроков, который объединяет игроков в матчи, взаимодействует с менеджером кластера для предоставления выделенного экземпляра игрового сервера и отправки игрокам его IP-адрес и порт, чтобы позволить им напрямую подключаться к серверу и играть в игру.
Agones и его пользовательский контроллер и пользовательское определение ресурса заменяет сложную инфраструктуру управления кластером стандартизированными инструментами и API на основе Kubernetes. Службы сватов взаимодействуют с этими API-интерфейсами для создания новых модулей игровых серверов и передачи их IP-адресов и портов заинтересованным игрокам.
Вишня на торте
Использование Kubernetes для этих задач также дает приятный дополнительный бонус, например, возможность развертывать полную игровую инфраструктуру в среде разработчика (или даже в мини-кубе) или легко клонировать ее для развертывания в новом центре обработки данных или облачной области, но также предлагая целую платформу для размещения всех дополнительных услуг, необходимых для создания игры: управление учетными записями, списки лидеров, инвентарь
github.com/kubernetes/minikube
И, конечно же, простота эксплуатации платформ на базе Kubernetes, особенно когда они динамические, разнородные и распределенные, как большинство игровых онлайн-платформ.
Развертывание Agones на управляемых OVH Kubernetes
Есть несколько способов установить Agones в кластер Kubernetes. Для нашего теста мы выбрали самый простой: установка с помощью Helm.
helm.sh/
Включение создания ресурсов RBAC
Первым шагом для установки Agones является настройка учетной записи службы с достаточными разрешениями для создания некоторых специальных типов ресурсов RBAC.
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole=cluster-admin --serviceaccount=kube-system:default
Теперь у нас есть Cluster Role Binding, необходимая для установки.
kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding
Установка диаграммы Agones
Теперь давайте продолжим, добавив хранилище Agones в список хранилищ Helm.
helm repo add agones https://agones.dev/chart/stable
И затем установка стабильной диаграммы Agones:
helm install --name my-agones --namespace agones-system agones/agones
agones.dev/site/docs/installation/helm/
Установка, которую мы только что выполнили, не подходит для производства, так как в официальных инструкциях по установке рекомендуется использовать Agones и игровые серверы в отдельных выделенных пулах узлов. Но для нужд нашего теста достаточно базовой настройки.
Подтверждение Agones началось успешно
Чтобы убедиться, что Agones работает в нашем кластере Kubernetes, мы можем взглянуть на модули в пространстве имен agones-system:
kubectl get --namespace agones-system pods
Если все в порядке, вы должны увидеть модуль контроллера agones со статусом Running:
$ kubectl get --namespace agones-system pods
NAME READY STATUS RESTARTS AGE
agones-controller-5f766fc567-xf4vv 1/1 Running 0 5d15h
agones-ping-889c5954d-6kfj4 1/1 Running 0 5d15h
agones-ping-889c5954d-mtp4g 1/1 Running 0 5d15h
Вы также можете увидеть более подробную информацию, используя:
kubectl describe --namespace agones-system pods
Глядя на описание agones-контроллера, вы должны увидеть что-то вроде:
$ kubectl describe --namespace agones-system pods
Name: agones-controller-5f766fc567-xf4vv
Namespace: agones-system
[...]
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Где все Условия должны иметь статус True.
Развертывание игрового сервера
Мир Agones Hello довольно скучный, простой эхо-сервер UDP, поэтому мы решили пропустить его и перейти непосредственно к чему-то более интересному: игровому серверу Xonotic.
github.com/GoogleCloudPlatform/agones/tree/release-0.9.0/examples/simple-udp
github.com/GoogleCloudPlatform/agones/blob/release-0.9.0/examples/xonotic
www.xonotic.org/
Xonotic — это многопользовательский FPS с открытым исходным кодом, довольно неплохой, с множеством интересных игровых режимов, карт, оружия и опций настройки.
Развернуть игровой сервер Xonotic поверх Agones довольно просто:
kubectl create -f https://raw.githubusercontent.com/GoogleCloudPlatform/agones/release-0.9.0/examples/xonotic/gameserver.yaml
Развертывание игрового сервера может занять несколько минут, поэтому нам нужно подождать, пока его состояние не станет «Готов», прежде чем использовать его. Мы можем получить статус с:
kubectl get gameserver
Мы ждем, пока извлечение не даст статус Ready на нашем игровом сервере:
$ kubectl get gameserver
NAME STATE ADDRESS PORT NODE AGE
xonotic Ready 51.83.xxx.yyy 7094 node-zzz 5d
Когда игровой сервер готов, мы также получаем адрес и порт, который мы должны использовать для подключения к нашей игре Deathmatch (в моем примере, 51.83.xxx.yyy: 7094).
Время фрагмента
Теперь, когда у нас есть сервер, давайте проверим его!
Мы загрузили клиент Xonotic для наших компьютеров (он работает на Windows, Linux и MacOS, так что оправданий нет) и запустили его:
Затем мы идем в многопользовательское меню и вводим адрес и порт нашего игрового сервера:
И мы готовы играть!
А на стороне сервера?
Со стороны сервера мы можем следить за тем, как идут дела на нашем игровом сервере, используя логи kubectl. Давайте начнем с поиска модуля, на котором запущена игра:
kubectl get pods
Мы видим, что наш игровой сервер работает в модуле под названием xonotic:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
xonotic 2/2 Running 0 5d15h
Затем мы можем использовать логи kubectl. В модуле есть два контейнера, основной ксонотический и колонтитул Agones, поэтому мы должны указать, что нам нужны журналы ксонотического контейнера:
$ kubectl logs xonotic
Error from server (BadRequest): a container name must be specified for pod xonotic, choose one of: [xonotic agones-gameserver-sidecar]
$ kubectl logs xonotic xonotic
>>> Connecting to Agones with the SDK
>>> Starting health checking
>>> Starting wrapper for Xonotic!
>>> Path to Xonotic server script: /home/xonotic/Xonotic/server_linux.sh
Game is Xonotic using base gamedir data
gamename for server filtering: Xonotic
Xonotic Linux 22:03:50 Mar 31 2017 - release
Current nice level is below the soft limit - cannot use niceness
Skeletal animation uses SSE code path
execing quake.rc
[...]
Authenticated connection to 109.190.xxx.yyy:42475 has been established: client is v6xt9/GlzxBH+xViJCiSf4E/SCn3Kx47aY3EJ+HOmZo=@Xon//Ks, I am /EpGZ8F@~Xon//Ks
LostInBrittany is connecting...
url_fclose: failure in crypto_uri_postbuf
Receiving player stats failed: -1
LostInBrittany connected
LostInBrittany connected
LostInBrittany is now spectating
[BOT]Eureka connected
[BOT]Hellfire connected
[BOT]Lion connected
[BOT]Scorcher connected
unconnected changed name to [BOT]Eureka
unconnected changed name to [BOT]Hellfire
unconnected changed name to [BOT]Lion
unconnected changed name to [BOT]Scorcher
[BOT]Scorcher picked up Strength
[BOT]Scorcher drew first blood!
[BOT]Hellfire was gunned down by [BOT]Scorcher's Shotgun
[BOT]Scorcher slapped [BOT]Lion around a bit with a large Shotgun
[BOT]Scorcher was gunned down by [BOT]Eureka's Shotgun, ending their 2 frag spree
[BOT]Scorcher slapped [BOT]Lion around a bit with a large Shotgun
[BOT]Scorcher was shot to death by [BOT]Eureka's Blaster
[BOT]Hellfire slapped [BOT]Eureka around a bit with a large Shotgun, ending their 2 frag spree
[BOT]Eureka slapped [BOT]Scorcher around a bit with a large Shotgun
[BOT]Eureka was gunned down by [BOT]Hellfire's Shotgun
[BOT]Hellfire was shot to death by [BOT]Lion's Blaster, ending their 2 frag spree
[BOT]Scorcher was cooked by [BOT]Lion
[BOT]Eureka turned into hot slag
[...]
Добавьте друзей
Следующий шаг в основном приятен: попросить коллег подключиться к серверу и провести настоящий Deathmatch, как в Quake 2 раза.
И сейчас?
У нас есть работающий игровой сервер, но мы едва раскрыли возможности Agones: развертывание флота (набор теплых GameServer, доступных для распределения), тестирование FleetAutoscaler (для автоматического увеличения и уменьшения флота в ответ на спрос), делая некоторые фиктивные услуги распределителя. В будущих публикациях в блоге мы углубимся в это и рассмотрим эти возможности.
agones.dev/site/docs/tutorials/allocator-service-go/
agones.dev/site/docs/reference/fleet/
agones.dev/site/docs/reference/fleetautoscaler/
И в более широком контексте мы собираемся продолжить наше исследовательское путешествие по Агонесу. Проект еще очень молодой, ранняя альфа, но он показывает некоторые впечатляющие перспективы.
FREE setup до конца апреля
Интервью с Октавой Клаба "Наши клиенты видят ценность хранения OVH своих данных в Рубе"
Он самый большой путешественник из великих боссов Рубе: только что прибыв из Далласа, где он сейчас живет, он возвращается в полдюжины стран Европы, где базируется его компания OVH. Во время краткого возвращения на родину, в штаб-квартиру крупнейшего в Европе хранилища данных, Октава Клаба поделился с нами своим видением цифровой революции, происходящей на его глазах.
Это должно вернуться к началу. Когда я запустил коробку, на моем счете было 5000 франков. У моих родителей не было денег, чтобы одолжить мне. Я одолжил 25 000 балов, я всех раздражал. Я бросил ящик, где работал пять недель. Когда ты идешь ко дну своей мечты, пусть даже это нелегко каждый день, но оно того стоит.
Почему я создал OVH? Я хотел другую коробку, где человеческие отношения просты, куда вы хотите прийти утром, где вы делаете невероятные вещи, не принимая себя всерьез. Я убежден, что то, как мы работаем, так и будут делать компании в будущем. Это позволило нам выжить в начале, быстро расти с этой культурой и нашими ценностями.
Я также хотел, чтобы он был основан на компьютерах, подключенных к Интернету. Отсюда и наш успех: мы поддерживаем цифровую революцию, изменение общества. «Облако» позволяет управлять данными. Это то, на чем основан новый мир: информация. Все дано, и мы позволяем данным создавать стоимость. Мы внутри этой истории. И это преобразование, мы делаем это отсюда, в Рубе!
Я создал компании примерно в двадцати странах. У каждого свои особенности. Там не идеальная страна. Повсюду существуют юридические, административные и налоговые ограничения. В Соединенных Штатах налоги важны. Там на самом деле страна не легче, чем другие. Некоторые могут свалить как Ирландия, Сингапур. Я не чувствую, что Франция наказана. Меня беспокоит то, что я облагаюсь налогом по ставкам, которые не применяются к моим китайским или американским конкурентам, и что это влияет на наш рост. Я не говорю об этом, чтобы у нас было больше денег, но чтобы у нас была возможность расти быстрее.
Я никогда ничего не спрашивал у политиков. Но у политиков есть инструмент для поддержки деятельности: общественный порядок. Это касается самолетов, военной техники. Но политический мир не является интервенционистом для облака. Многие коробки созданы в цифровом формате, и публичный рынок должен рисковать, используя свои продукты. Эта сила поддержки экономики огромна.
Мы объясняем им риски, которые могут существовать. Закон об облаке, закон, принятый в Соединенных Штатах, гласит, что если вы размещаете свои электронные письма в Google, в Microsoft, власти могут их прочитать! Это серьезно! Если европейские компании считают обратное, это слишком плохо для них, но это удивительно. Это просто жизненно важно для европейского суверенитета.
Маршрут блестящего подростка
Карьера Октавы Клабы — это карьера 16-летнего подростка, который не говорит по-французски, когда он приезжает в Рубе в 1990 году. Семья возвращается по стопам польского деда, который пришел работать в ямы деревни. шахтный бассейн. Студент великолепен, интегрирует ICAM в Лилле и, сумасшедший компьютер, преследует американский веб-сайт, который не следует темпам. Это триггер для создания OVH.
Компания предлагает хостинг данных и приложений в Интернете и, в более общем смысле, то, что называется «облаком», вычислительным удалением до сотен тысяч серверов.
С тех пор OVH была основана во всем мире: в 130 странах с 2000 сотрудников (одна тысяча в Рубе, ее штаб-квартира) работает тридцать центров обработки данных, таких как Gravelines.
Цифровой актер, он также промышленник, способный производить 400 000 серверов в год на своей фабрике в Круа. OVH объявляет об обороте в 500 миллионов евро и все еще надеется достичь миллиарда через два года.
OVH будет 20 лет. Как вы объясните его успех?Пятнадцать лет я не понимал, почему мы преуспели. Но за последние пять лет мы очень быстро выросли, обосновавшись в Канаде, Соединенных Штатах, много набирая на два или три года. Мы поняли наши различия и почему это работает.
Это должно вернуться к началу. Когда я запустил коробку, на моем счете было 5000 франков. У моих родителей не было денег, чтобы одолжить мне. Я одолжил 25 000 балов, я всех раздражал. Я бросил ящик, где работал пять недель. Когда ты идешь ко дну своей мечты, пусть даже это нелегко каждый день, но оно того стоит.
Почему я создал OVH? Я хотел другую коробку, где человеческие отношения просты, куда вы хотите прийти утром, где вы делаете невероятные вещи, не принимая себя всерьез. Я убежден, что то, как мы работаем, так и будут делать компании в будущем. Это позволило нам выжить в начале, быстро расти с этой культурой и нашими ценностями.
Я также хотел, чтобы он был основан на компьютерах, подключенных к Интернету. Отсюда и наш успех: мы поддерживаем цифровую революцию, изменение общества. «Облако» позволяет управлять данными. Это то, на чем основан новый мир: информация. Все дано, и мы позволяем данным создавать стоимость. Мы внутри этой истории. И это преобразование, мы делаем это отсюда, в Рубе!
Есть ли у компании во Франции средства для роста?Конечно. И если вам нужно быть предпринимателем, это сейчас. Есть много вещей, чтобы изобрести сегодня. Через пять-десять лет многое будет сделано. Чего не хватает для создания крупных компаний вокруг цифровых технологий? Это рынок. Франции не хватает, как и Европе. Франция маленькая, а Европа сложная! Мы должны стремиться к миру и часто проходить через Соединенные Штаты: он большой и простой! Так мы достигаем критической массы.
Я создал компании примерно в двадцати странах. У каждого свои особенности. Там не идеальная страна. Повсюду существуют юридические, административные и налоговые ограничения. В Соединенных Штатах налоги важны. Там на самом деле страна не легче, чем другие. Некоторые могут свалить как Ирландия, Сингапур. Я не чувствую, что Франция наказана. Меня беспокоит то, что я облагаюсь налогом по ставкам, которые не применяются к моим китайским или американским конкурентам, и что это влияет на наш рост. Я не говорю об этом, чтобы у нас было больше денег, но чтобы у нас была возможность расти быстрее.
Каким вы видите налоговый проект GAFAM?Вокруг сетевых гигантов существует реальная проблема в отношении их вклада. Это признается, это должно регулироваться. У правительства хороший подход. Когда два человека вступают в деловые отношения, мы облагаем налогом эти отношения. Интересно, мы никогда не делали этого раньше. Правильно ли это предназначено для этой деятельности? Кажется так. Теперь это все еще новый налог, и он эффективен, только если все сделают то же самое, в Европе, США, Китае
Вы смотрите на политиков с расстоянияЯ всегда неохотно отношусь к политическому миру и считаю, что компания должна быть надежной и экономически жизнеспособной. Если компания не может платить своим сотрудникам или развиваться, ее нужно «убить», создать что-то лучшее. А бизнес не может жить на капельнице.
Я никогда ничего не спрашивал у политиков. Но у политиков есть инструмент для поддержки деятельности: общественный порядок. Это касается самолетов, военной техники. Но политический мир не является интервенционистом для облака. Многие коробки созданы в цифровом формате, и публичный рынок должен рисковать, используя свои продукты. Эта сила поддержки экономики огромна.
Это вопрос суверенитета?OVH — единственный игрок в европейском облаке. Мы находимся в первой десятке по всему миру, с оборотом ниже, чем у американцев. Но мы существуем, потому что наши клиенты видят ценность в хранении своих данных здесь, в Рубе, Гравелине, Страсбурге… Мы объясняем компаниям, что они заинтересованы в поддержке нас, покупая такие продукты, как наша, чтобы остаться повелитель!
Мы объясняем им риски, которые могут существовать. Закон об облаке, закон, принятый в Соединенных Штатах, гласит, что если вы размещаете свои электронные письма в Google, в Microsoft, власти могут их прочитать! Это серьезно! Если европейские компании считают обратное, это слишком плохо для них, но это удивительно. Это просто жизненно важно для европейского суверенитета.
Как вы смотрите на Brexit?Никто не понимает этого, и никто не знает, чем это закончится. Тем не менее интересно посмотреть, как в стране происходят такие «подрывные» решения! Выйти из сообщества — это опыт. Это как Греция, которая, чтобы выйти из банкротства, экспериментировала с разными путями… Что касается Британии, у нас там есть мероприятия, команды, центры обработки данных… Мы бы хотели, чтобы Brexit не не будет сделано, но мы будем адаптироваться.
Со времен Соединенных Штатов вы наблюдали движение желтых жилетов?Я французские новости. Это новый тип движения, проявления, в котором есть хорошо или нет. Что интересно, так это виртуальное движение, которое происходит в физическом мире и показывает, что его трудно услышать. Правительство слышало претензии… Но есть и головорезы, и это то, что не так, потому что это не позволяет обмен. Мы находимся в упадке общества, что, если не будет обсуждения, мы оставим на стороне людей, которые, естественно, пойдут на крайние меры. Мы должны поощрять все, что позволяет нам общаться, убеждать, слушать
Вебу 30 лет: что вы думаете о том, чем он стал?Что такое интернет? Технология построена на связи между машинами. Эта технология изменила нашу жизнь и общество. Мы выравниваем отношения, расстояния сокращаются, люди через Твиттер могут бросить вызов любому в мире… Это нарушение отношений между людьми. С годами робототехника, беспилотники, смартфоны открыли много возможностей. Я не особо смотрю в прошлое, но я всегда очень рад будущему.
Но это приносит очень важные проблемы?Это правда Возьми робототехнику. Здесь, в Круа, мы инвестировали в фабрику по производству наших серверов. Мы потратили 10 миллионов и создали 20 рабочих мест. Это 500 000 евро на создание рабочих мест, а на 2000 рабочих мест требуется один миллиард. Это много? Я не считаю это очень много. Потому что с 2000 роботами, анимированными 2000 людьми, мы можем многое сделать. Роль людей больше не в том, чтобы делать, а в том, чтобы делать это так, как это делают роботы. И это открывает возможность обучать людей выполнять более интересные задачи.
Так что будет завтра?Универсальный доход не может быть ерундой. Но если у всех есть деньги, почему я встаю утром? Эти мутации общества очень интересны, и в политическом плане есть ответы, которые нужно найти. Вопрос сложный. Если больше нет необходимости работать для выполнения работы, что мы будем делать с нашей жизнью? Вот что будет через десять или двадцать лет. Мы должны придавать значение людям. Мы привезли некоторые с работой. Если работа и компенсация меняют форму, вам придется много чего изобретать. Мы живем невероятный период. У компаний есть ответ, и я надеюсь сделать это с OVH.
Маршрут блестящего подростка
Карьера Октавы Клабы — это карьера 16-летнего подростка, который не говорит по-французски, когда он приезжает в Рубе в 1990 году. Семья возвращается по стопам польского деда, который пришел работать в ямы деревни. шахтный бассейн. Студент великолепен, интегрирует ICAM в Лилле и, сумасшедший компьютер, преследует американский веб-сайт, который не следует темпам. Это триггер для создания OVH.
Компания предлагает хостинг данных и приложений в Интернете и, в более общем смысле, то, что называется «облаком», вычислительным удалением до сотен тысяч серверов.
С тех пор OVH была основана во всем мире: в 130 странах с 2000 сотрудников (одна тысяча в Рубе, ее штаб-квартира) работает тридцать центров обработки данных, таких как Gravelines.
Цифровой актер, он также промышленник, способный производить 400 000 серверов в год на своей фабрике в Круа. OVH объявляет об обороте в 500 миллионов евро и все еще надеется достичь миллиарда через два года.
European Cloud Leader OVH: очень разные
ИТ-аналитики могут быть иногда циничными, закаленными. Мы услышали все тонкие маркетинговые новости, увидели безупречные, глянцевые центры обработки данных и рассказали, как их люди и культура являются их ключевыми отличиями. В большинстве случаев это не оставляет нас равнодушным, и мы должны копать глубоко, чтобы найти какие-либо драгоценные камни. Но наш недавний визит в дом OVH в Рубе, на севере Франции, стал настоящим откровением.
Помимо очень красивого старого города, город Лилль / Рубе / Туркуэн — это скудная промышленная зона с небольшим отставанием, типичная для многих городов, пытающихся справиться с последствиями постиндустриальной Европы. Это не то место, где вы ожидаете найти современную успешную облачную компанию. Тем не менее, OVH добились успеха в этой среде и создали совершенно другой тип организации, который мы можем легко увидеть, основываясь на инновациях, энтузиазме, сильной интеграции цепочки поставок и большой доле галльской самостоятельности.
Никогда первые впечатления не были более обманчивыми. От работы со складом, которую я бы узнал со времени работы в логистике в 1970-х годах, до центров обработки данных, переброшенных в старые промышленные помещения на уставших промышленных площадках, казалось, что OVH изо всех сил старается нас оттолкнуть. И тем не менее, он отлично сочетается.
Давайте начнем с инноваций. OVH проектирует и строит свои собственные серверы и стойки, в которых они находятся. У них концептуальный подход, основанный на «1-100-1000». OVH показал нам место, где рождаются новые идеи: семинар, в котором доктор Эммет Браун («Назад в будущее») был бы дома. Здесь они придумали уникальную интегрированную систему водяного охлаждения, встроенную в стойки, стойки со встроенными теплообменниками и распределительными блоками, а также стойки, уложенные по бокам и сложенные по три в высоту. Это обеспечивает гораздо более высокую плотность, а конструкция также обеспечивает очень гибкие конфигурации. Затем, переходя в следующую комнату, вы попадаете в макет зала обработки данных, где инновации в дизайне стоек и серверов встроены в реалистичную среду для тестирования, 100. Оттуда это был короткий шаг к успеху. область, где роботы взяли листы металла и согнули их в различные формы для стеллажей, которые затем перемещаются в производственный цех, где собраны настоящие серверы — 1000.
Что это означает на практике, становится очень очевидным, когда вы входите в один из их центров обработки данных. С одной стороны, они тише, с отсутствием шума вентилятора. Там нет горячего прохода прохода. Любая высокая температура от задней части серверов минимальна, и воздушные дымоходы забирают высокую температуру, такую, какая она есть, вверх и вниз. Есть несколько резервных блоков CRAC на случай, если погода станет очень жаркой, но в северной Франции это довольно редко. Результатом являются ЧУЭ менее 1,1 на старых заводах, которые традиционно не склонны к эффективному использованию энергии. OVH не тратили время и деньги, пытаясь улучшить структуру здания, чтобы повысить ее энергоэффективность. По сути, они устанавливают серверные стойки в большие металлические контейнеры, опять же собственной конструкции. Все выглядит немного утилитарно, но в этом подходе есть элегантная простота.
Наличие собственной производственной базы также позволяет OVH перераспределять и перерабатывать старые серверные компоненты в новые конфигурации, поддерживающие услуги с низким потреблением ресурсов, обеспечивая быстрое и эффективное обновление «передовых» серверов высокой спецификации.
Этот высоко вертикально интегрированный промышленный процесс инноваций, проектирования, тестирования, сборки, развертывания и повторного использования / повторного назначения является ключом к неизменно высоким рейтингам OVH в показателях соотношения цена / производительность от организаций, таких как Cloud Spectator. Эти критерии особенно очевидны, когда превращаются в реальные расходы, которые платят клиенты, по сравнению с аналогами AWS и Microsoft Azure. OVH выходят явные победители здесь.
Если вы не видели эту операцию, вы можете опасаться, что огромная экономия от масштаба, доступная AWS и Microsoft Azure, может оказать серьезное влияние на их пользу в любой ценовой борьбе. Но ясно, что в их цепочке поставок и ИТ-операциях все еще есть много возможностей для повышения эффективности, например, за счет повышения автоматизации. OVH также недавно присоединились к Open Compute Project (OCP). Я подозреваю, что в настоящее время они могут научить ОСР столько же, сколько они могут получить от них, но наличие доступа к этому улей-уму может быть не плохой вещью для будущей конкурентоспособности.
Суть в том, что если вы ищете неизменно хорошую глобально масштабируемую производительность IaaS по низкой цене, OVH — одно из первых мест, куда вам следует обратить внимание. Но OVH превращаются в нечто большее, чем провайдер IaaS. В следующем блоге я расскажу о быстрых разработках OVH в PaaS и других конкретных сервисных предложениях, которые делают их безопасным и зрелым предложением для предприятий, которые хотят перейти на гибридную облачную среду безопасным и поддерживаемым способом.
Циклы: питание непрерывных запросов с наблюдаемостью FaaS
Мы все знакомы с этим небольшим фрагментом кода, который добавляет разумную ценность вашему бизнес-подразделению. Он может материализоваться как сценарий, программа, строка кода… и он будет создавать отчет, новые метрики, KPI или создавать новые составные данные. Этот код предназначен для периодического запуска, чтобы удовлетворить требования к актуальной информации.
В команде Observability мы встречаем эти фрагменты как запросы в базе данных временных рядов (TSDB), чтобы выразить непрерывные запросы, которые отвечают за автоматизацию различных вариантов использования, таких как: удаление, свертка или любая бизнес-логика, которая должна манипулировать данными временных рядов.
Мы уже представляли TSL в предыдущем сообщении в блоге, в котором демонстрировалось, как наши клиенты используют доступные протоколы OVH Metrics, такие как Graphite, OpenTSDB, PromQL и WarpScript ™, но когда дело доходит до манипулирования или даже создания новых данных, у вас нет много вариантов, хотя вы можете использовать WarpScript ™ или TSL в качестве языка сценариев вместо запроса.
В большинстве случаев эта бизнес-логика требует создания приложения, которое требует больше времени, чем выражение логики в виде запроса, ориентированного на TSDB. Создание базового кода приложения — это первый шаг, за которым следует CI / CD (или любой процесс доставки) и настройка его мониторинга. Однако управление сотнями небольших приложений, подобных этим, увеличит органические затраты из-за необходимости поддерживать их вместе с базовой инфраструктурой.
Мы хотели, чтобы эти ценные задачи не возлагались на головы немногих разработчиков, которым затем нужно было бы нести ответственность за владение данными и вычислительные ресурсы, поэтому нам было интересно, как мы можем автоматизировать работу, не полагаясь на команду по настройке. вычислять работу каждый раз, когда кому-то нужно что-то.
Мы хотели найти решение, которое сфокусировалось бы на бизнес-логике, без необходимости запуска всего приложения. Таким образом, кому-то, желающему сгенерировать файл JSON с ежедневным отчетом о данных (например), нужно будет только выразить соответствующий запрос.
Вы не должны FaaS!
Планирование работы — старая, привычная рутина. Будь то bash cron, runner или специализированные планировщики, когда дело доходит до упаковки фрагмента кода и его периодической работы, существует имя для него: FaaS.
FaaS родился с простой целью: сократить время разработки. Мы могли бы найти реализацию с открытым исходным кодом для оценки (например, OpenFaas), но большинство из них полагались на управляемый стек контейнеров. Наличие одного контейнера на запрос было бы очень дорогостоящим, плюс разогрев контейнера для выполнения функции и последующее его замораживание было бы очень контрпродуктивным.
Это потребовало бы большего планирования и автоматизации, чем мы хотели для нашей конечной цели, привело бы к неоптимальной производительности и ввело бы новое требование для управления пропускной способностью кластера. Существует также время сборки, необходимое для развертывания новой функции в контейнере, которая, следовательно, не является бесплатной.
def Loops
Именно тогда мы решили создать «Loops»: платформу приложений, в которой вы можете запустить код, который хотите запустить. Это все. Цель состоит в том, чтобы выдвинуть функцию (буквально!), А не модуль, как это делают все текущие решения FaaS:
Затем вы можете выполнить его вручную с помощью HTTP-вызова или Cron-подобного планировщика.
Оба эти аспекта необходимы, поскольку вы можете (например) иметь ежемесячный отчет, но для одного дня потребуется дополнительный, через 15 дней после последнего отчета. Циклы упростят создание вашего нового отчета вручную, в дополнение к ежемесячному.
Были некоторые необходимые ограничения, когда мы начали строить Loops:
Реализация циклов
Мы решили построить нашу первую версию на V8. Мы выбрали JavaScript в качестве первого языка, потому что он прост в изучении, а асинхронные потоки данных легко управляются с помощью Promises. Кроме того, он очень хорошо подходит для FaaS, так как функции Javascript очень выразительны. Мы создали его вокруг нового модуля VM NodeJS, который позволяет выполнять код в выделенном контексте V8.
Контекст V8 подобен объекту (JSON), изолированному от вашего исполнения. В контексте вы можете найти собственные функции и объекты. Однако, если вы создадите новый контекст V8, вы увидите, что некоторые переменные или функции не доступны изначально (например, setTimeout (), setInterval () или Buffer). Если вы хотите использовать их, вам придется добавить их в ваш новый контекст. Последнее, что нужно помнить, это то, что когда у вас есть новый контекст, вы можете легко выполнить сценарий JavaScript в строковой форме.
Контексты выполняют самую важную часть нашего первоначального списка требований: изоляция. Каждый контекст V8 изолирован, поэтому он не может общаться с другим контекстом. Это означает, что глобальная переменная, определенная в одном контексте, недоступна в другом. Вам нужно будет построить мост между ними, если вы хотите, чтобы это было так.
Мы не хотели выполнять сценарии с помощью eval (), поскольку вызов этой функции позволяет вам выполнять код JS в основном общем контексте с кодом, вызывающим его. После этого вы можете получить доступ к тем же объектам, константам, переменным и т. Д. Эта проблема безопасности стала нарушением условий для новой платформы.
Теперь мы знаем, как выполнять наши скрипты, давайте реализуем некоторое управление для них. Чтобы быть без сохранения состояния, каждый рабочий экземпляр Loops (то есть механизм JavaScript, способный выполнять код в контексте виртуальной машины) должен иметь последнюю версию каждого цикла (цикл — это скрипт для выполнения). Это означает, что когда пользователь запускает новый цикл, мы должны синхронизировать его с каждым рабочим цикла. Эта модель хорошо согласуется с парадигмой pub / sub, и, поскольку мы уже используем Kafka в качестве инфраструктуры pub / sub, нужно было просто создать отдельную тему и использовать ее у рабочих. В этом случае публикация включает API, где пользователь отправляет свои циклы, которые генерируют событие Kafka, содержащее тело функции. Поскольку у каждого работника есть своя собственная группа потребителей Kafka, они все получают одинаковые сообщения.
Рабочие подписываются на обновления Loops как потребители Kafka и поддерживают хранилище Loop, которое является встроенным ключом (хэш Loop) / Value (текущая версия функции). В части API хеши циклов используются в качестве параметров URL для определения того, какой цикл следует выполнить. После вызова цикл извлекается из карты, затем вводится в контексте V8, выполняется и удаляется. Этот механизм перезагрузки горячего кода гарантирует, что каждый цикл может выполняться на каждом работнике. Мы также можем использовать возможности наших балансировщиков нагрузки для распределения нагрузки на работников. Эта простая модель распределения позволяет избежать сложного планирования и облегчает обслуживание всей инфраструктуры.
Чтобы обеспечить защиту от перезагрузки, мы используем очень удобную функцию сжатия журналов Kafka. Сжатие журнала позволяет Kafka сохранять последнюю версию каждого ключевого сообщения. Когда пользователь создает новый цикл, ему дается уникальный идентификатор, который используется в качестве ключа сообщения Kafka. Когда пользователь обновляет цикл, это новое сообщение будет переслано всем потребителям, но, поскольку ключ уже существует, Kafka сохранит только последнюю ревизию. Когда работник перезапускается, он использует все сообщения для восстановления своего внутреннего KV, поэтому предыдущее состояние будет восстановлено. Кафка используется здесь как постоянный магазин.
Циклы выполнения
Даже если базовый движок способен запускать собственный Javascript, как указано выше, мы хотели, чтобы он выполнял более идиоматические запросы временных рядов, такие как TSL или WarpScript. Чтобы добиться этого, мы создали абстракцию Loops Runtime, которая оборачивает не только Javascript, но также запросы TSL и WarpScript в код Javascript. Пользователи должны объявлять цикл с его временем выполнения, после чего это просто вопрос работы упаковщиков. Например, выполнение цикла WarpScript подразумевает использование простого WarpScript ™ и его отправку через HTTP-вызов по запросу узла.
Петли обратной связи
Безопасное выполнение кода — это начало, но когда дело доходит до выполнения произвольного кода, также полезно получить некоторую обратную связь о состоянии выполнения. Это было успешно или нет? Есть ли ошибка в функции? Если цикл находится в состоянии сбоя, пользователь должен быть немедленно уведомлен.
Это приводит нас к одному особому условию: пользовательские скрипты должны быть в состоянии сказать, все ли в порядке или нет. Есть два способа сделать это в базовом движке JavaScript: обратные вызовы и обещания.
Мы решили использовать Promises, который предлагает лучшее асинхронное управление. Каждый цикл возвращает обещание в конце скрипта. Отклоненное обещание вызовет состояние ошибки HTTP 500, а разрешенное — HTTP 200.
Планирование циклов
При публикации Loops вы можете объявить несколько триггеров, аналогично Cron. Каждый триггер будет выполнять HTTP-вызов вашего цикла с необязательными параметрами.
Исходя из этой семантики, для генерации нескольких отчетов мы можем зарегистрировать одну функцию, которая будет планироваться в разных контекстах, определенных различными параметрами (регион, скорость). Смотрите пример ниже:
Планирование основано на Metronome, который является планировщиком событий с открытым исходным кодом, с особым акцентом на планирование, а не на выполнение. Он идеально подходит для Loops, поскольку Loops управляет выполнением, полагаясь на Metronome для управления вызовами выполнения.
Петли трубопроводов
Проект Loops может иметь несколько циклов. Одним из распространенных случаев использования наших клиентов было использование Loops в качестве платформы данных в режиме потока данных. Поток данных — это способ описать последовательность этапов выполнения. В контексте Loops существует глобальный объект `Loop`, который позволяет сценарию выполнить другой цикл с этим именем. Затем вы можете связать выполнение циклов, которые будут действовать как пошаговые функции.
Болевые точки: масштабирование приложения NodeJS
Рабочие циклов являются приложениями NodeJS. Большинство разработчиков NodeJS знают, что NodeJS использует однопоточный цикл обработки событий. Если вы не позаботитесь о поточной модели вашего приложения nodeJS, вы, скорее всего, пострадаете из-за нехватки производительности, поскольку будет использоваться только один хост-поток.
NodeJS также имеет модуль кластера, который позволяет приложению использовать несколько потоков. Вот почему в Loops-работнике мы начинаем с потока N-1 для обработки вызовов API, где N — общее количество доступных потоков, и один из них остается выделенным для основного потока.
Главный поток отвечает за использование тем Kafka и поддержку хранилища Loops, в то время как рабочий поток запускает сервер API. Для каждого запрошенного выполнения цикла он запрашивает у мастера содержимое скрипта и выполняет его в выделенном потоке.
При такой настройке на каждом сервере запускается одно приложение NodeJS с одним потребителем Kafka, что упрощает масштабирование инфраструктуры, просто добавляя дополнительные серверы или облачные экземпляры.
Заключение
В этой статье мы предварительно ознакомились с Loops, масштабируемым, ориентированным на метрики FaaS с собственной поддержкой JavaScript и расширенной поддержкой WarpScript и TSL.
У нас еще есть несколько вещей, которые нужно улучшить, например, импорт зависимостей в стиле ES5 и предварительный просмотр метрик для проектов Loops наших клиентов. Мы также планируем добавить дополнительные среды выполнения, особенно WASM, которые позволят многим другим языкам, на которые он может ориентироваться, таким как Go, Rust или Python, удовлетворять большинству предпочтений разработчика.
Платформа Loops была частью требования для создания высокоуровневых функций вокруг продуктов OVH Observability. Это первый шаг к предложению более автоматизированных услуг, таких как сведение показателей, конвейеры агрегации или средства извлечения логов в метрики.
Этот инструмент был создан из набора продуктов Observability с учетом более высокого уровня абстракции, но вам также может потребоваться прямой доступ к API, чтобы реализовать собственную автоматизированную логику для ваших метрик. Вы были бы заинтересованы в такой функции? Посетите наш канал Gitter, чтобы обсудить это с нами!
www.ovh.com/fr/blog/v8-hot-code-injection-for-continuous-queries/
В команде Observability мы встречаем эти фрагменты как запросы в базе данных временных рядов (TSDB), чтобы выразить непрерывные запросы, которые отвечают за автоматизацию различных вариантов использования, таких как: удаление, свертка или любая бизнес-логика, которая должна манипулировать данными временных рядов.
Мы уже представляли TSL в предыдущем сообщении в блоге, в котором демонстрировалось, как наши клиенты используют доступные протоколы OVH Metrics, такие как Graphite, OpenTSDB, PromQL и WarpScript ™, но когда дело доходит до манипулирования или даже создания новых данных, у вас нет много вариантов, хотя вы можете использовать WarpScript ™ или TSL в качестве языка сценариев вместо запроса.
В большинстве случаев эта бизнес-логика требует создания приложения, которое требует больше времени, чем выражение логики в виде запроса, ориентированного на TSDB. Создание базового кода приложения — это первый шаг, за которым следует CI / CD (или любой процесс доставки) и настройка его мониторинга. Однако управление сотнями небольших приложений, подобных этим, увеличит органические затраты из-за необходимости поддерживать их вместе с базовой инфраструктурой.
Мы хотели, чтобы эти ценные задачи не возлагались на головы немногих разработчиков, которым затем нужно было бы нести ответственность за владение данными и вычислительные ресурсы, поэтому нам было интересно, как мы можем автоматизировать работу, не полагаясь на команду по настройке. вычислять работу каждый раз, когда кому-то нужно что-то.
Мы хотели найти решение, которое сфокусировалось бы на бизнес-логике, без необходимости запуска всего приложения. Таким образом, кому-то, желающему сгенерировать файл JSON с ежедневным отчетом о данных (например), нужно будет только выразить соответствующий запрос.
Вы не должны FaaS!
Планирование работы — старая, привычная рутина. Будь то bash cron, runner или специализированные планировщики, когда дело доходит до упаковки фрагмента кода и его периодической работы, существует имя для него: FaaS.
FaaS родился с простой целью: сократить время разработки. Мы могли бы найти реализацию с открытым исходным кодом для оценки (например, OpenFaas), но большинство из них полагались на управляемый стек контейнеров. Наличие одного контейнера на запрос было бы очень дорогостоящим, плюс разогрев контейнера для выполнения функции и последующее его замораживание было бы очень контрпродуктивным.
Это потребовало бы большего планирования и автоматизации, чем мы хотели для нашей конечной цели, привело бы к неоптимальной производительности и ввело бы новое требование для управления пропускной способностью кластера. Существует также время сборки, необходимое для развертывания новой функции в контейнере, которая, следовательно, не является бесплатной.
def Loops
Именно тогда мы решили создать «Loops»: платформу приложений, в которой вы можете запустить код, который хотите запустить. Это все. Цель состоит в том, чтобы выдвинуть функцию (буквально!), А не модуль, как это делают все текущие решения FaaS:
function dailyReport (event) {
return Promise.resolve («Сегодня все хорошо!»)
}
Затем вы можете выполнить его вручную с помощью HTTP-вызова или Cron-подобного планировщика.
Оба эти аспекта необходимы, поскольку вы можете (например) иметь ежемесячный отчет, но для одного дня потребуется дополнительный, через 15 дней после последнего отчета. Циклы упростят создание вашего нового отчета вручную, в дополнение к ежемесячному.
Были некоторые необходимые ограничения, когда мы начали строить Loops:
- Эта платформа должна легко масштабироваться для поддержки производственной нагрузки OVH
- Это должно быть очень доступно
- Он должен быть независимым от языка, потому что некоторые из нас предпочитают Python, а другие JavaScript
- Это должно быть надежно
- Часть планирования не должна коррелировать с частью исполнения (культура µService)
- Он должен быть безопасным и изолированным, чтобы любой мог вставить неизвестный код на платформу.
Реализация циклов
Мы решили построить нашу первую версию на V8. Мы выбрали JavaScript в качестве первого языка, потому что он прост в изучении, а асинхронные потоки данных легко управляются с помощью Promises. Кроме того, он очень хорошо подходит для FaaS, так как функции Javascript очень выразительны. Мы создали его вокруг нового модуля VM NodeJS, который позволяет выполнять код в выделенном контексте V8.
Контекст V8 подобен объекту (JSON), изолированному от вашего исполнения. В контексте вы можете найти собственные функции и объекты. Однако, если вы создадите новый контекст V8, вы увидите, что некоторые переменные или функции не доступны изначально (например, setTimeout (), setInterval () или Buffer). Если вы хотите использовать их, вам придется добавить их в ваш новый контекст. Последнее, что нужно помнить, это то, что когда у вас есть новый контекст, вы можете легко выполнить сценарий JavaScript в строковой форме.
Контексты выполняют самую важную часть нашего первоначального списка требований: изоляция. Каждый контекст V8 изолирован, поэтому он не может общаться с другим контекстом. Это означает, что глобальная переменная, определенная в одном контексте, недоступна в другом. Вам нужно будет построить мост между ними, если вы хотите, чтобы это было так.
Мы не хотели выполнять сценарии с помощью eval (), поскольку вызов этой функции позволяет вам выполнять код JS в основном общем контексте с кодом, вызывающим его. После этого вы можете получить доступ к тем же объектам, константам, переменным и т. Д. Эта проблема безопасности стала нарушением условий для новой платформы.
Теперь мы знаем, как выполнять наши скрипты, давайте реализуем некоторое управление для них. Чтобы быть без сохранения состояния, каждый рабочий экземпляр Loops (то есть механизм JavaScript, способный выполнять код в контексте виртуальной машины) должен иметь последнюю версию каждого цикла (цикл — это скрипт для выполнения). Это означает, что когда пользователь запускает новый цикл, мы должны синхронизировать его с каждым рабочим цикла. Эта модель хорошо согласуется с парадигмой pub / sub, и, поскольку мы уже используем Kafka в качестве инфраструктуры pub / sub, нужно было просто создать отдельную тему и использовать ее у рабочих. В этом случае публикация включает API, где пользователь отправляет свои циклы, которые генерируют событие Kafka, содержащее тело функции. Поскольку у каждого работника есть своя собственная группа потребителей Kafka, они все получают одинаковые сообщения.
Рабочие подписываются на обновления Loops как потребители Kafka и поддерживают хранилище Loop, которое является встроенным ключом (хэш Loop) / Value (текущая версия функции). В части API хеши циклов используются в качестве параметров URL для определения того, какой цикл следует выполнить. После вызова цикл извлекается из карты, затем вводится в контексте V8, выполняется и удаляется. Этот механизм перезагрузки горячего кода гарантирует, что каждый цикл может выполняться на каждом работнике. Мы также можем использовать возможности наших балансировщиков нагрузки для распределения нагрузки на работников. Эта простая модель распределения позволяет избежать сложного планирования и облегчает обслуживание всей инфраструктуры.
Чтобы обеспечить защиту от перезагрузки, мы используем очень удобную функцию сжатия журналов Kafka. Сжатие журнала позволяет Kafka сохранять последнюю версию каждого ключевого сообщения. Когда пользователь создает новый цикл, ему дается уникальный идентификатор, который используется в качестве ключа сообщения Kafka. Когда пользователь обновляет цикл, это новое сообщение будет переслано всем потребителям, но, поскольку ключ уже существует, Kafka сохранит только последнюю ревизию. Когда работник перезапускается, он использует все сообщения для восстановления своего внутреннего KV, поэтому предыдущее состояние будет восстановлено. Кафка используется здесь как постоянный магазин.
Циклы выполнения
Даже если базовый движок способен запускать собственный Javascript, как указано выше, мы хотели, чтобы он выполнял более идиоматические запросы временных рядов, такие как TSL или WarpScript. Чтобы добиться этого, мы создали абстракцию Loops Runtime, которая оборачивает не только Javascript, но также запросы TSL и WarpScript в код Javascript. Пользователи должны объявлять цикл с его временем выполнения, после чего это просто вопрос работы упаковщиков. Например, выполнение цикла WarpScript подразумевает использование простого WarpScript ™ и его отправку через HTTP-вызов по запросу узла.
Петли обратной связи
Безопасное выполнение кода — это начало, но когда дело доходит до выполнения произвольного кода, также полезно получить некоторую обратную связь о состоянии выполнения. Это было успешно или нет? Есть ли ошибка в функции? Если цикл находится в состоянии сбоя, пользователь должен быть немедленно уведомлен.
Это приводит нас к одному особому условию: пользовательские скрипты должны быть в состоянии сказать, все ли в порядке или нет. Есть два способа сделать это в базовом движке JavaScript: обратные вызовы и обещания.
Мы решили использовать Promises, который предлагает лучшее асинхронное управление. Каждый цикл возвращает обещание в конце скрипта. Отклоненное обещание вызовет состояние ошибки HTTP 500, а разрешенное — HTTP 200.
Планирование циклов
При публикации Loops вы можете объявить несколько триггеров, аналогично Cron. Каждый триггер будет выполнять HTTP-вызов вашего цикла с необязательными параметрами.
Исходя из этой семантики, для генерации нескольких отчетов мы можем зарегистрировать одну функцию, которая будет планироваться в разных контекстах, определенных различными параметрами (регион, скорость). Смотрите пример ниже:
functions:
warp_apps_by_cells:
handler: apps-by-cells.mc2
runtime: ws
timeout: 30
environment:
events:
- agra:
rate: R/2018-01-01T00:00:00Z/PT5M/ET1M
params:
cell: ovh-a-gra
- abhs:
rate: R/2018-01-01T00:00:00Z/PT5M/ET1M
params:
cell: ovh-a-bhs
Планирование основано на Metronome, который является планировщиком событий с открытым исходным кодом, с особым акцентом на планирование, а не на выполнение. Он идеально подходит для Loops, поскольку Loops управляет выполнением, полагаясь на Metronome для управления вызовами выполнения.
Петли трубопроводов
Проект Loops может иметь несколько циклов. Одним из распространенных случаев использования наших клиентов было использование Loops в качестве платформы данных в режиме потока данных. Поток данных — это способ описать последовательность этапов выполнения. В контексте Loops существует глобальный объект `Loop`, который позволяет сценарию выполнить другой цикл с этим именем. Затем вы можете связать выполнение циклов, которые будут действовать как пошаговые функции.
Болевые точки: масштабирование приложения NodeJS
Рабочие циклов являются приложениями NodeJS. Большинство разработчиков NodeJS знают, что NodeJS использует однопоточный цикл обработки событий. Если вы не позаботитесь о поточной модели вашего приложения nodeJS, вы, скорее всего, пострадаете из-за нехватки производительности, поскольку будет использоваться только один хост-поток.
NodeJS также имеет модуль кластера, который позволяет приложению использовать несколько потоков. Вот почему в Loops-работнике мы начинаем с потока N-1 для обработки вызовов API, где N — общее количество доступных потоков, и один из них остается выделенным для основного потока.
Главный поток отвечает за использование тем Kafka и поддержку хранилища Loops, в то время как рабочий поток запускает сервер API. Для каждого запрошенного выполнения цикла он запрашивает у мастера содержимое скрипта и выполняет его в выделенном потоке.
При такой настройке на каждом сервере запускается одно приложение NodeJS с одним потребителем Kafka, что упрощает масштабирование инфраструктуры, просто добавляя дополнительные серверы или облачные экземпляры.
Заключение
В этой статье мы предварительно ознакомились с Loops, масштабируемым, ориентированным на метрики FaaS с собственной поддержкой JavaScript и расширенной поддержкой WarpScript и TSL.
У нас еще есть несколько вещей, которые нужно улучшить, например, импорт зависимостей в стиле ES5 и предварительный просмотр метрик для проектов Loops наших клиентов. Мы также планируем добавить дополнительные среды выполнения, особенно WASM, которые позволят многим другим языкам, на которые он может ориентироваться, таким как Go, Rust или Python, удовлетворять большинству предпочтений разработчика.
Платформа Loops была частью требования для создания высокоуровневых функций вокруг продуктов OVH Observability. Это первый шаг к предложению более автоматизированных услуг, таких как сведение показателей, конвейеры агрегации или средства извлечения логов в метрики.
Этот инструмент был создан из набора продуктов Observability с учетом более высокого уровня абстракции, но вам также может потребоваться прямой доступ к API, чтобы реализовать собственную автоматизированную логику для ваших метрик. Вы были бы заинтересованы в такой функции? Посетите наш канал Gitter, чтобы обсудить это с нами!
www.ovh.com/fr/blog/v8-hot-code-injection-for-continuous-queries/
Облачные базы данных: внедрение быстрого хранения
Начиная с этой недели, новые облачные базы данных OVH основаны на высокопроизводительном SSD-накопителе NVMe.
Интерес имеет два аспекта:
Мы не забываем существующих клиентов и базы данных! В ближайшие недели мы переходим на новый техно каждый день. Конец оценивается в мае.
Не планирую разглашать. Чтобы выяснить, мигрировали ли вы уже, вы можете посмотреть на своего «Хоста» в клиентской области, он должен быть на 007
Пример: «dbaas002.sql007»
Задача работает: travaux.ovh.net/?do=details&id=37809
Изменений тарифов не ожидается, ни для новостей, ни для существующих.
Облачные базы данных: www.ovh.com/en/cloud/cloud-databases/
Интерес имеет два аспекта:
- Прибыль в выступлениях (чтениях / письмах). После теста FIO мы сделали скачок вперед, и я обнаружил, что около 20 000 IOPS постоянно.
- Что говорит о лучшей производительности, означает больше возможностей для ваших баз для управления запросами. Как правило, это уменьшает потребление оперативной памяти, и, следовательно, уменьшает OOMKill
Мы не забываем существующих клиентов и базы данных! В ближайшие недели мы переходим на новый техно каждый день. Конец оценивается в мае.
Не планирую разглашать. Чтобы выяснить, мигрировали ли вы уже, вы можете посмотреть на своего «Хоста» в клиентской области, он должен быть на 007
Пример: «dbaas002.sql007»
Задача работает: travaux.ovh.net/?do=details&id=37809
Изменений тарифов не ожидается, ни для новостей, ни для существующих.
Облачные базы данных: www.ovh.com/en/cloud/cloud-databases/
Запаситесь новым
С начала года, мы стремимся для наших клиентов выгоды выделенных серверов (старых и новых) с удвоением общественной пропускной способности без повышения цен. Все наши диапазоны касаются: игры, хостинга, бизнеса, инфраструктуры и высокого диапазона. И это еще не все, поскольку 3 дополнительных и гарантированных варианта полосы пропускания превращаются в один
hosting.kitchen/ovh/vydelennye-servery-udvoennaya-propusknaya-sposobnost-za-tu-zhe-cenu.html
Еще больше гарантий для ваших выделенных серверов!
Наши выделенные серверы, размещенные в наших центрах обработки данных *, получили сертификацию ISO 27001. Это гарантирует, что безопасность услуг OVH соответствует лучшим рыночным практикам в нашем историческом основном бизнесе: индустриализации серверного хостинга в нашем датацентры и их поддержание в рабочем состоянии.
hosting.kitchen/ovh/dedicated-servers-are-iso-27001-certified.html
Новая линейка Advance
Разверните свои бизнес-приложения со спокойной душой
Мы разработали линейку Advance, чтобы удовлетворить потребности компаний, которые хотят инвестировать в универсальные выделенные серверы, которые идеально соответствуют потребностям их бизнеса.
hosting.kitchen/ovh/first-new-range-of-the-dedicated-servers-2019.html
Управляемый сервис Kubernetes
Зачем использовать наш сервис Kubernetes?
С 26 февраля у вас есть 100% бесплатная, полностью управляемая и высокодоступная услуга для управления вашими приложениями OVH Cloud Container.
hosting.kitchen/ovh/ovh-predstavlyaet-sobstvennyy-upravlyaemyy-servis-kubernetes.html
Новое расширение .dev
Сделайте видимость ваших проектов посвященный развитию и технологиям. Мы поставляем вам .dev с сертификатом SSL, необходимым для использования расширения с вашим доменным именем.
www.ovh.com/fr/domaines/dotdev.xml
Выделенные серверы: удвоенная пропускная способность за ту же цену
Мы объявили об этом на OVH Summit 2018… Мы собирались удвоить пропускную способность сети на выделенных серверах OVH без изменения цены.
Обещание — это обещание, поэтому несколько недель назад мы выполнили его: теперь ваши серверы имеют удвоенную пропускную способность по той же цене!
2019-03-27 — Выделенные серверы: удвоенная пропускная способность за ту же цену
Мы с самого начала знали, что это обновление будет возможным, поскольку наше сетевое ядро со скоростью 20 Тбит / с может определенно справиться с дополнительной нагрузкой! Мы ежедневно работаем над тем, чтобы вам понравилось пользоваться нашей сетью, которая является одной из крупнейших в мире среди хостинг-провайдеров.
Действительно, наша сеть постоянно развивается, и наши команды неустанно работают над тем, чтобы оптимизировать планирование емкости и предвидеть нагрузку, создаваемую всеми нашими клиентами, распределенными по 28 нашим центрам обработки данных.
Он также более чем способен управлять волнами DDoS-атак, которые происходят почти ежедневно, отправляя миллионы запросов на размещенные серверы, пытаясь сделать их недоступными. Они поглощаются нашей собственной Anti-DDoS защитой, без какого-либо влияния на клиента! Напомним, что несколько лет назад мы пострадали от одной из самых серьезных атак за всю историю, которая генерировала трафик более 1 Тбит / с, но, тем не менее, была поглощена нашей инфраструктурой без какого-либо влияния на наших клиентов.
Чтобы гарантировать эту дополнительную общедоступную пропускную способность, наши команды Network и Bare Metal тесно сотрудничали, чтобы быть более и более LEAN, когда дело доходит до наших инфраструктур. В результате тысячи активных устройств (маршрутизаторы, коммутаторы, серверы и т.д.) Были обновлены абсолютно прозрачным способом!
Весь процесс развертывания занял некоторое время, так как мы сделали непрерывное обновление, применив подход QoS и изоляции для предотвращения возможных всплесков трафика. Ассортимент продукции по ассортименту, датацентр по датацентру… Само развертывание было быстрым и безболезненным, поскольку полностью автоматизировано. Потенциальным узким местом было обеспечение того, чтобы все работало как задумано, что требовало тщательного мониторинга всей нашей фермы серверов, поскольку удвоение пропускной способности может оказать огромное влияние, особенно в OVH, где (позвольте мне еще раз упомянуть!) Исходящий трафик действительно неограничен!
Вот краткий обзор новой полосы пропускания для каждого диапазона серверов:
Даже если удвоение пропускной способности еще не покрывает весь диапазон наших диапазонов или серверов So You Start и Kimsufi, мы не забыли наших клиентов, которые используют эти серверы. Мы также обновили наши параметры пропускной способности, чтобы предложить всем нашим клиентам еще лучший сервис по еще более выгодной цене.
Мы не собираемся останавливаться на достигнутом! Скоро мы анонсируем некоторые приятные новые функции на стороне сети вещей. И, конечно же, в ближайшие месяцы появятся и другие нововведения. Но это другие истории, которые будут рассказаны в других сообщениях в блоге…
First new range of the Dedicated Servers 2019
www.ovh.com/fr/serveurs_dedies/
Ассортимент Advance предназначен для малых предприятий, которые хотят инвестировать в универсальные серверы, отвечающие потребностям их бизнеса.
Вы можете легко установить свой сервер менее чем за 120 секунд, чтобы разместить свой сайт электронной коммерции или бизнес-приложение.
Начните свою первую размещенную инфраструктуру с полным спокойствием: данные ваших пользователей защищены в одном из 28 центров обработки данных по всему миру, полностью доступных для них.
Ваш первый сервер может быть легко связан с дополнительными серверами и облачными сервисами OVH для удовлетворения ваших будущих потребностей.
www.ovh.ie/dedicated_servers/advance/