목차 :
- 매뉴얼 및 예
- 설치 및 FAQ
- 특징 및 벤치 마크
- 소개, 저작권 및 라이센스, SBOM 및 참조
- Discord에서 채팅, Github에서 토론하거나 이메일 저자에 대해 토론하십시오
kawipiko
가벼운 정적 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 MINIFING (TODO)를 제공하고 (아래에 설명 된 독특한 아키텍처로 인해)
kawipiko
제공하는 것은 다른 HTTP 서버가 제공하지 않는 매우 독특한 것입니다. 정적 컨텐츠는 대기 시간이 거의없는 CDB 파일에서 제공됩니다 ( open-read-close
통해 OS를 통과 해야하는 고전적인 정적 서버와 비교할 때. syscalls를 open-read-close
). 또한, 앞에서 언급 한 바와 같이, 정적 컨텐츠는 여전히 미리 압축되거나 미리 조정될 수 있으므로 CPU뿐만 아니라 대역폭 및 대기 시간을 줄일 수 있습니다.
CDB 파일은 효율적인 읽기 전용 키 값 조회 테이블을 제공하는 이진 데이터베이스 파일입니다. 처음에는 일부 DNS 및 SMTP 서버, 주로 오버 헤드 조회 작업이 낮은 다중 스레드 / 다중 프로세스 시나리오에서의 제로 잠금 및 "Atomic. "멀티 레코드 업데이트. 이것은 또한 HTTP를 통해 제공하는 저도의 정적 컨텐츠에 적합합니다.이 프로젝트는이 프로젝트가 제공하는 것입니다.
NetLify에 익숙한 사람들 (또는 CloudFlare Pages, GitHub 페이지 등과 같은 경쟁자)을 위해 kawipiko
는 다음과 같은 호스트 대안입니다.
chroot
를 컨테이너화 할 수 있습니다.)전체 기능 목록은 기능 섹션을 참조하십시오. 불행히도, 한계 섹션에 설명 된 일부 트레이드 오프도 있습니다 (중요하지는 않지만).
성능과 관련하여 벤치 마크 섹션에 설명 된 바와 같이, kawipiko
최소한 Nginx를 사용하여 PAR 이상이며, 6 년 된 랩톱에서도 요청의 99%에 대해 0.25ms의 대기 시간으로 100k 이상의 요청 / 초를 유지합니다. 그러나 NGINX의 주요 장점은 원시 성능이 아니라 배포 및 구성 단순성과 많은 작은 파일의 대규모 컬렉션의 효율적인 관리 및 저장입니다.
kawipiko
와 관련하여 나는 내 사이트에 몇 가지 기사를 게시했습니다.
seccomp
Syscall 필터링을 사용한 방법에 대해 설명합니다.kawipiko
였습니다.)이 프로젝트는 다음과 같은 실행 파일을 제공합니다 (다른 종속성없이 정적으로 연결됨).
kawipiko-server
HTTP (TLS 유무), HTTP/2 또는 HTTP/3 (Quic)을 통해 CDB 아카이브의 정적 컨텐츠를 제공합니다.kawipiko-archiver
정적 컨텐츠를 보유한 소스 폴더에서 CDB 아카이브를 작성하여 선택적으로 파일을 압축하고 조정합니다.kawipiko
하나의 실행 파일로 모든 기능을 번들로 제공하는 올인원 실행 파일; (즉, kawipiko server ...
또는 kawipiko archiver ...
); 다른 서버와 달리 다른 서버는 웹 서버를 정적 웹 사이트 컨텐츠 루트를 보유한 폴더에 가리키면 근본적으로 다른 접근 방식을 kawipiko
합니다. 정적 컨텐츠를 제공하려면 먼저 먼저해야합니다. kawipiko-archiver
통해 CDB 아카이브에 컨텐츠를 보관 한 다음 kawipiko-server
통해 CDB 아카이브에서 제공 할 수 있습니다.
이 두 단계 단계는 몇 가지 기회를 제공합니다.
zopfli
또는 brotli
)을 적용 할 수 있습니다. 전용 매뉴얼을 참조하십시오.
이 문서는 일반 텍스트 또는 남자 페이지로도 제공됩니다.
전용 매뉴얼을 참조하십시오.
이 문서는 일반 텍스트 또는 남자 페이지로도 제공됩니다.
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-Archiver --archive ./python-3.10.1-docs-html-nocomp.cdb -소스 ./python-3.10.1-docs-html -debug 틀
CDB 아카이브 생성 ( gzip
압축 포함) :
Kawipiko-Archiver --archive ./python-3.10.1-docs-html-gzip.cdb -소스 ./python-3.10.1-docs-html -코프워드 gzip -debug 틀
CDB 아카이브 작성 ( zopfli
압축 포함) :
Kawipiko-Archiver --archive ./python-3.10.1-docs-html-zopfli.cdb -소스 ./python-3.10.1-docs-html -코프트 Zopfli -debug 틀
CDB 아카이브 작성 ( brotli
압축 포함) :
Kawipiko-Archiver --archive ./python-3.10.1-docs-html-brotli.cdb -소스 ./python-3.10.1-docs-html -압축 브로 틀리 -debug 틀
CDB 아카이브 ( gzip
압축)를 제공합니다.
카위 피코-서버 -결합 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
또는 brotli
로 압축 될 수 있습니다.mmap
사용). 이것은 CPU를 위해 메모리를 거래합니다.rename
SyScall (또는 mv
도구)을 통해 원자 적으로 달성되므로 모든 서비스 리소스가 동시에 변경되는 것으로 관찰됩니다._wildcard.*
파일 (여기서 .*
.txt
, .html
등과 같은 정규 확장)은 해당 폴더에서 실제 리소스를 찾을 수없는 경우 사용됩니다. (이 파일은 계층 적 트리 구조를 존중합니다. 즉, "더 깊은"구조는 "루트"에 더 가깝게 무시합니다.)github.com/valyala/fasthttp
활용하여 HTTP/1 (TLS 유무)에 대한 지원;net/http
활용하여 HTTP/2에 대한 지원;github.com/lucas-clemente/quic-go
활용하여 HTTP/3 (Over Quic)에 대한 지원; 다음은 현재 누락되어 구현 될 계획 인 가장 중요한 기능의 목록입니다.
Content-Type
, Content-Length
, Content-Encoding
만 포함되어 있습니다. 추가로 Cache-Control: public, immutable, max-age=3600
, 선택적으로 ETag
및 몇 가지 TLS 또는 보안 관련 헤더도 포함될 수 있습니다.)Host
헤더는 서버와 부분적으로 아카이버에 의해 지원됩니다.)https://github.com/tdewolff/minify
활용하여 HTML, CSS 및 JavaScript를 최소화합니다.404
와일드 카드 만 지원됩니다.) About Section에 명시된 바와 같이, 무료로 제공되는 것은 없으며, 이러한 모든 기능을 제공하기 위해 일부 코너는 다음을 잘라야했습니다.
brotli
)으로 저장된 경우 서버는 브라우저가 수락 한 내용에 관계없이 (예 : Accept-Encoding: gzip
)에 관계없이 모든 리소스 압축 (예 : Content-Encoding: brotli
)을 제공한다는 것을 의미합니다. 압축되지 않은 컨텐츠에도 동일하게 적용됩니다. (그러나 거의 모든 브라우저 및 HTTP 클라이언트에서 구현되므로 항상 gzip
압축을 사용하는 것은 항상 안전합니다.)전용 벤치 마크 문서를 참조하십시오.
버그가 발생한 경우 Github 문제 만 사용하십시오.
무언가에 대해 확실하지 않거나 피드백을 제공하거나 새로운 기능을 요청하고 싶다면 Github 토론을 사용하십시오.
빠른 질문을하거나 빠른 채팅을하고 싶다면 Discord 채널로 가십시오.
예, 현재 ~ 600K HTML 페이지를 제공하고 있습니다.
오픈 소스이지만 요구 사항 내에서 작동하는지 확인해야합니다!
그러나 배포 및 사용에 대한 컨설팅을 할 수 있습니다. :)
CDB는 DJ Bernstein, https://cr.yp.to/cdb.html에서 구현 한 유서 깊은 키-값 임베디드 데이터베이스이며, 특히 Qmail 및 Tinydns가 구현 한 많은 소프트웨어 솔루션에서 사용되었습니다. 거기에서 그것은 사용자 데이터베이스의 대안으로 PostFix와 같이 주로 정적로 낮은 헤드 조회 테이블이 필요한 다른 많은 네트워크 서비스에 의해 선택되었습니다.
서비스 정적 웹 사이트 콘텐츠에 CDB를 사용하기로 선택한 이유를 확장 할 때까지 Spotify의 Sparkey에 대해 읽을 수 있습니다.
사용중인 CDB 구현은 다음의 커스텀 포크입니다.
GO는 휴대성이 높고 안정적이며 특히 통계적으로 연결된 이진을 지원하는 모든 플랫폼에 쉽게 지원할 수 있기 때문에 특히 안정적이며 특히 안정적이며 특히 안정적이며 특히 안정적이며 특히 지원하는 모든 플랫폼에 쉽게 지원할 수 있기 때문입니다.
Rust는 지원하는 모든 플랫폼에 대한 교차 컴파일 (정적 또는 동적으로 연결된) 실행 파이브를 쉽게 지원하지 않기 때문입니다.
녹이 이동하는 것보다 휴대가 덜 휴대하기 때문입니다. 예를 들어 Rust는 OpenBSD를 "Tier-1"플랫폼으로 간주하지 않습니다.
이 프로젝트의 종속성 및 저자 링크는 SBOM (소프트웨어 장비)도 참조하십시오.
코드는 AGPL 3 이상에 라이센스가 부여됩니다.
이 저장소 내에서 코드를 변경 하여 비 개인 목적으로 사용 하면 AGPL에 따라 해제해야합니다.
저작권 및 라이센스에 대한 자세한 내용은 문서/라이센스 폴더의 통지 파일을 참조하십시오.
누군가가 다른 라이센스로 출처 및/또는 문서를 릴리스 해야하는 경우, 사유 및 기타 세부 사항과 함께 라이센스 요구 사항을 명시하여 저자에게 이메일을 보내주십시오. 그런 다음 상황에 따라 저자는 다른 라이센스로 출처 및/또는 문서를 공개 할 수 있습니다.
이 프로젝트는 다른 많은 오픈 소스 프로젝트와 마찬가지로 다른 오픈 소스 프로젝트 (개발, 구축 및 테스트에 사용되는 다른 도구 외에)의 코드를 통합합니다.
프로젝트의 종속성 (직접 및 전이)과 엄격하게 관련된 경우, 이러한 종속성 및 라이센스에 대한 링크는 SBOM (소프트웨어 자료 청구서)을 참조하십시오.
전용 참조 문서를 참조하십시오.