Amazon EC2 üzerinde bir PHP app Mimarlık

2 Cevap php

Geçenlerde (pazarlama kastıyla, çoğunlukla eğitim uğruna değil) Ben oluşturulan bir Facebook uygulaması üzerinde trafik bir sel deneyimli

Ben app oluşturulan, söylemeye gerek yok, ben ölçeklenebilirlik düşünmedim. Ben MediaTemple tarafından barındırılan zaman yetersiz sanal sunucu hiç kesim değil bir konumda artık değilim, ve gerçekten aşağı makinenin ham I / O geliyor. Bu proje, şimdiye kadar bana yetiştirmek beri, ben Amazon EC2 platformu anlamak için bir fırsat olarak alacağını düşündüm.

App kendisi MySQL arka uç ile (Zend Framework kullanarak) PHP oluşturulur. Mümkün memcached ben uygulama önbelleğe kullanın. Ben, EC2 ile oynamak örneklerini kadar iplik, ben istiyorum paketleri yükleme ve bir örneğine bir EBS ses montaj hafta sonu geçirdim.

Ama ölçeklenebilirlik için iyi sonuçlar elde edecek bir sonraki mantıklı adım nedir? Ben bir AMI MySQL örneği ve Apache hizmeti için bir yangın mı? Ya ben sadece onları ihtiyaç olarak birçok kez örneklerini dışarı çoğaltmak ve daha sonra ön ucunda yük dengeleme çeşit yaparsınız? Ben, ancak, bu zor bir gereklilik (bazı uygulama ben bu geçici bir çözüm ile gelip özel çözümler muhtemelen vardır) tüm veritabanı satırlar arasında toplam istatistikleri değil çünkü İdeal olarak, ben merkezi bir veri tabanı var istiyorum

Bu muhtemelen bir yalındır cevap değil biliyorum, bu nedenle görüş ve önerilerinizi bekliyoruz.

2 Cevap

O kadar çok soru - iyi olsa hepsini.

Ölçekleme açısından, birkaç seçeneğiniz var.

İlk tek bir kutu ile başlamaktır. Sen yukarı ölçekli olabilir - daha güçlü bir kutu ile. EC2 çeşitli büyüklükte örneği var. Bu bir sunucu Göç bir büyük kutu istediğiniz her zaman gerektirir.

Kolay sunucuları eklemektir. Apache ve tek bir örneği ile başlayabilirsiniz MySQL. Sonra trafik artar, MySQL için ayrı bir örneği oluşturmak ve bu yeni örneği için uygulama üzerine geldiğinizde. Bu uygulama ve veritabanı arasında güzel bir katman oluşturur. Bu trafik dayalı iyi bir başlangıç ​​noktası gibi geliyor.

Sonra muhtemelen daha fazla uygulama gücü (web sunucuları) veya daha fazla veritabanı güç (MySQL küme vb) gerekir. DNS kayıtları (Pound) deneyin bazı yük dengeleme yazılımı çalıştıran ön kutuları bir çift işaret olabilir. Bu yük dengeleme sunucuları webserverlarda istekleri dağıtmak. EC2 kendiniz yönetmek için bir alternatif Elastic Load Balancing, hangi vardır, ve muhtemelen daha kolay - Ben şahsen kullanmadım.

Farkında olmak başka bir şey - EC2 has no persistent storage. Sen Elastik Blok Store'u kullanarak kalıcı veri kendinizi yönetmek zorunda. This guide otomatik yedeklemeler ile, bu nasıl mükemmel bir öğretici olduğunu.

Ben EC2 ileriye yolu olduğuna karar eğer bazı ayrılmış örneklerini satın almanızı öneririz. Sen 3 yılda kendinize yaklaşık% 50 tasarruf edeceğiz!

Son olarak, bir maliyet yönetim hizmetleri sunuyoruz RightScale gibi hizmetler ilginizi çekebilir. Mevcut diğer sağlayıcıları vardır.

İlk adım endişeleri ayırmaktır. Ben senin yük var ne kadar yüksek bağlı olarak, ayrı bir MySQL sunucusu ve muhtemelen özel bir memcached kutusu ile kapalı bölmek istiyorum. Sonra bellek ve her kutuda CPU kullanımını izlemek ve mümkünse optimize nerede görmek istiyorum. Bu yeni Media Temple, kutuları kapalı iplik ile yapılabilir. Ben de bir daha ucuz, daha geliştirici dostu bir alternatif için Slicehost öneririm.

Biraz daha düşük bütçeli PHP dağıtım optimizasyonları:

  • nginx hizmet veren statik bir dosya işlemek ve sonra ayrı bir Apache örneğine vekil uygulaması istekleri ters gibi daha verimli bir web sunucusu kullanarak
  • Tamamen Apache kurtulmak PHP-FPM gibi bir şey kullanarak nginx üstüne FastCGI PHP uygulamak. Apache ihtiyaçları kadar mod_rewrite ötesine ve basit Apache modülleri yoksa bu harika bir alternatif olabilir.

Eğer daha yüksek seviyede, do-it-yourself yaklaşımı tercih ederseniz, Scalr kontrol etmek isteyebilirsiniz (code at Google Code). Bu web sitesinde video izlerken değer. Bu tesisler Amazon EC2 kullanan ölçeklenebilir barındırma ortamı. Teknolojisi açık kaynak, yani bunu indirebilir ve kendi yönetimi sunucusuna kendiniz uygulayabilirsiniz. (Sizin Media Temple, kutu, belki?) Scalr Amis bazı ortak kullanım durumları için kullanılabilir (EC2 aletleri) önceden inşa etti.

  • web: nginx ve birçok yeteneklerini kullanır: yazılım yük dengeleme, hizmet statik dosya vb Muhtemelen sadece bu biri olurdu ve muhtemelen Amazon'un EBS bağlantı çeşit uygulamak, ya da kalıcı olur dcaunt tarafından belirtildiği gibi depolama çözümü.
  • app: Apache ve PHP ile bir uygulama sunucusu. Muhtemelen bu çok olurdu, ve daha fazla yük ele alınması gerekirse onlar otomatik olarak oluşturulur olsun istiyorum. Bu tür sunucuya sizin ZF app kopyalarını tutacaktı.
  • db: MySQL ile bir veritabanı sunucusu. Yine, muhtemelen bu çok olurdu, ve daha fazla yük ele alınması gerekirse daha köle örnekleri otomatik olarak oluşturulur olacaktı.
  • memcached: tüm app örnekleri arasında saire merkezi önbelleğe alma, oturum yönetimi, için kullanabileceğiniz bir adanmış sunucu memcached.

Scalr seçenek muhtemelen biraz daha fazla yapılandırma değişiklikleri alacak, ancak ölçekleme ihtiyaçları hızla hızlanan hissediyorum eğer zaman ve çabaya değer olabilir.