目錄:
- 手冊和示例
- 安裝和常見問題解答
- 功能和基準
- 關於版權和許可,SBOM和參考
- 在Discord上聊天,在GitHub上討論或電子郵件作者
kawipiko
是用GO編寫的輕量級靜態HTTP服務器;專注於以最低的延遲和最低的資源消耗(CPU,RAM,IO)盡可能快,高效地提供靜態內容;支持HTTP/1(帶有或不帶有TLS),HTTP/2和HTTP/3(超過QUIC) ;可作為單個靜態鏈接的可執行文件可用,而無需任何其他依賴項。
想看到kawipiko
在行動中嗎?
/documentation
表示靜態站點可以很好地壓縮,同時/carina-nebula
, /openstreetmap
和/fontawesome
代表產生許多小請求的靜態站點; (請注意,此實例是在CloudFlare後面的,但是已指示它不要緩存邊緣上的任何內容;)(目前,服務器是通過住宅光纖連接託管的;)但是,簡單並不意味著愚蠢或有限,而是通過刪除多餘的特徵,這意味著有效,因此與Unix的舊哲學有關“做一件事情並做得很好”。因此,它僅支持GET
請求,並且不提供諸如動態內容生成,身份驗證,反向代理等的功能;同時,仍然提供壓縮( gzip
, zopfli
或brotli
),以及HTML-CSS-JS縮放(TODO),而不會影響其性能(由於其獨特的架構如下所述)。
kawipiko
提供的功能是非常獨特的,沒有其他HTTP服務器提供的東西:靜態內容是從幾乎沒有延遲的CDB文件中提供的(與仍然必須通過open-read-close
syscalls )。此外,如前所述,靜態含量仍然可以提前壓縮或縮小,從而不僅可以減少CPU,還可以減少帶寬和延遲。
CDB文件是二進制數據庫文件,可提供有效的只讀鍵值查找表,最初用於某些DNS和SMTP服務器,主要用於其低開銷查找操作,在多線程/多個過程中零鎖定,以及“ Atomicic” “多記錄更新。這也使它們適合於HTTP上使用的低延遲靜態含量,這是該項目提供的。
對於那些熟悉Netlify(或Cloudflare頁面,GitHub頁面等競爭對手)的人, kawipiko
是一個主持自己的替代方案:
chroot
或像如今的時尚中像在時尚中進行容器;)有關功能的完整列表,請諮詢“功能”部分。不幸的是,如限制部分所述,也存在一些權衡(儘管沒有一個至關重要)。
關於性能,如“基準”部分所述, kawipiko
至少與NGINX相比,即使在我6歲的筆記本電腦上,也有99%的請求的持續時間超過100K /秒,延遲了0.25ms。但是,與NGINX相比,主要優勢不是原始性能,而是部署和配置簡單性,以及許多小文件的大量集合的管理和存儲。
關於kawipiko
我還在我自己的網站上發表了一些文章:
seccomp
Syscall過濾來通過減少攻擊表面來提高安全性;kawipiko
;)該項目提供以下可執行文件(靜態鏈接,沒有任何其他依賴關係):
kawipiko-server
通過HTTP(有或沒有TLS),HTTP/2或HTTP/3(通過QUIC)提供CDB存檔中靜態含量;kawipiko-archiver
從固定靜態內容的源文件夾中創建CDB存檔,可選地壓縮和縮小文件;kawipiko
一個多合一的可執行文件,將所有功能捆綁在一個可執行文件中; (即kawipiko server ...
或kawipiko archiver ...
);與大多數(如果不是全部)其他服務器不同的是,您只需將Web服務器指向持有靜態網站內容root的文件夾, kawipiko
採用了一種截然不同的方法:為了提供靜態內容,必須首先將內容通過kawipiko-archiver
歸檔到CDB存檔中,然後可以通過kawipiko-server
從CDB存檔中提供它。
這個兩個步驟階段也帶來了一些機會:
zopfli
或brotli
)進行運行時交易CPU。 查看專用手冊。
該文檔也可以用純文本或人頁面提供。
查看專用手冊。
該文檔也可以用純文本或人頁面提供。
獲取並提取Python 3.10文檔HTML存檔:
捲髮 -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 # 焦油 -x -j -v -f ./python-3.10.1-docs-html.tar.bz2 #
創建CDB存檔(無需任何壓縮):
kawipiko-arkiver -archive./python-3.10.1-docs-html-nocomp.cdb -sources ./python-3.10.1-docs-html --偵錯 #
創建CDB存檔(帶有gzip
壓縮):
kawipiko-arkiver -archive./python-3.10.1-docs-html-gzip.cdb -sources ./python-3.10.1-docs-html - 壓縮gzip --偵錯 #
創建CDB存檔(帶有zopfli
壓縮):
kawipiko-arkiver -archive./python-3.10.1-docs-html-zopfli.cdb -sources ./python-3.10.1-docs-html - 壓縮zopfli --偵錯 #
創建CDB存檔(帶有brotli
壓縮):
kawipiko-arkiver -archive./python-3.10.1-docs-html-brotli.cdb -sources ./python-3.10.1-docs-html - 壓縮brotli --偵錯 #
服務CDB存檔(帶有gzip
壓縮):
kawipiko-server -bind 127.0.0.1:8080 -archive./python-3.10.1-docs-html-gzip.cdb -archive-mmap - Archive Proud --偵錯 #
比較來源和檔案尺寸:
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 79m ./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
請參閱專用安裝文檔。
以下是最重要的功能的列表:
gzip
, zopfli
或brotli
壓縮靜態內容;mmap
);這將存儲器的內存交換為CPU;rename
SYSCALL(或mv
工具)實現的,因此觀察到所有服務的資源都同時更改;_wildcard.*
.html
( .txt
.*
(這些文件尊重層次樹結構,即“更深”的文件覆蓋了層次結構,將其覆蓋靠近“ root”;)github.com/valyala/fasthttp
來支持HTTP/1(帶有或不帶TLS);net/http
;github.com/lucas-clemente/quic-go
; 以下是當前缺少併計劃實施的最重要功能的列表:
Content-Type
, Content-Length
, Content-Encoding
;此外, Cache-Control: public, immutable, max-age=3600
,可選的是ETag
,並且還可以包括一些TLS或安全相關的標頭;)Host
標頭,由服務器支持,部分由Archiver支持;)https://github.com/tdewolff/minify
來縮小HTML,CSS和JavaScript;404
通配符;) 如“關於”部分中所述,沒有什麼免費的,為了提供所有這些功能,必須剪切一些角落:
brotli
)將服務器服務於所有壓縮資源(即Content-Encoding: brotli
),而不管瀏覽器接受的內容(IE Accept-Encoding: gzip
) ;同樣的內容也適用於未壓縮的內容; (但是,始終使用gzip
壓縮是足夠安全的,因為它實際上是在所有瀏覽器和HTTP客戶端中實現的;)請參閱專用基准文件。
如果您遇到了錯誤,只需使用GitHub問題即可。
如果您不確定某些內容,請提供反饋或請求新功能,只需使用GitHub討論即可。
如果您想提出一個快速的問題,或者只是進行快速聊天,只需前往Discord頻道。
是的,它目前提供約60萬頁的HTML頁面。
雖然,作為開源,您有責任確保它在您的需求中有效!
但是,我可以就其部署和使用諮詢。 :)
CDB是DJ Bernstein,https://cr.yp.to/cdb.html實施的古怪鍵值嵌入式數據庫,並在他實施的許多軟件解決方案中使用,最著名的是Qmail和Tinydns。從那裡開始,許多其他網絡服務都需要大多數靜態的低空查找表,例如PostFix作為其用戶數據庫的替代方案。
直到我選擇為什麼選擇使用CDB進行服務靜態網站內容之前,您可以從Spotify中閱讀有關Sparkey的信息。
使用的CDB實現是以下的自定義分叉:
因為GO是高度便攜,高度穩定的,尤其是因為它可以輕鬆地支持靜態鏈接的靜態鏈接到其支持的任何平台。
因為Rust無法輕鬆支持其支持的任何平台的交叉編譯(靜態或動態鏈接)可執行文件。
因為生鏽的便攜性不如GO;例如,RUST不將OpenBSD視為“ Tier-1”平台。
還請參見SBOM(軟件材料清單)以鏈接該項目的依賴項及其作者。
該代碼是根據AGPL 3或以後獲得許可的。
如果您在此存儲庫中更改代碼並將其用於非個人目的,則必須按照AGPL發布。
有關版權和許可的詳細信息,請諮詢文檔/許可文件夾中的通知文件。
如果某人要求根據不同許可證發布來源和/或文檔,請向作者發送電子郵件,並說明許可要求,並附有原因和其他詳細信息;然後,根據情況,作者可能會根據不同許可發布來源和/或文檔。
與許多其他開源項目一樣,該項目結合了其他開源項目的代碼(除了用於開發,構建和測試的其他工具)。
與項目的依賴關係嚴格相關(直接和及時),請參閱SBOM(軟件材料清單)有關這些依賴項及其許可證的鏈接。
請參閱專用參考文檔。