การแนะนำ
ฉันทำงานในวันที่ บริษัท ที่เราเรียกใช้งานหลายชุดการประมวลผลนับล้านในแต่ละระเบียนของข้อมูลและความคิดของฉันได้รับเมื่อเร็ว ๆ นี้เกี่ยวกับทุกเครื่องที่นั่งแต่ละรอบและชั่วโมงทุกวันทำอะไรหลาย มันจะไม่ดีถ้าเราสามารถใช้เครื่องเหล่านั้นเพื่อหนุนการประมวลผลของระบบของเราหรือไม่ ในบทความนี้ชุดของผมจะพูดถึงประโยชน์ที่อาจเกิดขึ้นของการจ้างสำนักงาน ตาราง โดยใช้สภาพแวดล้อม 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 ฉันไม่ดังต่อไปนี้
- รับงานใด ๆ ที่ไม่ได้ทำเครื่องหมายว่าเสร็จสมบูรณ์ แต่จากคนงานของเราและตั้งค่าพวกเขา (__ME__ แทนกับตัวระบุที่ง่ายที่สุดที่จะเป็นที่อยู่ IP) :
สถานะ`งาน`UPDATE`SET`= 0 WHERE`สถานะ`= 1 และ`started_by`= __ME__;
- การใช้เกณฑ์การเลือกงานของเราให้เลือกงานและบอกว่าระบบการควบคุมคนงานนี้คือการติดต่อกับมันได้
สถานะ`งาน`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
- คว้าต่อไปรายละเอียดงานตามบันทึกตัวเอง :
เลือก * จาก`งาน`WHERE`started_by`= __ME__ LIMIT 1;
เลือก * จาก job_records`WHERE`id`= __JOBID__;
เมื่อเสร็จสิ้นการงานที่เราแทรกระเบียนผลของเราและทำเครื่องหมายงานว่าเสร็จสมบูรณ์ จำข้อมูลไว้เป็นงานที่สามารถหยุด / กลับมาเมื่อใดก็ได้อนุญาตให้มีการโวยวายในสคริปต์ของคุณบาง มันอาจเป็นไปได้ว่างาน suspends ครึ่งทางผ่านการปรับปรุงระบบการควบคุมงานเพื่อตรวจสอบจำนวนระเบียนในงานและจำนวนผลการค้นหาที่บันทึกไว้กลับไปที่ระบบการควบคุมงานจะเป็นไปอย่างชาญฉลาด
นอกจากนี้ขณะนี้แสดงให้เห็นว่างานที่คุณสามารถเลือกและจัดการจากกรอบ SQL - แบบสอบถามจริงๆคุณควรจะ สรุป การควบคุมงานของคุณเพื่อที่ว่าถ้าคุณตัดสินใจที่จะเปลี่ยนไปใช้บริการเว็บ, แฟ้มระบบฐาน, XML , หรืออื่น ๆ หมายเลขของระบบก็จะไม่ส่งผลกระทบต่อโค้ดด้านบนมัน
การกำหนดค่างาน
ด้านต่อไปที่จะต้องพิจารณาคือขนาดของงานและการกำหนดค่า โดยการเล่นกับการกำหนดค่างานที่เราสามารถหยุดความสมดุลที่ดีระหว่างความเร็ว, การจำลองแบบกระบวนการและความน่าเชื่อถือ ใช้เวลาสองสาม OFA สถานการณ์ :
- ใช้เวลา 1 งานในแต่ละวันเพื่อทำงาน : ซึ่งหมายความว่าคนงานของคุณต้อง 15 วันในการประมวลผลงานแต่ละงาน (อย่าลืม 10% ของพลังงานที่สำหรับ 2/3rds ของเวลา) นี่คือการกำหนดค่าอย่างชัดเจนไม่ฉลาดขนาดงานของคุณเป็นวิธีที่มีขนาดใหญ่เกินไป! มันจะใช้เวลาอย่างน้อยสองครั้งที่เวลาที่จะทำให้งานการประมวลผลคนงานเริ่มต้นควรจะไป AWOL (เวลาในการรับว่าได้ผลไม่กลับมาบวกเวลา reprocessing) ในอุดมคติที่คุณต้องการได้อย่างน้อยหนึ่งงานเต็มล้างได้ง่ายโดยการสิ้นสุดของระยะเวลานานไม่ได้ใช้งานแต่ละที่ที่คุณเก็บงาน ticking กว่าและที่กรณีที่เลวร้ายที่สุดงานจะใช้เวลาสองวันในการประมวลผลควรแรกหายไป
- งานใช้เวลา 1 นาทีเพื่อให้ทำงาน : ซึ่งหมายความว่าคนงานของคุณใช้เวลาประมาณ 15 นาทีในการเรียกใช้งานแต่ละงาน ขณะที่ครั้งนี้อาจเริ่มดูเหมือนจะเหมาะสำหรับคุณได้รับการประมวลผลการทำงานเพิ่มเติมในช่วงเวลากลางวันตัวแบ่งกาแฟการประชุม ฯลฯ สถานการณ์เช่นนี้ทำให้สายพันธุ์ในพื้นที่อื่น ๆ ของระบบของคุณและแนะนำปัญหาของตัวเอง ตัวอย่างเช่นตอนแรกตั้งค่าของคุณอัตราส่วนเวลาการประมวลผลจะไปทางขวาลงดังนั้นการสูญเสียประสิทธิภาพของระบบ เครือข่ายของคุณเป็นไปได้อย่างต่อเนื่องสตรีมมิ่งข้อมูลงานไปยังคนงานต่างไม่พอใจเจ้าหน้าที่ที่มีดงวันของพวกเขาในการทำงานวัน คุณยังจะใส่สายพันธุ์เพิ่มเติมเกี่ยวกับเซิร์ฟเวอร์ของคุณประมวลผลงานตามที่ได้ให้อาหารออกจำนวนมากและจำนวนมากของชิ้นเล็ก ๆ ของการทำงานเป็นประจำ สุดท้ายนี้ในสถานการณ์เช่นนี้หากเซิร์ฟเวอร์ของคุณไปลงงานที่คุณกำลังจะสร้างกลับเข้าสู่ระบบใหญ่ของการทำงานในขณะที่งานใหญ่ uncompleted สามารถของการประมวลผลอย่างต่อเนื่องไม่ทราบว่าเซิร์ฟเวอร์สุขสันต์งานได้ประสบปัญหา
ในความเป็นจริงจะไม่มีการกำหนดค่าหนึ่งที่เหมาะสำหรับการตั้งค่าตารางของคุณให้มากขึ้นอยู่กับทรัพยากรที่มีประเภทของงาน, เวลาตอบสนองความต้องการของงานด้านความสามารถเครือข่ายและอื่น ๆ แต่บางแนวทางจะเป็นดังนี้
- ขนาดงานเพื่อให้คนงานแต่ละคนสามารถได้รับผ่านอย่างน้อย 3-4 งานในระยะเวลา 15 ชั่วโมง (ที่ยาวที่สุดในช่วงเวลาน่าจะไม่ได้ใช้งาน)
- เล่นกับขนาดงานเพื่อให้เวลาการติดตั้งที่จะกลายเป็นธรรมที่ไม่มีนัยสำคัญเมื่อเทียบกับเวลาในการประมวล (โดยคำนึงถึงจุดขึ้นไป)
- หากงานไม่แล้วเสร็จในสองเท่าของเวลา (อาจจะน้อยกว่า) คุณคาดหวังให้เสร็จสมบูรณ์สมมติว่า AWOL ไปและเริ่มประมวลผลกับคนอื่น ซึ่งหมายความว่าคุณอาจจะต้องรอถึงสามเท่าของความยาวปกติของงานมันให้เสร็จสมบูรณ์ (อาจจะเป็นอีกต่อไปหากงานที่ตามมาล้มเหลว) คุณอาจต้องการลดเวลานี้ แต่ต้องระวังอย่าให้มันลดมากเกินไปในขณะที่คุณอาจจะเริ่มต้นทำซ้ำงานการประมวลผลอย่างสม่ำเสมอ
- งานควรเป็นอิสระจากความต้องการภายนอกให้มากที่สุด งานเซิร์ฟเวอร์เช่นควรได้รับการติดต่อเพียงจุดเริ่มต้นและจุดสิ้นสุดของงานทุก
- อย่าทำให้เต็มเครือข่ายของคุณนี้จะมีสองผลกระทบเชิงลบ, พนักงานกลางวันของคุณจะได้พบกับการใช้เครือข่ายทำลายและอาจจะประสบปัญหากับการเชื่อมต่อหมดเวลาปัญหาที่จะได้รับแย่กว่านั้นตามที่คุณขนาดตารางของคุณ
- งานตรวจสอบให้แน่ใจสามารถเรียกใช้ในงานของคุณ หากงานที่เป็นงานหน่วยความจำแบบเร่งรัดเกินไปหรือพื้นที่ว่างในดิสก์แบบเร่งรัดจะเริ่มกำลังยกเลิกและสิ่งเดียวที่คุณจะสังเกตเห็นคือการลดลงของจำนวนงานที่ประมวลผลด้วยเหตุผลที่แท้จริงไม่ว่าทำไม
ส่งผลของงาน
เมื่อมีการส่งผลของงานจึงเป็นสิ่งสำคัญในการตรวจสอบว่าผลลัพธ์ที่ยังไม่ได้ถูกส่งมาโดยคนอื่นโดยเฉพาะอย่างยิ่งถ้าคนปัจจุบันได้รับการอยู่เฉยๆบางครั้ง
เมื่อถูกส่งผลให้มั่นใจว่าจำนวนผลการจับคู่จำนวนระเบียนภายในงาน
ดังที่ระบุไว้ก่อนหน้านี้และไม่สามารถขึ้นไปเน้นการสร้างความทนทานต่อความผิดพลาดในการเรียกใช้งานและผลการส่ง คนงานสามารถ (และมักจะ) ไปเข้าสู่โหมดที่ส่วนใหญ่ไม่สะดวกในครั้งนี้และจะต้องมีการ catered สำหรับ นอกจากนี้อีกครั้งสรุปผลของการส่งออกไปจะช่วยรองรับการเปลี่ยนแปลงในอนาคตของคุณกับระบบการควบคุมงานมากขึ้นในการจัดการกับ
สรุป
ใน section นี้เราได้ดูในสิ่งที่เซิร์ฟเวอร์การควบคุมงานต้องทำและวิธีการได้รับระบบขั้นพื้นฐานมากขึ้น เราได้พูดถึงวิธีการเรียกใช้งานจากระบบการควบคุมและวิธีการที่ดีที่สุดในการกำหนดค่างานที่ได้รับประโยชน์สูงสุดของเราในระบบกริดสำนักงานของคุณ ในการสิ้นสุดการวรรคหรือสองที่ส่งผลกลับไปยังเซิร์ฟเวอร์การควบคุมงานนำเสนอ
- เซิร์ฟเวอร์การควบคุมงานบริหารงานและสร้างความมั่นใจว่าทุกหน่วยงานจะแล้วเสร็จ
- โดยสรุปงานที่คุณเลือก / ส่งผลเราสามารถเปลี่ยนเทคโนโลยีของเซิร์ฟเวอร์ควบคุมได้โดยไม่มีปัญหามาก
- กำหนดค่าการงานของคุณเพื่อให้แน่ใจว่าพวกเขาจะทำงานได้อย่างรวดเร็วและมีประสิทธิภาพโดยไม่ต้องใส่ความดันมากเกินไปในโครงสร้างพื้นฐานของเครือข่ายของคุณโดยไม่ซ้ำและการประมวลผลงานเป็นประจำ
- ตรวจสอบให้แน่ใจว่าคุณสร้างความทนทานต่อความผิดและข้อผิดพลาดในการปฏิบัติ checking ของคุณให้คนงานสามารถหยุดและทำงานต่อได้และส่วนใหญ่ไม่สะดวกครั้ง อย่าลืมตรวจสอบหากผลการได้รับแล้วส่งมาโดยคนอื่น
ครั้งต่อไป
ใน 3 ส่วนหนึ่ง เราจะสร้างการประมวลผลเสมือนเครื่องของเราและการตั้งค่า Windows ของเราเครื่องที่จะเป็นคนงานเวลาไม่ได้ใช้งาน