วิธีที่ดีที่สุดในการทำ failover ออฟไลน์ของไคลเอ็นต์ที่ใช้เดสก์ท็อปที่ใช้บริการเว็บคืออะไร


13

ฉันมีสามโครงการที่เข้ามาซึ่งมีปัญหาร่วมกัน:

พวกเขาจำเป็นต้องมีเหตุผลในระบบเว็บและพวกเขาต้องการแอปพลิเคชันท้องถิ่น (เช่นจุดขาย) ที่สื่อสารกับระบบดังกล่าวผ่านบริการเว็บสงบ

โซลูชันของฉัน

ผมแก้ปัญหาการจัดการที่จะเกิดขึ้นกับการที่จะใช้ในโปรแกรมคอมพิวเตอร์เข้าคิวข้อความที่จะดำเนินการจัดเก็บในขณะที่การบริการที่เป็นแบบออฟไลน์อย่างแม่นยำมากขึ้นการจัดคิวข้อความไม่ตรงกัน อย่างไรก็ตามนั่นเป็นส่วนที่ง่าย (หากเป็นวิธีที่ดีที่สุด) ฉันยังเกี่ยวข้องกับการซิงค์ข้อมูลและการแก้ไขข้อขัดแย้ง

ระบบหลักต้องใช้เว็บเนื่องจากแอปพลิเคชันเว็บเป็นสิ่งจำเป็นสำหรับรายงานและการตรวจสอบโดยผู้มีส่วนได้ส่วนเสียและบริการเว็บจะจัดการคำขอสำหรับสถานประกอบการหลายแห่ง

เดสก์ท็อปไคลเอ็นต์ (บางกว่า) จะถูกนำไปใช้กับ Java (โดยเฉพาะ Netbeans) และระบบเว็บที่มี Symfony2 โครงการสองโครงการต้องการการรวมฮาร์ดแวร์สำหรับลูกค้าดังนั้นการสร้างแอปพลิเคชันเดสก์ท็อปด้วยเทคโนโลยีเว็บ (เช่น Appcelerator Titanium) อาจเป็นปัญหาใหญ่

คำถามของฉัน

  1. อะไรคือโซลูชันที่ดีกว่าที่ปรับขนาดซึ่งหมายถึงประสิทธิภาพสูงสุดด้วยความพยายามขั้นต่ำ (และไม่มีค่าใช้จ่ายเพิ่มเติมเช่นการซื้อเซิร์ฟเวอร์สำรองสำหรับการใช้งานในพื้นที่)

  2. มีใครบ้างที่จัดการเรื่องนี้มาก่อน คุณแก้ปัญหาอย่างไร คุณสามารถแบ่งปันบทเรียนอะไรได้บ้าง

  3. คุณจัดการกับการซิงโครไนซ์อย่างไร?

แก้ไข: เพิ่มส่วนที่ขาดหายไปในคำถามของฉันในจุด # 3

คำตอบ:


3

ฉันรู้ว่าคำถามของคุณคือ Java แต่ผมชอบนี้ข้อความสถาปัตยกรรมแบบรถบัสสำหรับประเภทของสิ่งนี้

โดยทั่วไปเมื่อมีการส่งข้อความจะได้รับการตอบกลับสองครั้ง อย่างแรกคือจากแคชภายในเครื่องที่สองมาจากเซิร์ฟเวอร์เมื่อได้รับการเชื่อมต่อ

ฉันค่อนข้างมั่นใจว่าคุณสามารถปรับสถาปัตยกรรมนี้ (แรดบัสและ nhib) ให้เหมาะกับคุณ (MQ และฮิบ) ได้อย่างง่ายดาย


ใช่ฉันกำลังมองหาสถาปัตยกรรมเชิงข้อความอย่างแน่นอน ข้อโต้แย้งแคชและประโยคสุดท้ายในการเชื่อมโยงของคุณทำให้ฉันมั่นใจ
dukeofgaming

10

ทำทุกอย่างในประเทศและซิงค์เป็นระยะ ๆ

นี่คือสิ่งที่ฉันจะทำถ้าฉันเป็นคุณ (ฉันไม่ทราบถึงกรอบการซิงค์ใน Java เช่นที่เรามีใน. NET)

รักษาเวลาประทับในแอปพลิเคชันในพื้นที่ซึ่งจะถือเป็นครั้งสุดท้ายที่คุณเชื่อมต่อสำเร็จ

โดยไม่คำนึงถึงเวลาที่คุณเชื่อมต่อใหม่การประทับเวลานั้นจะถูกใช้เพื่อดึงข้อมูลใหม่จากนั้นส่งคำสั่งซื้อใหม่ที่สร้างขึ้นในเครื่อง

จากนั้นคุณจะดูแลการประทับเวลาสองครั้ง หนึ่งที่จะกำหนดเมื่อมีการสร้างคำสั่งซื้อ (ภายในหรือออนไลน์) และหนึ่งเมื่อมีการบันทึกโดยเซิร์ฟเวอร์

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


อืมฉันชอบความคิดของแบบจำลองการผลักดัน แต่ฉันเห็นปัญหาว่าถ้าเวลาของคอมพิวเตอร์เปลี่ยนไปอาจมีการสูญเสียข้อมูล BTW ฉันมีการประชุมเพื่อให้แต่ละบันทึกเวลาในการออกแบบฐานข้อมูลของฉัน ทำไมคุณไม่แนะนำ MQ
dukeofgaming

