ให้คำปรึกษาในการติดตามสถาปัตยกรรมแอปพลิเคชันตาม Node.js

ฉันพยายามแก้ปัญหาเกี่ยวกับสถาปัตยกรรมของแอปพลิเคชันที่ใช้ node.js ฉันมีความคิดบางอย่าง แต่ฉันสงสัยเกี่ยวกับความคิดของคุณ

แอปพลิเคชันของฉันจะถูกจัดเก็บกิจกรรมจากเว็บไซต์ของลูกค้า กิจกรรมที่ลูกค้ากำหนด เช่น เข้าสู่ระบบบนเว็บไซต์ คลิกที่ผลิตภัณฑ์ คลิกที่เมนูหมวดหมู่ ฯลฯ เหตุการณ์เหล่านี้จะถูกส่งไปยังแอปพลิเคชันของฉัน และหลังจากนั้น ฉันจะแสดงกิจกรรมบนแดชบอร์ดของลูกค้าเพื่อการวิเคราะห์หรือเพื่อวัตถุประสงค์อื่น

ก่อนอื่น ฉันคิดถึงการส่งคำขอโดย ajax จากเว็บไซต์ไปยังเซิร์ฟเวอร์ของฉัน และหลังจากแยกวิเคราะห์ข้อมูลบนเซิร์ฟเวอร์ node.js ของฉันแล้ว ให้ส่งข้อมูลนั้นไปยังบัญชีแดชบอร์ดผ่าน socket.io ผู้ใช้จะเห็นทุกเหตุการณ์จากเว็บไซต์ของเขาบนแดชบอร์ด "บนเที่ยวบิน" คุณคิดว่าแนวคิดนั้นโอเคหรือไม่? ทุกคำขอ ajax จะไม่แพงเกินไปหรือไม่? บางทีฉันควรคิดถึงวิธีอื่นในการส่งข้อมูลไปยังเซิร์ฟเวอร์ของฉัน

ป้อนคำอธิบายรูปภาพที่นี่


person corey    schedule 20.08.2017    source แหล่งที่มา


คำตอบ (1)


คุณกำลังพยายามออกแบบแอปพลิเคชันการวิเคราะห์แบบคลาสสิกซึ่งรวบรวมข้อมูลจากแหล่งต่างๆ และแสดงการวิเคราะห์บางอย่างจากข้อมูลนี้ เช่น Google Analytic เป็นต้น

Does every ajax request will not be too much costly? 
Maybe I should think about another way to send data to my server?

สำหรับเว็บแอปพลิเคชันนั่นเป็นวิธีมาตรฐานในการส่งข้อมูลจากไคลเอนต์ไปยังเซิร์ฟเวอร์ แน่นอนว่าโปรโตคอล Http มีค่าใช้จ่ายมากกว่าเมื่อเปรียบเทียบกับ UDP, WebSockets หรือโปรโตคอล แต่ไม่ต้องการการกำหนดค่าความปลอดภัยเพิ่มเติม ใช้งานง่ายและปรับขนาดได้ WebSockets จำเป็นต้องรักษาการเชื่อมต่อ TCP ไว้ตลอดเวลา และปรับขนาดได้ยากกว่า คุณจะพบโพสต์มากมายเกี่ยวกับการเปรียบเทียบโปรโตคอลเหล่านี้ได้ที่นี่

ตามคำถามนี้ แอปของคุณจะเป็นพร็อกซีของเหตุการณ์จากเว็บไซต์ไปยังเว็บแอปอื่นซึ่งจะมีการวิเคราะห์เหตุการณ์เหล่านั้น ทุกกิจกรรมจะมีข้อมูลบางอย่าง เช่น ประเภท (เข้าสู่ระบบ คลิก) URL ผู้ใช้ วันที่ และอื่นๆ สามารถทำงานได้ถึงโหลดบ้าง เห็นได้ชัดว่าคุณจะมีปัญหาในฝั่งเบราว์เซอร์ที่ยอมรับเหตุการณ์ (คำขอ) ได้มากกว่า 100 กิจกรรมต่อวินาทีแม้จะผ่านทาง WebSockets JS ที่มีโมเดลการดำเนินการแบบเธรดเดียวนั้นไม่ดีสำหรับการวิเคราะห์ (การกรอง การคำนวณ การรวม) ฉันคิดว่าคุณไม่จำเป็นต้องส่งเหตุการณ์ไปยังแดชบอร์ดเหมือนเดิม การส่งข้อมูลรวมบางอย่าง เช่น จำนวนเหตุการณ์ใหม่ ฮิสโตแกรมเหตุการณ์ และอื่นๆ จะมีประโยชน์มากกว่า ดังนั้นในกรณีนี้ คุณต้องทำการวิเคราะห์ทางฝั่งแบ็กเอนด์ (แอป node.js)

ฉันขอแนะนำให้คุณดู แนวทาง CQRS ที่จัดเก็บข้อมูล (เหตุการณ์) และการดึงข้อมูล (แบบสอบถาม) ) ถูกแยกออกเพื่อให้ได้ประสิทธิภาพที่ดีสำหรับทั้งการดำเนินการเขียน (บันทึกเหตุการณ์) และการอ่าน (ดึงข้อมูลเหตุการณ์หรือการวิเคราะห์บางอย่าง) เห็นได้ชัดว่าคุณอาจต้องใช้ฐานข้อมูลบางส่วนเพื่อทำการวิเคราะห์ เช่น Mondo DB หรืออาจจะเป็น Redis เป็นต้น

person Vasyl Zv    schedule 26.08.2017