Un lugar donde el código de Perry puede descansar y ejecutarse.
Coop convierte un directorio de TypeScript compatible con Perry en una biblioteca de aplicación nativa y la sirve por HTTP, mientras el runtime y la biblioteca estándar de Perry se proporcionan una sola vez por máquina.
Infraestructura experimental para código propio
Perry lo compila. Coop lo mantiene en marcha.
La diferencia está en dónde vive el runtime del lenguaje. Coop mantiene pequeña la imagen de la aplicación y proporciona el runtime compatible de Perry y la biblioteca estándar en el host.
Un ejecutable Perry normal
La aplicación, el runtime, el recolector de basura y las funciones elegidas de la biblioteca estándar se enlazan en un ejecutable específico para el destino.
Un despliegue Coop
La aplicación se compila como una biblioteca compartida que solo contiene la app. Los proveedores compatibles se construyen una vez por máquina y su identidad se verifica antes de mapearla.
Separado por límites de fallo
La máquina, cada despliegue y cada petición tienen responsabilidades distintas. El código de la aplicación nunca se ejecuta en el daemon de la máquina.
Daemon · uno por máquina
Termina TLS, enruta por host y ruta, y gestiona despliegues, artefactos, la API de administración y métricas.
Worker · uno por despliegue
Carga la biblioteca de la aplicación, mantiene el estado del runtime de Perry y ejecuta cron y colas duraderas.
Invocación · una por petición
Se ejecuta como tarea dentro del worker y comparte su espacio de direcciones sin crear un proceso por petición.
Lo que funciona hoy
Coop es infraestructura probada, pero aún no es un producto de alojamiento terminado. La implementación actual incluye:
- ✓Compilación TypeScript, enrutamiento HTTP y montajes estáticos
- ✓Comprobaciones de identidad de proveedores compartidos
- ✓Despliegues direccionados por contenido y rollback
- ✓Cron y una cola duradera
- ✓KV y almacenamiento de objetos para workers dedicados
- ✓CLI, métricas Prometheus, alertas y panel de Grafana
Una superficie de despliegue pequeña
Un despliegue es un directorio con coop.toml y uno o más handlers. Coop lo compila, guarda el resultado en caché e inicia un worker local.
name = "hello"
version = "0.1.0"
[hosts]
domains = ["hello.test"]
[[handlers]]
file = "handlers/hello.ts"
path = "/hello"
method = "GET"import { CoopRequest, respond } from "@coop/runtime";
export function handle(reqJson: string): string {
const req = new CoopRequest(reqJson);
return respond(200, {}, `hello from ${req.path}`);
}$ coop-cli dev ./helloDeliberadamente limitado
Una buena opción hoy
- ✓Servicios y aplicaciones pequeñas cuyo código controlas
- ✓Un operador que ejecuta una cartera en una máquina
- ✓Cargas que compilan dentro del subconjunto TypeScript de Perry
- ✓Equipos que valoran densidad, artefactos explícitos y rollback rápido
Lo que Coop todavía no promete
- ·Compatibilidad arbitraria con npm o Node.js
- ·Un sandbox para código de terceros no confiable
- ·Sustituir Kubernetes o ser una plataforma multirregión
- ·Mejoras universales de rendimiento frente a Node.js
La densidad es la tesis. Los benchmarks siguen siendo el trabajo.
Las mediciones actuales apuntan en direcciones distintas según la carga. Coop ha mostrado una densidad prometedora con aplicaciones Linux pequeñas, mientras una ruta Next.js completa consumió más CPU que Node.js en otra prueba. Lee la metodología antes de citar los resultados.
Construye con Perry. Dale un Coop.
Explora el código, ejecuta el despliegue de ejemplo y ayuda a convertir el modelo de runtime compartido en infraestructura fiable.