ถูกต้องคุณต้องใช้ซิงโครไนซ์เวลากับ UTC แต่มันค่อนข้างมาตรฐานตอนนี้ (อย่างน้อยใน Windows) บางครั้ง MQ มีความจำเป็น แต่ฉันคิดว่ามันจะมากเกินไปสำหรับแอปพลิเคชันที่คุณกำลังพัฒนา

ตกลงดังนั้นเพื่อจัดลำดับความน่าเชื่อถือมันค่อนข้างดีกว่าที่จะคิดว่าแอพเดสก์ท็อปจะถูกตัดการเชื่อมต่อและดังนั้นจึงเป็นการดีกว่าที่จะปฏิบัติต่อแอพเดสก์ท็อปในฐานะพลเมืองชั้นหนึ่ง เป็นสิ่งที่ง่ายกว่าสำหรับการปรับใช้ฐานข้อมูลท้องถิ่น นอกจากนี้ฉันคิดว่าการดำเนินการ CRUD ทั้งหมดในเซิร์ฟเวอร์โดยนัยมีความปลอดภัยที่ดีขึ้น คุณคิดอย่างไรเกี่ยวกับสองประเด็นนี้?
dukeofgaming

@dukeofgaming: ในกรณีของฉันสามารถสั่งซื้อได้จาก POS ใด ๆ (รวมถึงแอปพลิเคชันสามารถใช้เป็นระบบการสั่งซื้อไม่ใช่ระบบประมวลผลคำสั่ง) รวมถึงเว็บ ทุกอย่างกระจายไปทั่วประเทศ จำเป็นอย่างยิ่งที่เดสก์ท็อปทุกเครื่องจะต้องเป็นอิสระในกรณีที่ขาดการเชื่อมต่อ MQ ก็จะทำงานในสถานการณ์นั้นด้วยดังนั้นฉันจึงไม่ขัดกับมัน ฉันรู้สึกว่ามันง่ายกว่าที่จะใช้การซิงค์ข้อมูลที่แข็งแกร่งระหว่างเซิร์ฟเวอร์หลักและไคลเอนต์ ดังนั้นการดำเนินการ CRUD บนเซิร์ฟเวอร์หลักจึงไม่ใช่ตัวเลือก

2
+1 - นี่คือสิ่งที่ฉันเคยเห็นในอดีต ฉันก็จะบอกว่าการใช้งานของ uniqueidentifier (Guids) เป็นกุญแจหลักทำให้สิ่งต่าง ๆ ง่ายขึ้นอย่างมาก การทำเช่นนั้นเป็นหนึ่งในสิ่งเหล่านั้นที่ทำให้ชีวิตของคุณง่ายขึ้นหากคุณต้องการการซิงโครไนซ์
Scott Whitlock

1

หรือคุณควรดูการปรับใช้ฐานข้อมูลระบบที่เชื่อมต่อเป็นครั้งคราวซึ่งทำหน้าที่เสี้ยงฮึดฮัดของไคลเอนต์ระยะไกลที่ซิงค์กับเซิร์ฟเวอร์ (SQL Server มีสิ่งนี้กับ SQL CE ในระดับหนึ่ง, Outlook ทำสิ่งนี้)

ด้วยวิธีนี้คุณสามารถทำการเปลี่ยนแปลงทั้งหมดในเครื่องในฐานข้อมูลขนาดเล็ก (มันยังคงรักษาเวอร์ชัน / โลจิคัลไทม์สแตมป์ ฯลฯ เพื่อให้คุณไม่ต้องกังวลเกี่ยวกับนาฬิกา PC และอื่น ๆ ) และเมื่อใดก็ตามที่คุณออนไลน์ เซิร์ฟเวอร์

ฉันจะไม่ไปหาทางแก้ปัญหา REST เมื่อระบบไม่สามารถออนไลน์ได้ตลอดเวลา


คุณอธิบายฐานข้อมูลแบบกระจายหรือไม่
dukeofgaming

ไม่ - นี่ไม่ใช่การกระจายฐานข้อมูลในโลกแห่งความจริง ฐานข้อมูลแบบกระจายมักจะคาดหวังว่าเกือบทุกอย่างจะออนไลน์เช่นกัน แต่ตรรกะของการจำลองแบบในหมู่เพื่อนที่ลงไปใช้ที่นี่ด้วย มีฐานข้อมูลเดสก์ท็อป / อุปกรณ์บางอย่างที่มีสิ่งอำนวยความสะดวกในการทำงานการจำลองแบบ ( blogs.msdn.com/b/stevelasker/archive/2007/03/18/ ...... ) - ดังนั้นสิ่งที่คุณต้องทำคือติดตั้ง db อุปกรณ์นี้ บันทึกการเปลี่ยนแปลงของคุณที่นี่และเมื่อคุณเชื่อมต่อกับเครือข่ายคอมพิวเตอร์ให้เรียกการซิงค์ - และจะทำการถ่ายโอนข้อมูลไปยังเซิร์ฟเวอร์หลักสำหรับคุณ
Subu Sankara Subramanian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.