Menjalankan Magento di Lingkungan AWS

54

Hosting Magento, seperti semua orang tahu, tidak seperti hosting aplikasi PHP lainnya. Seberapa layak menjalankan Magento di lingkungan Amazon Web Services pada 2013?

Kombinasi ajaib apa dari layanan AWS yang masuk akal untuk digunakan dengan Magento? Tingkat apa yang merupakan default pintar untuk toko "run of the mill"? (Ya, saya tahu, tidak ada run of the mill store)

Yang mana (EBS?) Yang harus dihindari?

Adakah tips, trik, strategi penyebaran untuk menghindari kesakitan berminggu-minggu dalam mendapatkan pengaturan ini?

Alan Storm
sumber

Jawaban:

44

Saya menjadi hosting Magento di AWS pada tahun 2011 hingga 2013. Banyak hal yang Anda peroleh dari penggunaan infrastruktur cloud daripada hosting dedicated atau shared yang lebih relevan dijelaskan di bawah topik DevOps, yang tidak eksklusif untuk AWS tetapi lebih mudah diaktifkan melalui penggunaannya.

  • Kontrol yang lengkap dan fleksibel dari perencanaan kapasitas Anda - tingkatkan menjelang acara pemasaran, aktifkan penyediaan dinamis melalui Elastic Beanstalk, turunkan selama periode volume rendah, putar situs dalam beberapa minggu, robek ke bawah dan buang.
  • Mudah mengatur lingkungan dev / test / staging dan mereplikasi perubahan di antara mereka.
  • Host halaman admin Anda pada host yang terpisah.
  • Gunakan DynamoDB untuk manajemen sesi dan ElastiCache untuk cache tanpa membuat operasi tambahan, berhati-hatilah. ElastiCache saat ini tidak berfungsi di VPC.
  • gunakan ELB untuk loadbalancing, tetapi berhati-hatilah jika permintaan memakan waktu lebih dari 60 detik mereka akan dihentikan dengan tidak hormat
  • Gunakan AmazonSES untuk mengirim email (sekarang bahkan lebih mudah melalui SMTP biasa), meskipun celah masih ada dalam alat untuk melacak pantulan / keluhan
  • Gunakan AmazonS3 untuk hosting media, dan Cloudfront untuk CDN.
  • Mengurangi biaya operasi untuk aktivitas basis data melalui RDS, yang memiliki fitur pengembalian waktu, kegagalan otomatis, cadangan otomatis, dan peningkatan otomatis.
  • Manajemen DNS sangat mudah di Route53, tetapi umumnya disarankan untuk memudahkan pemetaan subdomain untuk memuat penyeimbang.
  • VPC untuk menempatkan semua mesin Anda di jaringan pribadi mereka untuk memiliki kontrol granular yang lebih dan mengekspos akses sesuai keinginan Anda melalui terowongan VPN Anda sendiri.
  • Metrik kinerja yang mudah dan peringatan (selain dari penggunaan memori dan penggunaan disk) melalui CloudWatch & SNS

Jejak minimal akan menjadi 1 ELB, 2 webservers EC2 dalam AZ terpisah, 1 multi-az RDS, zona yang di-hosting Route53 untuk domain. Awalnya Anda dapat menggunakan sesi tempel pada ELB untuk membuat manajemen sesi lebih sederhana, tetapi karena lalu lintas Anda meningkat, Anda ingin memindahkan media ke CDN (S3 & CloudFront) dan sesi dari masing-masing mesin.

Area yang belum saya lihat tetapi masih menjanjikan: skrip CloudFormation untuk penyebaran yang lebih mudah dari tumpukan Magento, pembongkaran pembuatan pesanan melalui DynamoDB dan antrian pekerja untuk throughput checkout yang lebih besar (seseorang telah memulai proyek untuk melakukan ini melalui MongoDB di salah satu hackathons baru-baru ini), dan mengatur keberadaan multi-wilayah melalui routing berbasis latensi dengan Route53.

Saya kira saya semacam penginjil untuk cloud. Khusus untuk AWS, c3.large adalah ukuran instance yang layak untuk server web produksi, tapi saya akan mulai dengan yang terkecil dari setiap kelas instance dan mengukur kinerja dan meningkatkan atau mengoptimalkan kode sesuai keinginan Anda, itulah sebabnya saya merujuk semua orang ke xhgui terus-menerus.

