- OpenWorkers, V8 tabanında JavaScript çalıştıran açık kaynak bir runtime olup edge computing’i kendi altyapınızda kurmanıza olanak tanır
- KV deposu, PostgreSQL, S3/R2 uyumlu depolama, service binding, ortam değişkenleri ve secret’lar desteklenir
- fetch, ReadableStream, crypto.subtle gibi başlıca Web API’lerini içerir ve Cloudflare Workers ile yüksek uyumluluk sağlar
- V8 Isolate sandbox, cron zamanlama, Docker Compose tabanlı dağıtım gibi özelliklerle kolay self-hosting mümkündür
- Yaklaşık 7 yıldır gelişen proje, vendor lock-in olmadan bir JavaScript çalışma ortamı sunmayı hedefliyor
OpenWorkers genel bakış
- OpenWorkers, Rust ile yazılmış Cloudflare Workers uyumlu bir runtime olup JavaScript’i V8 Isolate kullanarak çalıştırır
- Edge computing’in avantajları, kendi sunucu ortamınızda da kullanılabilir
- Açık kaynak olarak yayımlandığı için özgürce dağıtılabilir ve değiştirilebilir
Başlıca özellikler
- Bindings özelliği sayesinde çeşitli harici kaynaklarla entegre olur
- KV depolama: get, put, delete, list desteği
- PostgreSQL veritabanı entegrasyonu
- S3/R2 uyumlu depolama desteği
- Service binding, ortam değişkenleri ve secret yönetimi içerir
- Web API desteği
- fetch, Request, Response, ReadableStream gibi standart API’ler sunar
- crypto.subtle, TextEncoder/Decoder, Blob, setTimeout, AbortController dahildir
Mimari
- Sistem; nginx proxy, dashboard, API, log service, runner, PostgreSQL, NATS, scheduler gibi bileşenlerden oluşur
- Her runner, kodu V8 Isolate içinde çalıştırır ve 100 ms CPU, 128 MB bellek sınırı uygular
- 5-6 alanlı cron sözdizimini destekleyen yerleşik bir scheduler içerir
- Cloudflare Workers ile sözdizimi uyumluluğu korunur
Self-hosting
- Dağıtım, yalnızca tek bir PostgreSQL veritabanı ve Docker Compose dosyası ile yapılabilir
git clone, .env ayarı ve docker compose up komutlarıyla kolayca çalıştırılabilir
- Migration ve token oluşturma adımları da dahildir
Geliştirme geçmişi
- Proje, yaklaşık 7 yıllık bir geliştirme sürecinin ardından olgunlaştı
- İlk aşamada JS sandboxing için vm2 ile denemeler yapıldı, ardından Cloudflare Workers modelinden ilham alınarak geliştirildi
- Deno-core sonrasında bugün rusty_v8 tabanında yeniden yazıldı
- Hedef, Cloudflare Workers düzeyinde bir geliştirici deneyimi (DX) sunarken vendor lock-in’i ortadan kaldıran, kendi sunucunuzda çalışan bir ortam kurmak
- İleride çalıştırma kayıtları ve yeniden oynatma üzerinden deterministic debugging özelliğinin eklenmesi planlanıyor
1 yorum
Hacker News görüşleri
Uç bilişimin gücünü kendi altyapına taşımak fikri ilginç görünüyor
Ancak self-hosting'in, uç bilişimin özüyle bir ölçüde çeliştiğini düşünüyorum
Bu model, Cloudflare gibi dünya çapında 300'den fazla PoP (Point of Presence) bulunduran büyük sağlayıcılar sayesinde mümkün oluyor
Elbette daha küçük ve etik sağlayıcıları bir araya getirerek benzer bir yapı kurulabilir, ama bu çok daha fazla emek ve risk getirir
Başlıca bölgelerde 10 kadar nokta olsa bile yeterli olmaz mı diye düşünüyorum
Ama bunu güvenli ve güvenilir şekilde koordine etmenin fazla zor olabileceği konusunda da endişeliyim
Sandbox çözümlerindeki sorun, kodun sandbox'tan çıkamayacağına dair güçlü bir garanti vermeleri gerekmesidir
Bunu kanıtlamak için çeşitli saldırı senaryolarına karşı test sonuçları ve ayrıntılı belgeler gerekir
Ama bu seviyede dokümantasyon çok nadirdir ve gerçekten güvenilir örnekler bulmak zordur
Bu yüzden ben, büyük şirketlerin bunu gerçek production ortamında kullanıp kullanmadığına ve güvenlik ekipleri tarafından bakımının yapılıp yapılmadığına bakıyorum
Hatta bazen V8 sürümlerini Chrome'dan bile önce uygular
Her worker ayrı bir süreç yerine bir isolate olarak çalışır; bu da Cloudflare modeline benzer
Ancak tamamen güvenilmeyen üçüncü taraf kodlarla uğraşırken container veya VM ile bir katman daha izolasyon eklemek daha iyidir
Bu sandbox yaklaşımı güvenlikten çok kaynak izolasyonuna odaklanır
“Doğruladık ve güvenli, bize güvenin” seviyesindeki güvenlik denetimleri yeterli değil
ama self-hosting ortamında zaten sisteme erişim yetkiniz olduğu için sandbox'tan kaçış konusunda kaygı duymaya daha az gerek vardır
Harika bir proje olduğunu düşünüyorum
workerd açık kaynaksa, OpenWorkers'ın farkının tam bir ortam sunması olup olmadığını merak ediyorum
Runtime'ın kendisinde ne gibi farklar olduğu ya da ileride managed service planı bulunup bulunmadığını da öğrenmek isterim
1️⃣ workerd yalnızca runtime sağlar, OpenWorkers ise dashboard, API, scheduler, loglar, binding'ler (KV, S3/R2, Postgres) dahil tam bir platform sunar
2️⃣ workerd C++ tabanlıdır, OpenWorkers ise Rust + rusty_v8 tabanlıdır; bu da onu daha sade ve hacklenmesi daha kolay yapar
3️⃣ Zaten dash.openworkers.com üzerinde managed bir sürüm var ve ücretsiz katman da sunuluyor
Ancak self-hosting birinci sınıf vatandaş olarak tasarlanmış durumda
Cloudflare Workers'ın özü fonksiyon başına ücretlendirme iken, self-hosting yapıldığında sonuçta donanımı önceden temin etmek gerekir
Her şeyi dış kaynağa vermek zorunda değilsiniz; benzer seçeneklerin var olması iyi bir şey
Bu tür seçenekler benimsenme eşiğini düşürmeye yardımcı olur
Eskiden deno_core'u ayırma işiyle çok uğraşmıştım; raw rusty_v8'e geçişi anlıyorum
deno_core içinde çok fazla legacy kod vardı ve bir şeyi değiştirince testler sık sık bozuluyordu
Ama runtime içini daha ayrıntılı kontrol edebilmek için rusty_v8'e geçtik,
ileride deno runtime'a da eksik özellikleri yeniden eklemeyi planlıyoruz
Vendor lock-in'i azaltmaya yardımcı olan her projeden yanayım
Bulut hizmetlerinin fiyatlarını daha gerçekçi seviyelere çekmeleri için baskı görmesini isterim
Şu anda NAT gibi temel özellikler için bile aşırı ücret talep ediliyor
Elbette bulut kullanışlı, ama sorun DIY'ye kıyasla yüksek maliyet
Büyük şirketler kaynakları tekeline alırsa bireylerin kendi başına barındırma yapması zorlaşabilir
Ama gerçekte birçok ülkede kendi başına işletme maliyeti daha yüksek
Mesele yalnızca kurmak değil; bakım personeli ve izleme maliyetleri de ciddi tutar
Şu anda çalışmayan özelliklerin veya yol haritasının belgelerde açıkça belirtilmesi iyi olur
Sonraki öncelik debug için execution trace/replay özelliği ve belgelere bir yol haritası bölümü eklemeyi planlıyoruz
ASCII mimari diyagramı Pixel + Firefox'ta bozuk görünüyor
Metin tabanlı diyagramlar çekici olsa da pratikte görüntüye derlenmiş bir sürüm yayımlamak daha kullanışlı oluyor
Teknik ve yapısal olarak harika bir ürün fikri
Özellikle büyük sağlayıcının açık kaynak projesine karşılık yine açık kaynakla cevap verme modeli hoşuma gidiyor
Yani onların açık kaynağı alıp ticarileştirmesi yerine, biz onların modelini tekrar açık kaynak olarak geri veriyoruz — bence doğru yaklaşım tam olarak bu
“Bulutu kendi bilgisayarımızda barındırsak nasıl olur?” akımı geri dönmüş gibi görünüyor
Son dönemde bu tür bir self-hosting trendi birkaç yerde göze çarpıyor
İlgili sunum videosu da ilgi çekici
Bulutun özü **esneklik (elasticity)**tir
Gerektikçe instance sayısını artırıp azaltabilmek ve yalnızca kullandığın kadar ödemek üzerine kurulu bir yapıdır
Self-hosting'de dağıtım araçları kullanışlı olabilir ama sonuçta tüm sunucu maliyetini üstlenmek gerekir
Yük sabit ya da öngörülebilirse sorun olmayabilir ama aksi halde verimsizdir
(Bir benzetme yaparsak, otobüse binmekle bir van sahibi olmak arasındaki fark gibi)
Geliştiriciler olay işleyicilerini yazmaya odaklanabilir; kuyruklar veya dayanıklı yürütme de eklenirse daha da güçlü olur
Sonuçta FaaS, boilerplate kodu soyutlayan yüksek seviyeli bir araçtır