Saltar al contenido

2 semanas de Estándar gratis

Crear cuenta
Comenzar

Blog

Aislamiento por celda: cada cuenta en su propio sistema

2026-10-13 · Equipo EchidnAI

IngenieríaArquitectura

En un servicio multiusuario hay dos formas de sostener muchas cuentas: un proceso compartido, donde todas las sesiones conviven en la misma memoria y los mismos permisos, o un sistema por cuenta. En Echidna elegimos la segunda. Esta nota explica qué significa, por qué lo hicimos y qué límites tiene.

El problema de compartir proceso

Cuando veinte personas usan el mismo proceso, comparten memoria, permisos y superficie de ataque. Un error de deserialización, una ruta mal validada o un archivo mal borrado puede alcanzar datos de otra cuenta. No es un riesgo teórico: es la familia de fallos más común en servicios multiusuario, y la que más caro se paga.

La decisión

Cada cuenta corre en su propia celda: un contenedor con su sistema de archivos, sus procesos y su puerto interno. Ese puerto no se publica al mundo; solo existe en la dirección local del servidor, uno por celda. El servidor de acceso autentica a la persona, inyecta su identidad en la petición y habla con la celda por ese puerto local. Ninguna otra cuenta puede llegar ahí: no hay ruta de red que lo permita.

El aislamiento se sostiene con tres capas independientes:

  1. Puerto local. La celda solo escucha en la dirección local del anfitrión, con un puerto exclusivo por cuenta.
  2. Confianza restringida. El servicio interno de la celda solo acepta peticiones que vienen del proxy local y de su propia puerta de red. Cualquier otra petición se rechaza.
  3. Cortafuegos. Una regla descarta el tráfico que sale de los contenedores hacia los puertos de gestión del servidor (administración, web y acceso). Aunque una celda quedara comprometida, no alcanza la administración de la máquina.

La búsqueda web sale por otro camino: un túnel privado hacia un servidor separado que ejecuta el motor de búsqueda. Las celdas no hablan con internet para buscar; hablan con el túnel.

Ciclo de vida de una celda

  • Aprovisionamiento: 60 a 90 segundos la primera vez que se prepara.
  • Suspensión: tras unos 30 minutos de inactividad la celda se suspende, no se destruye; despierta cuando la persona vuelve.
  • Límite: 1 GB de memoria por celda, con cuota de uso por cuenta.
  • Densidad: una máquina de 32 GB sostiene entre 20 y 25 celdas activas con margen.

Por qué no compartimos proceso

Sería más barato. Veinte celdas ocupan la memoria de veinte procesos aislados; con un proceso compartido cabrían cientos de usuarios por máquina. Pagamos ese costo a cambio de radio de daño: un fallo en una celda es un fallo de una cuenta, y el reinicio de una celda no toca a las demás. Para un producto que promete privacidad, esa es la dirección correcta.

Qué no prometemos

El aislamiento es a nivel de contenedor, no de máquina virtual dedicada por persona. Es más fuerte que un proceso compartido y más débil que un servidor exclusivo; lo decimos tal cual. La defensa es en capas porque ninguna capa por sí sola basta.

Verificación

Cada aprovisionamiento termina con una comprobación de salud de la celda; si la comprobación falla, el espacio no se entrega. Las pruebas de la plataforma cubren provisión, suspensión, despertar y purga, y la operación diaria vigila el estado de cada celda desde afuera. La página de Estado del sitio muestra la comprobación en vivo de las piezas públicas.

← Volver al blog