Арена передовых новых технологий "NGW": инсайдерская информация о бессерверной технологии SSR

задняя часть Serverless

1. Фоновое описание

Сначала объясните фон.

Облачные функции без сервера: Абстракция вычислительных ресурсов, которая появляется при разработке облачных вычислений. Она основана на платформе облачных вычислений и предоставляет разработчикам рабочую среду для бизнес-программ. Разработчикам не нужно обращать внимание на выделение базовых ресурсов, расширение и развертывание и все необходимое для выполнения кода.Услуги предоставляются платформой.Рендеринг SSR на стороне сервера: Относится к рендерингу HTML во внешнем интерфейсе на стороне сервера. В первые дни технология php jsp обычно использовалась для генерации HTML на стороне сервера. В последние годы, с развитием изоморфизма js, схема запуска интерфейсный код js на стороне сервера для рендеринга постепенно появился, например, изоморфный рендеринг основных фреймворков, таких как React и Vue.

еслиServerlessтехнология дляSSRБизнес-сценарий будет иметь следующие преимущества

  • Ресурсы облачных сервисов теоретическиНеограниченное расширение, внешний интерфейс не должен учитывать влияние объема трафика на производительность машины SSR.
  • Передние студенты не должны обращать внимание на машину SSRO&M, применение, расширение

В настоящее время сейчас команда Live Ivweb постепенно переносит бизнес SSR для платформы Tencent Cloud Cloud Cloud.

Во-вторых, бессерверная эволюция

Ah J — фронтенд-разработчик. Однажды продукт сказал ему, что интерфейс загрузки страницы с белым экраном занимает слишком много времени, а опыт оставляет желать лучшего. Это несложно для отличного фронтенд-разработчика. У него есть 99 способов. чтобы страница грузилась быстрее.Поэтому он сразу использовал команду в проекте для подключения к архитектуре direct outgoing на полдня, а потом развернул сервис direct outgoing в существующей сети.В это время у него были проблемы:

  1. Чтобы развернуть службу прямого выхода, вам нужно подать заявку на количество машин и сколько ядер?
  2. Каков этот бизнес-объем, есть ли какой-либо пакетный запрос и есть ли у машины механизм расширения емкости?
  3. Как изменить конфигурацию Nginx и как получить доступ к статической странице внизу, если она не удается?

В трансе он увидел, как коллеги Tencent Cloud говорят оServerlessЭволюция архитектуры п.п....

От IaaS к FaaS

Прежде чем представить облачную функцию SCF, давайте сравним传统 IaaS 业务架构а также云函数 FaaS 业务架构:

基于虚拟机的业务架构

[Виртуальная бизнес-архитектура]

А архитектура облачных функций такова:

基于云函数的业务架构(FaaS)

[Бизнес-архитектура на основе облачных функций]

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

Приложения в бессерверной архитектуре

FaaSПоявление облака упростило переход сервисов в облако, но FaaS не решил проблему«Базовые государственные услуги»Так называемые общедоступные базовые услуги - это базовые услуги, такие как хранилище объектов, хранилище KV и отправка сообщений. Эта проблема в конечном итоге ложится на поставщика облачных услуг, поэтому облачные услуги на рынке предоставляют вышеперечисленное без исключения. «Общедоступные базовые услуги». , такая сервисная модель называетсяBaaS(Бэкенд как услуга).

ServerlessВ дословном переводе это называется serverless.Это не означает, что сервер не требуется, но что разработчикам не нужно обращать внимание на серверы.Эта часть обеспечивается обслуживанием платформы, а разработчикам нужно только уделять внимание развитию бизнес-логика.

Serverless 架构下的 App

[Приложение в бессерверной архитектуре]

Пользователям не нужно обращать внимание на базовые ресурсы, которые поддерживают работу сервисов приложений, несут бизнес-логику в виде «функций» и поддерживают общедоступные сервисы в виде «сервисов BaaS».

公有云基础设施上的 Serverless 演进

[Неверная эволюция в общественной облачной инфраструктуре]

Учитывая характер службы прямо, прямо из AJ думаю, что бизнес очень подходит для Serverless, поэтому он немедленно начал предварительное исследование внешнего интерфейса облака, сделать Serveless SSR услуги, устраняя необходимость в эксплуатации и проблемах с обслуживанием развертывание, сразу снижая затраты на доступ!

3. Развитие функции облака SCF

Ah J тщательно изучил бессерверную облачную функцию Tencent Cloud (SCF) и обнаружил, что облачная функция может разделить наш бизнес на более мелкие «функции», и разработчикам среды выполнения функций не нужно обращать внимание, платформа несет ответственность за следующее — это понимание Ah J выполнения облачных функций.

Процесс выполнения облачной функции

На самом деле, облачная платформа для предоставления услуг во время выполнения этих «облачных функций», при нормальных обстоятельствах,Функция безвесочной для «ответа на HTTP-запросы», а именно для запуска функции облака через события HTTP Access,Как показано ниже:

云函数用户请求链路

[Ссылка для запроса пользователя облачной функции]

И выполнение функции есть не что иное, как:Входные параметры, контекст, возвращаемое значение, побочные эффекты, как показано на рисунке:

函数执行的四个要素

