El edge computing es una tecnología que reduce drásticamente la latencia y permite el procesamiento en tiempo real al realizar el procesamiento de datos cerca de los usuarios o dispositivos. En 2025, con la expansión del 5G/6G y la evolución de la IA, el edge computing ha entrado en una nueva etapa.
Conceptos básicos del Edge Computing
Comparación de arquitecturas
flowchart TB
subgraph Traditional["Arquitectura cloud tradicional"]
Cloud1["Central Cloud<br/>(100ms+ latency)"]
D1["Device"]
D2["Device"]
D3["Device"]
D1 --> Cloud1
D2 --> Cloud1
D3 --> Cloud1
end
flowchart TB
subgraph Edge["Arquitectura Edge Computing"]
Cloud2["Central Cloud<br/>(agregación y análisis de datos)"]
E1["Edge Node<br/>(10-50ms)"]
E2["Edge Node<br/>(10-50ms)"]
E3["Edge Node<br/>(10-50ms)"]
ED1["Device<br/>(<5ms)"]
ED2["Device<br/>(<5ms)"]
ED3["Device<br/>(<5ms)"]
ED1 --> E1
ED2 --> E2
ED3 --> E3
E1 --> Cloud2
E2 --> Cloud2
E3 --> Cloud2
end
Comparación de latencia
| Ubicación de procesamiento | Latencia típica | Caso de uso |
|---|---|---|
| En el dispositivo | < 1ms | Control en tiempo real |
| Nodo edge | 5-50ms | AR/VR, gaming |
| DC regional | 50-100ms | Streaming de video, API |
| Cloud central | 100-300ms | Procesamiento batch, análisis |
Principales tendencias en 2025
1. Fusión con 5G/6G
Con la expansión del 5G, MEC (Multi-access Edge Computing) ha entrado en fase práctica.
# Ejemplo de configuración 5G MEC
network:
5g_core:
upf: # User Plane Function
deployment: edge
latency_target: 10ms
mec_platform:
location: base_station
capabilities:
- video_analytics
- ar_rendering
- game_streaming
applications:
- name: autonomous_driving
latency_requirement: 1ms
bandwidth: 1Gbps
- name: industrial_iot
latency_requirement: 5ms
reliability: 99.9999%
2. Expansión de la inferencia AI en el edge
# Ejemplo de inferencia AI en edge (ONNX Runtime)
import onnxruntime as ort
import numpy as np
class EdgeAIInference:
def __init__(self, model_path: str):
# Opciones de optimización para edge
sess_options = ort.SessionOptions()
sess_options.graph_optimization_level = (
ort.GraphOptimizationLevel.ORT_ENABLE_ALL
)
sess_options.intra_op_num_threads = 4
# Seleccionar proveedores disponibles
providers = ['TensorrtExecutionProvider', # NVIDIA GPU
'CUDAExecutionProvider',
'CoreMLExecutionProvider', # Apple Silicon
'CPUExecutionProvider']
self.session = ort.InferenceSession(
model_path,
sess_options=sess_options,
providers=providers
)
def predict(self, input_data: np.ndarray) -> np.ndarray:
"""Inferencia de baja latencia"""
input_name = self.session.get_inputs()[0].name
return self.session.run(None, {input_name: input_data})[0]
# Ejemplo de uso: clasificación de imágenes (< 10ms)
edge_model = EdgeAIInference("mobilenet_v3.onnx")
result = edge_model.predict(preprocessed_image)
3. Runtime Edge con WebAssembly
// Ejemplo de función edge Wasm (compatible con Cloudflare Workers)
use worker::*;
#[event(fetch)]
async fn main(req: Request, env: Env, _ctx: Context) -> Result<Response> {
// Obtener información geográfica de la solicitud
let cf = req.cf();
let country = cf.country().unwrap_or("Unknown");
let colo = cf.colo(); // Ubicación edge
// Procesamiento de datos en el edge
let body = req.text().await?;
let processed = process_at_edge(&body);
// Acceso a KV store (caché edge)
let kv = env.kv("CACHE")?;
kv.put(&cache_key, &processed)?
.expiration_ttl(3600)
.execute()
.await?;
Response::ok(format!(
"Processed at {} ({})",
colo, country
))
}
fn process_at_edge(data: &str) -> String {
// Ejecutar procesamiento ligero en el edge
data.to_uppercase()
}
Comparación de plataformas principales
Servicios edge de proveedores cloud
| Proveedor | Nombre del servicio | Características |
|---|---|---|
| AWS | Lambda@Edge, Outposts | Integración con CloudFront, soporte on-prem |
| Azure | IoT Edge, Stack Edge | Integración AI, híbrido |
| Google Cloud | Distributed Cloud Edge | Base Anthos, integración 5G |
| Cloudflare | Workers | WebAssembly, global |
| Fastly | Compute@Edge | Compatible VCL, baja latencia |
Ejemplo de implementación AWS Lambda@Edge
// Función Lambda@Edge (integración CloudFront)
import {
CloudFrontRequestEvent,
CloudFrontResponseEvent,
Context
} from 'aws-lambda';
// Procesamiento en solicitud de origen
export const originRequest = async (
event: CloudFrontRequestEvent,
context: Context
) => {
const request = event.Records[0].cf.request;
// Enrutamiento para pruebas A/B
const experimentGroup = getExperimentGroup(request);
if (experimentGroup === 'B') {
request.origin = {
custom: {
domainName: 'experiment-b.example.com',
port: 443,
protocol: 'https',
path: '',
sslProtocols: ['TLSv1.2'],
readTimeout: 30,
keepaliveTimeout: 5,
customHeaders: {}
}
};
}
return request;
};
// Procesamiento en respuesta de origen
export const originResponse = async (
event: CloudFrontResponseEvent
) => {
const response = event.Records[0].cf.response;
// Agregar headers de seguridad
response.headers['strict-transport-security'] = [{
key: 'Strict-Transport-Security',
value: 'max-age=63072000; includeSubdomains; preload'
}];
response.headers['content-security-policy'] = [{
key: 'Content-Security-Policy',
value: "default-src 'self'"
}];
return response;
};
function getExperimentGroup(request: any): string {
const cookies = request.headers.cookie || [];
// Lógica de análisis de cookies
return Math.random() < 0.5 ? 'A' : 'B';
}
Base de datos D1 de Cloudflare Workers
// Ejemplo de uso de SQL en edge (D1)
export interface Env {
DB: D1Database;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const url = new URL(request.url);
if (url.pathname === '/api/products') {
// Ejecución de SQL en el edge
const { results } = await env.DB.prepare(`
SELECT id, name, price, stock
FROM products
WHERE category = ?
ORDER BY popularity DESC
LIMIT 20
`).bind(url.searchParams.get('category'))
.all();
return Response.json(results, {
headers: {
'Cache-Control': 'public, max-age=60',
},
});
}
if (url.pathname === '/api/analytics') {
// Procesamiento de agregación en el edge
const stmt = env.DB.prepare(`
INSERT INTO page_views (path, timestamp, country)
VALUES (?, datetime('now'), ?)
`);
const cf = request.cf as { country?: string };
await stmt.bind(url.pathname, cf?.country || 'Unknown').run();
return new Response('OK');
}
return new Response('Not Found', { status: 404 });
},
};
Casos de uso del Edge Computing
1. Vehículos autónomos
flowchart TB
subgraph Vehicle["Edge en el vehículo"]
Sensors["Camera<br/>LiDAR<br/>Radar"]
AI["AI Module<br/>(<10ms)"]
Control["Control Module"]
Output["Dirección/Aceleración"]
Sensors --> AI --> Control --> Output
end
subgraph Roadside["Nodo edge en carretera"]
R1["Optimización de semáforos"]
R2["Agregación de info de vehículos cercanos"]
R3["Predicción de peligros/alertas"]
end
subgraph Cloud["Cloud"]
C1["Actualización de datos de mapas"]
C2["Entrenamiento de modelos ML"]
C3["Análisis de tráfico a gran escala"]
end
Vehicle -->|Comunicación V2X| Roadside
Roadside --> Cloud
2. IoT Industrial (IIoT)
# Ejemplo de implementación de gateway edge industrial
import asyncio
from dataclasses import dataclass
from typing import List, Optional
import json
@dataclass
class SensorReading:
sensor_id: str
value: float
timestamp: float
unit: str
class IndustrialEdgeGateway:
def __init__(self):
self.alert_thresholds = {
'temperature': {'min': -10, 'max': 85},
'vibration': {'max': 10.0},
'pressure': {'min': 0.5, 'max': 10.0}
}
self.local_buffer: List[SensorReading] = []
async def process_sensor_data(
self,
reading: SensorReading
) -> Optional[dict]:
"""Procesamiento en tiempo real en el edge"""
# 1. Detección de anomalías (juicio inmediato)
alert = self._check_anomaly(reading)
if alert:
# Enviar alerta de emergencia inmediatamente
await self._send_alert(alert)
return alert
# 2. Agregación de datos (buffering)
self.local_buffer.append(reading)
# 3. Sincronización periódica con cloud
if len(self.local_buffer) >= 100:
await self._sync_to_cloud()
return None
def _check_anomaly(self, reading: SensorReading) -> Optional[dict]:
"""Detección de anomalías local"""
sensor_type = reading.sensor_id.split('_')[0]
threshold = self.alert_thresholds.get(sensor_type)
if not threshold:
return None
if 'max' in threshold and reading.value > threshold['max']:
return {
'type': 'HIGH_ALERT',
'sensor': reading.sensor_id,
'value': reading.value,
'threshold': threshold['max']
}
if 'min' in threshold and reading.value < threshold['min']:
return {
'type': 'LOW_ALERT',
'sensor': reading.sensor_id,
'value': reading.value,
'threshold': threshold['min']
}
return None
async def _send_alert(self, alert: dict):
"""Envío inmediato de alertas"""
print(f"ALERT: {json.dumps(alert)}")
# En realidad se envía por MQTT/WebSocket
async def _sync_to_cloud(self):
"""Sincronización de datos del buffer con cloud"""
data = self.local_buffer.copy()
self.local_buffer.clear()
# Comprimir y enviar a cloud
print(f"Syncing {len(data)} readings to cloud")
3. Streaming AR/VR
// Procesamiento distribuido de renderizado AR en edge
interface ARRenderRequest {
devicePose: {
position: [number, number, number];
rotation: [number, number, number, number];
};
fov: number;
resolution: [number, number];
}
interface ARRenderResponse {
frame: ArrayBuffer;
timestamp: number;
latency: number;
}
class EdgeARRenderer {
private edgeNodes: Map<string, EdgeNode> = new Map();
async selectOptimalNode(
userLocation: GeolocationPosition
): Promise<EdgeNode> {
// Selección de nodo basada en latencia
const nodes = Array.from(this.edgeNodes.values());
const latencies = await Promise.all(
nodes.map(async (node) => ({
node,
latency: await this.measureLatency(node)
}))
);
return latencies.reduce((best, current) =>
current.latency < best.latency ? current : best
).node;
}
async renderFrame(
node: EdgeNode,
request: ARRenderRequest
): Promise<ARRenderResponse> {
const start = performance.now();
// Renderizar en nodo edge
const response = await fetch(`${node.url}/render`, {
method: 'POST',
body: JSON.stringify(request),
headers: {
'Content-Type': 'application/json',
},
});
const frame = await response.arrayBuffer();
const latency = performance.now() - start;
// Mantener bajo 20ms (umbral para experiencia AR cómoda)
if (latency > 20) {
console.warn(`High latency: ${latency}ms`);
}
return {
frame,
timestamp: Date.now(),
latency,
};
}
private async measureLatency(node: EdgeNode): Promise<number> {
const start = performance.now();
await fetch(`${node.url}/ping`);
return performance.now() - start;
}
}
interface EdgeNode {
id: string;
url: string;
region: string;
capabilities: string[];
}
Seguridad Edge
Zero Trust Edge
# Política de seguridad edge
security:
authentication:
method: mTLS
certificate_rotation: 24h
authorization:
model: ABAC # Attribute-Based Access Control
policies:
- name: sensor_data_access
subjects:
- type: device
attributes:
device_type: sensor
firmware_version: ">=2.0"
resources:
- type: api
path: /data/*
actions: [POST]
conditions:
- time_range: "00:00-23:59"
- rate_limit: 1000/hour
encryption:
at_rest: AES-256-GCM
in_transit: TLS 1.3
monitoring:
anomaly_detection: enabled
log_retention: 7d
alert_channels:
- slack
- pagerduty
Firewall Edge
// Ejemplo de implementación WAF en edge
interface WAFRule {
id: string;
pattern: RegExp;
action: 'block' | 'log' | 'challenge';
category: string;
}
const wafRules: WAFRule[] = [
{
id: 'sqli-001',
pattern: /(\b(SELECT|INSERT|UPDATE|DELETE|DROP|UNION)\b.*\b(FROM|INTO|WHERE)\b)/i,
action: 'block',
category: 'SQL Injection'
},
{
id: 'xss-001',
pattern: /<script[^>]*>[\s\S]*?<\/script>/i,
action: 'block',
category: 'XSS'
},
{
id: 'path-001',
pattern: /\.\.[\/\\]/,
action: 'block',
category: 'Path Traversal'
}
];
async function edgeWAF(request: Request): Promise<Response | null> {
const url = new URL(request.url);
const body = await request.text();
const checkTargets = [
url.pathname,
url.search,
body,
...Array.from(request.headers.values())
];
for (const rule of wafRules) {
for (const target of checkTargets) {
if (rule.pattern.test(target)) {
console.log(`WAF blocked: ${rule.category} (${rule.id})`);
if (rule.action === 'block') {
return new Response('Forbidden', { status: 403 });
}
}
}
}
return null; // Permitir la solicitud
}
Mejores prácticas de implementación
1. Ubicación adecuada de cargas de trabajo
flowchart TB
Start["¿Requisito de latencia < 50ms?"]
RT["¿Necesita procesamiento en tiempo real?"]
Data["¿Gran volumen de datos?"]
DevEdge["Procesar en dispositivo/edge"]
Cache["Usar caché edge"]
Preprocess["Preprocesar en edge → Analizar en cloud"]
CloudProc["Procesar en lote en cloud"]
Start -->|SÍ| RT
Start -->|NO| Data
RT -->|SÍ| DevEdge
RT -->|NO| Cache
Data -->|SÍ| Preprocess
Data -->|NO| CloudProc
Ubicación recomendada
| Ubicación de procesamiento | Cargas de trabajo adecuadas |
|---|---|
| Dispositivo | Control de sensores, respuesta inmediata |
| Nodo edge | Inferencia AI, agregación de datos, caché |
| Cloud | Entrenamiento, almacenamiento a largo plazo, análisis a gran escala |
2. Manejo de fallos y fallback
// Implementación de resiliencia edge
class ResilientEdgeClient {
private primaryEdge: string;
private fallbackEdges: string[];
private cloudEndpoint: string;
constructor(config: EdgeConfig) {
this.primaryEdge = config.primaryEdge;
this.fallbackEdges = config.fallbackEdges;
this.cloudEndpoint = config.cloudEndpoint;
}
async request<T>(path: string, options: RequestInit): Promise<T> {
// 1. Intentar edge primario
try {
return await this.fetchWithTimeout(
`${this.primaryEdge}${path}`,
options,
5000 // timeout 5 segundos
);
} catch (e) {
console.warn('Primary edge failed, trying fallback');
}
// 2. Intentar edges de fallback
for (const edge of this.fallbackEdges) {
try {
return await this.fetchWithTimeout(
`${edge}${path}`,
options,
5000
);
} catch (e) {
continue;
}
}
// 3. Fallback a cloud como último recurso
console.warn('All edges failed, falling back to cloud');
return await this.fetchWithTimeout(
`${this.cloudEndpoint}${path}`,
options,
30000 // timeout más largo para cloud
);
}
private async fetchWithTimeout<T>(
url: string,
options: RequestInit,
timeout: number
): Promise<T> {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), timeout);
try {
const response = await fetch(url, {
...options,
signal: controller.signal,
});
return await response.json();
} finally {
clearTimeout(timeoutId);
}
}
}
Resumen
El edge computing está desarrollándose rápidamente en 2025 en las siguientes áreas:
- Integración 5G/6G: Logro de ultra baja latencia con MEC
- Edge AI: Expansión del procesamiento de inferencia en dispositivos
- WebAssembly: Runtime edge multiplataforma
- Seguridad: Aplicación de arquitectura zero trust
Puntos a considerar para la implementación
- Clarificar requisitos de latencia
- Considerar confidencialidad de datos y requisitos regulatorios
- Diseñar división de roles apropiada con cloud
- Preparar estrategia de fallback para fallos
El edge computing se ha convertido en una arquitectura indispensable para aplicaciones que requieren procesamiento en tiempo real y distribuido.