Serverless vs Containers en 2026: o veredicto final
O ecosistema nativo da nube madurou drasticamente durante a última década. En 2026, os desenvolvedores e arquitectos escollen habitualmente entre funcións sen servidor (Función como servizo, FaaS) e cargas de traballo baseadas en contedores (Kubernetes, tempos de execución compatibles con OCI e tecnoloxías sandbox emerxentes). Ambos os paradigmas prometen unha infraestrutura "sen operacións para xestionar", pero as compensacións foron máis matizadas a medida que conflúen os modelos de rendemento, observabilidade, seguridade e custos.
Este artigo ofrece unha comparación profunda de contenedores e sen servidor a partir de 2026. Examinamos as características arquitectónicas, as consideracións operativas, a dinámica de custos, as posturas de seguridade e os casos de uso do mundo real, e concluímos cunha matriz de decisión que axuda aos equipos a determinar o modelo óptimo para unha determinada carga de traballo.
Índice
- Introdución
- Fundamentos arquitectónicos
- Rendemento e escalabilidade
- Estruturas de custos
- 4.1 [Facturación detallada](#facturación fina)
- 4.2 Capacidade reservada e estratexias puntuales
- Observabilidade e depuración
- Seguridade e cumprimento
- 6.1 Garantías de illamento
- 6.2 [Endurecemento da cadea de subministración](#endurecemento da cadea de subministración)
- Experiencia do programador e ecosistema
- Estudos de casos e puntos de referencia
- Matriz de decisións
- Conclusión
Introdución
Os contenedores e os sen servidores antes foron pensados como camiños mutuamente excluíntes para o "nativo da nube". Hoxe conviven nun tecido de tempo de execución políglota onde moitas organizacións executan ambos modelos en paralelo. A decisión é menos sobre "cal é mellor" e máis sobre combinar as características da carga de traballo coas garantías de tempo de execución.
En 2026, tres macrotendencias configuran o debate:
| Tendencia | Impacto en Serverless | Impacto nos contedores |
|---|---|---|
| Edge-first Computing | Os tempos de execución das funcións agora se implementan de forma nativa nos nodos de borde distribuídos (AWS Lambda@Edge 2.0, Cloudflare WorkersR2) con saltos de rede inferiores aos milisegundos. | O bordo orquestrado por contedores (K3s, K8s-lite) gañou compatibilidade con "micro-nodos", pero a latencia de extracción da imaxe segue sendo unha barreira. |
| Operacións aumentadas con IA (AIOps) | A mitigación automatizada de arranque en frío e a escala preditiva usan modelos de ML integrados no plano de control do provedor. | Agora os controladores axustan automaticamente a colocación do pod baseándose na telemetría en tempo real, pero requiren experiencia adicional do operador. |
| Mallas de servizo de confianza cero | Os sidecars a nivel de función (por exemplo, OpenFaaS + Kuma) permiten mTLS por invocación sen sacrificar a facturación de pago por uso. | A sobrecarga de malla de servizo por pod aínda se nota para cargas de traballo ultralixeiras. |
Comprender estes cambios é esencial para unha arquitectura a proba de futuro. As seccións que seguen analizan cada dimensión con datos, mostras de código e orientación práctica.
Fundamentos Arquitectónicos
Modelo de execución sen servidor
As plataformas sen servidor abstraen moito máis que o aprovisionamento de máquinas virtuales. A pila típica en 2026 parece:
- Pasarela API / Enrutador de eventos: xestiona fontes de eventos HTTP, WebSocket, Pub/Sub ou personalizadas.
- Invocation Engine: asigna eventos a un identificador de función, resolve a versión en tempo de execución e proporciona un sandbox de execución.
- Sandbox: na maioría das nubes públicas trátase dunha micro-VM (Firecracker, gVisor) ou dun tempo de execución de WebAssembly (WasmEdge) con illamento ns-jail.
- Tempo de execución: o inicio en frío inclúe a carga do tempo de execución da linguaxe (Node.js 22, Python3.12, Go 1.22) e as dependencias declaradas.
- Almacenamento efémero: 512 MiB de tmpfs por invocación (axustable por provedor) só persistiron durante a vida útil da solicitude.
Características clave:
- Pago por execución: a granularidade da facturación está en incrementos de 1 ms para o cálculo e de 0,01 GiB segundos para a memoria.
- Garantías sen estado: ningún estado local persistente; debe externalizarse a servizos duradeiros (DB, tenda de obxectos, tenda KV).
- Escalado dirixido por eventos: o provedor xera ao instante novos sandbox en función da taxa de eventos entrantes.
Exemplo de función sen servidor (Node.js)
# serverless.yml - AWS SAM (edición 2026)
Versión AWSTemplateFormat: '2010-09-09'
Transformación: AWS::Serverless-2026-03-01
Recursos:
ImageResizeFunction:
Tipo: AWS::Sen servidor::Función
Propiedades:
Tempo de execución: nodejs22.x
Tamaño da memoria: 256 # MiB
Tempo de espera: 30 # segundos
Manexador: index.handler
CodeUri: src/
Políticas:
- Política de lectura S3:
BucketName: imaxes fonte
- S3WritePolicy:
BucketName: imaxes redimensionadas
Ambiente:
Variables:
TARGET_SIZES: "128.256.512"
Modelo de tempo de execución do contedor
Os contedores seguen sendo a lingua franca para cargas de traballo que necesitan procesos de longa duración, dependencias de SO personalizados ou control fino sobre redes e almacenamento. En 2026, a pila dominante inclúe:
- Container Engine: tempos de execución compatibles con OCI (containerd 2.0, cri‑o) con
kata-runtimepara o illamento asistido por hardware. - Orquestrator: Kubernetes 1.30+ con compatibilidade integrada para Contenedores efémeros, Pod-Level Autoscaling (PPA) e Serverless-like Knative Serving.
- Service Mesh: Istio2.0, Linkerd2.13 ou Consul Connect v2 que proporciona mTLS por pod e enrutamento de tráfico.
- Distribución de imaxes: rexistros OCI con verificación Sigstore, caché de capas en clústeres e capas comprimidas con ZSTD para reducir o ancho de banda.
Características clave:
- Asignación de recursos previsible: os pods declaran solicitudes de CPU, memoria e acelerador; o planificador aplica os límites.
- Opcións de almacenamento persistente: StatefulSets, controladores CSI e volumes en liña efémeros.
- Ganchos de ciclo de vida: PreStop, PostStart e GracefulShutdown para unha degradación graciosa.
Exemplo de implementación de Kubernetes (Knative)
apiVersion: serving.knative.dev/v1
tipo: servizo
metadatos:
nome: redimensionador de imaxes
especificación:
modelo:
metadatos:
anotacións:
autoscaling.knative.dev/minScale: "5"
autoscaling.knative.dev/maxScale: "2000"
autoscaling.knative.dev/target: "80"
especificación:
Concorrencia de contedores: 50
envases:
- imaxe: ghcr.io/example/image-resizer:1.4.2
recursos:
límites:
CPU: "500m"
memoria: "512 Mi"
env:
- nome: TARGET_SIZES
valor: "128.256.512"
Knative engade unha abstracción sen servidor enriba dos contedores, o que lle permite beneficiarse da flexibilidade dos contedores ao mesmo tempo que se obtén un escalado automático semellante a FaaS.
Rendemento e escalabilidade
Inicios fríos vs piscinas quentes
| Métrica (media 2026) | Sen servidor (Petardo) | Sen servidor (Wasm) | Contedores (K8s) |
|---|---|---|---|
| Latencia de inicio en frío | 45 ms (256 MiB) | 12 ms (sen tempo de execución) | N/A (as vainas persisten) |
| Latencia do recipiente quente | 5 ms (caché local) | 1 ms (Wasm JIT) | 0-2 ms (proceso xa en execución) |
| Mitigación | Simultáneo aprovisionado (AWS), Warm Pool (Azure) | Módulos WASM precalentados (Cloudflare) | Pod Autoscaler con contenedores pause |
Información clave: para 2026, moitos provedores ofrecen piscina quente como servizo cun prezo moderado (por exemplo, 0,02 USD por cada 10 000 invocacións quente). Para as API sensibles á latencia (<10 ms), as funcións baseadas en WASM adoitan superar as micro-VM, pero os procesos nativos de contedores aínda teñen vantaxe cando a carga de traballo supera uns centos de milisegundos de tempo de cálculo.
Mecánica de escalado horizontal
- Sen servidor: a escala é sen estado e controlada por eventos; o provedor pode crear miles de areais por segundo. Non obstante, aínda existen límites de limitación para toda a rexión (por exemplo, 10.000 chamadas simultáneas por conta) e deben planificarse mediante cotas de explosión.
- Contedores: a escala realízase mediante o Horizontal Pod Autoscaler (HPA) ou Keda para as métricas de orixe de eventos. A velocidade de escalado está limitada pola latencia do programador (300 ms de media para a colocación de novos pods) e o tempo de extracción da imaxe (a non ser que estea en caché). Os novos DaemonSets e cachés locais de nodos imaxe-pre-pull mitigan isto.
Enfoque híbrido: implementa un Servizo Knative apoiado por unha imaxe de contedor que se executa nunha caixa de probas (gVisor) mentres permite o escalado automático por revisión. Isto ofrécelle o mellor de ambos os mundos: escalado rápido para o tráfico de ráfagas e a capacidade de enviar binarios nativos.
Estruturas de custos
Facturación fina
| Unidade de facturación | Sen servidor (2026) | Contedores (K8 en servizo xestionado) |
|---|---|---|
| Calcular | 0,000013 USD por GB-segundo (AWS Lambda) | 0,04 $ por hora de vCPU (EKS) |
| Memoria | cocido en prezo de cálculo | 0,008 USD por GB-hora |
| Solicitudes | 0,0000004 USD por 1k de convocatorias | Gratuíto (pero supón un custo de nodo) |
| Transferencia de datos | 0,09 $ por GB (saída) | Igual que o provedor, pero pódese mitigar con VPC privado |
Exemplo ilustrativo: Unha función que procesa 1 millón de eventos, cada un consumindo 128 MiB durante 200 ms, custa aproximadamente $2,60 nunha plataforma sen servidor. A mesma carga de traballo executada que un microservizo en contenedores en tres nodos t3.medium (2vCPU, 4GiB) custaría ≈$7,20 ao mes (incluíndo a sobrecarga do nodo) se o nodo permanece totalmente utilizado. O saldo cambia drasticamente cando a utilización cae por debaixo do ~35%.
Capacidade reservada e estratexias de localización
- Sen servidor: agora os provedores ofrecen simultáneo reservado (por exemplo, "Plan de aforro de simultaneidade") que desconta ata un 30 % para cargas de traballo previsibles.
- Contedores: os nós puntuales (preventivos) poden reducir o custo de cálculo nun 80 % pero introducen risco de desafiuzamento. A combinación de Spot con Orzamentos de interrupción de pods e Puntos de control baseados en Kubernetes (a través de CRIU) pode conseguir unha alta dispoñibilidade a un prezo reducido.
Lista de verificación de optimización de custos
- Define o tempo medio de execución e a pegada de memoria das túas funcións.
- Se a duración media é superior a 5 segundos, considera contenedor para evitar os gastos xerais de facturación por invocación.
- Para o tráfico en ráfaga, activa a concurrencia aprovisionada ou os grupos quentes para reducir a latencia a un custo previsible.
- Aproveita Karpenter ou Cluster Autoscaler coa mestura Spot + On-Demand para obter o mellor custo/rendemento.
Observabilidade e depuración
| Característica | Sen servidor (2026) | Contedores (K8s) |
|---|---|---|
| Rastrexo distribuido | Raios X integrados, instrumentación automática de OpenTelemetry (ID de rastrexo pasado a través de x-amzn-trace-id) |
OpenTelemetry sidecar ou OTel Collector daemonset |
| Métricas | Métricas de CloudWatch integradas (invocacións, erros, aceleradores) | Prometheus, kube-state-metrics, exportadores personalizados |
| Rexistros | Fluxos de rexistro centralizados (CloudWatch Logs, Azure Monitor) – latencia de rexistro ≤ 2s | Tuberías Fluent Bit/Fluentd; os rexistros pódense conservar en Loki ou Elasticsearch |
| Depuración en directo | Paso a través de AWS LambdaSnapStart Debugger (versión previa) – limitado a sesións de menos de 10 segundos | kubectl exec en pod, k9s ou kubectl debug cun contedor efémero |
| Aviso | Alerta nos limiares de Throttles ou ConcurrentExecutions | Alerta sobre condicións de PodReady, aceleración da CPU, eventos OOMKilled |
Exemplo de código: Instrumentación OpenTelemetry (Python)
# handler.py – Común para Serverless & Container
importar os
desde aws_lambda_powertools import Logger, Tracer
desde o rastrexo de importación de opentelemetry
desde opentelemetry.instrumentation.aws_lambda import AwsLambdaInstrumentor
desde opentelemetry.instrumentation.requests import RequestsInstrumentor
tracer = trace.get_tracer(__name__)
# Tempo de execución Lambda do instrumento automático
AwsLambdaInstrumentor().instrument()
RequestsInstrumentor().instrument()
logger = Logger (servizo = "image-resizer")
tracer = Trazador(servizo="redimensionador de imaxes")
@logger.inject_lambda_context
@tracer.capture_lambda_handler
manejador def (evento, contexto):
logger.info({"msg": "Invocación iniciada", "eventId": context.aws_request_id})
# lóxica empresarial aquí...
devolver {"statusCode": 200, "body": "OK"}
Cando se desprega nun contedor, o mesmo código execútase cun OTel Collector que reenvía os rastros de sidecar a un backend de Jaeger.
Seguridade e conformidade
Garantías de illamento
| Mecanismo de illamento | Sen servidor (2026) | Envases |
|---|---|---|
| Illamento do proceso | Micro-VM (Firecracker) ou Wasm sandbox: virtualización a nivel de hardware; cada invocación recibe o seu propio contexto VCPU. | Espazos de nomes + cgroups; Contenedores Kata opcionales para o illamento de VM asistido por hardware. |
| Acceso raíz | Sen raíz; a función execútase como usuario sen privilexios sbx_user. |
O contedor pode executarse como root a non ser que se aplique runAsNonRoot; marcos de políticas (OPA Gatekeeper) poden restrinxir. |
| Illamento da rede | ENI por invocación ou ENI VPC-native; saída de tráfico de saída controlada por grupos de seguridade. | NetworkPolicies a nivel de pod; as redes de superposición poden engadir un illamento adicional. |
Endurecemento da cadea de subministración: ambos os paradigmas agora requiren a verificación SBOM no momento da implantación. Os cadros sen servidor admiten a verificación de Sigstore do código de función zip, mentres que os tempos de execución dos contedores poden aplicar sinaturas cosign nas imaxes antes de extraerlas.
Política de exemplo: OPA Gatekeeper para funcións Wasm
paquete kubernetes.admission
denegar[msg] {
input.request.kind.kind == "Función"
input.request.object.spec.runtime == "nodejs22.x"
non está activado o rastrexo de especificacións de obxectos
msg = sprintf("O rastrexo debe estar activado para %s", [input.request.object.metadata.name])
}
Experiencia do programador e ecosistema
Ferramentas (IaC, CI/CD, emulación local)
-
Sen servidor:
- Frameworks: AWS SAM2026, Serverless Framework v4, Azure Functions Core Tools 4.
- Emuladores locais:
sam local start-apiusando Firecracker; WasmEdge tempo de execución local para funcións de borde. - Integración de CI: Implantar a través de accións de GitHub
aws-actions/aws-sam-deploycon compilacións incrementais (só se cambiaron as capas).
-
Contedores:
- IaC: Helm 3, Kustomize, Pulumi (TypeScript, Go).
- Local:
kind(Kubernetes IN Docker) + Kargo para GitOps;docker composepara bucles de desenvolvemento multiservizo. - CI/CD: Argo CD para entrega continua, canalizacións Tekton para construción de contedores, ko para Go binary-to-image sen Dockerfiles.
Paso CI de mostra: crear e implementar unha función sen servidor
# .github/workflows/deploy.yml
nome: Implementar
en:
empurrar:
ramas: [principal]
postos de traballo:
despregar:
en execución: ubuntu-latest
pasos:
- usa: actions/checkout@v3
- usa: actions/setup-node@v3
con:
versión nodo: '22'
- executar: npm ci && npm executar compilación
- usa: aws-actions/configure-aws-credentials@v2
con:
función a asumir: ${{ secrets.AWS_ROLE_ARN }}
aws-rexión: us-east-1
- executar: sam deploy --no-confirm-changeset --no-fail-on-empty-changeset
env:
SAM_TEMPLATE_FILE: template.yaml
Soporte de idioma e tempo de execución
| Tempo de execución | Soporte sen servidor (2026) | Soporte de contedores |
|---|---|---|
| Java | Optimización de imaxe nativa de GraalVM, arranque en frío ~60 ms | JDK completo, recarga en quente a través de Spring DevTools |
| Node.js | Node.js22 (V8 12.3) – ganchos asíncronos integrados | Mesmo tempo de execución, ademais da capacidade de executar espazos de traballo pnpm |
| Python | Python3.12, PyPy sandbox opcional | CPython completo + extensións nativas |
| Vaia | Binario compilado nativo, execución en Firecracker; ~15 ms arranque en frío | O mesmo binario, pódese construír con CGO_ENABLED=0 para imaxes mínimas |
| ** óxido ** | WasmEdge + wasmtime – 3ms de arranque en frío (Wasm) |
Imaxe OCI mínima (scratch) – 1 ms de inicio se se almacena previamente en caché |
Consulta clave: para linguaxes compilados (Go, Rust, nativo de Java), a brecha de rendemento redúcese e sen servidor faise atractivo mesmo para casos de uso de baixa latencia.
Estudos de casos e benchmarks
Procesamento de eventos de alto rendemento
Escenario: inxestión de fluxos de clics en tempo real a 500.000 eventos/s, cada evento ≤ 5 KB.
| Aproximación | Latencia media | Custo (USD/mes) | Sobrecarga de operacións |
|---|---|---|---|
| Sen servidor (AWS Lambda + Kinesis) | 18 ms (99º punto) | $1.800 | Mínimo: sen configuración de escala |
| Contedor (K8s + Strimzi + Consumidor de ferruxe) | 12 ms (99º punto) | $2.100 (3 t3.nodos grandes) | Require autoescalado e seguimento personalizados |
| Híbrido (Imaxe Knative + Rust) | 13 ms (99º punto) | 1.950 $ (2 nodos + piscina quente) | Moderado – CRDs Knative para xestionar |
Conclusión: sen servidor gaña a simplicidade e o custo das operacións cando a lóxica de procesamento é sen estado e encaixa dentro do límite máximo de execución de 15 segundos. As bibliotecas personalizadas pesadas (por exemplo, codec propietario) impulsan a decisión cara aos contedores.
API críticas de latencia
Escenario: servizo de cotización financeira cun SLA de latencia do percentil 99 de ≤3 ms.
- Os traballadores de Cloudflare baseados en Wasm entregaron constantemente 1,8 ms debido á proximidade dos bordos e WASM JIT sub-ms.
- Funcións Firecracker en AWS lograron 2,9 ms despois de configurar Simultáneo aprovisionado (10k invocacións en caliente).
- Servizo Go en contenedores nun nodo de metal desnudo dedicado (a través de AWS Outposts) alcanzou 2,2 ms, pero requiriu axuste a nivel de rede (apertura rápida TCP, bypass do núcleo).
Veredicto: Edge‑Wasm é a única opción sen servidor viable para unha latencia global inferior a 3 ms, mentres que os contedores seguen sendo competitivos cando controlas a pila de hardware.
Traballos por lotes de longa duración
Escenario: traballo ETL nocturno que procesa 100 TB de rexistros en bruto, que se executan ata 6 horas.
- Sen servidor non pode exceder o límite de 15 minutos; o encadeamento de funcións (funcións de paso) leva a unha sobrecarga máis elevada e 0,025 USD por transición de estado.
- Contedores que usan Traballo K8s con SSD local de nodos remataron en 5 h, custando 3.200 USD (nodos puntuales) fronte a 12 000 $ para unha flota EC2 dedicada.
- Híbrido: use FaaS baseado en Kubernetes (OpenFaaS) nun clúster puntual, cada función procesa unha partición durante ≤10 min, orquestrada por unha cola Kafka. Custo total de 4.300 dólares, aínda máis baixo que os recipientes puros debido ao mellor paralelismo.
Takeaway: para cargas de traballo por lotes máis aló da xanela de tempo de execución sen servidor, os contedores (ou un marco de funcións orquestradas híbridas) son indispensables.
Matriz de decisión
A continuación móstrase unha matriz práctica para guiar aos arquitectos. Asigne unha puntuación (0-5) a cada factor para a súa carga de traballo; os totais máis altos indican o modelo preferido.
| Factor | Peso | Puntuación sen servidor | Puntuación do contedor | Comentarios |
|---|---|---|---|---|
| Requisito de latencia | 0,25 | 5 (≤5 ms) / 2 (5-20 ms) / 0 (>20 ms) | 4 (≤5 ms no borde) / 3 (5-20 ms) / 1 (>20 ms) | Edge‑Wasm pode dominar menos de 5 ms |
| Duración de execución | 0,20 | 5 (≤15s) / 2 (>15s) | 5 (calquera) / 2 (≤30s) | Container manexa traballos longos |
| Volatilidade da escala | 0,15 | 5 (ráfaga >10×) / 2 (constante) | 3 (ráfaga con escala automática) / 1 (constante) | Escala automaticamente sen servidor ao instante |
| Estado | 0,10 | 2 (sen estado) / 5 (require estado externo) | 5 (apátrida) / 2 (apátrida) | As cargas de traballo con estado favorecen os contedores |
| Previsibilidade de custos | 0,10 | 4 (pagamento por uso) / 2 (simultáneo reservado) | 3 (spot + nodos reservados) / 1 (sobre demanda) | Sen servidor máis barato con baixa utilización |
| Conformidade / Illamento | 0,10 | 4 (micro-VM, Wasm) / 2 (infracompartida) | 5 (Kata/VM) / 3 (espazo de nomes) | Contenedores de mandatos de alta garantía |
| Velocidade do programador | 0,10 | 5 (sen infra) / 3 (piscinas quentes) | 3 (timón, CI) / 1 (manual) | Sen servidor dá a iteración máis rápida |
Interpretación:
- Total ≥25 → Sen servidor é o claro gañador.
- Total 18-24 → Considere un enfoque híbrido (Knative, OpenFaaS ou micro-VM baseadas en sidecar).
- Total ≤17 → Recoméndanse contedores/Kubernetes.
Conclusión
En 2026, o debate sen servidor vs. contedores madurou nun espectro de opcións en lugar dunha opción binaria. O "veredicto final" depende dos SLA, perfil de custos e madurez operativa específicos da organización:
-
Sen servidor brilla para cargas de traballo moi variables e impulsadas por eventos, especialmente cando a latencia se pode satisfacer mediante sandboxes de micro-VM ou Wasm e cando a economía de pago por uso é primordial. Os provedores Edge-first reduciron as penalizacións por arranque en frío ata o punto de que se pode conseguir unha latencia inferior a 10 ms para a maioría das cargas de traballo da API.
-
Os contedores seguen sendo indispensables para aplicacións con estado, de longa duración ou con moito recurso que necesitan control detallado sobre as dependencias do sistema operativo, redes personalizadas ou cumprimento estrito. Os orquestadores modernos agora incorporan escalado automático sen servidor (Knative, KEDA), reducindo a brecha operativa ao tempo que preservan a flexibilidade das imaxes OCI.
-
Modelos híbridos: contedores servidos por Knative, OpenFaaS en clústeres puntuales ou sidecars de funcións con seguridade de malla de servizo, proporcionan o mellor de ambos os mundos para cargas de traballo que se sitúan de forma intermitente entre os límites (por exemplo, funcións por lotes, canalizacións de latencia críticas pero con estado).
A recomendación estratéxica para a maioría das empresas en 2026 é:
- Adopta unha capa de plataforma unificada (por exemplo, un servizo K8s xestionado con Knative e unha capa de borde compatible sen servidor) que permita aos equipos declarar a intención ("función", "servizo", "traballo") mentres o plano de control selecciona o tempo de execución óptimo.
- Investir en observabilidade e pipelines CI/CD que tratan ambos paradigmas de forma uniforme (OpenTelemetry, GitOps, validación SBOM).
- Evaluar continuamente as características de latencia, custo e escalado a medida que os provedores de nube iteran nos tempos de execución; a brecha é fluída e unha revisión anual pode revelar oportunidades de migración.
Ao adoptar unha arquitectura independente do tempo de execución, as organizacións poden preparar as súas cargas de traballo para o futuro, aproveitar a rápida innovación tanto en ecosistemas sen servidor como en contenedores e, en última instancia, ofrecer servizos resistentes e rendibles que satisfagan as esixentes expectativas do panorama dixital de 2026.