جدول المحتويات:
- يدوي وأمثلة
- التثبيت والأسئلة الشائعة
- الميزات والمعايير
- حول حقوق الطبع والنشر والترخيص ، SBOM ، والمراجع
- الدردشة على Discord ، أو ناقش على Github ، أو مؤلف البريد الإلكتروني
kawipiko
هو خادم HTTP ثابت خفيف الوزن مكتوب في GO ؛ ركز على تقديم المحتوى الثابت بأسرع ما يمكن وفعالية قدر الإمكان ، مع أدنى الكمون ، وبأقل استهلاك للموارد (إما وحدة المعالجة المركزية ، ذاكرة الوصول العشوائي ، IO) ؛ دعم كل من HTTP/1 (مع أو بدون TLS) ، HTTP/2 و HTTP/3 (فوق QUIC) ؛ متاح كأحد المنافسة المرتبطة بشكل ثابت دون أي تبعيات أخرى.
تريد أن ترى kawipiko
في العمل؟
/documentation
مواقع ثابتة تضغط بشكل جيد ، تمثل /carina-nebula
، /openstreetmap
و /fontawesome
مواقع ثابتة تولد الكثير من الطلبات الصغيرة ؛ (يرجى ملاحظة أن هذا المثيل وراء CloudFlare ، ومع ذلك تم توجيهه إلى عدم تخزين أي شيء على الحافة ؛) (يتم استضافة الخادم حاليًا عبر اتصال بالألياف السكنية ؛) ومع ذلك ، فإن البسيط لا يعني غبيًا أو محدودًا ، بل إنه ينطوي على كفاءة من خلال إزالة الميزات غير الضرورية ، وبالتالي كونه متضخمًا مع فلسفة UNIX القديمة المتمثلة في "القيام بشيء واحد وفعل ذلك بشكل جيد". لذلك ، فإنه يدعم فقط GET
الطلبات ، ولا يوفر ميزات مثل توليد المحتوى الديناميكي ، والمصادقة ، والوكالة العكسية ، وما إلى ذلك ؛ في هذه الأثناء ، لا يزال توفير الضغط ( gzip
، zopfli
، أو brotli
) ، بالإضافة إلى mestive HTML-CSS-JS (TODO) ، دون التأثير على أدائها (بسبب بنيةه الفريدة كما هو موضح أدناه).
ما يوفره kawipiko
هو شيء فريد للغاية ، ولا يوفره أي خادم HTTP آخر: يتم تقديم المحتوى الثابت من ملف CDB بدون زمن وصول تقريبًا (مقارنةً بالخوادم الثابتة الكلاسيكية التي لا يزال يتعين على نظام التشغيل عبر open-read-close
syscalls). علاوة على ذلك ، كما ذكرنا سابقًا ، لا يزال من الممكن ضغط المحتوى الثابت أو مصنعه في وقت مبكر ، مما يقلل ليس فقط وحدة المعالجة المركزية ولكن أيضًا عرض النطاق الترددي والكمون.
ملفات CDB عبارة عن ملفات قاعدة بيانات ثنائية توفر جداول بحثية فعالة لقراءة المفاتيح ، وتستخدم مبدئيًا في بعض خوادم DNS و SMTP ، وذلك أساسًا لعمليات البحث العلوية المنخفضة ، وقفل صفر في سيناريوهات متعددة الخيوط / متعددة المعالجة ، و "الذرية "تحديثات متعددة السجل. هذا أيضًا يجعلها مناسبة للمحتوى الثابت منخفض الإنشاء الذي يخدم عبر HTTP ، وهو ما يوفره هذا المشروع.
بالنسبة لأولئك المطلعين على NetLify (أو المنافسين مثل صفحات CloudFlare ، صفحات GitHub ، إلخ) ، يعد kawipiko
بديلًا مضيفًا بنفسك يضم:
chroot
منها ، أو حاويةها كما هي في الموضة هذه الأيام ؛)للحصول على قائمة كاملة بالميزات ، يرجى استشارة قسم الميزات. لسوء الحظ ، هناك أيضًا بعض المقايضات كما هو موضح في قسم القيود (على الرغم من أن لا شيء حرج).
فيما يتعلق بالأداء ، كما هو موضح في قسم المعايير ، فإن kawipiko
على الأقل على المستوى مع Nginx ، حيث يحافظ على أكثر من 100 ألف طلب / ثانية مع 0.25 مللي ثانية لمادة 99 ٪ من الطلبات حتى على الكمبيوتر المحمول البالغ من العمر 6 سنوات. ومع ذلك ، فإن الميزة الرئيسية على NGINX ليست الأداء الخام ، ولكن البساطة النشر والتكوين ، بالإضافة إلى الإدارة الفعالة وتخزين مجموعات كبيرة من العديد من الملفات الصغيرة.
فيما يتعلق بـ kawipiko
لقد نشرت أيضًا بعض المقالات على موقعي الخاص:
seccomp
SESCALL من Linux لتحسين الأمان عن طريق تقليل سطح الهجوم ؛kawipiko
؛)يوفر المشروع التنفيذيين التاليين (مرتبط بشكل ثابت ، دون أي تبعيات أخرى):
kawipiko-server
الذي يخدم المحتوى الثابت من أرشيف CDB إما عبر HTTP (مع أو بدون TLS) ، HTTP/2 أو HTTP/3 (فوق Quic) ؛kawipiko-archiver
الذي ينشئ أرشيف CDB من مجلد المصدر يحمل المحتوى الثابت ، وضغط ملفات وإرشادها اختياريًا ؛kawipiko
وهو أمر قابل للتنفيذ من كل واحد يحدد جميع الوظائف في واحدة قابلة للتنفيذ ؛ (أي kawipiko server ...
أو kawipiko archiver ...
) ؛ على عكس معظم الخوادم الأخرى (إن لم يكن كلها) ، هناك فقط توجه خادم الويب الخاص بك إلى المجلد الذي يحمل جذر محتوى موقع الويب الثابت ، يتبع kawipiko
مقاربة مختلفة تمامًا: من أجل خدمة المحتوى الثابت ، يجب على المرء أولاً إلى أرشفة المحتوى في أرشيف CDB من خلال kawipiko-archiver
، ثم يمكن للمرء تقديمه من أرشيف CDB عبر kawipiko-server
.
تعرض هذه المرحلة المكونة من خطوتين أيضًا بعض الفرص:
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 -Sources ./python-3.10.1-docs-html -ديبوج #
قم بإنشاء أرشيف CDB (مع ضغط gzip
):
Kawipiko-Archiver -Archive ./python-3.10.1-docs-html-gzip.cdb -Sources ./python-3.10.1-docs-html -ضغط gzip -ديبوج #
قم بإنشاء أرشيف CDB (مع ضغط zopfli
):
Kawipiko-Archiver -Archive ./python-3.10.1-docs-html-zopfli.cdb -Sources ./python-3.10.1-docs-html -ضغط Zopfli -ديبوج #
قم بإنشاء أرشيف CDB (مع ضغط brotli
):
Kawipiko-Archiver -Archive ./python-3.10.1-docs-html-brotli.cdb -Sources ./python-3.10.1-docs-html -ضغط بروتلي -ديبوج #
تخدم أرشيف CDB (مع ضغط gzip
):
Kawipiko-server -Bind 127.0.0.1:8080 -Archive ./python-3.10.1-docs-html-gzip.cdb -archive mmap -archive-preload -ديبوج #
قارن المصادر وأحجام الأرشيف:
دو -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
) ؛ هذه التداول ذاكرة وحدة المعالجة المركزية ؛rename
Syscall (أو أداة mv
) ، يتم ملاحظة جميع الموارد التي يتم تقديمها في نفس الوقت ؛_wildcard.*
ملفات (حيث .*
هي الامتدادات العادية مثل .txt
، .html
، وما إلى ذلك) والتي سيتم استخدامها إذا لم يتم العثور على مورد فعلي تحت هذا المجلد ؛ (تحترم هذه الملفات بنية الأشجار الهرمية ، أي "أعمق" تتجاوز تلك القريبة من "الجذر" ؛)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
اختياريًا ، ويمكن أيضًا تضمين TLS أو الرؤوس المتعلقة بالأمان ؛)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 محمول للغاية ومستقر للغاية ، وخاصة لأنه يمكن أن يدعم بسهولة ثنائيات مرتبطة بشكل ثابت بأي منصة تدعمها.
نظرًا لأن Rust يفشل في دعم التنفيذيين المتقاطعين (المرتبط بشكل ثابت أو ديناميكي) بأي نظام أساسي يدعمه.
لأن الصدأ أقل محمولة من الذهاب. على سبيل المثال ، لا يعتبر Rust OpenBSD منصة "Tier-1".
يرجى أيضًا رؤية SBOM (فاتورة برامج المواد) للروابط تبعيات هذا المشروع ومؤلفيها.
الكود مرخص تحت AGPL 3 أو أحدث.
إذا قمت بتغيير الكود في هذا المستودع واستخدمته لأغراض غير شخصية ، فسيتعين عليك إصداره وفقًا لـ AGPL.
للحصول على تفاصيل حول حقوق الطبع والنشر والترخيص ، يرجى الرجوع إلى ملف الإشعار في مجلد الوثائق/الترخيص.
إذا طلب شخص ما من المصادر و/أو الوثائق إصدارها بموجب ترخيص مختلف ، فيرجى إرسال بريد إلكتروني إلى المؤلفين ، مع ذكر متطلبات الترخيص ، مصحوبة بالأسباب والتفاصيل الأخرى ؛ بعد ذلك ، بناءً على الموقف ، قد يصدر المؤلفون المصادر و/أو الوثائق بموجب ترخيص مختلف.
يشتمل هذا المشروع ، مثل العديد من المشاريع الأخرى مفتوحة المصدر ، على رمز من مشاريع أخرى مفتوحة المصدر (إلى جانب الأدوات الأخرى المستخدمة لتطوير وبناء واختبار).
يرتبط بشكل صارم بتبعيات المشروع (المباشر والتعابر) ، يرجى الاطلاع على SBOM (فاتورة برامج المواد) للحصول على روابط لهذه التبعيات وتراخيصها.
انظر وثيقة المراجع المخصصة.