
วิธีกำหนดค่า Doconut สำหรับการปรับใช้เซิร์ฟเวอร์แบบกระจาย
ใช้ Doconut ในการกำหนดค่าการทำงานของเซิร์ฟเวอร์แบบกระจาย
เมื่อคุณต้องการให้บริการไฟล์ PDF, ไฟล์ Office, ภาพวาด CAD หรือรูปภาพจากคลัสเตอร์ของโหนด ASP.NET Core, โหมดกระจาย ของ Doconut ทำให้แต่ละโหนดสามารถอ่านข้อมูลหน้าเดียวกันจากตำแหน่งที่แชร์ได้ ผลลัพธ์คือผู้ชมที่สามารถขยายแนวนอนได้อย่างปลอดภัยและทำงานอยู่หลังโหลดบาลานเซอร์โดยไม่ต้องใช้เซสชันแบบติดหนึบ.
ทำไมโหมดกระจายถึงสำคัญ
- ความสามารถในการขยาย – แต่ละโหนดสามารถเผยแพร่หน้าไปยัง UNC หรือแชร์บนคลาวด์; โหนดอื่น ๆ สามารถให้บริการได้ทันที.
- ความปลอดภัย – สิ่งประดิษฐ์ถูกเก็บในรูปแบบเข้ารหัสบนโฟลเดอร์ที่แชร์; ผู้ชมตรวจสอบคำขอทุกอย่างกับโทเค็นเซสชันของ ASP.NET.
- ไม่มีการพึ่งพา Office – ปลั๊กอิน Converter ทำงานบนเซิร์ฟเวอร์, แปลง Word, Excel, PowerPoint, CAD และรูปภาพเป็น PDF หรือรูปภาพโดยไม่ต้องติดตั้ง Microsoft Office.
คุณลักษณะเหล่านี้ทำให้ระบบ DMS, CRM หรือพอร์ทัล e‑learning ขององค์กรสามารถจัดการเอกสารภายในแบ็กเอนด์ .NET ได้ในขณะที่ขยายเป็นหลายสิบคอนเทนเนอร์.
ที่เก็บข้อมูลแบบแชร์สำหรับโหมดกระจาย
ในโหมดกระจาย Doconut คาดหวังให้สิ่งประดิษฐ์ของหน้า (หน้า PDF, แผ่นภาพ ฯลฯ) ถูกเขียนไปยังตำแหน่งที่เก็บซึ่งทุกโหนดในฟาร์มสามารถเข้าถึงได้ – เช่น แชร์เครือข่าย, คอนเทนเนอร์ Azure Blob, ถัง S3, หรือที่เก็บข้อมูลแบบแชร์อื่น ๆ ที่รองรับโดยฟีเจอร์ Progressive Cloud Publishing. ผู้ชมจะค้นหาโฟลเดอร์สิ่งประดิษฐ์ที่ตรงกับโทเค็นความปลอดภัยต่อเอกสารโดยอัตโนมัติ, ดังนั้นจึงไม่ต้องมีโค้ดเพิ่มเติมนอกจากการทำให้แน่ใจว่าโหนดทั้งหมดมีสิทธิ์อ่าน‑เขียนเดียวกันกับที่เก็บที่เลือก.
เคล็ดลับ: ใช้เส้นทาง UNC เดียวกัน (เช่น
\\fileserver\doconut) หรือ URL ของคลาวด์ในการกำหนดค่าของแต่ละอินสแตนซ์และรักษาการอนุญาตโฟลเดอร์ให้สอดคล้องกัน. พฤติกรรมUsePerTokenSubfoldersถูกเปิดใช้งานโดยค่าเริ่มต้นและแยกหน้าของแต่ละเอกสารออกจากกัน.
การลงทะเบียน Doconut และมิดเดิลแวร์เซสชัน
Doconut พึ่งพา state ของเซสชันของ ASP.NET Core เพื่อความปลอดภัยต่อเอกสารแต่ละไฟล์. แคชแบบกระจายจำเป็นเฉพาะเมื่อคุณใช้โครงการ minimal‑API; MVC หรือ Razor Pages จะเพิ่มแคชให้โดยอัตโนมัติ.
builder.Services.AddDoconut(options =>
{
options.LicensePath = "Doconut.Viewer.lic";
});
builder.Services.AddDistributedMemoryCache(); // เซสชันต้องการแคช
builder.Services.AddSession(); // Doconut ตรวจสอบกับเซสชัน
app.UseSession(); // ต้องทำงานก่อน UseDoconut()
app.UseDoconutResources(); // ลงทะเบียนแอสเซ็ตผู้ชมแบบคงที่
app.Map("/doconut", branch => branch.UseDoconut());
เส้นทางกำหนดเอง (ไม่บังคับ)
หากเส้นทางอื่นขัดแย้งกับ /doconut, ให้เปลี่ยนเส้นทาง หนึ่งครั้ง และทำให้ไคลเอนต์ BasePath สอดคล้องกัน:
builder.Services.AddDoconut(options =>
{
options.MiddlewarePath = "/docs-engine";
options.ResourcesPath = "/docs-assets";
});
app.UseDoconutResources();
app.Map("/docs-engine", branch => branch.UseDoconut());
ห้ามใส่สแลชนำหน้าให้กับ MiddlewarePath หรือ ResourcesPath; ผู้ชมจะเพิ่มสแลชโดยอัตโนมัติ.
การรวมทั้งหมดเข้าด้วยกัน: ตัวอย่าง Minimal‑API
ด้านล่างเป็นการตั้งค่าที่กระชับและพร้อมใช้งานในสภาพแวดล้อมการผลิต ซึ่งรวมข้อกำหนดของที่เก็บข้อมูลแบบแชร์, การจัดการเซสชัน, และการลงทะเบียน Doconut.
var builder = WebApplication.CreateBuilder(args);
// 1️⃣ การลงทะเบียน Doconut หลัก
builder.Services.AddDoconut(options =>
{
options.LicensePath = Path.Combine(
AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
options.MiddlewarePath = "/doconut";
options.ResourcesPath = "/doconut-res";
});
// 2️⃣ เซสชันและแคช (จำเป็นสำหรับความปลอดภัย)
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();
var app = builder.Build();
app.UseRouting();
app.UseSession();
app.UseDoconutResources(); // แพคเกจผู้ชมแบบคงที่
app.Map("/doconut", branch => branch.UseDoconut());
app.Run();
ปรับใช้ไบนารีนี้ไปยังคอนเทนเนอร์ Docker หรือบริการ Windows ใด ๆ จำนวนเท่าใดก็ได้ที่อยู่หลังโหลดบาลานเซอร์. ตราบใดที่แต่ละอินสแตนซ์สามารถเข้าถึงตำแหน่งที่เก็บข้อมูลแบบแชร์ที่คุณกำหนดสำหรับสิ่งประดิษฐ์ของหน้า, ผู้ชมจะดึงหน้าจากโหนดใดก็ได้, และการอัปโหลด/การแปลงจะคงอยู่แม้กระทั่งการกระโดดโหนด.
การปรับใช้หลังโหลดบาลานเซอร์
- เปิดเผย URL พื้นฐานเดียวกัน (เช่น ` บนทุกโหนด.
- ปิดการใช้งานเซสชันแบบติดหนึบ – โหมดกระจายของ Doconut ลบความจำเป็นของการผูกเซสชันออก.
- ตรวจสอบการเฝ้าระวังสุขภาพ โดยตรวจสอบ endpoint พื้นฐานของแอปพลิเคชันของคุณ (เช่น
/health) เพื่อให้โหลดบาลานเซอร์ส่งทราฟฟิกไปยังโหนดที่ทำงานอยู่เท่านั้น. - เฝ้าติดตามโฟลเดอร์ที่แชร์ เพื่อดูการเติบโต; TTL เริ่มต้นที่ 30 นาทีทำให้การเก็บข้อมูลมีขอบเขต, แต่คุณสามารถปรับได้ตามความต้องการของการปฏิบัติตามกฎ.
ด้วยขั้นตอนเหล่านี้, แอปพลิเคชัน .NET ที่เน้นเอกสารของคุณสามารถให้บริการผู้ชมหลายพันคนพร้อมกัน, เก็บหน้าทุกหน้าเป็นการเข้ารหัสเมื่ออยู่ในสภาพนิ่ง, และหลีกเลี่ยงภาระการติดตั้ง Office บนเซิร์ฟเวอร์แต่ละเครื่อง.
พร้อมลองหรือยัง? รับ ทดลองใช้ฟรี ของ Doconut, สร้างคอนเทนเนอร์สองสามตัว, ชี้ไปยังเส้นทาง UNC ที่แชร์, และดูผู้ชมขยายตัวโดยไม่มีคุกกี้เซสชันแบบติดหนึบเพียงหนึ่งเดียว.