[Четыре элемента выполнения функции]
  1. «Прием»: входными параметрами облачной функции являются заголовок и тело запроса в HTTP-запросе.
  2. «Контекст»: содержит идентификатор запроса функции, переменные среды выполнения функции и т. д.
  3. "побочный эффект": Выполнение облачных функций может вызывать внешние службы, такие как базы данных, хранилище объектов, мониторинг данных.
  4. "возвращаемое значение": т. е. HTTP-ответ типа { retcode: 0, msg: "success" }

A J также узнал, что после определенной конфигурации в соответствии с функцией полностью облачного развертывания облачная платформа предоставит вам ** «URL-адрес вызова» **, посещение этого URL-адреса может вызвать выполнение соответствующей облачной функции для получения результатов.

  1. "Сервис не тот режим":Оригинальное решение — использовать TSW для запуска приложения Koa. Это означает, что оригинальное решение должно прослушивать порт, а не выполняться как функция. Что с этим делать?
  2. «ЦИ Инжиниринг»:Как можно упаковать и выпустить облачные функции при проектировании и интегрировать в существующий процесс CI команды?
  3. «Схема отладки»:Исходное решение можно отлаживать локально, но как облачная функция отлаживает напрямую локально?
  4. «Доступ по ссылке»:После того, как облачная функция будет выпущена, она получит URL-адрес, так как же этот URL-адрес может быть связан с именем нашего бизнес-домена?
  5. «Миграция старого бизнеса»:Можно ли без проблем перенести старые предприятия на облачные функции? Может ли новый план прямого выхода быть совместимым со старым планом прямого выхода?

Инженерный пакет

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

云函数打包图示

[Значок упаковки облачной функции]

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

Однородная среда под Serverless

A J принял во внимание план прямого оттока первоначального бизнеса и принял TSW (github.com/tencent/tsw), но при безсетесе мы не можем переместить TSW в облачные функции для выполнения, но извлечь необходимые компоненты, такие как TSW AJAX HTTP, отчеты о мониторинге, регистратор TSW и другие общие компоненты, потому что:

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

Кроме того, вы должны реализовать глобальный объект внедрения TSW, такой как плагин window.REQUEST, потому что старые решения также зависят от них.

NGW как переадресация шлюза

A J, принимая во внимание доступность сервисов и сложность доступа к предыдущей ссылке, решил получить доступ к NGW (Node Gateway):

NGW 下的 Serverless 直出链路

[Безсекретная прямая связь под NGW]

С НГВ возможно:

  1. Осознайте основную логику: облачные функции могут дать сбой, в это время используйте статические страницы для доступа к машине.
  2. Логика оттенков серого: частичный тест оттенков серого можно выполнить с помощью конфигурации NGW во время процесса перехода прямо к действующей сети.
  3. Восстановление журнала ссылок: Долгое время переднему интерфейсу было сложно проверить конкретную информацию о ссылках, но теперь все возможно с NGW.

Локальная отладка облачных функций

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

Будущий процесс

В конце концов, Ah J завершил решение для бессерверного прямого экспорта, и процесс прямого экспорта показан на следующем рисунке:

新方案下的同构直出三步

[Изоморфизм по новой схеме идет сразу из трех шагов]

Есть три основных шага:

  1. "В этом": инициализировать среду облачной функции, принять и обработать входные параметры облачной функции.
  2. "Коа": Изоморфная бизнес-логика React воплощена в виде приложения Koa.
  3. "Прозрачный": Очистите среду облачных функций, обработайте Koa Response и верните прямые результаты.

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

压测云函数 执行时间分布图

[Диаграмма распределения времени выполнения облачной функции измерения давления]

收包率优化前后(右边为优化后)

[До и после оптимизации скорости приема (справа после оптимизации)]

Проблема холодного старта не очевидна при низком давлении, но дополнительно повлияет на обратный пакет в случае высокого параллелизма.Здесь коллеги из SCF оптимизировали: увеличить минимальное количество инстансов и уменьшить холодный старт. минимум экземпляров, тем лучше Может выдерживать мгновенный параллелизм. Кроме того, мы также обнаружили проблему с памятью.Мы связались с коллегами в SCF для оптимизации модели памяти Node.После оптимизации проблемы 4xx практически нет.

内存超限导致 4xx 问题,压测压力越大越多这种错误

内存模型优化后的表现

[Производительность после оптимизации модели памяти]

На данный момент Ah J, наконец, завершил предварительный дизайн и разработку бессерверного решения для прямого вывода и постепенно начал использовать его в бизнесе.

Статус и дальнейшие действия

В настоящее время NGW + Serverless SSR применялся ко многим проектам, таким как прямая трансляция NOW, мобильная QQ, прямая трансляция браузера и групповое дарение мобильных QQ.В реальном развитии бизнеса рабочая нагрузка по развертыванию, эксплуатации и обслуживанию Node была снижена более 80%.


Ах Дж. Следующий план:

  1. Идеальное управление версиями облачных функций
  2. Сотрудничайте с веб-пакетом для дальнейшей оптимизации локальной прямой отладки.
  3. Сотрудничайте с коллегами из Tencent Cloud для дальнейшей оптимизации производительности облачных функций.
  4. Улучшить схему рендеринга потоковой передачи React Chunked для дальнейшего повышения скорости загрузки первого экрана;
  5. Улучшите облачные функции службы Node, запланируйте создание интерфейсных решений BFF.
  6. Улучшите прямой вывод и сбор журналов ссылок, а также улучшите возможности мониторинга служб.

Подпишитесь на официальный аккаунт [IVWEB Community], чтобы получать свежие статьи каждую неделю, ведущие к вершине жизни!