Ralph Tice
sumber
Saya sebenarnya menyarankan untuk tidak menggunakan RDS untuk database. Anda tidak memiliki kendali atas optimalisasi server, sesuatu yang berfungsi dengan baik, kebutuhan Magento. Ada kertas putih yang Magento keluarkan pada tuning tumpukan yang menunjukkan detail pada tuning MySql. Pada dasarnya jika Anda berencana untuk skala atau mengharapkan kecepatan maksimal, Anda harus menjalankan server database Anda sendiri.
davidalger
3
@davidalger Maaf tapi itu saran yang mengerikan. Anda perlu membaca tentang grup parameter basis data dan penggunaannya. aws.amazon.com/rds/faqs/#34 Juga, ada jauh lebih banyak peningkatan kinerja dari caching atau optimasi kode daripada apa pun yang dapat Anda lakukan ke database kecuali jika Anda berfokus sepenuhnya pada proses checkout, dalam hal ini Anda harus melihat github.com/magento-hackathon/MongoDB-OrderTransactions
Ralph Tice
3
Saya pasti akan menggunakan RDS. Paling-paling Anda kehilangan kemampuan untuk membuat fungsi-fungsi sistem, itu saja. Ini sangat dioptimalkan, sangat tersedia, dan Anda dapat memutar tiruan dengan beberapa klik. Manfaatnya jauh lebih besar daripada potensi kerugiannya.
philwinkle
Bagaimana dengan EBS (Block Storage)? Mengapa Anda belum memasukkannya ke dalam pengaturan Anda juga? Juga, apa cara yang disarankan untuk menyinkronkan direktori media di beberapa EC2?
Dayson
1
@Dayson Pertanyaan bagus. Magento cukup I / O berat, bahkan ketika mendelegasikan sesi dan manajemen cache ke sistem cache memori. Itulah mengapa Anda mungkin ingin mempertimbangkan EBS. Kami saat ini tidak menggunakan AWS, tetapi kami menjalankan lingkungan Magento kami di tumpukan loadbalanced Tinggi, di mana Anda akan memiliki masalah yang sama dengan penyimpanan CMS seperti direktori / media. 2 bulan yang lalu, kami memasang NFS pada server web kami dan menghubungkan direktori / home / user kami (di mana semua data web disimpan) ke titik pemasangan. Dari POV kegunaan itu brilian. Dari segi kinerja masih bisa menggunakan beberapa tweak.
Jaap Haagmans
30

Ini adalah bagaimana kami melakukannya untuk webshop Angrybirds:

Presentasi bahasa Inggris di Magento Imagine 2012.

Presentasi Jerman di Meet Magento # 6.12

Bahasa Jerman saat ini "PHP Magazin" juga memiliki artikel 6 halaman (dalam bahasa Jerman) dengan beberapa detail

Setelah membaca semua presentasi Fabrizio yang dihubungkan di atas berkali-kali, saya pikir jawaban ini benar-benar yang terbaik, meskipun saya setuju itu bisa menggunakan lebih banyak penjelasan dan ekstraksi ide-ide kunci dari presentasi (terutama karena tautan pertama asli sudah sudah 404 pada saat saya memposting pembaruan ini).

Satu-satunya hal yang akan saya tambahkan ke konsep-konsep kunci dalam presentasi adalah bahwa kemajuan modern dalam teknologi AWS / pesaing akan menyarankan beberapa penyesuaian ... seperti fakta bahwa Cloudfront mendukung gzip untuk peningkatan kinerja CDN sekarang, meskipun tidak secepat atau tidak apakah itu memberi Anda penghentian SSL gratis seperti penawaran CloudFlare . Route 53 DNS mereka juga tidak secepat atau kaya fitur seperti CloudFlares, AWS juga tidak memiliki Firewall Aplikasi Web atau perlindungan DDOS yang sebanding, yang semuanya termasuk dalam penawaran CloudFlare ...

Ada beberapa cara lain yang mungkin untuk memperbaiki presentasi asli Fabrizio, tetapi saya tidak akan menjadi konsultan yang baik jika saya membagikan SEMUA yang saya tahu di setiap posting StackExchange yang saya jawab, sekarang, benarkan? Ditambah beberapa penawaran terbaru akan secara substansial mengubah saran dalam presentasi asli, yang semuanya MASIH menawarkan kinerja yang luar biasa, bahkan jika lebih banyak yang bisa dikeluarkan dari AWS dengan berbagai opsi yang digunakan.

