สิ่งแรกก่อน AWS และ Heroku เป็นสิ่งที่แตกต่าง AWS เสนอโครงสร้างพื้นฐานเป็นบริการ ( IaaS ) ในขณะที่ Heroku เสนอแพลตฟอร์มเป็นบริการ ( PaaS )
ความแตกต่างคืออะไร? โดยประมาณ IaaS ให้ส่วนประกอบที่คุณต้องการเพื่อสร้างสิ่งต่างๆ PaaS ให้สภาพแวดล้อมที่คุณเพียงแค่กดรหัสและการกำหนดค่าพื้นฐานและรับแอปพลิเคชันที่ทำงานอยู่ IaaS สามารถเพิ่มพลังและความยืดหยุ่นให้กับคุณได้มากขึ้นด้วยค่าใช้จ่ายในการสร้างและบำรุงรักษาตัวเองมากขึ้น
ในการทำให้โค้ดของคุณทำงานบน AWS และดูคล้ายกับการปรับใช้ Heroku คุณจะต้องการอินสแตนซ์ EC2 บางตัว - คุณต้องการให้โหลดบาลานเซอร์ / แคชเลเยอร์ติดตั้งอยู่ (เช่นวานิช ) คุณต้องการอินสแตนซ์ที่กำลังทำงานอยู่ผู้โดยสารและNginxที่จะให้บริการรหัสของคุณคุณจะต้องการที่จะปรับใช้และกำหนดค่าเช่นฐานข้อมูลคลัสเตอร์สิ่งที่ต้องการPostgreSQL คุณจะต้องการระบบการปรับใช้ที่มีบางอย่างเช่นCapistranoและบางสิ่งที่รวมการบันทึก
นั่นไม่ใช่จำนวนงานที่ไม่สำคัญในการตั้งค่าและบำรุงรักษา ด้วย Heroku, git push
ความจำเป็นที่จะได้รับการจัดเรียงของขั้นตอนที่อาจจะไม่กี่บรรทัดของรหัสใบสมัครและ
ดังนั้นคุณมาไกลขนาดนี้และคุณต้องการที่จะขยาย ยิ่งใหญ่ คุณกำลังใช้Puppetสำหรับการปรับใช้ EC2 ใช่ไหม ดังนั้นตอนนี้คุณกำหนดค่าไฟล์ Capistrano ของคุณให้หมุนอินสแตนซ์ขึ้น / ลงตามต้องการ คุณจิ๊กตั้งค่า Puppet ของคุณอีกครั้งเพื่อให้ Varnish ทราบถึงอินสแตนซ์ของผู้ปฏิบัติงานเว็บและจะรวมกลุ่มระหว่างกันโดยอัตโนมัติ หรือคุณheroku scale web:+5
หรือคุณ
หวังว่าจะช่วยให้คุณมีความคิดเปรียบเทียบระหว่างคนทั้งสอง ตอนนี้เพื่อกล่าวถึงประเด็นเฉพาะของคุณ:
ความเร็ว
ปัจจุบัน Heroku ทำงานบนอินสแตนซ์ของ AWS ในus-east
และeu-west
และสำหรับคุณแล้วมันก็เหมือนกับสิ่งที่คุณต้องการอยู่ดี สำหรับคนอื่น ๆ อาจเป็นเรื่องที่ต้องพิจารณาอีกมาก
ความปลอดภัย
ฉันเคยเห็นเซิร์ฟเวอร์ที่ใช้งานจริงภายในที่ได้รับการดูแลรักษาเป็นจำนวนมากซึ่งเป็นวิธีที่ล้าหลังในการปรับปรุงความปลอดภัย เมื่อใช้ Heroku คุณจะมีคนอื่นจัดการสิ่งนั้นซึ่งเป็นพรหรือคำสาปขึ้นอยู่กับว่าคุณมองมันอย่างไร!
เมื่อคุณปรับใช้คุณจะส่งรหัสของคุณไปที่ Heroku ได้อย่างมีประสิทธิภาพ นี่อาจเป็นปัญหาสำหรับคุณ บทความของพวกเขาเกี่ยวกับDyno Isolation นั้นมีรายละเอียดเกี่ยวกับเทคโนโลยีการแยกของพวกเขา เพื่อนร่วมงานหลายคนแสดงปัญหาเกี่ยวกับเทคโนโลยีเหล่านี้และความแข็งแกร่งของความโดดเดี่ยว ฉันไม่ได้อยู่ในตำแหน่งที่มีความรู้ / ประสบการณ์เพียงพอที่จะแสดงความคิดเห็น แต่การใช้งาน Heroku ในปัจจุบันของฉันพิจารณาว่า "ดีพอ" มันอาจเป็นปัญหาสำหรับคุณฉันไม่รู้
ขูดหินปูน
ฉันได้สัมผัสว่าจะใช้งานสิ่งนี้ได้อย่างไรในการเปรียบเทียบ IaaS กับ PaaS แอปพลิเคชันของคุณมีประมาณProcfile
ซึ่งมีเส้นของแบบฟอร์มdyno_type: command_to_run
ดังนั้นตัวอย่าง (เขียนจากhttp://devcenter.heroku.com/articles/process-model ):
web: bundle exec rails server
worker: bundle exec rake jobs:work
สิ่งนี้ด้วย:
heroku scale web:2 worker:10
จะส่งผลให้คุณมี 2 web
dynos และ 10 worker
dynos ทำงาน ดีง่ายง่าย โปรดทราบว่าweb
เป็นไดโนประเภทพิเศษที่สามารถเข้าถึงโลกภายนอกและอยู่ด้านหลังมัลติเพล็กเซอร์ปริมาณการใช้งานเว็บที่ดี คนงานของคุณอาจโต้ตอบกับคิวข้อความสำหรับการกำหนดเส้นทางที่คล้ายกันซึ่งพวกเขาจะได้รับตำแหน่งผ่าน URL ในสภาพแวดล้อม
ประสิทธิภาพต้นทุน
ผู้คนจำนวนมากมีความคิดเห็นที่แตกต่างกันมากมายเกี่ยวกับเรื่องนี้ ปัจจุบันเป็น $ 0.05 / ชม. สำหรับชั่วโมง Dyno เมื่อเทียบกับ $ 0.025 / ชม. สำหรับอินสแตนซ์ AWS ขนาดเล็กหรือ $ 0.09 / ชม. สำหรับอินสแตนซ์ขนาดเล็กของ AWS
Heroku ของเอกสารไดโนกล่าวว่าคุณมีเกี่ยวกับของ RAM 512MB ดังนั้นจึงอาจจะไม่มากเกินไปไม่มีเหตุผลที่จะต้องพิจารณาไดโนเป็นบิตเช่นอินสแตนซ์ไมโคร EC2 มันคุ้มค่าเป็นสองเท่าราคาหรือไม่ คุณเห็นคุณค่าของเวลาเท่าไหร่ จำนวนเวลาและความพยายามที่จำเป็นในการสร้างข้อเสนอ IaaS เพื่อให้ได้มาตรฐานนี้ไม่ถูกแน่นอน ฉันไม่สามารถตอบคำถามนี้ให้คุณได้ แต่อย่าประมาท "ค่าใช้จ่ายแอบแฝง" ของการตั้งค่าและการบำรุงรักษา
(แยกจากกันเล็กน้อย แต่ถ้าฉันเชื่อมต่อกับไดโนจากที่นี่ ( heroku run bash
) รูปลักษณ์คร่าวๆจะแสดง 4 คอร์ใน/proc/cpuinfo
และ RAM 36GB - นี่ทำให้ฉันเชื่อว่าฉันอยู่ใน"High-Memory Double Extra Instance ขนาดใหญ่" " . เอกสารของ Heroku dynoกล่าวว่าแต่ละ dyno ได้รับ RAM 512MB ดังนั้นฉันจึงอาจแบ่งปันกับ dynos อื่น ๆ ได้ถึง 71 (ฉันไม่มีข้อมูลเพียงพอเกี่ยวกับ homogeny ของอินสแตนซ์ AWS ของ Heroku ดังนั้นระยะเวลาของคุณอาจแตกต่างกัน))
พวกเขาแข่งขันกับคู่แข่งของพวกเขาอย่างไร?
นี่ฉันกลัวว่าฉันจะช่วยคุณไม่ได้จริงๆ คู่แข่งรายเดียวที่ฉันเคยดูจริงๆคือGoogle App Engine - ในขณะที่ฉันกำลังมองหาการปรับใช้แอปพลิเคชัน Java และข้อ จำกัด เกี่ยวกับกรอบและเทคโนโลยีที่ใช้งานได้นั้นไม่น่าเชื่อ นี่เป็นมากกว่า "สิ่ง Java" - จำนวนของข้อ จำกัด ทั่วไปและการพิจารณาที่จำเป็น ( คำแนะนำคำถามที่พบบ่อยที่) ดูเหมือนน้อยกว่าสะดวก ในทางตรงกันข้ามการปรับใช้กับ Heroku เป็นความฝัน
ข้อสรุป
ฉันหวังว่านี้จะตอบคำถามของคุณ (โปรดแสดงความคิดเห็นหากมีช่องว่าง / พื้นที่อื่น ๆ ที่คุณต้องการแก้ไข) ฉันรู้สึกว่าฉันควรเสนอตำแหน่งส่วนตัวของฉัน ฉันรัก Heroku สำหรับ "การปรับใช้ที่รวดเร็ว" เมื่อฉันเริ่มต้นแอพพลิเคชั่นและฉันต้องการโฮสติ้งราคาถูก (ชั้น Heroku ฟรียอดเยี่ยม - ถ้าคุณต้องการ dyno เว็บเดียวและ 5MB ของ PostgreSQL มันฟรีโฮสต์แอพพลิเคชั่น) Heroku เป็นตำแหน่งสู่ตำแหน่งของฉัน . สำหรับ "การปรับใช้การผลิตที่จริงจัง" กับลูกค้าที่ชำระเงินหลายรายพร้อมข้อตกลงระดับบริการพร้อมเวลาทุ่มเทในการใช้งานและอื่น ๆ ฉันไม่สามารถพาตัวเองออกจากการควบคุม Heroku ได้แล้วจาก AWS หรือ เซิร์ฟเวอร์ของเราเป็นแพลตฟอร์มโฮสติ้งที่เลือก
ในที่สุดมันเกี่ยวกับสิ่งที่ดีที่สุดสำหรับคุณ คุณบอกว่าคุณเป็น "โปรแกรมเมอร์มือใหม่" - อาจเป็นได้ว่าการใช้ Heroku จะช่วยให้คุณจดจ่อกับการเขียน Ruby และไม่ต้องเสียเวลาในการสร้างโครงสร้างพื้นฐานอื่น ๆ ทั้งหมดรอบโค้ดของคุณ ฉันจะลองทำดู
หมายเหตุ AWS มีข้อเสนอของ PaaS คือElastic Beanstalkซึ่งรองรับ Ruby, Node.js, PHP, Python, .NET และ Java ฉันคิดว่าคนส่วนใหญ่โดยทั่วไปเมื่อพวกเขาเห็น "AWS" ข้ามไปยังสิ่งต่าง ๆ เช่น EC2 และ S3 และ EBS ซึ่งเป็นข้อเสนอของ IaaS