目录:
- 手册和示例
- 安装和常见问题解答
- 功能和基准
- 关于版权和许可,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
仍然必须通过OS的经典静态服务器相比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(软件材料清单)有关这些依赖项及其许可证的链接。
请参阅专用参考文档。