วิธีแบ่งงานให้กับเครือข่ายคอมพิวเตอร์


11

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

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

คำถามหลักคือ: ฉันควรใช้วิธีใดเพื่อบรรลุเป้าหมายนี้

แต่ต่อไปนี้อาจช่วยให้ฉันได้คำตอบ: มีชื่อหรือรูปแบบการออกแบบกับสิ่งที่ฉันพยายามทำหรือไม่?

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

มีตัวอย่างของระบบดังกล่าวหรือไม่? คำถามหลักคือทั่วไปเล็กน้อยดังนั้นมันจะดีที่จะมีจุดเริ่มต้น / จุดอ้างอิง

หมายเหตุฉันกำลังสมมติว่ามีข้อ จำกัด ของ c ++ และ windows ดังนั้นโซลูชันที่ชี้ไปในทิศทางนั้นจะได้รับการชื่นชม


1
ค้นหาระบบคิวหรือเวิร์กโฟลว์ตัวอย่าง: aws.amazon.com/sqs en.wikipedia.org/wiki/Message_queue etcetera ระบบคิวสามารถดูแลการกระจายตรวจสอบและกำหนดใหม่
Luc Franken

2
คำที่คุณกำลังมองหาเป็นแบบขนาน ก่อนที่คุณจะมุ่งหน้าไปตามถนนสายนี้ตรวจสอบให้แน่ใจว่าคุณสามารถแก้ไขปัญหาของคุณได้ในแบบคู่ขนาน (เช่นผลลัพธ์สำหรับรายการnไม่ได้ขึ้นอยู่กับผลลัพธ์ของรายการn-1 )
Blrfl

ดูBOINC

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

3
ฉันประหลาดใจที่ไม่มีใครได้กล่าวถึง Hadoop
Kevin

คำตอบ:


12

มีตัวอย่างของระบบดังกล่าวหรือไม่?

ใช่. รูปแบบนี้เรียกว่าการคำนวณแบบกระจาย (หรือการเขียนโปรแกรมแบบกระจายหรือคำที่ยอดเยี่ยมที่คุณต้องการกระจายหลังจาก) คำแนะนำของฉันจะไม่สร้างสิ่งนี้ภายใน บริษัท ก่อนที่จะดูวิธีแก้ไขปัญหาอื่น ๆ คุณสามารถดูคำถามล้นสแต็กนี้สำหรับตัวเลือกต่างๆ จากนั้นทำการตัดสินใจที่คำนวณได้


3
อย่าลืมคำศัพท์ใหม่ที่ชื่นชอบสำหรับสิ่งนี้: คลาวด์ ! หรือคลาวด์คอมพิวติ้ง ถ้าคุณทำมันกับคอมพิวเตอร์ของคุณเองคนเรียกพวกเขาส่วนบุคคลเมฆหรือมินิคลาวด์ เรื่องไร้สาระทางการตลาดสิ่งนี้เป็นที่รู้จักกันดีในขณะที่คุณพูดว่าเป็นคอมพิวเตอร์แบบกระจายมานานหลายปีแค่ออกไปที่นั่นเพื่อให้ OP รู้ว่าเขาอ่านอะไรเกี่ยวกับก้อนเมฆที่พูดถึงเรื่องนี้
Jimmy Hoffa

3
@JimmyHoffa: คำว่า "คลาวด์" นั้นมักใช้เพื่อระบุว่าข้อมูลของคุณรวมถึงซอฟต์แวร์ที่คุณใช้ในการทำงานกับมันอยู่บนอินเทอร์เน็ตที่ไหนสักแห่งแทนเครื่องในท้องถิ่นของคุณ และในบางครั้งก็หมายความว่าคุณกำลังใช้เครื่องเสมือนที่ทำงานบนคลัสเตอร์มากกว่าโฮสต์ VM แบบเสาหินเดียว ข้อได้เปรียบที่เห็นได้ชัดคือการล้มเหลวของศูนย์การหยุดทำงานที่โปร่งใส
tdammers

