การคำนวณแบบกระจายคืออะไร [ปิด]


14

อะไรคือการคำนวณแบบกระจายและอะไรคือความแตกต่างจากการคำนวณแบบขนาน / แบบพร้อมกัน?

การใช้ mutexes และ semaphores ในหลายเธรดแบบขนานพยายามซิงโครไนซ์สำหรับการเข้าถึงทรัพยากรเป็นปัญหาในโดเมนของการคำนวณแบบกระจายหรือไม่?

คำตอบ:


8

คอมพิวเตอร์แบบกระจายคืออะไร?

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

วิธีที่ง่ายที่สุดในการแก้ไขปัญหาคือการทำให้องค์ประกอบการประมวลผลเดี่ยวเป็นสิ่งพิเศษเช่นมีสิทธิ์สำหรับข้อมูลบางส่วน จากนั้นองค์ประกอบอื่น ๆ สามารถอ้างถึงกลับมาได้ทุกครั้งหรือแคชข้อมูลและหวังว่ามันจะไม่ล้าสมัย นี่คือสถาปัตยกรรมไคลเอนต์ / เซิร์ฟเวอร์แบบคลาสสิก

การคำนวณทางอินเทอร์เน็ตเป็นการกระจายการคำนวณ แต่ไม่มีความสามารถในการควบคุมสิ่งที่โหนดกระจายส่วนใหญ่ทำจริง

หลายเธรดแบบขนานพยายามซิงโครไนซ์สำหรับการเข้าถึงทรัพยากรเป็นปัญหาในโดเมนของการคำนวณแบบกระจายหรือไม่?

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

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


6

หลายเธรดแบบขนานพยายามซิงโครไนซ์สำหรับการเข้าถึงทรัพยากรเป็นปัญหาในโดเมนของการคำนวณแบบกระจายหรือไม่?

พวกเขาจะทำอย่างไรถ้าเธรดเหล่านั้นสามารถทำงานบนเครื่องที่แตกต่างกันหรือแม้ว่าพวกเขาจะทำงานบนเครื่องเดียวกัน แต่ในกระบวนการที่แตกต่างกัน


1
โดยทั่วไปเธรดที่ทำงานบนเครื่องที่แตกต่างกันนั้นไม่สามารถซิงโครไนซ์แบบดั้งเดิมของ mutexes และ semaphores ได้
Jan Hudec

@JanHudec ฉันคิดว่านั่นเป็นประเด็นของคำถามของผู้สัมภาษณ์ หากไม่มีการทดสอบและตั้งค่าหรือเปรียบเทียบคำแนะนำแบบอะตอมมิกหรือหน่วยความจำที่ใช้ร่วมกันการคำนวณแบบกระจายต้องอาศัยการส่งข้อความระหว่างเครื่องเพื่อการซิงโครไนซ์ โชคดีที่มีอัลกอริทึมที่ทำสิ่งนี้ได้สำเร็จ
Caleb

ฉันไม่เห็นด้วยกับ "โชคดี" อัลกอริธึมนั้นซับซ้อนและไม่ผิดพลาดดังนั้นจึงควรหลีกเลี่ยง
Jan Hudec

5

การคำนวณแบบกระจายเป็นระบบคอมพิวเตอร์ที่มีการประมวลผลที่เกิดขึ้นในคอมพิวเตอร์ที่แตกต่างกัน (เช่นในระบบแบบกระจาย) แต่ละโปรแกรมสื่อสารกันผ่านชุดของช่องทางการสื่อสาร ช่องทางเหล่านี้มักจะเชื่อมต่อเครือข่าย (ตัวอย่างเช่นซ็อกเก็ต TCP) แต่มักจะใช้โปรโตคอลการสื่อสารและอุปกรณ์อื่น ๆ (เช่น DeviceNET, BACNet, SECS-2, Modbus, ฯลฯ ) หรือแม้แต่โปรโตคอลที่กำหนดเองสำหรับอุปกรณ์เฉพาะ

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

ระบบแบบกระจายมีหลายรูปแบบและปัจจุบันมีการใช้งานในหลาย ๆ แอปพลิเคชัน เว็บแอปพลิเคชั่นเป็นระบบกระจาย ระบบ N-Tiered มักจะมีโปรเซสเซอร์ที่แตกต่างกันอย่างน้อย N ตัว (พร้อมแอพพลิเคชั่นที่แตกต่างกัน) ระบบกระจายยังใช้ในระบบอัตโนมัติโรงงานจำนวนมากเช่นกัน

เขียนขึ้นในการกระจายการคำนวณในวิกิพีเดียเป็นมูลค่าการอ่าน

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


3

การพูดอย่างเคร่งครัด "การคำนวณแบบกระจาย" เป็นวิธีการแก้ปัญหาใด ๆ ที่เกี่ยวข้องกับการประมวลผลธุรกรรม / คำขอ / การคำนวณเดียวบนคอมพิวเตอร์มากกว่าหนึ่งเครื่อง

