สำนักงาน Grid Computing ใช้เสมือนจริง -- ส่วนที่ 2

โดย Watkin Steven Lloyd 4 ธันวาคม 2009 ศุกร์ 23:23

การแนะนำ

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

ใน ส่วนที่ 1 ฉันให้เป็นภาพรวมของระบบและเทคโนโลยีที่ผมจะใช้ดีตามที่กล่าวไว้บางส่วนของสาเหตุที่เป็นเหตุผลที่คุณต้องการจะสร้างตารางสำนักงาน

ควบคุมงาน

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

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

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

Server งาน

เราจะต้องมีที่ไหนสักแห่งเพื่อควบคุมงานของเราจากนี้ควรจะเป็นระบบเดียวในตารางของคุณที่มีการตรวจสอบที่ตั้งทรัพยากรที่คงที่เป็นที่อยู่ IP, ชื่อโฮสต์ URL (ใช้ DNS ภายใน) เป็นต้นทั้งนี้เนื่องจาก คนงานจำเป็นต้องทราบว่าจะมองหางานหรือผู้ปฏิบัติงานจำเป็นที่จะต้องหาระบบการควบคุมงาน (ไม่พบระบบการควบคุมงานคนงาน)

เซิร์ฟเวอร์งานตัวเองไม่ได้จริงๆมีงานที่ซับซ้อน (ในระบบขั้นพื้นฐาน แต่อย่างใด) จะต้องจัดเก็บรายชื่อของงาน, มือออกงาน, ได้รับผลและต่อมาเก็บไว้สำหรับการเรียกใช้ในภายหลัง ส่วนวิธีการเหล่านี้ ('มือออกงาน'เช่น) มีการกำหนดสามารถพื้นฐานมาก ต่อมาเมื่อเราสามารถขยายระบบที่จะรวมอินเตอร์เฟซการบริหารเพื่อเพิ่มแก้ไขลบระงับ แต่งานนี้เกินกว่าการออกกำลังกายนี้

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

การตั้งค่าพื้นฐาน

การตั้งค่าพื้นฐานสำหรับเซิร์ฟเวอร์งานของเราจะประกอบด้วยสิ่งที่ฉันเรียกเซิร์ฟเวอร์ของปวกเปียกของฉัน (ซึ่งก็คือ nux Li, ySql M, P HP) รหัสคนงานที่ทำงานอยู่บน Thea จริงจะทำงานออกว่างานก็สามารถดำเนินการโดยการโต้ตอบกับระบบการควบคุมงานกับฐานข้อมูล ต่อมาเมื่อเราสามารถสร้างบริการทางเว็บและมือออกงานจริงแทนที่จะมีคนงานจะทำงานอย่างหนักพวกเขาเอง แต่สำหรับตอนนี้เราจะยังคงใช้ หลักการ KISS (เก็บมัน Simple, Stupid!)

