การแนะนำ
ผมทำงานใน บริษัท ที่เราเรียกใช้งานชุดการประมวลผลหลายล้านระเบียนของข้อมูลในแต่ละวันและฉันได้รับเมื่อเร็ว ๆ นี้เกี่ยวกับการคิดทุกเครื่องที่นั่งรอบในแต่ละวันและทุกการทำอะไรเป็นเวลาหลายชั่วโมง มันจะไม่ดีถ้าเราสามารถใช้เครื่องที่เพื่อหนุนพลังการประมวลผลของระบบของเราหรือไม่ ในชุดของบทความนี้ฉันจะมองผลประโยชน์ที่อาจเกิดขึ้นจากการจ้างสำนักงาน กริด ใช้สภาพแวดล้อม virtualised
ใน ส่วนที่ 1 ผมให้ภาพรวมของระบบและเทคโนโลยีที่ฉันจะใช้เช่นกันตามที่กล่าวไว้บางส่วนของเหตุผลที่มีศักยภาพว่าทำไมคุณต้องการที่จะสร้างตารางสำนักงาน
การควบคุมงาน
หากคุณกำลังจะใช้งานแล้วคุณจะต้องมีวิธีบางอย่างเพื่อจัดการกับพวกเขา ระบบการควบคุมงานของคุณ (บนเซิร์ฟเวอร์งานของคุณ) จะต้องคิดดีจริงๆที่ออกมาก่อนแม้กระทั่งความพยายามที่จะเรียกใช้ตารางสำนักงาน ดังนั้นประการแรกสิ่งที่งานสำหรับระบบการควบคุมงานดังนี้:
- มือออกงานเมื่อมีการร้องขอจากคนงาน
- บอกให้คนงานสิ่งที่ประเภทของงานที่จะเรียกใช้
- งานแทรค
- ตรวจสอบให้แน่ใจว่างานที่จะทำงานเพียงครั้งเดียว
- ให้ข้อมูลงานเพื่อคนงานหรืออย่างน้อยก็บอกพวกเขาที่จะได้รับมัน
นอกจากนี้ระบบยังจะต้องมีการขยายโซลูชั่นที่ทำงานสำหรับในตอนนี้ในกรณีเดียวอาจจะขยายเพื่อให้ทำงานได้หลายประเภทของงานที่เป็นธุรกิจที่มีมูลค่าการมองเห็นในการแก้ปัญหาตาราง ตัวอย่างเช่นงานอาจได้รับลำดับความสำคัญประเภทของงานมากกว่าหนึ่งอาจมีอยู่ (เช่นฐานรหัสหลาย) ในที่สุดคุณอาจจะใช้เครื่องของผู้ปฏิบัติงานแตกต่างกันหลายที่มีการปรับให้เหมาะสมกับประเภทของงานแต่ละคน (แต่ที่ไม่ย้ายออกจากคนงานทั่วไป " ความคิด) พยายามที่จะคิดเกี่ยวกับอนาคตเมื่อมีการพัฒนาระบบการมองเห็นระยะสั้นสามารถนำไปสู่ความยุ่งยากในระยะยาวและเวลาในการพัฒนาเพิ่มขึ้น
เซิร์ฟเวอร์งาน
เรากำลังจะต้องอยู่ที่ไหนสักแห่งในการควบคุมงานของเราจากนี้ควรจะเป็นระบบเดียวในตารางของคุณที่มี Resource Locator คงเป็นที่อยู่ IP, ชื่อโฮสต์ URL (ใช้ภายใน DNS) เป็นต้นทั้งนี้เป็นเพราะ คนงานจำเป็นต้องรู้ที่จะมองหางานหรือผู้ปฏิบัติงานจำเป็นต้องค้นหาระบบการควบคุมงาน (ไม่ระบบการควบคุมงานหาคนงาน)
เซิร์ฟเวอร์งานตัวเองไม่ได้จริงๆมีงานที่ซับซ้อน (ในระบบขั้นพื้นฐาน แต่อย่างใด) จะต้องจัดเก็บรายชื่อของงาน, มือออกงานได้รับผลและต่อมาเก็บไว้เพื่อเรียกใช้ในภายหลัง วิธีการชิ้นส่วนเหล่านี้ ('มือออกงาน' เช่น) มีการกำหนดสามารถเป็นพื้นฐานมาก ต่อมาเมื่อเราสามารถขยายระบบอินเตอร์เฟซที่จะรวมการบริหารงานเพื่อเพิ่ม, แก้ไข, ลบ, ระงับการงาน แต่นี้อยู่นอกเหนือการออกกำลังกายนี้
มีเหตุผลใด ๆ ก็ตามแล้วว่าเซิร์ฟเวอร์งานของคุณไม่สามารถทำงานเสมือนเครื่องภายในเซิร์ฟเวอร์ในการประมวลผลหลักที่ให้คุณไม่ได้ระบายทรัพยากรมากเกินไปจากมันคือ เซิร์ฟเวอร์งาน แต่ไม่จำเป็นต้องมีประสิทธิภาพที่สูงถ้าจะไปลงบนเย็นวันศุกร์ที่คุณกำลังจะสูญเสียทั้งวันหยุดสุดสัปดาห์ของการประมวลผลที่อาจต้นทุนคุณคู่ของสัปดาห์ที่ผ่านมามูลค่าของเวลาการประมวลผล (เมื่อเทียบกับเซิร์ฟเวอร์ในการประมวลผลหลักเพียงอย่างเดียวของคุณ) . คุณอาจต้องการพิจารณาวางเซิร์ฟเวอร์งานของคุณในสภาพแวดล้อมที่สมดุลโหลดสำหรับความพร้อมสูง
การติดตั้งขั้นพื้นฐาน
การตั้งค่าพื้นฐานสำหรับเซิร์ฟเวอร์งานของเราจะประกอบด้วยสิ่งที่ฉันเรียกอย่างใดอย่างหนึ่งของเซิร์ฟเวอร์ปวกเปียกของฉัน (ที่เป็น nux Li, ม. ySql, P HP) รหัสที่ใช้ในงาน Thea จริงจะทำงานออกมาว่างานที่จะสามารถทำงานโดยการติดต่อกับฐานข้อมูลที่มีงานระบบการควบคุม ต่อมาเมื่อเราสามารถสร้างบริการเว็บและมือจริงออกงานมากกว่าที่มีคนงานจะทำงานหนักของตัวเอง แต่ตอนนี้เราจะยังคงใช้ หลักการ KISS (Keep มัน Simple, Stupid!)
ดังนั้นจะช่วยให้สร้างสาม mySQL ตารางที่จะจัดการกับงาน เหล่านี้จะเป็นงาน ``, `` jobRecords และ jobResults `
ที่นี่ผมใช้ SQL บัดดี้ ทางเลือกน้อยมากที่จะ phpMyAdmin เพียงเพราะมันง่ายต่อการติดตั้งบน CentOS (สำหรับคนอื่น ๆ ดูที่: 10 ทางเลือกที่ดีในการ phpMyAdmin )
ตารางนี้จะประกอบด้วย 5 ฟิลด์ง่าย
- ID: ระบุตัวตนของงาน
- ชื่อ: สามารถเป็นลูกค้าอ้างอิงหรือหมายเลขของตัวระบุอื่น ๆ
- สถานะ: คุณจำเป็นต้องรู้ว่างานเป็นที่เช่น
- 0: ยังไม่ได้เริ่มต้น
- 1: ที่เลือกขึ้น
- 2: สำเร็จแล้ว
- started_by: ใครเริ่มทำงานหรือไม่ นี้ไม่จำเป็นอย่างสิ้นเชิง แต่ดีที่มี ผมขอแนะนำให้คนงานติดตามตามที่อยู่ IP ของพวกเขาในเครือข่ายของคุณ
- started_at: เมื่อไหร่ที่คนงานเริ่มงานหรือไม่ โดยการติดตามงานที่ยังไม่ได้เสร็จสิ้นภายในจำนวนครั้งที่เรารู้ว่าเราต้องไปรับงานอีกครั้งและเริ่มต้นการประมวลผลโดยผู้ปฏิบัติงานอื่น คนงานสามารถหยุดการประมวลผล / go ครับสำหรับจำนวนเหตุผลใด ๆ , ไฟดับ, ความผิดพลาดของการสูญเสียเครือข่ายอื่น ๆ
มันเป็นวิธีง่ายตารางนี้อาจจะขยายสาขาเพิ่มอีกไม่กี่เพื่อให้สามารถติดตามสถิติคอลัมน์เวลาเสร็จสิ้นเพื่อดูว่านานเอางานเคาน์เตอร์เพื่อดูจำนวนคนงานที่หยิบขึ้นมาสมัครงาน (ชัดตอบสนองความต้องการนี้มีแนวโน้มที่จะ 1), ลำดับความสำคัญงาน, รายชื่อสามารถไปบนและบน ในสถานการณ์ที่ซับซ้อนมากขึ้นงานก็จะเป็นไปได้ที่จะระบุว่าหน่วยความจำของผู้ปฏิบัติงานจะต้องสามารถเข้าถึง (และมีเพียง แต่ใช้แรงงานที่เหมาะสม) หรือแม้กระทั่งสิ่งที่ประเภทของผู้ปฏิบัติงานจะต้อง
ช่วยเพิ่มตำแหน่งงานตัวอย่างไม่กี่:
ตารางต่อไปอีกครั้งจะค่อนข้างง่ายที่จะเข้าใจเหล่านี้บันทึกงานของเรา พวกเขาจะเชื่อมโยงกับตารางงานหลักตามคอลัมน์ `jobs_id` ทำขึ้นจากตารางนี้มากขึ้นอยู่กับข้อมูลที่คุณจำเป็นต้องจ่ายให้กับคนงานของคุณจะช่วยให้ทำตัวอย่างง่ายๆที่เรามีสี่คอลัมน์:
- ID: ID ของระเบียน
- ชื่อ: ชื่อของบุคคล
- ที่อยู่: ที่อยู่ของบุคคล
- jobs_id: รหัสงานที่บันทึกนี้จะเชื่อมโยงกับ
ตารางที่สามและครั้งสุดท้ายประกอบด้วยตารางผลก็มีมากเหมือนกันทำขึ้นเป็นตารางบันทึกของเราและมีการเพิ่มของบางคอลัมน์อาจจะเป็นส่วนหนึ่งของตารางบันทึก:
- job_record_id: Link ผลกับตารางงาน
- ผล: ข้อมูลผลการ
... และนั่นคือทั้งหมดที่คุณต้องการสำหรับการควบคุมงาน! (แม้จะอยู่ในระดับขั้นพื้นฐานมาก) ในกรณีของฉันฉันชี้ไปยังตารางที่มีข้อมูลของฉันไปที่ขั้นตอนการตั้งอยู่อีก แต่นี้อาจเคยได้อย่างง่ายดายเพียงไฟล์พารามิเตอร์ที่จะใช้รหัสจำลองคุณชื่อมัน
การเลือกงาน
ตามที่ระบุไว้ก่อนหน้านี้คนงานจะดำเนินการจัดการงานของเราสำหรับเราในขณะนี้ดังนั้นเราต้องทำจริงๆคือการหางานที่ต้องการการประมวลผลและได้รับข้อมูล วิธีที่เราจะทำเช่นนี้? ดีเลือกเกณฑ์การเลือกงานของเราและมองหางานใน SQL ที่ฉันได้ดังต่อไปนี้:
- ใช้งานใด ๆ ที่ไม่ได้ทำเครื่องหมายว่าเสร็จสมบูรณ์ แต่จากคนงานของเราและตั้งพวกเขา (แทน ME__ __ กับตัวระบุที่ง่ายที่สุดที่จะเป็นที่อยู่ IP):
UPDATE `ตำแหน่งงานที่ SET` สถานะ `= 0 WHERE` สถานะ `= 1 และ` started_by `= __ ME__;
- โดยใช้เกณฑ์การเลือกงานของเราให้เลือกสมัครงานและบอกระบบการควบคุมที่ผู้ปฏิบัติงานนี้คือการจัดการกับมันได้
UPDATE `ตำแหน่งงานที่ SET` สถานะ `= 1,` started_by `= __ ME__,` started_at `= NOW () WHERE` สถานะ `= 0 หรือ
(`สถานะ` = 1 และ `started_at`> DATE_SUB (NOW (), INTERVAL HOUR X)) ORDER BY `id` ASC;
โดยงานโลภที่ยังไม่ได้ส่งกลับผลลัพธ์ในจำนวนครั้งที่เรามั่นใจว่างานทั้งหมดจะถูกเรียกใช้ในกรณีที่คนงานทำงานล้มเหลวหรือไป AWOL
- ไปคว้ารายละเอียดตำแหน่งงานตามระเบียนของตัวเอง:
SELECT * FROM `` WHERE งาน `started_by` = __ LIMIT ME__ 1;
SELECT * FROM `` WHERE job_records `id` = __ JOBID__;
เมื่อเสร็จสิ้นการสมัครงานเราแทรกระเบียนผลของเราและทำเครื่องหมายงานว่าเสร็จสมบูรณ์ จำเอาไว้เป็นงานที่สามารถระงับ / เวลาใดก็ได้อนุญาตให้มีการทนทานในสคริปต์ของคุณบาง มันอาจจะมีที่งาน suspends ครึ่งทางผ่านการปรับปรุงระบบการควบคุมงานเพื่อให้ตรวจสอบจำนวนของระเบียนในงานและจำนวนของผลลัพธ์ที่บันทึกไว้กลับไปที่ระบบการควบคุมงานจะเป็นไปอย่างชาญฉลาด
นอกจากนี้ในขณะนี้แสดงให้เห็นว่างานที่สามารถเลือกและการจัดการจากกรอบ SQL-แบบสอบถามที่คุณควรจริงๆจะ สรุป การควบคุมงานของคุณเพื่อที่ว่าถ้าคุณตัดสินใจที่จะเปลี่ยนไปใช้บริการเว็บ, ระบบไฟล์ที่ใช้ XML , หรืออื่น ๆ จำนวนของระบบจะไม่ส่งผลกระทบต่อรหัสข้างต้นมัน
การกำหนดค่าสมัครงาน
ด้านต่อไปที่จะต้องพิจารณาคือขนาดของงานและการกำหนดค่า โดยการเล่นกับการกำหนดค่าสมัครงานที่เราจะสามารถหยุดความสมดุลที่ดีระหว่างความเร็วจำลองกระบวนการและความน่าเชื่อถือ ใช้สถานการณ์ OFA คู่:
- งานใช้เวลา 1 วันในแต่ละที่จะเรียกใช้: นี่หมายความว่าคนงานของคุณต้อง 15 วันในการประมวลผลแต่ละงาน (จำ 10% ของพลังงานสำหรับ 2/3rds ของเวลา) นี้ไม่ชัดเจนการกำหนดค่าที่ฉลาดขนาดงานของคุณเป็นวิธีที่มีขนาดใหญ่เกินไป! มันจะใช้เวลาอย่างน้อยสองครั้งเวลาที่จะได้งานประมวลผลของผู้ปฏิบัติงานที่เริ่มต้นควรจะไป AWOL (เวลาที่จะรับว่ามันไม่ได้กลับผลบวกกับเวลา reprocessing) ในอุดมคติของคุณจะมีอย่างน้อยหนึ่งงานเต็มล้างได้อย่างง่ายดายโดยสิ้นสุดระยะเวลาการใช้งานในแต่ละระยะยาวที่ทางคุณเก็บตำแหน่งงานฟ้องมากกว่าและที่เลวร้ายที่สุดกรณีที่สมัครงานจะใช้เวลาสองวันในการขั้นตอนแรกควรจะไปที่ขาดหายไป
- งานใช้เวลา 1 นาทีในการทำงาน: นี่หมายความว่าคนงานของคุณใช้เวลาประมาณ 15 นาทีในการทำงานแต่ละงาน ขณะนี้เริ่มอาจดูเหมือนอุดมคติที่คุณได้รับการประมวลผลการทำงานเพิ่มเติมในช่วงเวลาอาหารกลางวันอาหารว่างการประชุม ฯลฯ สถานการณ์นี้จะทำให้ความเครียดในพื้นที่อื่น ๆ ของระบบของคุณและนำเสนอปัญหาของตัวเอง ตัวอย่างเช่นตอนแรกมีอัตราส่วนการตั้งค่าเวลาของคุณ / การประมวลผลจะไปทางขวาลงดังนั้นการสูญเสียประสิทธิภาพของระบบ เครือข่ายของคุณเป็นไปได้ข้อมูลสตรีมมิ่งงานอย่างต่อเนื่องไปยังเจ้าหน้าที่ผู้ปฏิบัติงานต่างๆที่น่าผิดหวังที่เป็น dong วันของพวกเขาทำงานวัน คุณยังจะวางสายพันธุ์เพิ่มเติมเกี่ยวกับเซิร์ฟเวอร์ในการประมวลผลงานของคุณเป็นมันมีจานออกจำนวนมากและจำนวนชิ้นเล็ก ๆ ของการทำงานเป็นประจำ สุดท้ายในสถานการณ์เช่นนี้หากเซิร์ฟเวอร์สมัครงานของคุณไปลงที่คุณกำลังจะสร้างกลับเข้าสู่ระบบใหญ่ของการทำงานไม่เสร็จสมบูรณ์ในขณะที่งานใหญ่ได้จากการประมวลผลอย่างต่อเนื่องไม่รู้ว่าเซิร์ฟเวอร์สุขสันต์งานได้ประสบปัญหา
ในความเป็นจริงจะไม่มีการกำหนดค่าที่เหมาะสำหรับการตั้งค่าอย่างใดอย่างหนึ่งตารางของคุณมากขึ้นอยู่กับทรัพยากรที่มีประเภทของงาน, งานที่ต้องการเวลาตอบสนองความสามารถของเครือข่ายและอื่น ๆ อย่างไรก็ตามแนวทางที่จะเป็น:
- งานขนาดเพื่อให้ผู้ปฏิบัติงานแต่ละคนจะสามารถรับผ่านงาน 3-4 อย่างน้อยก็ในช่วง 15 ชั่วโมง (ที่ยาวที่สุดในช่วงเวลาที่จะได้ใช้งาน)
- เล่นกับขนาดของงานเพื่อให้เวลาการติดตั้งที่เป็นนัยสำคัญอย่างเป็นธรรมเมื่อเทียบกับระยะเวลาในการประมวลผล (คำนึงถึงจุดด้านบน)
- ถ้างานไม่เสร็จสมบูรณ์ในจำนวนสองเท่าของเวลาที่ (อาจจะน้อยกว่า) ที่คุณคาดหวังที่จะทำให้เสร็จคิดว่า AWOL ไปของมันและเริ่มต้นการประมวลผลแล้วกับคนงานอื่น ซึ่งหมายความว่าคุณอาจต้องรอถึงสามครั้งความยาวปกติของงานมันจะเสร็จสมบูรณ์ (อาจจะนานกว่านั้นหากงานที่ตามมาล้มเหลว) คุณอาจต้องการลดเวลานี้ แต่ระวังไม่ให้ลดมันมากเกินไปในขณะที่คุณอาจเริ่มต้นการทำซ้ำงานการประมวลผลอย่างสม่ำเสมอ
- งานควรจะเป็นอิสระจากความต้องการภายนอกให้มากที่สุด เซิร์ฟเวอร์งานเช่นควรได้รับการติดต่อในช่วงเริ่มต้นและจุดสิ้นสุดของงานทุก
- ไม่เปียกโชกเครือข่ายของคุณนี้จะมีสองผลกระทบเชิงลบ, พนักงานกลางวันของคุณจะพบการใช้เครือข่ายทำลายและปัญหาที่เกิดขึ้นอาจจะมีประสบการณ์กับการเชื่อมต่อระยะเวลาออกปัญหาที่จะได้รับที่เลวร้ายยิ่งในขณะที่คุณปรับขนาดตารางของคุณ
- งานตรวจสอบให้แน่ใจสามารถทำงานบนงานของคุณ ถ้างานที่เป็นหน่วยความจำมากเกินไปงานหนักหรือพื้นที่ว่างดิสก์ที่เข้มข้นจะเริ่มยกเลิกและสิ่งเดียวที่คุณจะสังเกตเห็นเป็นแบบเลื่อนในจำนวนของงานประมวลผลด้วยเหตุผลที่แท้จริงว่าทำไม
ผลการค้นหาจากการส่งงาน
เมื่อส่งผลของงานเป็นสิ่งสำคัญเพื่อตรวจสอบว่าผลลัพธ์ที่ยังไม่ได้รับการแสดงความคิดเห็นของผู้ปฏิบัติงานอื่นโดยเฉพาะหากผู้ปฏิบัติงานในปัจจุบันได้รับอยู่เฉยๆบางครั้ง
เมื่อผลการแสดงความคิดเห็นให้แน่ใจว่าจำนวนของผลลัพธ์ที่ตรงกับจำนวนของระเบียนภายในงาน
ตามที่ระบุไว้ก่อนหน้านี้และไม่สามารถไปเน้นการสร้างความอดทนความผิดในการดึงงานและการส่งผล คนงานสามารถ (และมักจะ) เข้าสู่โหมด suspend ที่ส่วนใหญ่ไม่สะดวกครั้งนี้และจะต้องมีการรองรับสำหรับ นอกจากนี้อีกครั้งหนึ่งสรุปผลลัพธ์ของคุณออกไปจะช่วยส่งให้ความสำคัญสำหรับการเปลี่ยนแปลงในอนาคตที่จะมีระบบการควบคุมงานของคุณง่ายขึ้นมากที่จะจัดการกับ
ข้อมูลอย่างย่อ
ในsectionÂนี้เราได้มองที่สิ่งที่เซิร์ฟเวอร์ควบคุมงานต้องทำและวิธีการที่จะได้รับระบบพื้นฐานมากขึ้น เราจะกล่าวถึงวิธีการดึงงานจากระบบการควบคุมและวิธีการที่ดีที่สุดในการกำหนดค่างานที่จะได้รับส่วนใหญ่ของเราของระบบกริดของสำนักงาน จนจบวรรคหนึ่งหรือสองเกี่ยวกับการส่งผลกลับไปยังเซิร์ฟเวอร์การควบคุมงานได้นำเสนอ
- เซิร์ฟเวอร์ควบคุมงานบริหารงานและทำให้มั่นใจว่าทุกหน่วยงานจะเสร็จสมบูรณ์
- โดยการสรุปงานของคุณส่งผลให้เลือก / เราสามารถเปลี่ยนเทคโนโลยีของเซิร์ฟเวอร์ควบคุมได้โดยไม่มีปัญหามาก
- การกำหนดค่าการงานของคุณเพื่อให้แน่ใจว่าพวกเขาจะทำงานได้อย่างรวดเร็วและมีประสิทธิภาพโดยไม่ต้องใส่ความดันมากเกินไปในโครงสร้างพื้นฐานเครือข่ายของคุณและไม่ซ้ำงานการประมวลผลอย่างสม่ำเสมอ
- ตรวจสอบให้แน่ใจว่าคุณได้สร้างความผิดพลาดและข้อผิดพลาดcheckingÂเป็นประจำของคุณหรือผู้ปฏิบัติงานสามารถระงับและดำเนินการและส่วนใหญ่ไม่สะดวกครั้ง อย่าลืมตรวจสอบว่าผลที่ได้รับอยู่แล้วการแสดงความคิดเห็นของผู้ปฏิบัติงานอื่น
ครั้งต่อไป
ใน ส่วนที่ 3 เราจะสร้างเครื่องประมวลผลของเราเสมือนและการตั้งค่าเครื่อง Windows ของเราที่จะกลายเป็นแรงงานไม่ได้ใช้งานตลอดเวลา