2
@tammers จริง แต่ไม่มีประเภทของระบบที่อธิบายโดย OP น้อยเป็นหนึ่งในหลาย ๆ คนที่ใช้ชื่อเรื่องการตลาดของคลาวด์พร้อม ๆ กับที่คุณชี้ให้เห็นทุกอย่างในทางปฏิบัติ นั่นคือสิ่งที่ทำให้มันเป็น buzzword มันถูกคิดค้นโดยไม่มีคำจำกัดความดังนั้นผู้คนจึงนำมันไปใช้กับสิ่งต่าง ๆ มากมายดังนั้นมันจึงมีความหมายทุกอย่างและไม่มีอะไร ไชโยสำหรับ buzzwords
Jimmy Hoffa

1
@ จิมมี่ฮอฟฟา: มันเป็นสิ่งที่ทำให้พูดถึงคำว่า "คลาวด์" ที่นี่โดยไม่สร้างสรรค์
tdammers

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

4

เท่าที่สังเกตจากคำตอบอื่น ๆ ข้อมูลนี้ได้รับการเรียกว่าการกระจายการคำนวณ , การคำนวณตารางคอมพิวเตอร์คลัสเตอร์และประมวลผลประสิทธิภาพสูง

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

นอกจากนี้ความต้องการของคุณที่กำหนดเวลางานที่ล้มเหลวหลักจะเรียกว่าคุณสมบัติ "การยอมรับข้อบกพร่อง " ของระบบนั้น (ลิงก์บังคับไปยังการ์ตูนนี้ )

คุณควรใช้วิธีใดในการสร้างคลาวด์ส่วนตัวของคุณเอง ในคำสั่งหรือการตั้งค่าของฉัน:

  1. อย่าสร้างคลาวด์ของคุณเองใช้โครงสร้างพื้นฐานที่ได้รับจากผู้อื่น Amazon นี้เรียกว่าVirtual Private Cloud , Rackspace เพียงเมฆภาคเอกชน ; ฉันแน่ใจว่าคุณสามารถค้นหาข้อเสนอและเปรียบเทียบอื่น ๆ

  2. อย่าสร้างเอนจิ้นการคำนวณแบบกระจายของคุณเองใช้เอ็นจินที่ผู้อื่นจัดทำ หากคุณยืนยันในการใช้เครื่องของคุณให้ใช้ซอฟต์แวร์ให้มากที่สุดเท่าที่จะเป็นไปได้ซึ่งจัดทำและทดสอบโดยผู้อื่น คุณสามารถใช้ Hadoop จาก C ++ ผ่านทางอินเตอร์เฟซท่อหรือจากการปฏิบัติการใด ๆ ผ่านทางAPI สตรีมมิ่ง มีความเป็นอินเตอร์เฟซสตรีมมิ่งที่คล้ายกันใน Spark

  3. อย่าเขียนโค้ดส่วนประกอบทั้งหมดตั้งแต่เริ่มต้นใช้ส่วนประกอบจากชุมชน ถ้าด้วยเหตุผลบางอย่างคุณอ่านมาแล้วและต้องการที่จะแผ่องค์ประกอบคลาวด์ของคุณเองอย่าเริ่มจากไลบรารีมาตรฐานของ C ++ ส่วนประกอบหลักที่คุณต้องการคือ:

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

    มีทางเลือกมากมายสำหรับทั้งสอง สำหรับเข้าคิวRabbitMQมีการติดตั้งของ Windows เช่นเดียวกับZeroMQ สำหรับระบบไฟล์แบบกระจายฉันมีประสบการณ์ไม่เพียงพอบน Windows: ดูเหมือนว่าคุณสามารถจัดระเบียบการแบ่งปัน SMB เป็น DFSได้ แต่ฉันไม่สามารถให้คำแนะนำใด ๆ กับคุณได้ที่นี่ คุณสามารถคิดตามที่ระบุไว้ในคำตอบอื่นเพื่อใช้ฐานข้อมูลแบบกระจายเช่น MongoDB สำหรับข้อมูล มันไม่ทำงานบน Windows

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

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