Daftar isi:
- Manual dan contoh
- Instalasi dan FAQ
- Fitur dan tolok ukur
- Tentang, hak cipta dan lisensi, SBOM, dan referensi
- Obrolan di Perselisihan, Diskusikan di GitHub, atau Penulis Email
kawipiko
adalah server HTTP statis ringan yang ditulis dalam Go; Berfokus pada melayani konten statis secepat dan seefisien mungkin , dengan latensi terendah , dan dengan konsumsi sumber daya terendah (baik CPU, RAM, IO); mendukung kedua http/1 (dengan atau tanpa TLS), http/2 dan http/3 (lebih dari quic) ; Tersedia sebagai tunggal yang dapat dieksekusi secara statis tanpa dependensi lainnya.
Ingin melihat kawipiko
beraksi?
/documentation
mewakili situs statis yang mengompres dengan baik, sementara itu /carina-nebula
, /openstreetmap
dan /fontawesome
mewakili situs statis yang menghasilkan banyak permintaan kecil; (Harap dicatat bahwa instance ini berada di belakang CloudFlare, namun diinstruksikan untuk tidak menyimpan apa pun di tepi;) (server saat ini di -host melalui koneksi serat perumahan;) Namun, sederhana tidak menyiratkan bodoh atau terbatas , sebaliknya itu menyiratkan efisien melalui penghapusan fitur berlebihan, sehingga sejalan dengan filosofi lama Unix tentang "lakukan satu hal dan lakukan dengan baik". Oleh karena itu, ini hanya mendukung permintaan GET
, dan tidak menyediakan fitur seperti pembuatan konten dinamis, otentikasi, proksi terbalik, dll.; Sementara itu masih memberikan kompresi ( gzip
, zopfli
, atau brotli
), ditambah HTML-CSS-JS Minifying (TODO), tanpa mempengaruhi kinerjanya (karena arsitektur uniknya seperti yang dijelaskan di bawah).
Apa yang disediakan kawipiko
adalah sesuatu yang sangat unik, yang tidak ditawarkan oleh server HTTP lainnya: konten statis disajikan dari file CDB tanpa latensi hampir tidak ada (dibandingkan dengan server statis klasik yang masih harus melewati OS melalui open-read-close
syscalls). Selain itu, seperti disebutkan sebelumnya, konten statis masih dapat dikompresi atau diminifikasi sebelumnya, sehingga mengurangi tidak hanya CPU tetapi juga bandwidth dan latensi.
File CDB adalah file database biner yang menyediakan tabel pencarian nilai kunci-hanya-baca yang efisien, yang awalnya digunakan dalam beberapa server DNS dan SMTP, terutama untuk operasi pencarian overhead yang rendah, penguncian nol dalam skenario multi-threaded / multi-proses, dan "atomik "Pembaruan multi-rekor. Ini juga membuat mereka cocok untuk konten statis latensi rendah yang melayani melalui HTTP, yang disediakan proyek ini.
Bagi mereka yang akrab dengan netlify (atau pesaing seperti halaman cloudflare, halaman github, dll.), kawipiko
adalah alternatif host-it-yourself yang menampilkan:
chroot
membuka file apa pun, dll.Untuk daftar lengkap fitur, silakan berkonsultasi dengan bagian fitur. Sayangnya, ada juga beberapa pengorbanan seperti yang dijelaskan di bagian Keterbatasan (meskipun tidak ada yang kritis).
Berkenaan dengan kinerja, seperti yang dijelaskan dalam bagian tolok ukur, kawipiko
setidaknya setara dengan NginX, mempertahankan lebih dari 100 ribu permintaan / kedua dengan latensi 0,25 ms untuk 99% dari permintaan bahkan pada laptop saya yang berusia 6 tahun. Namun keunggulan utama dibandingkan NginX bukanlah kinerja mentah, tetapi penyederhanaan dan kesederhanaan konfigurasi, ditambah manajemen dan penyimpanan koleksi besar dari banyak file kecil.
Sehubungan dengan kawipiko
Saya juga menerbitkan beberapa artikel di situs saya sendiri:
seccomp
Syscall Linux untuk meningkatkan keamanan dengan mengurangi permukaan serangan;kawipiko
;)Proyek ini menyediakan executable berikut (terkait secara statis, tanpa dependensi lain):
kawipiko-server
-yang melayani konten statis dari arsip CDB baik melalui HTTP (dengan atau tanpa TLS), http/2 atau http/3 (lebih dari quic);kawipiko-archiver
-yang membuat arsip CDB dari folder sumber yang memegang konten statis, secara opsional mengompresi dan meminimalkan file;kawipiko
-seorang yang dapat dieksekusi all-in-one yang mengikat semua fungsionalitas dalam satu yang dapat dieksekusi; (IE kawipiko server ...
atau kawipiko archiver ...
); Tidak seperti kebanyakan (jika tidak semua) server lain di sana, di mana Anda cukup mengarahkan server web Anda ke folder yang memegang root konten situs web statis, kawipiko
mengambil pendekatan yang sangat berbeda: untuk melayani konten statis, orang harus pertama-tama Arsipkan konten ke arsip CDB melalui kawipiko-archiver
, dan kemudian orang dapat menyajikannya dari arsip CDB melalui kawipiko-server
.
Fase dua langkah ini juga menghadirkan beberapa peluang:
zopfli
atau brotli
), untuk memperdagangkan CPU selama penyebaran vs latensi dan bandwidth saat runtime. Lihat manual khusus.
Dokumen ini juga tersedia dalam teks biasa, atau sebagai halaman manusia.
Lihat manual khusus.
Dokumen ini juga tersedia dalam teks biasa, atau sebagai halaman manusia.
Ambil dan ekstrak Dokumentasi Python 3.10 HTML Archive:
Curl -s -s -f -o ./python-3.10.1-docs-html.tar.bz2 https://docs.python.org/3/archives/python-3.10.1-docs-html.tar.bz2 # tar -x -j -v -f ./python-3.10.1-docs-html.tar.bz2 #
Buat arsip CDB (tanpa kompresi):
Kawipiko-Archiver --archive ./python-3.10.1-docs-html-nocomp.cdb -Sumber ./python-3.10.1-Docs-html --debug #
Buat arsip CDB (dengan kompresi gzip
):
Kawipiko-Archiver --archive ./python-3.10.1-docs-html-gzip.cdb -Sumber ./python-3.10.1-Docs-html --Compress Gzip --debug #
Buat arsip CDB (dengan kompresi zopfli
):
Kawipiko-Archiver --archive ./python-3.10.1-docs-html-zopfli.cdb -Sumber ./python-3.10.1-Docs-html --Kompres zopfli --debug #
Buat Arsip CDB (dengan kompresi brotli
):
Kawipiko-Archiver --archive ./python-3.10.1-docs-html-brotli.cdb -Sumber ./python-3.10.1-Docs-html --Compress Brotli --debug #
Sajikan arsip CDB (dengan kompresi gzip
):
Kawipiko-Server -Bind 127.0.0.1:8080 --archive ./python-3.10.1-docs-html-gzip.cdb --archive-mmap --archive-preload --debug #
Bandingkan Sumber dan Ukuran Arsip:
du -h -s ./python-3.10.1-docs-html-nocomp.cdb ./python-3.10.1-docs-html-gzip.cdb ./python-3.10.1-docs-html-zopfli.cdb ./python-3.10.1-docs-html-brotli.cdb ./python-3.10.1-docs-html ./python-3.10.1-docs-html.tar.bz2 # 45m ./python-3.10.1-docs-html-nocomp.cdb 9.7m ./python-3.10.1-docs-html-gzip.cdb ??? ./python-3.10.1-docs-html-zopfli.cdb 7.9m ./python-3.10.1-docs-html-brotli.cdb 46m ./python-3.10.1-docs-html 6.0m ./python-3.10.1-docs-html.tar.bz2
Lihat dokumen instalasi khusus.
Berikut ini adalah daftar fitur terpenting:
gzip
, zopfli
atau brotli
;mmap
); Ini perdagangan memori untuk CPU;rename
syscall (atau alat mv
), semua sumber daya yang dilayani diamati berubah pada saat yang sama;_wildcard.*
File (di mana .*
adalah ekstensi reguler seperti .txt
, .html
, dll.) Yang akan digunakan jika sumber daya aktual tidak ditemukan di bawah folder itu; (File -file ini menghormati struktur pohon hierarkis, yaitu yang "lebih dalam" mengesampingkan yang lebih dekat ke "root";)github.com/valyala/fasthttp
;net/http
GO;github.com/lucas-clemente/quic-go
; Berikut ini adalah daftar fitur terpenting yang saat ini hilang dan direncanakan untuk diimplementasikan:
Content-Type
Content-Length
Content-Encoding
Cache-Control: public, immutable, max-age=3600
ETag
Host
, didukung oleh server, dan sebagian oleh pengarsip;)https://github.com/tdewolff/minify
;404
wildcard yang didukung;) Seperti yang dinyatakan di bagian tentang, tidak ada yang datang secara gratis, dan untuk menyediakan semua fitur ini, beberapa sudut harus dipotong:
brotli
), server akan melayani semua sumber daya yang dikompresi (yaitu Content-Encoding: brotli
), terlepas dari apa yang diterima browser (yaitu Accept-Encoding: gzip
); Hal yang sama berlaku untuk konten yang tidak terkompresi; (Namun selalu menggunakan kompresi gzip
cukup aman, karena diimplementasikan di hampir semua browser dan klien HTTP di luar sana;)Lihat dokumen tolok ukur khusus.
Jika Anda telah menemukan bug, cukup gunakan masalah GitHub.
Jika Anda tidak yakin tentang sesuatu, ingin memberikan umpan balik, atau meminta fitur baru, cukup gunakan diskusi GitHub.
Jika Anda ingin mengajukan pertanyaan singkat, atau hanya mengobrol cepat, cukup pergilah ke saluran perselisihan.
Ya, saat ini melayani ~ 600k HTML halaman.
Meskipun, menjadi open source, Anda bertanggung jawab untuk memastikan itu berfungsi sesuai kebutuhan Anda!
Namun, saya tersedia untuk berkonsultasi tentang penyebaran dan penggunaannya. :)
CDB adalah database tertanam nilai kunci yang terhormat yang diimplementasikan oleh DJ Bernstein, https://cr.yp.to/cdb.html, dan digunakan dalam banyak solusi perangkat lunak yang diimplementasikan olehnya, terutama Qmail dan Tinydns. Dari sana itu diambil oleh banyak layanan jaringan lain yang membutuhkan tabel pencarian rendah-overhead yang sebagian besar statis, seperti misalnya Postfix sebagai alternatif untuk basis data penggunanya.
Sampai saya memperluas mengapa saya memilih untuk menggunakan CDB untuk Konten Situs Web Statis Layanan, Anda dapat membaca tentang Sparkey dari Spotify.
Implementasi CDB yang digunakan adalah garpu khusus dari yang berikut:
Karena GO sangat portabel, sangat stabil, dan terutama karena dapat dengan mudah mendukung kompilasi silang biner yang terkait secara statis dengan platform apa pun yang didukungnya.
Karena Rust gagal untuk dengan mudah mendukung eksekutif kompilasi silang (secara statis atau dinamis yang terhubung secara dinamis) ke platform apa pun yang didukungnya.
Karena karat kurang portabel daripada pergi; Misalnya Rust tidak menganggap OpenBSD sebagai platform "Tier-1".
Silakan juga lihat SBOM (Bill of Material Software) untuk tautan dependensi proyek ini dan penulisnya.
Kode ini dilisensikan di bawah AGPL 3 atau lebih baru.
Jika Anda mengubah kode dalam repositori ini dan menggunakannya untuk tujuan non-pribadi , Anda harus merilisnya sesuai AGPL.
Untuk perincian tentang hak cipta dan lisensi, silakan berkonsultasi dengan file pemberitahuan di folder dokumentasi/lisensi.
Jika seseorang mengharuskan sumber dan/atau dokumentasi untuk dirilis di bawah lisensi yang berbeda, silakan kirim email ke penulis, yang menyatakan persyaratan lisensi, disertai dengan alasan dan detail lainnya; Kemudian, tergantung pada situasinya, penulis dapat melepaskan sumber dan/atau dokumentasi di bawah lisensi yang berbeda.
Proyek ini, seperti banyak proyek open-source lainnya, menggabungkan kode dari proyek open-source lainnya (selain alat lain yang digunakan untuk mengembangkan, membangun dan menguji).
Sangat terkait dengan dependensi proyek (langsung dan transitif), silakan lihat SBOM (Bill of Material Perangkat Lunak) untuk tautan ke dependensi ini dan lisensi mereka.
Lihat dokumen referensi khusus.