nasıl

2012-06-06 2 views
11

nasıl hangi platform benim app çalışır, AWS EC2 örneği, Azure Rol örneği olmayan bulut sistemi kontrol edebilir AWS EC2 örneğinde uygulama çalışır kontrol edilir?nasıl

if(isAzure()) 
{ 
    //run in Azure role instance 
} 
else if(isAWS()) 
{ 
    //run in AWS EC2 instance 
} 
else 
{ 
    //run in the non-cloud system 
} 

//checked whether it runs in AWS EC2 instance or not. 
bool isAWS() 
{ 
    string url = "http://instance-data"; 
    try 
    { 
    WebRequest req = WebRequest.Create(url); 
    req.GetResponse(); 
    return true; 
    } 
    catch 
    { 
    return false; 
    } 
} 

ama benim uygulamalar yerel pencere sistemi gibi olmayan bulut sisteminde çalıştırıldığında Bir sorun var: şimdi böyle böyle yapar. IsAWS() yöntemi yürütülürken çok yavaşladı. 'req.GetResponse()' kodu uzun sürüyor. Bu yüzden onunla nasıl başa çıkabilirim bilmek istiyorum? Lütfen bana yardım et! şimdiden teşekkürler.

cevap

2

WebRequest.Create() çağrısının masaüstünüzde yavaş olduğunu söylediğiniz gibi, gerçekten uzun sürenin ne olduğunu belirlemek için ağ trafiğini (Netmon kullanarak) denetlemeniz gerekiyor. Bu istek, bağlantı açar, içeriği indirir ve sefer alınır nerede bilmek iyidir, böylece daha sonra bağlantıyı kapatmak, sunucuyu hedef bağlanır. Ayrıca

sadece EC2 veya başka bir web sunucusunda Azure üzerinde herhangi bir URL (canlı ve ayrıca can

string URI = "http://www.microsoft.com"; 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URI); 
req.Method = WebRequestMethods.Http.Head; 
var response = req.GetResponse(); 
int TotalSize = Int32.Parse(response.Headers["Content-Length"]); 
// Now you can parse the headers for 200 OK and know that it is working. 

kullanarak sadece indirme başlıklarına talep sadece edebilirsiniz iyi çalışıyor olup olmadığını bilmek istiyorum eğer çağırmak hızlandırmak için yerine tam verilerin verilerin sadece bir dizi GET kullanın:

HttpWebRequest myHttpWebReq =(HttpWebRequest)WebRequest.Create("http://www.contoso.com"); 
myHttpWebReq.AddRange(-200, ContentLength); // return first 0-200 bytes 
//Now you can send the request and then parse date for headers for 200 OK 

yukarıdaki yöntemin herhangi sitenizin yayınlandığı yeri almak için daha hızlı olacaktır inci

+0

teşekkürler sonrası! Sağladığınız yöntemi değiştirdiğimde daha hızlı oldu. – Jimmy

+0

U için çalıştığına sevindim. Önerilerimi cevap olarak kabul ederseniz minnettarım. Teşekkürler!! – AvkashChauhan

+0

Mesajınız için teşekkürler! Sağladığınız yöntemi değiştirdiğimde daha hızlı oldu. ama sitem çalışmıyorken hala yavaş. her zamanki gibi 'req.GetResponse()' kodu yaklaşık 3 saniye sürüyor. Bu yüzden, istek sunucudan yanıt aldığında daha hızlı nasıl alacağımı bilmek isterim? – Jimmy

6

ben. Orijinal fikrinizi yazı çok güzel, ancak web isteğini yapmaya gerek yok. Basitçe adı giderir if (python) görmeye çalışın: örnek meta verileri almak için bir talepte bulunmak olacaktır bunu yapmak için

def is_ec2(): 
    import socket 
    try: 
     socket.gethostbyname('instance-data.ec2.internal.') 
     return True 
    except socket.gaierror: 
     return False 
+4

FYI: Bu yalnızca dahili amazon çözümleyicisini kullanıyorsanız çalışır. Çözümleyicinizi 8.8.8.8'e yönlendirmek gibi bir şey yaparsanız, bu başarısız olur. Amazon'da bir DNS hatası vardı (dns sunucusu çevrimdışıydı) ve test başarısız oldu. –

11

daha iyi bir yol. AWS Documentation itibaren

:

çalışan örneği içinden örnek meta tüm kategorileri görüntülemek için aşağıdaki URI kullanın:

http://169.254.169.254/latest/meta-data/

Linux örneği üzerinde, kullanabilirsiniz cURL gibi bir araç veya GET komutunu kullanın, örneğin:

PROMPT> GET http://169.254.169.254/latest/meta-data/

İşte Python Boto sarmalayıcı kullanarak bir örnek:

from boto.utils import get_instance_metadata 

m = get_instance_metadata() 

if len(m.keys()) > 0: 
    print "Running on EC2" 

else: 
    print "Not running on EC2" 
+0

Bu çözümü seviyorum, ancak EC2'de çalışmıyorsa, zaman aşımı inanılmaz derecede uzundur. – EmmEff

+5

şimdi yeniden denemeler için bir sınır ayarlayabilirsiniz: '' get_instance_metadata (timeout = 0.5, num_retries = 1) '' –