ดังนั้นจะช่วยให้สร้างสาม mySQL ตารางที่จะจัดการกับงาน เหล่านี้จะมีงาน``,`jobRecords`, และ jobResults`

ตารางงาน นี่ฉันใช้ SQL Buddy เป็นทางเลือกที่น้อยที่ดีในการ phpMyAdmin เพียงเพราะ : มันง่ายต่อการติดตั้งใน Centos (สำหรับคนอื่น ๆ เห็น ทางเลือก 10 Great เพื่อ phpMyAdmin )

ตารางนี้ประกอบด้วย 5 เขตข้อมูลง่าย

  • ID : ระบุตัวตนของงาน
  • ชื่อ : อ้างอิงอาจเป็นลูกค้าหรือตัวระบุที่เลขที่อื่น ๆ
  • สถานะ : คุณจำเป็นต้องทราบว่างานเป็นที่เช่น
    • 0 : ยังไม่ได้เริ่มต้น
    • 1 : การเลือกขึ้น
    • 2 : เสร็จสมบูรณ์
  • started_by : ใครเริ่มทำงาน? นี้ไม่จำเป็นทั้งหมด แต่เป็นสิ่งที่ดีที่จะมี ฉันขอแนะนำให้ติดตามการปฏิบัติงานตามที่อยู่ IP ของพวกเขาในเครือข่ายของคุณ
  • started_at : เมื่อไหร่ที่คนงานเริ่มงาน? โดยการติดตามงานที่ยังไม่เสร็จสิ้นภายในจำนวน X ของทุกครั้งที่เรารู้ว่าเราจำเป็นต้องรับงานอีกครั้งและเริ่มประมวลผลโดยคนงานอื่น คนงานสามารถหยุดการประมวลผล / ออฟไลน์สำหรับจำนวนใด ๆ ด้วยเหตุผล, ไฟฟ้าดับ, ความผิดพลาดของเครือข่ายการสูญเสียและอื่น ๆ

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

ช่วยให้เพิ่มงานตัวอย่างบางประการดังนี้

ตัวอย่างงาน

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

  • บันทึก ID : บัตรประชาชน
  • ชื่อ : มีชื่อของบุคคล
  • ที่อยู่ : ที่อยู่ของบุคคล
  • jobs_id : ID งานที่บันทึกนี้จะเชื่อมโยงไป

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

  • ตารางงาน job_record_id Link : ผล
  • ผล : ผลข้อมูล

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

การเลือกงาน

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

  1. รับงานใด ๆ ที่ไม่ได้ทำเครื่องหมายว่าเ​​สร็จสมบูรณ์ แต่จากคนงานของเราและตั้งค่าพวกเขา (__ME__ แทนกับตัวระบุที่ง่ายที่สุดที่จะเป็นที่อยู่ IP) :
      สถานะ`งาน`UPDATE`SET`= 0 WHERE`สถานะ`= 1 และ`started_by`= __ME__; 
  2. การใช้เก​​ณฑ์การเลือกงานของเราให้เลือกงานและบอกว่าระบบการควบคุมคนงานนี้คือการติดต่อกับมันได้
      สถานะ`งาน`UPDATE`SET`= 1,`started_by`= __ME__,`started_at`= NOW () สถานะ`WHERE`= 0 หรือ
     (`status`= 1 และ started_at``> DATE_SUB (NOW (), INTERVAL X HOUR)) ORDER BY`id`ASC; 

    โดยการจับงานที่ยังไม่ได้ส่งกลับมาส่งผลให้จำนวน X ของทุกครั้งที่เรามั่นใจว่างานทั้งหมดจะดำเนินไปในกรณีที่มีคนงานทำงานล้มเหลวหรือจะ AWOL

  3. คว้าถัดไปรายละเอียดงานตามบันทึกตัวเอง :
      เลือก * จาก`งาน`WHERE`started_by`= __ME__ LIMIT 1;
     เลือก * จาก job_records`WHERE`id`= __JOBID__; 

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

นอกจากนี้ขณะนี้แสดงให้เห็นว่างานที่คุณสามารถเลือกและจัดการจากกรอบ SQL - แบบสอบถามจริงๆคุณควรจะ สรุป การควบคุมงานของคุณเพื่อที่ว่าถ้าคุณตัดสินใจที่จะเปลี่ยนไปใช้บริการเว็บ, แฟ้มระบบฐาน, XML , หรืออื่น ๆ หมายเลขของระบบก็จะไม่ส่งผลกระทบต่อโค้ดด้านบนมัน

