¿Son las Edge Functions realmente mejores que las funciones lambda?

Mateo Ziffer
Pensando El Futuro
Published in
6 min readNov 8, 2022

Recientemente encontré en la documentación de Vercel una sección llamada “Edge Functions”. Empecé a leer su definición y esto me llevó a muchos otros conceptos y tecnologías, algunos que ya entendía y otros que no. Mi objetivo en este artículo es poder explicar todas las cosas que me llevaron a saber qué son y cómo funciona. Esto incluye funciones Lambda, formas de hosting de contenido, CDNs, “The Edge”, métodos de renderización de páginas web, entre otras.

Para comenzar, primero hay que saber qué son las funciones lambda o serverless functions, así que empecemos definiendo este concepto.

Funciones Lambda

Las funciones lambda son funciones que corren código en demanda sin la necesidad de tener una propia infraestructura.

Hay dos ideas que quiero resaltar: necesitan una propia infraestructura y corren en demanda. Las funciones lambda están hosteadas en la nube pero no necesitan tener un servidor propio que corra constantemente, sino que solamente es un código que corre cuando un usuario lo necesite, en demanda.

Esquema de las Funciones Lambda

Escalamiento de servidores

Cuando se tiene un servidor, ya sea en la nube o en una computadora propia, hay dos formas de escalar: vertical u horizontalmente. La primera significa mejorar el hardware, lo que es muy sencillo, pero costoso y no se puede seguir escalando tanto ya que se limita a una computadora. Por otro lado, el escalamiento horizontal consiste en agregar mas computadoras y, con un load balancer dirigir las requests, equilibrando así la carga de cada computadora. Esto permite escalar indefinidamente, ya que siempre se puede agregar otra computadora, pero es difícil hacer un buen load balancer, que redirija bien las requests. Este debería poder saber a qué computadoras le puede dirigir las requests, decidir a cual tiene que dirigirsela utilizando una estrategia como Round Robin y también tiene que poder darse cuenta si una de las computadoras se cae y deja de funcionar, entre otros desafíos.

Con las funciones lambda, no hay necesidad de preocuparse por todo esto ya que no hay que mantener un servidor, sino que tenemos una función que se ejecuta en una computadora del proveedor en demanda. Si no se utiliza la función, no se gastan recursos y, por lo tanto, no se cobra nada.

Cold Boots y Hot Boots

Se denomina cold boot a utilizar una función lambda por primera vez y hot boot a reutilizarla.

Un hot boot implica que el contenedor en el que corre la función no fue descartado, dejando archivos y subprocesos guardados y permitiendo cachear o memoizar datos computados. Esto no significa que los subprocesos sigan corriendo después de que la función se termine de ejecutar, ya que el contenedor es pausado mientras que no se está ejecutando una función.

CDNs

Una red de distribución de contenidos es una red superpuesta de computadoras que contienen copias de datos, colocados en varios puntos de una red con el fin de maximizar el ancho de banda para el acceso a los datos de clientes por la red. Un cliente accede a una copia de la información cerca del cliente,​ en contraposición a todos los clientes que acceden al mismo servidor central, a fin de evitar embudos cerca de ese servidor.

Esto significa que un CDN permite tener copias de datos en varios puntos de una red, ubicados en diferentes puntos geográficos, en contraposición de una red centralizada. Esto logra bajar el tiempo de respuesta de las requests, ya que los datos se traen del lugar más cercano. También permite minimizar la pérdida de datos, ya que hay copias en muchos puntos de la red.

Esquema de distribución de datos con un CDN

Edge Computing o Computación Frontera

El objetivo es mover la computación desde los centros de datos hacia el perímetro de la red… Al mover los servicios al perímetro, es posible proporcionar almacenamiento en caché de contenido, entrega de servicios, almacenamiento y administración de IdC, lo que da como resultado mejores tiempos de respuesta ya tasas de transferencia.

Con el concepto de computación me voy a referir con la definición que Vercel le da en este artículo. Se refiere a acciones tomadas por una computadora, que se ejecutan tras diferentes instrucciones, más comúnmente referidas como código. En el caso de Edge Function estas operaciones están englobadas por una función.

La computación frontera puede tratar al concepto de computación como las CDNs tratan a los datos. En vez de cachear datos, se pueden cachear y memoizar datos computados, ya sea en una función como se ve en las serverless functions. Trae estos servicios más cerca del usuario, resultando en tiempos de respuesta más rápidos.

Esquema de Edge Computing vs Cloud Computing

Edge Functions

Cree APIs de alto rendimiento que se implementen en todas las regiones de Edge Network.

Las Edge functions recientemente dejaron de estar en beta en Vercel. Son funciones lambda corriendo en el Edge Network con el Edge Runtime que creó, utilizando computación frontera. Son funciones que funcionan de la misma manera que cualquiera de sus otros API endpoints, utilizando por detrás NextJS.

Implementando Edge Functions

Implementar Edge Functions es muy simple, primero se necesita un proyecto de NextJS.

Dentro del proyecto, se encontrará una carpeta en /pages llamada api. Ahí crearé un archivo llamado lambdaFunction.js que tendrá el siguiente código.

También voy a crear un archivo llamado edgeFunction.js. Para crear una edge function solo hay que agregar una configuración abajo.

Comparando Serverless Functions con Edge Functions

Como vimos que una Edge Function consiste en cambiar una variable de configuración quiero testear que realmente haya una diferencia en tiempos de respuesta. Por eso voy a hostear esta aplicación en Vercel y comparar las dos funciones.

Voy a usar Postman para testear cuanto tardan en responder estos dos endpoints:

Primero le hice una request a ambos endpoints y ambos respondieron en aproximadamente 300 milisegundos, porque eran cold boots. Después le hice varias veces la request al primer endpoint y respondió simpre en entre 160 y 200 milisegundos.

Hice lo mismo con el segundo y simpre respondió entre 80 y 90 milisegundos.

En Conclusión

En el pequeño experimento que hice hubo una gran diferencia de tiempos de respuesta. Esto significa que las Edge Functions son más rápidas que las funciones lambda, y como la única diferencia al usarlas en el contexto de Vercel es cambiar una variable de configuración, yo creo que son mejores que las funciones lambda siempre que se puedan usar.

Creo que la diferencia de velocidad que hay al usar Computación Frontera se encuentra al aplicar el concepto que utilizan las CDNs de traer los datos más cerca del usuario. En este caso en vez de datos simples se trae la computación o los datos ya computados a través de cashing.

Fuentes

--

--