Ringkasan Konsep-Konsep Utama :

  1. Kenali Kemacetan Anda Secara Intim : dan optimalkan dengan tepat. Setiap tingkat tumpukan memiliki kemacetan spesifik (bandwidth, CPU, basis data) dan menyelesaikan kemacetan di setiap tingkat memerlukan solusi berbeda yang dioptimalkan untuk setiap tantangan spesifik, meskipun sebenarnya caching adalah elemen umum di setiap tingkat, yang mengarah ke ...

  2. Cache All The Things : Memanfaatkan sistem AWS jika memungkinkan (Elasticache untuk Redis / cache data jenis Memcache, Cloudfront untuk Caching gambar, js, dan aset css terdekat dengan pengguna akhir melalui CDN) dan Varnish untuk mempercepat respons instance server ke tingkat aset awal caching permintaan dari CDN. Juga, pastikan untuk mengompres & meminimalkan dalam sistem penempatan Anda SEBELUM penempatan ke CDN

  3. Autoscaling Penting : Permintaan sering berubah dan lebih cepat daripada yang dapat Anda monitor dan bereaksi secara manual. Menyesuaikan perubahan-perubahan ini secara real-time membutuhkan penggunaan alat otomasi yang tersedia di AWS seperti Grup Penskalaan Otomatis untuk memutar potongan sistem yang paling cocok untuk tugas ini. AWS menangani ini secara transparan untuk CloudFront CDN, Route 53 DNS, Elastic Load Balancers dan S3 Bucket, Anda harus menanganinya dengan mengatur ukuran dan penskalaan otomatis untuk Mesin Virtual EC2, dan hanya mengatur ukuran / penyetelan untuk tingkatan RDS & Elasticache

  4. Otomasi adalah satu-satunya cara untuk mengikat semua ini secara efektif : dengan begitu banyak komponen yang saling terkait, beberapa di antaranya harus diinisialisasi pada waktu penggunaan, beberapa tepat setelah penyebaran, mengelola sistem yang disetel untuk kinerja optimal memerlukan otomatisasi. Meningkatkan penyebaran dan otomasi sistem untuk pembersihan cache, pemanasan cache, pemrosesan gambar, dll. Adalah satu-satunya cara yang masuk akal untuk mengelola banyak subsistem yang berbeda ini dan membuatnya tetap lancar dan bebas masalah.

  5. Tetapi sebenarnya itu tidak mungkin tanpa otomatisasi uji : Dengan banyak bagian yang bergerak ini, sesuatu akan pecah dengan hampir semua perubahan. Dan Anda harus berubah untuk mengikuti perkembangan Magento dan AWS. Dan itu akan terjadi SERING . Jadi untuk menjaga biaya perubahan diminimalkan, semua bentuk pengujian perlu diimplementasikan dan diotomatisasi sepenuhnya - mulai dari pengujian unit hingga pengujian integrasi hingga pengujian fungsional berbasis Selenium di lokasi aktual yang diluncurkan dalam konfigurasi pengujian aktual yang meniru lingkungan produksi. Sekarang Anda BENAR-BENAR senang Anda mengotomatiskan semua proses penyebaran Anda, bukan?

fbrnc
sumber
2
downvoting untuk menjadi sekelompok tautan
Ralph Tice
9
@RalphTice Saya mungkin berada di minoritas di sini, tetapi banyak tautan baik-baik saja, terutama ketika mereka relevan dengan fbmc. Tidak semua orang ingin meletakkan konten mereka di domain publik / creative-commons dengan memasukkannya dalam jawaban StackExchange.
Alan Storm
4
@AlanStorm Saya tidak bermaksud semua orang harus downvote karena itu banyak tautan, tetapi hanya meninggalkan penjelasan mengapa saya memilih untuk downvote. Saya lebih suka mendapatkan konten daripada tautan ke konten ketika saya datang ke situs SE, dan saya menggunakan SE untuk secara khusus menghindari konten video dan non-Inggris.
Ralph Tice
3
Link tunggal dianggap sebagai jawaban yang buruk (lihat faq ) karena tidak ada artinya dengan sendirinya dan sumber daya target tidak dijamin akan hidup di masa depan . Akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
j0k
2
Tautan pertama tampaknya tidak ada lagi. Mungkin ini dapat menggantikannya: slideshare.net/aoemedia/angrybirds-magento-cloud-deployment
ermannob
4

Solusi (!) Yang sedikit lebih sederhana adalah menginstal seperti yang Anda lakukan pada VPS lainnya. Saya telah menawarkan gambar gratis selama beberapa tahun sekarang ... belakangan ini saya berkonsentrasi pada Sydney DC baru karena menjadi lokal - lebih detail di http://www.greengecko.co.nz/magento_on_amazon_ec2 jika Anda Saya tertarik dengan hal itu. Praktis tanpa rasa sakit memulai - satu klik dan Anda di sana. Arahkan browser Anda pada instance untuk detail lebih lanjut. Ini akan menjadi titik awal yang bagus - tetapi lihatlah dan modifikasi /etc/rc.local jika Anda ingin membangun di atasnya.