การกำหนดค่างาน

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

  1. ใช้เวลา 1 งานในแต่ละวันเพื่อทำงาน : ซึ่งหมายความว่าคนงานของคุณต้อง 15 วันในการประมวลผลงานแต่ละงาน (อย่าลืม 10% ของพลังงานที่สำหรับ 2/3rds ของเวลา) นี่คือการกำหนดค่าอย่างชัดเจนไม่ฉลาดขนาดงานของคุณเป็นวิธีที่มีขนาดใหญ่เกินไป! มันจะใช้เวลาอย่างน้อยสองครั้งที่เวลาที่จะทำให้งานการประมวลผลคนงานเริ่มต้นควรจะไป AWOL (เวลาที่จะรับว่ายังไม่ได้ส่งกลับผลบวกเวลา reprocessing) ในอุดมคติที่คุณต้องการได้อย่างน้อยหนึ่งงานเต็มล้างได้ง่ายโดยการสิ้นสุดของระยะเวลานานไม่ได้ใช้งานแต่ละที่ที่คุณเก็บงาน ticking กว่าและที่กรณีที่เลวร้ายที่สุดงานจะใช้เวลาสองวันในการประมวลผลควรแรกหายไป
  2. งานใช้เวลา 1 นาทีเพื่อให้ทำงาน : ซึ่งหมายความว่าคนงานของคุณใช้เวลาประมาณ 15 นาทีในการเรียกใช้งานแต่ละงาน ขณะนี้ในขั้นแรกอาจจะดูที่เหมาะสำหรับคุณได้รับการประมวลผลการทำงานเพิ่มเติมในช่วงเวลากลางวันตัวแบ่งกาแฟการประชุม ฯลฯ สถานการณ์เช่นนี้ทำให้สายพันธุ์ในพื้นที่อื่น ๆ ของระบบของคุณและนำเสนอปัญหาของตัวเอง ตัวอย่างเช่นตอนแรกตั้งค่าของคุณอัตราส่วนเวลาการประมวลผลจะไปทางขวาลงดังนั้นการสูญเสียประสิทธิภาพของระบบ เครือข่ายของคุณเป็นไปได้อย่างต่อเนื่องสตรีมมิ่งข้อมูลงานไปยังคนงานต่างไม่พอใจเจ้าหน้าที่ที่มีดงวันของพวกเขาในการทำงานวัน คุณยังจะใส่สายพันธุ์เพิ่มเติมเกี่ยวกับเซิร์ฟเวอร์ของคุณประมวลผลงานตามที่ได้ให้อาหารออกจำนวนมากและจำนวนมากของชิ้นเล็ก ๆ ของการทำงานเป็นประจำ สุดท้ายนี้ในสถานการณ์เช่นนี้หากเซิร์ฟเวอร์ของคุณไปลงงานที่คุณกำลังจะสร้างกลับเข้าสู่ระบบใหญ่ของการทำงานในขณะที่งานใหญ่ uncompleted สามารถของการประมวลผลอย่างต่อเนื่องไม่ทราบว่าเซิร์ฟเวอร์สุขสันต์งานได้ประสบปัญหา

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

  • ขนาดงานเพื่อให้คนงานแต่ละคนสามารถได้รับผ่านอย่างน้อย 3-4 งานในระยะเวลา 15 ชั่​​วโมง (ที่ยาวที่สุดในช่วงเวลาน่าจะไม่ได้ใช้งาน)
  • เล่นกับขนาดงานเพื่อให้เวลาการติดตั้งที่จะกลายเป็นธรรมที่ไม่มีนัยสำคัญเมื่อเทียบกับเวลาในการประมวล (โดยคำนึงถึงจุดขึ้นไป)
  • หากงานไม่แล้วเสร็จในสองเท่าของเวลา (อาจจะน้อยกว่า) คุณคาดหวังให้เสร็จสมบูรณ์สมมติว่า AWOL ไปและเริ่มประมวลผลกับคนอื่น ซึ่งหมายความว่าคุณอาจจะต้องรอถึงสามเท่าของความยาวปกติของงานมันให้เสร็จสมบูรณ์ (อาจจะเป็นอีกต่อไปหากงานที่ตามมาล้มเหลว) คุณอาจต้องการลดเวลานี้ แต่ต้องระวังอย่าให้มันลดมากเกินไปในขณะที่คุณอาจจะเริ่มต้นทำซ้ำงานการประมวลผลอย่างสม่ำเสมอ
  • งานควรเป็นอิสระจากความต้องการภายนอกให้มากที่สุด งานเซิร์ฟเวอร์เช่นควรได้รับการติดต่อเพียงจุดเริ่มต้นและจุดสิ้นสุดของงานทุก
  • อย่าทำให้เต็มเครือข่ายของคุณนี้จะมีสองผลกระทบเชิงลบ, พนักงานกลางวันของคุณจะได้พบกับการใช้เครือข่ายทำลายและอาจจะประสบปัญหากับการเชื่อมต่อหมดเวลาปัญหาที่จะได้รับแย่กว่านั้นตามที่คุณขนาดตารางของคุณ
  • งานตรวจสอบให้แน่ใจสามารถเรียกใช้ในงานของคุณ หากงานที่เป็นงานหน่วยความจำแบบเร่งรัดเกินไปหรือพื้นที่ว่างในดิสก์แบบเร่งรัดจะเริ่มกำลังยกเลิกและสิ่งเดียวที่คุณจะสังเกตเห็นคือการลดลงของจำนวนงานที่ประมวลผลด้วยเหตุผลที่แท้จริงไม่ว่าทำไม

ส่งผลของงาน

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

เมื่อถูกส่งผลให้มั่นใจว่าจำนวนผลการจับคู่จำนวนระเบียนภายในงาน

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

สรุป

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

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

ครั้งต่อไป

ใน 3 ส่วนหนึ่ง เราจะสร้างการประมวลผลเสมือนเครื่องของเราและการตั้งค่า Windows ของเราเครื่องที่จะเป็นคนงานเวลาไม่ได้ใช้งาน

หนึ่งเพื่อตอบสนอง"สำนักงาน Grid Computing ใช้เสมือนจริง -- ส่วนที่ 2"

  1. สลาย says :

    Heya! แนวความคิดที่ดีนี้ แต่จริงๆแล้วอาจจะทำงานได้หรือไม่

ปล่อยให้ตอบกลับ













ชุดรูปแบบพาโนรามาโดย Themocracy

5 ผู้เข้าชมออนไลน์ขณะนี้
3 แขก, 2 บอ, 0 สมาชิก
ผู้เข้าชมสูงสุดวันนี้ : 14 ที่ 03:51 UTC
เดือนนี้ : 26 ที่ 2011/07/05 12:35 UTC
ปีนี้ : 130 ที่ 28-03-2011 10:40 UTC
เวลาทั้งหมด : 130 ที่ 28-03-2011 10:40 UTC