Tempat kode Perry beristirahat dan berjalan.
Coop mengubah direktori TypeScript yang kompatibel dengan Perry menjadi pustaka aplikasi native dan menyajikannya lewat HTTP, sementara runtime dan pustaka standar Perry disediakan sekali per mesin.
Infrastruktur eksperimental untuk kode milik Anda
Perry mengompilasi. Coop menjaganya tetap berjalan.
Perbedaannya adalah tempat runtime bahasa berada. Coop menjaga image aplikasi tetap kecil dan menyediakan runtime Perry yang kompatibel beserta pustaka standar di tingkat host.
Executable Perry biasa
Aplikasi, runtime, garbage collector, dan fitur pustaka standar terpilih ditautkan ke satu executable khusus target.
Deployment Coop
Aplikasi dikompilasi sebagai pustaka bersama yang hanya berisi app. Runtime yang kompatibel dibangun sekali per mesin dan identitasnya diverifikasi sebelum aplikasi dipetakan.
Dipisahkan menurut batas kegagalan
Mesin, setiap deployment, dan setiap permintaan memiliki tanggung jawab berbeda. Kode aplikasi tidak pernah berjalan di daemon mesin.
Daemon · satu per mesin
Mengakhiri TLS, merutekan berdasarkan host dan path, serta mengelola deployment, artefak, API admin, dan metrik.
Worker · satu per deployment
Memuat pustaka aplikasi, memiliki status runtime Perry, serta menjalankan cron dan antrean tahan lama.
Invokasi · satu per permintaan
Berjalan sebagai task di dalam worker dan berbagi ruang alamat tanpa membuat proses untuk setiap permintaan.
Yang bekerja hari ini
Coop adalah infrastruktur yang telah diuji, tetapi belum menjadi produk hosting yang selesai. Implementasi saat ini mencakup:
- ✓Kompilasi TypeScript, routing HTTP, dan mount statis
- ✓Pemeriksaan identitas runtime bersama
- ✓Deployment berbasis alamat konten dan rollback
- ✓Cron dan antrean tahan lama
- ✓KV dan penyimpanan objek untuk worker khusus
- ✓CLI, metrik Prometheus, peringatan, dan dashboard Grafana
Permukaan deployment yang kecil
Deployment adalah direktori dengan coop.toml dan satu atau beberapa handler. Coop mengompilasinya, menyimpan hasil di cache, dan memulai worker lokal.
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 ./helloSengaja dibuat sempit
Cocok digunakan hari ini
- ✓Layanan dan aplikasi kecil dengan kode milik Anda
- ✓Satu operator menjalankan portofolio pada satu mesin
- ✓Beban kerja yang dapat dikompilasi dalam subset TypeScript Perry
- ✓Tim yang menghargai kepadatan, artefak eksplisit, dan rollback cepat
Yang belum dijanjikan Coop
- ·Kompatibilitas npm atau Node.js secara sembarang
- ·Sandbox untuk kode pihak ketiga yang tidak tepercaya
- ·Pengganti Kubernetes atau platform multiwilayah
- ·Keunggulan kinerja universal atas Node.js
Kepadatan adalah tesisnya. Benchmark masih terus dikerjakan.
Pengukuran saat ini menunjukkan arah berbeda untuk beban kerja berbeda. Coop menunjukkan kepadatan menjanjikan pada aplikasi Linux kecil, sementara route Next.js lengkap memakai lebih banyak CPU daripada Node.js dalam pengujian lain. Baca metodologi sebelum mengutip hasilnya.
Bangun dengan Perry. Jalankan di Coop.
Jelajahi sumber, jalankan deployment contoh, dan bantu menjadikan model runtime bersama sebagai infrastruktur yang andal.