เพื่อให้ดีขึ้นหรือแย่ลงเราได้ย้ายเว็บแอปพลิเคชันLAMPทั้งหมดจากเครื่องเฉพาะไปยังระบบคลาวด์ (เครื่อง Amazon EC2) มันไปได้ดีมาก แต่วิธีที่เราทำcronsนั้นไม่เหมาะสม ฉันมีคำถามเฉพาะของ Amazon เกี่ยวกับวิธีจัดการงาน cron ในระบบคลาวด์ให้ดีที่สุดโดยใช้ "วิธีของ Amazon"
ปัญหา : เรามีเว็บเซิร์ฟเวอร์หลายเว็บและจำเป็นต้องเรียกใช้ crons สำหรับงานแบตช์เช่นการสร้าง RSS feeds การเรียกใช้อีเมลสิ่งต่างๆมากมาย แต่งาน cron จำเป็นต้องทำงานบนเครื่องเดียวเท่านั้นเพราะมักจะเขียนลงในฐานข้อมูลดังนั้นผลลัพธ์จะซ้ำกันหากทำงานบนหลายเครื่อง
จนถึงตอนนี้เรากำหนดให้เว็บเซิร์ฟเวอร์แห่งหนึ่งเป็น "เว็บเซิร์ฟเวอร์หลัก" และมีงาน "พิเศษ" บางอย่างที่เว็บเซิร์ฟเวอร์อื่น ๆ ไม่มี การแลกเปลี่ยนสำหรับคลาวด์คอมพิวติ้งคือความน่าเชื่อถือ - เราไม่ต้องการ "เว็บเซิร์ฟเวอร์หลัก" เพราะมันเป็นจุดเดียวของความล้มเหลว เราต้องการให้พวกเขาทั้งหมดเหมือนกันและเพื่อให้สามารถขยายและลดขนาดได้โดยไม่ต้องจำว่าอย่านำเว็บเซิร์ฟเวอร์หลักออกจากคลัสเตอร์
เราจะออกแบบแอปพลิเคชันของเราใหม่เพื่อแปลงงาน Linux cron เป็นรายการงานชั่วคราวที่ไม่มีจุดล้มเหลวได้อย่างไร
ความคิดของฉันจนถึงตอนนี้:
- มีเครื่องสำหรับทำงานเฉพาะ crons เท่านั้น สิ่งนี้จะสามารถจัดการได้มากกว่าเล็กน้อย แต่ก็ยังคงเป็นจุดเดียวของความล้มเหลวและจะเสียเงินไปกับการเพิ่มอินสแตนซ์เพิ่มเติม
- งานบางอย่างสามารถย้ายจาก Linux crons ไปยังMySQL Events ได้แต่ฉันไม่ใช่แฟนตัวยงของแนวคิดนี้เพราะฉันไม่ต้องการใส่ตรรกะของแอปพลิเคชันลงในเลเยอร์ฐานข้อมูล
- บางทีเราสามารถเรียกใช้ crons ทั้งหมดในทุกเครื่อง แต่เปลี่ยนสคริปต์ cron ของเราดังนั้นทั้งหมดจึงเริ่มต้นด้วยตรรกะเล็กน้อยที่ใช้กลไกการล็อกดังนั้นเซิร์ฟเวอร์เพียงเครื่องเดียวเท่านั้นที่ดำเนินการจริงและเซิร์ฟเวอร์อื่น ๆ ฉันไม่ใช่แฟนตัวยงของความคิดนี้เพราะมันฟังดูอาจเป็นปัญหาและฉันอยากจะใช้แนวทางปฏิบัติที่ดีที่สุดของ Amazon มากกว่าที่จะทำแบบของเราเอง
- ฉันกำลังนึกภาพสถานการณ์ที่มีการกำหนดเวลางานไว้ที่ไหนสักแห่งเพิ่มในคิวแล้วเว็บเซิร์ฟเวอร์อาจเป็นคนงานที่พูดว่า "เดี๋ยวก่อนฉันจะรับงานนี้" Amazon Simple Workflow Serviceฟังดูเป็นแบบนี้ แต่ตอนนี้ฉันยังไม่ค่อยรู้เรื่องนี้มากนักดังนั้นข้อมูลเฉพาะใด ๆ จะเป็นประโยชน์ ดูเหมือนว่าจะมีน้ำหนักมากสำหรับบางสิ่งที่เรียบง่ายเหมือน cron? เป็นบริการที่ถูกต้องหรือมีบริการของ Amazon ที่เหมาะสมกว่านี้หรือไม่?
อัปเดต:ตั้งแต่ถามคำถามฉันได้ดูการสัมมนาผ่านเว็บของAmazon Simple Workflow Serviceบน YouTube และสังเกตเห็นเวลา 34:40 ( http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s ) ฉันได้เห็น สไลด์ที่กล่าวถึงงาน cron เป็นแอปพลิเคชันตัวอย่าง ในหน้าเอกสารของพวกเขา " ตัวอย่าง AWS Flow Framework สำหรับ Amazon SWF " Amazon กล่าวว่าพวกเขามีโค้ดตัวอย่างสำหรับ crons:
... > งาน Cronในตัวอย่างนี้เวิร์กโฟลว์ที่รันเป็นเวลานานจะเรียกใช้งานกิจกรรมเป็นระยะ ความสามารถในการดำเนินการต่อเนื่องจากการดำเนินการใหม่เพื่อให้การดำเนินการสามารถทำงานได้เป็นระยะเวลานานมากจะแสดงให้เห็น ...
ฉันดาวน์โหลด AWS SDK สำหรับ Java ( http://aws.amazon.com/sdkforjava/ ) และถูกฝังไว้ในโฟลเดอร์ที่ไร้สาระเพียงพอซึ่งมีรหัสจาวา ( aws-java-sdk-1.3.6/samples/AwsFlowFramework/src/com/amazonaws/services/simpleworkflow/flow/examples/periodicworkflow
) อยู่
ปัญหาคือถ้าฉันพูดตามตรงสิ่งนี้ไม่ได้ช่วยอะไรเลยเพราะมันไม่ใช่สิ่งที่ฉันสามารถย่อยได้ง่ายๆด้วยชุดทักษะของฉัน ตัวอย่างเดียวกันหายไปจาก PHP SDK และดูเหมือนจะไม่มีบทช่วยสอนที่ดำเนินการตามกระบวนการ โดยพื้นฐานแล้วฉันยังคงต้องการคำแนะนำหรือเคล็ดลับ