TDD
The Dev's Desk10mo ago
conscious-sapphire

การจัดการระบบหลังบ้านของ ExpressJs

ขอสอบถามหน่อยครับว่าตอนนี้ใช้ Nodejs นั้นเจอปัญหาว่ามันเป็น Single Threaded คือตอนนี้ได้ทำเว็บโดยใช้ expressJs โดยเป็นเว็บที่มี Dashbaord แบ่งเป็นแผนกๆโดยมี 6 แผนกก็มี6 หน้า แต่ละหน้าแผนกมีตาราง CRUD ให้จัดการเพิ่มลบข้อมูล และจะมีหน้าเว็บอีกหน้าสรุปทั้งหมดอีก 1 หน้า และก็จะมีสำหรับหน้าเว็บอีกให้พนักงานบันทึกรายงานผลิตจากBarcode ครับ โดยอยากสอบถามว่าในกรณีแบบเจอปัญหาคือต้องการให้ตอนเข้าเว็บไซต์ไม่อยากให้เกิดการรอกันเช่น มีคนเข้าดูเว็บ Dashboard แล้วเว็บที่พนักงานที่บันทึกรายงานผลิตจากBarcode มีการขึ้นโหลดค้างครับ คือว่าเหมือนมันต้องรอให้การ Query ข้อมูลจาก Dashboard เสร็จก่อนถึงเข้าเว็บได้ครับ ในกรณีแบบนี้ถ้าผมต้องการให้ มันไม่ต้องรอโดยที่ไม่ต้องสร้าง Webapp แยกอีกอันได้ไหมครับ
9 Replies
rare-sapphire
rare-sapphire10mo ago
@ู ^^^
สร้างโพสต์แล้ว! สร้างโพสต์ของคุณแล้วอย่าลืมพิมพ์อธิบายถึงปัญหาที่เจอ เพื่อให้สมาชิกท่านอ่านเข้าใจด้วยนะครับ สามารถอ่านแนวทางได้ที่ : https://discord.com/channels/1236751677801889792/1312136163372433509 หากได้รับคำตอบหรือได้รับการแก้ไขแล้ว อย่าลืมใช้คำสั่ง /fixed หรือกดปุ่ม 🔒 ปิดโพสต์ เพื่อปิดโพสต์ด้วยนะ!
qwrts
qwrts10mo ago
ไม่ค่อยถนัดเรื่องนี้ แต่เดี๋ยวจะช่วยค้นให้นะครับ
extended-salmon
extended-salmon10mo ago
ถ้ามีปัญหาที่ Back End ไม่สามารถรองรับ load หลาย ๆ Concurrent ในเวลาเดียวกันคือ ต้องรอให้เสร็จทีละงานถึงจะ สามารถ จัดการ Concurrent ถัดไป มันมี อยู่สองสามแบบ ที่จะนำมาใช้ -> ใช้ HTTP web server, reverse proxy เช่น nginx ขั้นตอนนี้ เป็นการใช้ web server เข้ามาคั่นกลาง และจัดการ Traffic ที่เข้ามา และยังสามารถสร้าง worker ขึ้นมารองรับงาน ก็คือเราสามารถ รัน Service ขึ้นมาได้ มากกว่า 1 Process และสามารถใช้ เพื่อให้การเชื่อมต่อ นั้นไม่หลุด กรณีที่การเชื่อมต่อนั้นอาจยังไม่ได้รับการประมวลผล ซึ่งมันจะทำให้การเชื่อมต่อนั้นเป็นระบบและจัดการได้มากกว่า การส่งเข้าไปที่ service โดยตรง * ไม่แนะนำ เพราะการใช้งาน ควรมีความเข้าใจเรื่อง Web Server engine ก่อน Config ยุ่งยากวุ่นวาย -> ปรับปรุง Code ให้ทำงานแบบ Clusters ไว้จะมาเขียนต่อ
const cluster = require('cluster');
const os = require('os');
const express = require('express');

const numCPUs = os.cpus().length;

if (cluster.isMaster) {
console.log(`Master process ${process.pid} is running`);

// สร้าง worker processes ตามจำนวนคอร์ CPU
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}

cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died`);
// สร้าง worker ใหม่ถ้า worker เดิมหยุดทำงาน
cluster.fork();
});
} else {
// Worker process: สร้าง Express app
const app = express();

app.get('/', (req, res) => {
res.send(`Hello World from Worker ${process.pid}`);
});

app.listen(3000, () => {
console.log(`Worker ${process.pid} is listening on port 3000`);
});
}
const cluster = require('cluster');
const os = require('os');
const express = require('express');

const numCPUs = os.cpus().length;

if (cluster.isMaster) {
console.log(`Master process ${process.pid} is running`);

// สร้าง worker processes ตามจำนวนคอร์ CPU
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}

cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died`);
// สร้าง worker ใหม่ถ้า worker เดิมหยุดทำงาน
cluster.fork();
});
} else {
// Worker process: สร้าง Express app
const app = express();

app.get('/', (req, res) => {
res.send(`Hello World from Worker ${process.pid}`);
});

app.listen(3000, () => {
console.log(`Worker ${process.pid} is listening on port 3000`);
});
}
conscious-sapphire
conscious-sapphireOP10mo ago
คือตอนนี้ผมทำเป็น Serverless โดยใช้คอมผมเป็น Master หนะครับรันใน Vscode ปกติ แล้วคอมเครื่องอื่นในวง Lan เดียวกันเข้าใช้งานผ่านเว็บที่สร้างจากคอมตัว Master หนะครับ
extended-salmon
extended-salmon10mo ago
ปัญหาคืออะไรครับ
conscious-sapphire
conscious-sapphireOP10mo ago
คือถ้าจะทำเป็น serverless แบบใช้งานกันแค่ภายในองค์กรหนะครับ แบบเฉพาะเครื่องที่มีสายแลนเชื่อมต่อกันเท่านั้นถึงเข้าเว็บได้ในกรณีนี้ผมจะเลือกใช้ web server อะไรได้ไหมครับ
extended-salmon
extended-salmon10mo ago
หมายถึง serverless ให้ใช้ได้แค่เฉพาะกลุ่มหรือป่าว
conscious-sapphire
conscious-sapphireOP9mo ago
ใช่ครับใช้กันแค่ภายใน
extended-salmon
extended-salmon9mo ago
ลองวาดเป็นแผนผัง คร่าว ๆ ได้ไหมครับ ว่าการเชื่อมต่อและโครงสร้างเป็นอย่างไร แลัปัญหาที่บอกว่าไม่ต้องรอ ตรงนี้หมายถึงตรง Sessions ไหน แล้่วก็การที่ Microservice (NodeJS express.js) บางอย่าง ที่มันรันอยู่ใน Local Network(Internal) มันไมไ่ด้แปลว่า Serverless นะครับ ตอนบอกว่ามันเป็น Serverless นี่ผมสับสนพอสมควรเลย

Did you find this page helpful?