Оглавление:
- Ручной и примеры
- Установка и FAQ
- Особенности и тесты
- О авторских правах и лицензировании, SBOM и ссылках
- чат по раздора, обсудить на GitHub или автор электронной почты
kawipiko
- это легкий статический HTTP -сервер, написанный в Go; сосредоточен на обслуживании статического контента как можно быстрее и эффективно , с самой низкой задержкой и с наименьшим потреблением ресурсов (либо процессор, RAM, IO); поддерживая как http/1 (с TLS или без TLS), HTTP/2 и HTTP/3 (над QUIC) ; Доступно в виде единственного статически связанного исполняемого файла без каких -либо других зависимостей.
Хотите увидеть kawipiko
в действии?
/documentation
представляет статические сайты, которые хорошо сжимают, тем временем /carina-nebula
, /openstreetmap
и /fontawesome
представляют статические сайты, которые генерируют множество небольших запросов; (Обратите внимание, что этот экземпляр стоит за CloudFlare, однако было указано не кэшировать ничего на грани;) (сервер в настоящее время размещен через жилое волоконное соединение;) Тем не менее, Simple не подразумевает глупости или ограничено , вместо этого это подразумевает эффективность путем удаления лишних функций, тем самым встроенный со старой философией Unix «Делай одну вещь и делай это хорошо». Следовательно, он поддерживает только GET
запросов и не предоставляет такие функции, как динамическое образование контента, аутентификация, обратное прокси и т. Д.; Тем временем все еще обеспечивает сжатие ( gzip
, zopfli
или brotli
), а также мини-министерство HTML-CSS-JS (TODO), не влияя на ее производительность (из-за ее уникальной архитектуры, как описано ниже).
То, что kawipiko
предоставляет,-это нечто уникальное, что ни один другой HTTP-сервер не предлагает: статический контент обслуживается из файла CDB практически без задержки (по сравнению с классическими статическими серверами, которые все еще должны проходить через ОС через open-read-close
Syscalls). Более того, как отмечалось ранее, статическое содержание все еще может быть сжато или минимизировано заранее, тем самым уменьшая не только процессор, но и полосу пропускания и задержку.
Файлы CDB представляют собой двоичные файлы базы данных, которые обеспечивают эффективные таблицы поиска ключей только для чтения, первоначально используемые на некоторых серверах DNS и SMTP, в основном для их операций с низким уровнем поиска накладных расходов, нулевой блокировки в многопоточных / многопроцессовых сценариях и «атомной "Многорековые обновления. Это также делает их подходящими для статического контента с низкой задержкой, обслуживающим HTTP, что является тем, что предоставляет этот проект.
Для тех, кто знаком с NetLify (или конкурентами, такими как CloudFlare Pages, GitHub Pages и т. Д.), kawipiko
-это альтернатива Host-it Your Self, которая включает в себя:
chroot
, или контейнер, как в моде в наши дни;)Для получения полного списка функций обратитесь к разделу функций. К сожалению, есть также некоторые компромиссы, как описано в разделе ограничений (хотя ни один из них не является критическим).
Что касается производительности, как описано в разделе «Целевые показатели», kawipiko
, по крайней мере, на первом месте с Nginx, поддерживая более 100 тыс. Запросов / секунду с задержкой 0,25 мс для 99% запросов даже на моем 6-летнем ноутбуке. Однако основным преимуществом по сравнению с NGINX является не сырая производительность, а простота развертывания и конфигурации, а также эффективное управление и хранение больших коллекций многих небольших файлов.
Что касается kawipiko
я также опубликовал несколько статей на моем собственном сайте:
seccomp
Linux для повышения безопасности путем уменьшения поверхности атаки;kawipiko
;)Проект предоставляет следующие исполняемые файлы (статически связанные, без каких -либо других зависимостей):
kawipiko-server
, который служит статическим содержанием из архива CDB либо через HTTP (с TLS или без без TLS), HTTP/2 или HTTP/3 (над QUIC);kawipiko-archiver
-который создает архив CDB из исходной папки, удерживающего статическое содержимое, необязательно сжатие и миниабификацию файлов;kawipiko
-исполняемый файл в одном в одном, который объединяет все функциональность в одном исполняемом файле; (IE kawipiko server ...
или kawipiko archiver ...
); В отличие от большинства (если не все) других серверов, в которых вы просто указываете свой веб-сервер на папку, содержащую статический корень содержимого веб-сайта, kawipiko
использует радикально другой подход: для того, чтобы обслуживать статический контент, нужно сначала сначала Архивируйте содержание в архив CDB через kawipiko-archiver
, а затем можно подавать его из архива CDB через kawipiko-server
.
Этот двухэтапный этап также предоставляет несколько возможностей:
zopfli
или brotli
) для торговли ЦП во время развертывания против задержки и пропускной способности во время выполнения. Смотрите выделенное руководство.
Этот документ также доступен в простом тексте или в качестве страницы человека.
Смотрите выделенное руководство.
Этот документ также доступен в простом тексте или в качестве страницы человека.
Принесите и извлеките документацию Python 3.10 HTML Archive:
скручивание -s -s -f -О ./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 (без какого -либо сжатия):
Kawipik-archiver -Archive ./python-3.10.1-docs-html-nocomp.cdb -исходные материалы ./python-3.10.1-docs-html -Дебуг #
Создайте архив CDB (с сжатием gzip
):
Kawipik-archiver -Archive ./python-3.10.1-docs-html-gzip.cdb -исходные материалы ./python-3.10.1-docs-html -Compress Gzip -Дебуг #
Создайте архив CDB (с сжатием zopfli
):
Kawipik-archiver -Archive ./python-3.10.1-docs-html-zopfli.cdb -исходные материалы ./python-3.10.1-docs-html -Compress Zopfli -Дебуг #
Создайте архив CDB (с сжатием brotli
):
Kawipik-archiver -Archive ./python-3.10.1-docs-html-brotli.cdb -исходные материалы ./python-3.10.1-docs-html -Compress brotli -Дебуг #
Подайте архив CDB (с сжатием gzip
):
Kawipiko-server -BIND 127.0.0.1:8080 -Archive ./python-3.10.1-docs-html-gzip.cdb -Архив-Ммап -Archive-Preload -Дебуг #
Сравните источники и размеры архива:
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,9 м 46M ./python-3.10.1-Docs-html 6,0M ./python-3.10.1-docs-html.tar.bz2
Смотрите выделенный документ установки.
Ниже приведен список наиболее важных функций:
gzip
, zopfli
или brotli
;mmap
); Это торгует памятью для процессора;rename
(или инструмент mv
), все обслуживаемые ресурсы изменяются одновременно;_wildcard.*
файлы (где .*
- это обычные расширения, такие как .txt
, .html
и т. Д.), Которые будут использоваться, если фактический ресурс не найден в этой папке; (Эти файлы уважают иерархическую структуру дерева, то есть «более глубокие» переопределяют те, которые ближе к «root»;)github.com/valyala/fasthttp
;net/http
;github.com/lucas-clemente/quic-go
; Ниже приведен список наиболее важных функций, которые в настоящее время отсутствуют и планируются реализованы:
Content-Type
Content-Length
, дополнительно Content-Encoding
Cache-Control: public, immutable, max-age=3600
, необязательно ETag
, и несколько заголовков, связанных с безопасностью, также могут быть включены;) Также могут быть включены;)Host
, поддерживается сервером, а частично архивером;)https://github.com/tdewolff/minify
;404
подстановки;) Как указано в разделе «ОБС», ничто не поступает бесплатно, и для того, чтобы предоставить все эти функции, некоторые углы должны были быть вырезаны:
brotli
), сервер будет обслуживать все ресурсы, сжатые (то есть Content-Encoding: brotli
), независимо от того, что браузер принимает (т.е. Accept-Encoding: gzip
); То же самое относится и к несжатому контенту; (Однако всегда использование сжатия gzip
достаточно безопасно, так как оно реализовано практически во всех браузерах и клиентах HTTP;)Смотрите специальный документ тестов.
Если вы столкнулись с ошибкой, просто используйте проблемы с GitHub.
Если вы не уверены в чем -то, хотите дать отзыв или запросить новые функции, просто используйте дискуссии GitHub.
Если вы хотите задать быстрый вопрос или просто пообщаться, просто зайдите на канал Discord.
Да, в настоящее время он обслуживает ~ 600K HTML -страницы.
Несмотря на то, что, будучи открытым исходным кодом, вы несете ответственность за то, чтобы он работает в соответствии с вашими требованиями!
Тем не менее, я доступен для консультации по развертыванию и использованию. :)
CDB является почтенной встроенной базой данных с ключом, реализованной DJ Bernstein, https://cr.yp.to/cdb.html, и использовался во многих программных решениях, реализованных им, в частности Qmail и Tinydns. Оттуда он был поднят многими другими сетевыми службами, которые требовали в основном статических таблиц с низким уровнем просмотра, например, Postfix в качестве альтернативы для его базы данных пользователей.
Пока я не рассмотрю, почему я решил использовать CDB для сервисного статического контента веб -сайта, вы можете прочитать о Sparkey от Spotify.
Используемая реализация CDB - это пользовательская вилка следующего:
Потому что GO очень портативный, очень стабильный, и особенно потому, что он может легко поддерживать перекрестную компиляцию статически связанных двоичных файлов на любую платформу, которую она поддерживает.
Поскольку ржавчина не может легко поддерживать перекрестные компилирование (статически или динамически связанные) исполнительные файлы на любую платформу, которую она поддерживает.
Потому что ржавчина менее портативна, чем Go; Например, Rust не рассматривает OpenBSD как платформу «уровня 1».
Пожалуйста, также посмотрите SBOM (счет материалов программного обеспечения) для ссылок зависимости этого проекта и их авторов.
Код лицензирован в AGPL 3 или более поздней версии.
Если вы измените код в этом репозитории и используете его для неличных целей, вам придется выпустить его в соответствии с AGPL.
Для получения подробной информации об авторском праве и лицензировании, пожалуйста, обратитесь к файлу уведомления в папке документации/лицензирования.
Если кто -то требует, чтобы источники и/или документация были выпущены по другой лицензии, отправьте электронное письмо авторам, указав требования к лицензированию, сопровождаемые причинами и другими деталями; Затем, в зависимости от ситуации, авторы могут выпустить источники и/или документацию по другой лицензии.
Этот проект, как и многие другие проекты с открытым исходным кодом, включает код из других проектов с открытым исходным кодом (помимо других инструментов, используемых для разработки, создания и тестирования).
Строго связанный с зависимостью проекта (прямой и переходной), см. SBOM (счет материалов программного обеспечения) для ссылок на эти зависимости и их лицензии.
См. Предоставленный документ ссылок.