Hal penting untuk disadari adalah bahwa instans cukup bertenaga rendah. Jelas membuang banyak uang pada aplikasi memang meningkatkan ini, tetapi bahkan untuk webshop yang cukup kecil sekalipun, instance sedang adalah minimum absolut, hanya untuk mendapatkan beberapa core, dan benar-benar besar adalah kebutuhan terkecil.

Juga, penyimpanan Amazon lambat. Karena itu, bahkan lebih penting daripada biasanya untuk mengirimkan semua yang Anda bisa dari memori: menyetel basis data, cache yang didukung memori, dll sangat penting.

Setelah Anda menyortirnya, itu berfungsi dengan baik. persyaratan untuk menjalankan dalam VPC jika Anda ingin> 1 alamat IP benar-benar menjengkelkan (terutama jika Anda tidak menyadarinya ketika Anda mulai!), dan benar-benar satu-satunya gotcha yang akan Anda temui.

Sangat mudah untuk memperluas platform 'on the fly' - pada akhirnya satu-satunya penghambat menjadi jumlah daya pemrosesan yang tersedia untuk PHP (selain kode tidak efisien!), Dan menjalankan banyak 'mesin' secara paralel mungkin merupakan pilihan paling sederhana - membawa tambahan online saat perlu.

Nikmati!

Steve

Steve Holdoway
sumber
VPC secara default sekarang untuk akun AWS baru. aws.typepad.com/aws/2013/03/...
Ralph Tice
4

Kami menjalankan RDS Multi AZ, Dua Server Dioptimalkan NGINX, 2 Server Varnish + ELB, dan pada Server Varnish yang sama (port yang berbeda ke Varnish) SSL Nginx. Kami menggunakan Elasticache dan dengan segera mengintegrasikan DynamoDB untuk manajemen sesi Magento. Kami menggunakan S3 dan Cloudfront juga.

Saya memiliki obrolan yang menarik dengan perusahaan hosting berbasis di Inggris kami memiliki server £ 700 sebulan dengan. Yang mereka lakukan adalah batu tulis AWS Amazon. Dengan pengaturan dan optimalisasi yang benar di semua bidang termasuk striping kembali Magento, menonaktifkan modul, fungsi jumlah kategori dll, dll (kami telah mengatur NGINX dan Server Varnish untuk duduk di depan server Database yang memuat keseimbangan).

Saat ini kami bisa mendapatkan 2400 - 3000 + klik per detik di halaman rumah, kategori, produk dan CMS (halaman pernis). Halaman non-pernis, kami dapat memproses 400 - 500 permintaan per detik tergantung pada toko. Kami sekarang menggunakan RDS Multi dengan Baca.

Kami juga menempatkan Admin Magento di Node-nya sendiri untuk menjalankan crons, dan admin traffic. http://administraton.mymagestore.com/admin

Kami tidak pernah melihat ke belakang. Kami menggunakan salah satu yang terbaik di Inggris, semua itu adalah host yang sangat mahal.

Boju
sumber
1
Hati-hati - sesi admin tidak akan berfungsi dengan DynamoDB karena ukurannya. Saya akan menguji dengan seksama - DynamoDB telah meningkatkan ukuran item maks dari 64KB menjadi 256KB tetapi itu mungkin masih belum cukup besar. Saya mengatasinya dengan menggunakan sesi file karena saya hanya punya satu node admin dan banyak node frontend dan dengan demikian menggunakan local.xml terpisah untuk admin vs web frontend.
Ralph Tice
2

Anda dapat menggunakan hampir semua Layanan AWS dasar untuk membuat magento Anda berfungsi. Scenation paling sederhana adalah menggunakan EC2 dengan Elastic IP dan AWS VPC untuk konfigurasi keamanan.

Cara cerdas adalah memiliki 2 penyebaran server: Web Server + Database. Server web mencakup Magento + Nginx + PHP + backend Caching (Redis atau APC adalah pilihan yang baik) dan server MySQL terpisah dalam subnet yang sama. Server-server ini dapat terlihat satu sama lain melalui IP pribadi di jaringan pribadi (dikonfigurasi melalui VPC). Nginx adalah server web pilihan segera setelah dapat mengirimkan file statis dengan sangat cepat.

Server database harus disembunyikan dari akses apa pun. Server web akan terlihat pada port 80 dan 443. Dimungkinkan untuk mengalokasikan IP Elastis ke server web. Nantinya akan berguna untuk mengkonfigurasi DNS (misalnya melalui AWS Route 53) atau penyeimbangan beban AWS.

Seperti yang Anda sebutkan, mungkin sulit untuk membuat konfigurasi seperti itu. Jadi, Anda dapat mempercepat pengaturan melalui Deploy4Me. Ini akan mengkonfigurasi semua keamanan, VM, dan jaringan yang disebutkan dalam hitungan menit.

Pavel Korsukov
sumber