อะไรคือการคำนวณแบบกระจายและอะไรคือความแตกต่างจากการคำนวณแบบขนาน / แบบพร้อมกัน?
การใช้ mutexes และ semaphores ในหลายเธรดแบบขนานพยายามซิงโครไนซ์สำหรับการเข้าถึงทรัพยากรเป็นปัญหาในโดเมนของการคำนวณแบบกระจายหรือไม่?
อะไรคือการคำนวณแบบกระจายและอะไรคือความแตกต่างจากการคำนวณแบบขนาน / แบบพร้อมกัน?
การใช้ mutexes และ semaphores ในหลายเธรดแบบขนานพยายามซิงโครไนซ์สำหรับการเข้าถึงทรัพยากรเป็นปัญหาในโดเมนของการคำนวณแบบกระจายหรือไม่?
คำตอบ:
คอมพิวเตอร์แบบกระจายคืออะไร?
การคำนวณแบบกระจายคือการรวบรวมองค์ประกอบการประมวลผลแบบขนานโดยเนื้อแท้ซึ่งสื่อสารกันเพื่อแก้ไขปัญหาอย่างน้อยหนึ่งอย่าง องค์ประกอบการประมวลผลเหล่านั้นแยกออกจากกันอย่างเพียงพอซึ่งไม่สามารถนำไปใช้ในการสร้างโครงสร้างการส่งข้อความที่เชื่อถือได้และตรงเวลาระหว่างกันดังนั้นจึงเป็นไปไม่ได้ที่จะมีความรู้ระดับโลกเกี่ยวกับสถานะของระบบ คุณสมบัติเฉพาะของการส่งข้อความด้วยระบบกระจายคือข้อความจะหายไปจะถูกอ่านไม่ออกจะล่าช้า - โซลูชั่นในพื้นที่นี้ต้องคำนึงถึงเรื่องนี้ ดังนั้นการเขียนโปรแกรมแบบกระจายจึงเกี่ยวกับการจัดการกับเครือข่ายและข้อความการขนานและการขาดข้อมูลทั่วโลก
วิธีที่ง่ายที่สุดในการแก้ไขปัญหาคือการทำให้องค์ประกอบการประมวลผลเดี่ยวเป็นสิ่งพิเศษเช่นมีสิทธิ์สำหรับข้อมูลบางส่วน จากนั้นองค์ประกอบอื่น ๆ สามารถอ้างถึงกลับมาได้ทุกครั้งหรือแคชข้อมูลและหวังว่ามันจะไม่ล้าสมัย นี่คือสถาปัตยกรรมไคลเอนต์ / เซิร์ฟเวอร์แบบคลาสสิก
การคำนวณทางอินเทอร์เน็ตเป็นการกระจายการคำนวณ แต่ไม่มีความสามารถในการควบคุมสิ่งที่โหนดกระจายส่วนใหญ่ทำจริง
หลายเธรดแบบขนานพยายามซิงโครไนซ์สำหรับการเข้าถึงทรัพยากรเป็นปัญหาในโดเมนของการคำนวณแบบกระจายหรือไม่?
พวกเขาประกอบด้วยวิธีแก้ปัญหาที่เป็นไปได้ซึ่งมีประโยชน์เมื่อสร้างแบบจำลองไคลเอ็นต์ / เซิร์ฟเวอร์ แต่มีค่าใช้จ่ายที่เพิ่มขึ้นอย่างมากในการช่วงชิงทรัพยากร สำหรับการอ่านนั้นไม่ใช่เรื่องใหญ่มาก (ให้มีฮาร์ดแวร์เพียงพอ) แต่สำหรับการเขียนมันเป็นปัญหาใหญ่แน่นอน
สิ่งที่คุณพยายามหลีกเลี่ยงคือการล็อคแบบกระจาย การขาดการส่งข้อความที่ทันเวลาที่เชื่อถือได้นั้นจะฆ่าการตัดสินใจแบบกระจายอย่างสมบูรณ์เว้นแต่คุณจะใช้สิ่งที่คล้ายกับโปรโตคอล Paxosแต่ก็มีข้อแม้มากมาย ปัญหาพื้นฐานของการคำนวณแบบกระจายคือ "สิ่งเลวร้ายเกิดขึ้นกับข้อความ" โปรโตคอลระดับค่อนข้างต่ำเช่น TCP ช่วยลดปัญหาได้ แต่คุณยังสามารถถอดออกได้
หลายเธรดแบบขนานพยายามซิงโครไนซ์สำหรับการเข้าถึงทรัพยากรเป็นปัญหาในโดเมนของการคำนวณแบบกระจายหรือไม่?
พวกเขาจะทำอย่างไรถ้าเธรดเหล่านั้นสามารถทำงานบนเครื่องที่แตกต่างกันหรือแม้ว่าพวกเขาจะทำงานบนเครื่องเดียวกัน แต่ในกระบวนการที่แตกต่างกัน
การคำนวณแบบกระจายเป็นระบบคอมพิวเตอร์ที่มีการประมวลผลที่เกิดขึ้นในคอมพิวเตอร์ที่แตกต่างกัน (เช่นในระบบแบบกระจาย) แต่ละโปรแกรมสื่อสารกันผ่านชุดของช่องทางการสื่อสาร ช่องทางเหล่านี้มักจะเชื่อมต่อเครือข่าย (ตัวอย่างเช่นซ็อกเก็ต TCP) แต่มักจะใช้โปรโตคอลการสื่อสารและอุปกรณ์อื่น ๆ (เช่น DeviceNET, BACNet, SECS-2, Modbus, ฯลฯ ) หรือแม้แต่โปรโตคอลที่กำหนดเองสำหรับอุปกรณ์เฉพาะ
ระบบแบบกระจายมักจะซับซ้อนกว่าระบบที่ออกแบบมาให้ทำงานบนคอมพิวเตอร์เครื่องเดียว นอกเหนือจากปัญหาการเกิดพร้อมกันและการล็อกทรัพยากรที่แอพพลิเคชั่นแบบมัลติเธรดจำเป็นต้องต่อกรกับกันระบบแบบกระจายต้องจัดการกับความล้มเหลวในการสื่อสารและการประมวลผลโหนดล้มเหลว ธุรกรรม (และย้อนกลับ) ที่ต้องใช้โปรเซสเซอร์หลายตัวในการดำเนินการอาจเป็นเรื่องยุ่งยากเช่นกัน
ระบบแบบกระจายมีหลายรูปแบบและปัจจุบันมีการใช้งานในหลาย ๆ แอปพลิเคชัน เว็บแอปพลิเคชั่นเป็นระบบกระจาย ระบบ N-Tiered มักจะมีโปรเซสเซอร์ที่แตกต่างกันอย่างน้อย N ตัว (พร้อมแอพพลิเคชั่นที่แตกต่างกัน) ระบบกระจายยังใช้ในระบบอัตโนมัติโรงงานจำนวนมากเช่นกัน
เขียนขึ้นในการกระจายการคำนวณในวิกิพีเดียเป็นมูลค่าการอ่าน
ในการตอบคำถามของคุณเกี่ยวกับว่าแอปพลิเคชันแบบมัลติเธรดนั้นเป็นแอพพลิเคชั่นแบบกระจายหรือไม่ - หากเธรดกำลังทำงานบนคอมพิวเตอร์เครื่องเดียวระบบจะไม่กระจาย มันจะต้องแก้ปัญหาบางอย่างที่มีอยู่ในระบบแบบกระจาย แต่ไม่ใช่ทั้งหมด
การพูดอย่างเคร่งครัด "การคำนวณแบบกระจาย" เป็นวิธีการแก้ปัญหาใด ๆ ที่เกี่ยวข้องกับการประมวลผลธุรกรรม / คำขอ / การคำนวณเดียวบนคอมพิวเตอร์มากกว่าหนึ่งเครื่อง
นอกจากนี้คุณยังจะได้พบกับคำว่า "ระบบกระจาย" ซึ่งเป็นคำศัพท์ที่ใช้กันทั่วไปสำหรับ windows, unix และเซิร์ฟเวอร์ระบบขนาดเล็กอื่น ๆ ซึ่งจะนำไปใช้งานนอกศูนย์ข้อมูลส่วนกลาง แม้ว่ามันจะเป็นเรื่องปกติมากขึ้นสำหรับระบบเหล่านี้ที่จะนำไปใช้ภายในศูนย์ข้อมูลในปัจจุบันนี้
ที่จะตอบคำถามโดยทั่วไปของคุณเกี่ยวกับสิ่งที่ถือว่าการกระจายการคำนวณฉันจะแนะนำกระดาษหมายเหตุเกี่ยวกับการคำนวณแบบกระจายโดยแอน Wollrath เจฟฟ์ Wyant จิมวัลโดและซามูเอลคเคนดอล ครอบคลุมถึงประวัติล่าสุดของระบบกระจายและความล้มเหลวและเสนอว่าการคำนวณแบบกระจายต้องใช้ความคิดแตกต่างกันเกี่ยวกับปัญหาที่เกี่ยวข้อง
แม้ว่าจะไม่มีการพูดถึง mutexes หรือ semaphores ในเอกสาร แต่ก็ให้ข้อมูลเชิงลึกที่มีคุณค่าเกี่ยวกับวิศวกรรมที่เหมาะสมของระบบซอฟต์แวร์แบบกระจาย
ทำไมผู้สัมภาษณ์ของคุณถามเกี่ยวกับ mutexes และ semaphores ฉันจะเห็นด้วยกับ @Caleb:
พวกเขาจะทำอย่างไรถ้าเธรดเหล่านั้นสามารถทำงานบนเครื่องที่แตกต่างกันหรือแม้ว่าพวกเขาจะทำงานบนเครื่องเดียวกัน แต่ในกระบวนการที่แตกต่างกัน
สิ่งเดียวที่ฉันจะเพิ่มคือ mutexes และ semaphores เป็นการล็อคระดับพื้นฐานที่อนุญาตให้คุณแจกจ่ายงานผ่านอุปกรณ์คอมพิวเตอร์หลาย ๆ เครื่องและการทำงานของอุปกรณ์เหล่านี้ (โดยปกติ) มีความสำคัญต่อความสำเร็จของแอปพลิเคชัน เห็นได้ชัดว่ามันขึ้นอยู่กับภาษาและเทคโนโลยีที่ใช้ หากคุณกำลังใช้ Erlang หรือ Scala คุณอาจจะใช้รูปแบบการทำงานพร้อมกันตามแบบของนักแสดงมากกว่าการใช้งานพร้อมกันแบบล็อค
คำพูดมันทั้งหมด คุณต้องทำการคำนวณบางอย่างและถ้าคุณสามารถแจกจ่ายบางส่วนของการคำนวณนี้เช่นว่าการคำนวณแต่ละครั้งจะทำงานโดยไม่คำนึงถึงการคำนวณอื่น ๆ และเมื่อทุกอย่างเสร็จสิ้นคุณจะรวมผลลัพธ์ของการคำนวณแต่ละครั้งเพื่อรับคำตอบของการคำนวณหลัก ตัวอย่างจะเป็น: แผนที่ลด
เรามีหลักสูตรเกี่ยวกับ "ระบบกระจาย" และในขณะที่ฉันจำคำจำกัดความไม่ได้แน่นอนมันเป็นไปตาม:
(ฉันเชื่อว่ามีบางอย่างเพิ่มเติมและฉันไม่แน่ใจเกี่ยวกับจุดสุดท้าย)
ตอนนี้ในหลักสูตรเราเรียนรู้วิธีการใช้งานธุรกรรมแบบกระจายและล็อคแบบกระจาย บทเรียนคือการล็อกแบบกระจายนั้นถูกนำไปใช้โดยใช้ธุรกรรมแบบกระจายซึ่งเป็นอีกวิธีหนึ่งเมื่อเปรียบเทียบกับสิ่งที่คุณทำในพื้นที่
แก้ไข:คำจำกัดความนั้นมีไว้สำหรับ "ระบบกระจาย" ในความหมายที่แคบของระบบปฏิบัติการหรือระบบฐานข้อมูลและตรงข้ามกับระบบไคลเอนต์ - เซิร์ฟเวอร์เท่านั้น อะไรก็ตามที่เป็นไปตามเงื่อนไขแรกอาจถูกแจกจ่ายในบางบริบท
คำนิยามที่ตรงกับความแตกต่างระหว่างระบบการควบคุมเวอร์ชันแบบกระจายและแบบดั้งเดิมซึ่งทั้งหมดเป็นอย่างน้อยไคลเอนต์เซิร์ฟเวอร์และมักจะทำซ้ำ
การคำนวณแบบกระจายคำศัพท์ที่ "ไม่ใช่การตลาด" สำหรับการคำนวณแบบองค์กรซึ่งคุณอาจได้ยินมากขึ้นในชีวิตจริง อย่างไรก็ตามแนวคิดทั่วไปที่คนอื่นชี้ให้เห็นคือ "คุณใช้คอมพิวเตอร์มากกว่าหนึ่งเครื่องเพื่อทำงาน"