วิธีกำหนดค่า Doconut สำหรับการปรับใช้เซิร์ฟเวอร์แบบกระจาย
← Back to Blog••2 min read

วิธีกำหนดค่า 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 ใด ๆ จำนวนเท่าใดก็ได้ที่อยู่หลังโหลดบาลานเซอร์. ตราบใดที่แต่ละอินสแตนซ์สามารถเข้าถึงตำแหน่งที่เก็บข้อมูลแบบแชร์ที่คุณกำหนดสำหรับสิ่งประดิษฐ์ของหน้า, ผู้ชมจะดึงหน้าจากโหนดใดก็ได้, และการอัปโหลด/การแปลงจะคงอยู่แม้กระทั่งการกระโดดโหนด.

การปรับใช้หลังโหลดบาลานเซอร์

  1. เปิดเผย URL พื้นฐานเดียวกัน (เช่น ` บนทุกโหนด.
  2. ปิดการใช้งานเซสชันแบบติดหนึบ – โหมดกระจายของ Doconut ลบความจำเป็นของการผูกเซสชันออก.
  3. ตรวจสอบการเฝ้าระวังสุขภาพ โดยตรวจสอบ endpoint พื้นฐานของแอปพลิเคชันของคุณ (เช่น /health) เพื่อให้โหลดบาลานเซอร์ส่งทราฟฟิกไปยังโหนดที่ทำงานอยู่เท่านั้น.
  4. เฝ้าติดตามโฟลเดอร์ที่แชร์ เพื่อดูการเติบโต; TTL เริ่มต้นที่ 30 นาทีทำให้การเก็บข้อมูลมีขอบเขต, แต่คุณสามารถปรับได้ตามความต้องการของการปฏิบัติตามกฎ.

ด้วยขั้นตอนเหล่านี้, แอปพลิเคชัน .NET ที่เน้นเอกสารของคุณสามารถให้บริการผู้ชมหลายพันคนพร้อมกัน, เก็บหน้าทุกหน้าเป็นการเข้ารหัสเมื่ออยู่ในสภาพนิ่ง, และหลีกเลี่ยงภาระการติดตั้ง Office บนเซิร์ฟเวอร์แต่ละเครื่อง.

พร้อมลองหรือยัง? รับ ทดลองใช้ฟรี ของ Doconut, สร้างคอนเทนเนอร์สองสามตัว, ชี้ไปยังเส้นทาง UNC ที่แชร์, และดูผู้ชมขยายตัวโดยไม่มีคุกกี้เซสชันแบบติดหนึบเพียงหนึ่งเดียว.

#dotnet#distributed#web‑farm#document‑viewer#scaling#กระจาย#เว็บ‑ฟาร์ม#ตัวดูเอกสาร#การขยาย