การดำเนินงานในโปรดักชัน
ภาพรวมโดยสังเขป
หัวข้อที่มีชื่อว่า “ภาพรวมโดยสังเขป”หน้านี้คือเช็กลิสต์สำหรับการนำ NextPDF ขึ้นสู่โปรดักชันและดูแลให้อยู่ในสภาพพร้อมใช้งานต่อไป หน้านี้ทำหน้าที่คัดสรรเนื้อหาจากคู่มือ โดยแต่ละรายการเชื่อมโยงไปยังหน้าที่ให้รายละเอียดเชิงลึก เพื่อให้ตรวจสอบที่นี่แล้วไปอ่านรายละเอียดที่นั่น ดำเนินการตาม เช็กลิสต์ก่อนดีพลอย ให้ครบก่อนการรีลีสครั้งแรก และกลับมาทบทวน จังหวะการอัปเกรด กับ จุดเริ่มต้นการคัดแยกเหตุการณ์ เป็นส่วนหนึ่งของการดำเนินงานในช่วงหลังเริ่มใช้งาน
เช็กลิสต์ก่อนดีพลอย
หัวข้อที่มีชื่อว่า “เช็กลิสต์ก่อนดีพลอย”- ยืนยันรันไทม์: NextPDF ต้องใช้ PHP
>=8.4 <9.0โดย Composer จะปฏิเสธทุกอย่างที่อยู่ นอกช่วงนี้ ดู การติดตั้ง - ตรวจสอบส่วนขยายที่จำเป็นทั้งหกตัวด้วย
php -mได้แก่ext-mbstring,ext-zlib,ext-intl,ext-gd,ext-curlและext-opensslโดย หน้าการติดตั้ง อธิบายว่าแต่ละตัวทำอะไร - รัน
vendor/bin/nextpdf doctorเพื่อตรวจสอบสภาพแวดล้อมแบบครบในครั้งเดียว (เวอร์ชัน PHP, ส่วนขยาย และความพร้อมใช้งานของฟอนต์ในรายงานฉบับเดียว) - เลือกเส้นทางการเรนเดอร์ก่อนกำหนดขนาดฮาร์ดแวร์ ไปป์ไลน์แบบในกระบวนการ
(
writeHtml()) ไม่ต้องใช้บริการเพิ่มเติม ส่วน Artisan, Gotenberg และ Cloudflare ต่างเพิ่มเบราว์เซอร์หรือบริการเครือข่ายที่ต้องดูแล ใช้ เลือกเส้นทางของคุณ เพื่อตัดสินใจ - หากเลือกใช้บริดจ์ตัวเรนเดอร์ ให้อ่านหน้าความปลอดภัยและการดำเนินงานของบริดจ์นั้น ก่อนเปิดใช้งานจริง ดู การเสริมความแข็งแกร่งของพื้นผิวตัวเรนเดอร์
- รวมเฉพาะฟอนต์ที่จะเรนเดอร์เข้าไปในขั้นตอนบิลด์ และเฉพาะฟอนต์เหล่านั้นเท่านั้น ดู การจัดเตรียมฟอนต์ในโปรดักชัน
การกำหนดขนาดทรัพยากร
หัวข้อที่มีชื่อว่า “การกำหนดขนาดทรัพยากร”กำหนดขนาดให้รองรับเอกสารที่ใหญ่ที่สุดที่สร้างขึ้น ไม่ใช่ขนาดเฉลี่ย เนื่องจาก getPdfData()
สร้างเอกสาร Portable Document Format (PDF) ทั้งฉบับในหน่วยความจำและส่งคืนเป็นสตริงเดียว
- กำหนดหน่วยความจำของเวิร์กเกอร์หรือฟังก์ชันตาม แนวทางการกำหนดขนาดสำหรับ serverless: เอกสารไม่กี่หน้าทำงานได้สบายที่ 512–1024 MB ส่วนเอกสารที่มีรูปภาพจำนวนมากหรือมีหลายหน้า ต้องใช้มากกว่านั้น
- ตั้งค่าไทม์เอาต์ให้สูงกว่าเวลาบิลด์ในกรณีเลวร้ายที่สุดพร้อมเผื่อระยะ ย้ายงานที่มีขนาดใหญ่ เกินไปไปยังคิวแบบอะซิงโครนัสที่เขียนลงออบเจกต์สตอเรจ — ส่วนการกำหนดขนาด เดียวกันแสดงรูปแบบนี้
- ให้เวิร์กเกอร์ที่ทำงานยาวนานใช้ opcache โดยปิดการตรวจสอบ timestamp
ส่วน opcache
ของสูตร Docker มีค่า
iniสำหรับโปรดักชัน - เมื่อหน่วยความจำหรือทรูพุตเบี่ยงเบนหลังเปิดใช้งาน ให้เริ่มจาก ตารางตัดสินใจจากอาการสู่ปัจจัยควบคุม
กฎความปลอดภัยของเวิร์กเกอร์
หัวข้อที่มีชื่อว่า “กฎความปลอดภัยของเวิร์กเกอร์”Document เป็นออบเจกต์ที่ใช้ได้ครั้งเดียว สร้างขึ้น เขียนออกหนึ่งครั้ง แล้วปล่อยให้พ้นขอบเขต
โดยสร้างอินสแตนซ์ใหม่ต่อคำขอหรือต่องานในคิวแต่ละงาน แชร์เฉพาะรีจิสทรีที่มีอายุตลอดกระบวนการ —
FontRegistry และ ImageRegistry — ด้วยการสร้างเพียงครั้งเดียวตอนเวิร์กเกอร์บูต แนวทางนี้
สอดคล้องกับโมเดลแบบต่อคำขอและต่องานของ PHP-FPM, เวิร์กเกอร์คิว และแอปพลิเคชันเซิร์ฟเวอร์ที่
ทำงานยาวนาน
- สูตรพร้อมลำดับการบูตและการรีเซ็ตในแต่ละรอบ: การเรนเดอร์เป็นชุดแบบปลอดภัยต่อเวิร์กเกอร์
- ข้อกำหนดในคำตอบเดียว: ปลอดภัยต่อเวิร์กเกอร์และปลอดภัยต่อเธรดหรือไม่
การเสริมความแข็งแกร่งของพื้นผิวตัวเรนเดอร์
หัวข้อที่มีชื่อว่า “การเสริมความแข็งแกร่งของพื้นผิวตัวเรนเดอร์”ให้ถือว่า HTML เป็นสิ่งที่ไม่น่าเชื่อถือ โดยเฉพาะสิ่งใดก็ตามที่ได้รับอิทธิพลจากผู้ใช้ เลือกเส้นทางของคุณ ระบุขอบเขตไว้ว่า โดยค่าเริ่มต้น ไปป์ไลน์ในตัวจะไม่รันสคริปต์และไม่ดึงทรัพยากรระยะไกล ในขณะที่บริดจ์แต่ละตัวเรนเดอร์ผ่านเบราว์เซอร์ หรือบริการเครือข่าย ก่อนเปิดบริดจ์ให้รับทราฟฟิกในโปรดักชัน ให้ทำตามหน้าความปลอดภัยและการ ดำเนินงานของบริดจ์นั้น:
- ความปลอดภัยและการดำเนินงานของ Artisan — พื้นผิวตัวเรนเดอร์ Chrome
- ความปลอดภัยและการดำเนินงานของ Gotenberg — พื้นผิวบริการ Gotenberg
- ความปลอดภัยและการดำเนินงานของ Cloudflare — พื้นผิวการดีพลอยแบบ edge
- รันเอนจินเป็นบริการอยู่หรือไม่ ให้เพิ่ม ความปลอดภัยและการดำเนินงานของ Connect
การสังเกตการณ์
หัวข้อที่มีชื่อว่า “การสังเกตการณ์”NextPDF ไม่ได้เผยแพร่เป้าหมาย service-level objective (SLO) ใด ๆ ให้กำหนดเป้าหมายของคุณเอง จากเมตริกระยะเวลาการเรนเดอร์และหน่วยความจำที่วัดไว้ด้านล่าง
ติดตั้งเครื่องมือวัดในเส้นทางการเรนเดอร์ก่อนเกิดเหตุการณ์ครั้งแรก ไม่ใช่หลังจากนั้น
- เอนจินแบบในกระบวนการ: สังเกตการณ์ด้วย OpenTelemetry
- การดีพลอย NextPDF Connect: สูตร OpenTelemetry สำหรับ Connect
- ต่อการเรนเดอร์หนึ่งครั้ง ให้บันทึก: เวลาที่ใช้จริง หน่วยความจำสูงสุด จำนวนหน้า ขนาดเอาต์พุต และผลลัพธ์พร้อมหมวดหมู่ข้อยกเว้นจาก ข้อมูลอ้างอิงข้อผิดพลาด
- แจ้งเตือนจากแนวโน้ม ไม่ใช่เฉพาะความล้มเหลว: เวลาบิลด์ที่เพิ่มขึ้น หน่วยความจำสูงสุดที่เพิ่มขึ้น และจำนวนครั้งของไทม์เอาต์หรือหน่วยความจำหมด คือสัญญาณนำที่อยู่ใน รายการเรื่องหน่วยความจำและประสิทธิภาพ
จังหวะการอัปเกรด
หัวข้อที่มีชื่อว่า “จังหวะการอัปเกรด”- อ่าน นโยบายการสนับสนุนเวอร์ชัน สักครั้ง
แล้วยึดถือรีลีสให้เป็นไปตามนั้น เอกสารนี้กำหนดข้อตกลงด้าน semantic-versioning ป้ายกำกับ
ความเสถียร วงจรชีวิตการเลิกใช้ และคำศัพท์วงจรชีวิต (
active,lts,maintenance,frozen,eol) ที่คู่มือนี้ใช้ - คอมมิต
composer.lockเพื่อให้เวิร์กเกอร์ทุกตัวที่ดีพลอยใช้เอนจินเวอร์ชันเดียวกัน — หน้าการติดตั้ง ระบุแนวปฏิบัตินี้ไว้ - ตรวจทาน changelog ก่อนเพิ่มหมายเลขเวอร์ชันแต่ละครั้ง
จุดเริ่มต้นการคัดแยกเหตุการณ์
หัวข้อที่มีชื่อว่า “จุดเริ่มต้นการคัดแยกเหตุการณ์”สำหรับเหตุการณ์ที่เกี่ยวกับบริดจ์ตัวเรนเดอร์ (Chrome ล่ม, Gotenberg ขัดข้อง, การเรนเดอร์ที่ edge ล้มเหลว) ให้เริ่มจากส่วนโหมดความล้มเหลวของบริดจ์นั้นใน การเสริมความแข็งแกร่งของพื้นผิวตัวเรนเดอร์
- เริ่มจากอาการ ไม่ใช่ชื่อคลาส ใน ฐานความรู้การแก้ไขปัญหา
- จับคู่ข้อยกเว้นที่ดักจับได้เข้ากับหมวดหมู่และข้อกำหนดบริบทใน ข้อมูลอ้างอิงข้อผิดพลาด
ดูเพิ่มเติม
หัวข้อที่มีชื่อว่า “ดูเพิ่มเติม”- การดำเนินงาน NextPDF ในโปรดักชัน — บทความ Insider_ ว่าด้วยเหตุผลที่เอนจินทำงานเช่นนี้ภายใต้ภาระงาน
- สร้างคอนเทนเนอร์ให้แอปพลิเคชัน NextPDF — อิมเมจ Docker สำหรับโปรดักชันตั้งแต่ต้นจนจบ
- ดีพลอยบน serverless — รายละเอียดเฉพาะของ Lambda, Cloud Run และ App Runner
- การเรนเดอร์แบบปลอดภัยต่อเวิร์กเกอร์บน Connect — กฎอายุการใช้งานเดียวกันที่ปรับใช้กับเซิร์ฟเวอร์