นอกจากนี้คุณยังจะได้พบกับคำว่า "ระบบกระจาย" ซึ่งเป็นคำศัพท์ที่ใช้กันทั่วไปสำหรับ windows, unix และเซิร์ฟเวอร์ระบบขนาดเล็กอื่น ๆ ซึ่งจะนำไปใช้งานนอกศูนย์ข้อมูลส่วนกลาง แม้ว่ามันจะเป็นเรื่องปกติมากขึ้นสำหรับระบบเหล่านี้ที่จะนำไปใช้ภายในศูนย์ข้อมูลในปัจจุบันนี้


3

ที่จะตอบคำถามโดยทั่วไปของคุณเกี่ยวกับสิ่งที่ถือว่าการกระจายการคำนวณฉันจะแนะนำกระดาษหมายเหตุเกี่ยวกับการคำนวณแบบกระจายโดยแอน Wollrath เจฟฟ์ Wyant จิมวัลโดและซามูเอลคเคนดอล ครอบคลุมถึงประวัติล่าสุดของระบบกระจายและความล้มเหลวและเสนอว่าการคำนวณแบบกระจายต้องใช้ความคิดแตกต่างกันเกี่ยวกับปัญหาที่เกี่ยวข้อง

แม้ว่าจะไม่มีการพูดถึง mutexes หรือ semaphores ในเอกสาร แต่ก็ให้ข้อมูลเชิงลึกที่มีคุณค่าเกี่ยวกับวิศวกรรมที่เหมาะสมของระบบซอฟต์แวร์แบบกระจาย

ทำไมผู้สัมภาษณ์ของคุณถามเกี่ยวกับ mutexes และ semaphores ฉันจะเห็นด้วยกับ @Caleb:

พวกเขาจะทำอย่างไรถ้าเธรดเหล่านั้นสามารถทำงานบนเครื่องที่แตกต่างกันหรือแม้ว่าพวกเขาจะทำงานบนเครื่องเดียวกัน แต่ในกระบวนการที่แตกต่างกัน

สิ่งเดียวที่ฉันจะเพิ่มคือ mutexes และ semaphores เป็นการล็อคระดับพื้นฐานที่อนุญาตให้คุณแจกจ่ายงานผ่านอุปกรณ์คอมพิวเตอร์หลาย ๆ เครื่องและการทำงานของอุปกรณ์เหล่านี้ (โดยปกติ) มีความสำคัญต่อความสำเร็จของแอปพลิเคชัน เห็นได้ชัดว่ามันขึ้นอยู่กับภาษาและเทคโนโลยีที่ใช้ หากคุณกำลังใช้ Erlang หรือ Scala คุณอาจจะใช้รูปแบบการทำงานพร้อมกันตามแบบของนักแสดงมากกว่าการใช้งานพร้อมกันแบบล็อค


2

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


1

เรามีหลักสูตรเกี่ยวกับ "ระบบกระจาย" และในขณะที่ฉันจำคำจำกัดความไม่ได้แน่นอนมันเป็นไปตาม:

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

(ฉันเชื่อว่ามีบางอย่างเพิ่มเติมและฉันไม่แน่ใจเกี่ยวกับจุดสุดท้าย)

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

แก้ไข:คำจำกัดความนั้นมีไว้สำหรับ "ระบบกระจาย" ในความหมายที่แคบของระบบปฏิบัติการหรือระบบฐานข้อมูลและตรงข้ามกับระบบไคลเอนต์ - เซิร์ฟเวอร์เท่านั้น อะไรก็ตามที่เป็นไปตามเงื่อนไขแรกอาจถูกแจกจ่ายในบางบริบท

คำนิยามที่ตรงกับความแตกต่างระหว่างระบบการควบคุมเวอร์ชันแบบกระจายและแบบดั้งเดิมซึ่งทั้งหมดเป็นอย่างน้อยไคลเอนต์เซิร์ฟเวอร์และมักจะทำซ้ำ


นั่นเป็นลักษณะเฉพาะของการคำนวณแบบกระจาย มีคนอื่นและสิ่งเดียวที่พวกเขาแบ่งปันคือจุดแรก การส่งข้อความมีความสำคัญส่วนอื่น ๆ ... ไม่มาก
Donal Fellows

1
@ DonalFellows: นี่คือระบบกระจายในแง่ของการปฏิบัติการหรือระบบฐานข้อมูล มีการโยกย้ายและการยอมรับข้อผิดพลาดที่มีจุดหลักสำหรับการทำพวกเขา "การคำนวณ" แบบกระจายคืออะไรก็ตามที่ทำงานบนหลาย ๆ โหนด
Jan Hudec

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

@ DonalFellows: หลักสูตรนี้ครอบคลุมธุรกิจที่กำลังจะมาถึงการตัดสินใจและสิ่งที่อนุญาโตตุลาการและสมองแยกส่วน (ไม่ลึกเกินไปมันเป็นระดับเบื้องต้นเท่านั้น) แต่นั่นไม่ได้กำหนดคุณสมบัติของระบบกระจาย มันเป็นเพียงอุปสรรค์ที่คุณต้องกระโดดถ้าคุณต้องการสร้าง
Jan Hudec

0

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.