目次:
- マニュアルと例
- インストールとFAQ
- 機能とベンチマーク
- 著作権とライセンス、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の「1つのことを行い、うまくやる」という古い哲学と一致しています。したがって、 GET
リクエストのみをサポートし、動的なコンテンツ生成、認証、逆プロキシなどの機能を提供しません。一方、まだ圧縮( gzip
、 zopfli
、またはbrotli
)を提供し、さらにHTML-CSS-JS Minifice(TODO)を提供します。
What kawipiko
does provide is something very unique, that no other HTTP server offers: the static content is served from a CDB file with almost no latency (as compared to classical static servers that still have to pass through the OS via the open-read-close
syscallsをopen-read-close
)。さらに、前述のように、静的コンテンツは事前に圧縮または縮小することができ、CPUだけでなく帯域幅と潜時も減少させることができます。
CDBファイルは、主に低いオーバーヘッドルックアップ操作、マルチスレッド /マルチプロセスシナリオのゼロロック、および「Atomicicic)のために、一部のDNSおよびSMTPサーバーで最初に使用されていた効率的な読み取り専用のキー値ルックアップテーブルを提供するバイナリデータベースファイルです。 「マルチレコードアップデート。これにより、HTTPを介した低遅延の静的コンテンツにも適しています。これは、このプロジェクトが提供するものです。
Netlify(またはCloudFlareページ、GitHubページなどのような競合他社)に精通している人のために、 kawipiko
ホストの代替品です。
chroot
、最近のようにコンテナ化できます;)機能の完全なリストについては、機能セクションを参照してください。残念ながら、制限セクションで説明されているトレードオフもあります(ただし、重要なものはありません)。
With regard to performance, as described in the benchmarks section, kawipiko
is at least on-par with NGinx, sustaining over 100K requests / second with 0.25ms latency for 99% of the requests even on my 6 years old laptop.ただし、Nginxよりも主な利点は、生のパフォーマンスではなく、展開と構成のシンプルさに加えて、多くの小さなファイルの大規模なコレクションの効率的な管理と保存です。
kawipiko
に関連して、私は自分のサイトにいくつかの記事を公開しました。
seccomp
syscall filtering to improve the security by reducing the attack surface;kawipiko
でした;)このプロジェクトは、次の実行可能ファイルを提供します(他の依存関係なしで、静的にリンクされています):
kawipiko-server
-HTTP(TLSの有無にかかわらず)、HTTP/2、またはHTTP/3(QUICを超える)を介してCDBアーカイブの静的コンテンツを提供します。kawipiko-archiver
静的コンテンツを保持しているソースフォルダーからCDBアーカイブを作成し、オプションでファイルを圧縮および模倣します。kawipiko
すべての機能を1つの実行可能ファイルにバンドルするオールインワン実行可能ファイル。 (すなわち、 kawipiko server ...
またはkawipiko archiver ...
); Unlike most (if not all) other servers out-there, in which you just point your web server to the folder holding the static website content root, kawipiko
takes a radically different approach: in order to serve the static content, one has to first archive the content into the CDB archive through kawipiko-archiver
, and then one can serve it from the CDB archive through kawipiko-server
.
この2つのステップフェーズには、いくつかの機会もあります。
zopfli
or brotli
), to trade CPU during deployment vs latency and bandwidth at runtime. 専用のマニュアルを参照してください。
このドキュメントは、プレーンテキストまたはマンページとしても入手できます。
専用のマニュアルを参照してください。
このドキュメントは、プレーンテキストまたはマンページとしても入手できます。
Python 3.10ドキュメントHTMLアーカイブを取得して抽出します。
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 #
CDBアーカイブを作成します(圧縮なし):
kawipiko-archiver -archive ./python-3.10.1-docs-html-nocomp.cdb ---sources ./python-3.10.1-docs-html -debug #
CDBアーカイブを作成します( gzip
圧縮付き):
kawipiko-archiver -archive ./python-3.10.1-docs-html-gzip.cdb ---sources ./python-3.10.1-docs-html - gzipを圧縮 -debug #
CDBアーカイブを作成します( zopfli
圧縮付き):
kawipiko-archiver -archive ./python-3.10.1-docs-html-zopfli.cdb ---sources ./python-3.10.1-docs-html - Zopfliを圧縮 -debug #
create the CDB archive (with brotli
compression):
kawipiko-archiver -archive ./python-3.10.1-docs-html-brotli.cdb ---sources ./python-3.10.1-docs-html - brotliを圧縮 -debug #
CDBアーカイブ( gzip
圧縮付き)を提供します。
kawipiko-server - バインド127.0.0.1:8080 -archive ./python-3.10.1-docs-html-gzip.cdb -ARCHIVE-MMAP -Archive-Preload -debug #
ソースとアーカイブのサイズを比較してください:
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
専用のインストールドキュメントを参照してください。
以下は、最も重要な機能のリストです。
gzip
, zopfli
or brotli
;mmap
);これはCPUのメモリを取引します。rename
syscall (or the mv
tool), all served resources are observed to change at the same time;_wildcard.*
files (where .*
are the regular extensions like .txt
, .html
, etc.) which will be used if an actual resource is not found under that folder; (これらのファイルは、階層のツリー構造を尊重します。つまり、「より深い」ものを「root」に近いものにオーバーライドします。)github.com/valyala/fasthttp
;net/http
;github.com/lucas-clemente/quic-go
; 以下は、現在欠落しており、実装される予定の最も重要な機能のリストです。
Content-Type
, Content-Length
, Content-Encoding
are included; additionally Cache-Control: public, immutable, max-age=3600
, optionally ETag
, and a few TLS or security related headers can also be included;)Host
header, is supported by the server, and partially by the archiver;)https://github.com/tdewolff/minify
;404
wildcards are supported;) Aboutセクションで述べたように、無料で何もありません。これらすべての機能を提供するために、いくつかのコーナーをカットする必要がありました。
brotli
), the server will serve all resources compressed (ie Content-Encoding: brotli
), regardless of what the browser accepts (ie Accept-Encoding: gzip
);非圧縮コンテンツにも同じことが当てはまります。 (however always using gzip
compression is safe enough, as it is implemented in virtually all browsers and HTTP clients out there;)専用のベンチマークドキュメントを参照してください。
バグに遭遇した場合は、GitHubの問題を使用してください。
何かについて確信が持てない場合は、フィードバックを提供するか、新機能をリクエストしたい場合は、GitHubディスカッションを使用してください。
簡単な質問をしたい場合、または簡単なチャットをしたい場合は、Discord Channelにアクセスしてください。
はい、現在、〜600kのHTMLページを提供しています。
ただし、オープンソースであるため、要件内で機能することを確認する責任があります!
ただし、展開と使用について相談することができます。 :)
CDBは、dj Bernstein、https://cr.yp.to/cdb.htmlによって実装された由緒あるキー値埋め込みデータベースであり、彼が実装した多くのソフトウェアソリューション、特にqmailとtinydnsで使用されました。そこから、他の多くのネットワークサービスによって取り上げられました。これは、ユーザーデータベースの代替としてPostFixなど、ほとんど静的な低オーバーヘッドルックアップテーブルを必要としました。
サービスの静的WebサイトコンテンツにCDBを使用することを選択した理由を拡張するまで、SpotifyのSparkeyについて読むことができます。
使用されているCDB実装は、次のカスタムフォークです。
Goは非常に携帯性が高く、非常に安定しているため、特にサポートするあらゆるプラットフォームに静的にリンクされたバイナリをクロスコンパイルすることを簡単にサポートできるためです。
Rustは、サポートする任意のプラットフォームにクロスコンパイル(静的または動的にリンクされた)実行可能ファイルを簡単にサポートできないためです。
さびは行くよりも携帯性が低いからです。たとえば、RustはOpenBSDを「Tier-1」プラットフォームと見なしていません。
また、このプロジェクトの依存関係とその著者のリンクについては、SBOM(ソフトウェア手形)もご覧ください。
このコードは、AGPL 3以下でライセンスされています。
If you change the code within this repository and use it for non-personal purposes, you'll have to release it as per AGPL.
著作権とライセンスの詳細については、ドキュメント/ライセンスフォルダーの通知ファイルを参照してください。
誰かが別のライセンスの下でリリースするためにソースやドキュメントを要求する場合は、ライセンス要件を記載した理由やその他の詳細を添付して、著者にメールを送信してください。次に、状況に応じて、著者は別のライセンスの下でソースやドキュメントをリリースする場合があります。
このプロジェクトは、他の多くのオープンソースプロジェクトと同様に、他のオープンソースプロジェクトのコードを組み込んでいます(開発、構築、テストに使用される他のツールを除く)。
プロジェクトの依存関係(直接的および推移的)に厳密に関連している場合は、これらの依存関係とそのライセンスへのリンクについては、SBOM(ソフトウェア法案)を参照してください。
専用の参照文書を参照してください。