Ping'den elde edilen veriler: gidiş dönüş mü, tek yönlü mü?


28

Her biri iki ayrı konumda 2 sunucum var. Birinde bir uygulamayı ve diğerinde veritabanı sunucusunu barındırmam gerekiyor.

Uygulama sunucusundan, eğer veritabanı sunucusuna ping atıyorsam, ortalama olarak yaklaşık 30ms alıyorum.

Sorum şu:

When I query the database from the app;

Alacak mı 30 ms + database_server_query_run_time

Veya;

+ 30ms alacak mı30 ms + database_server_query_run_time

Bunu anlamak istiyorum lütfen.

Yanıtlar:


24

Genellikle bu iki seçenekten daha fazlasını alır.

Ping, tam olarak istemciden sunucuya ve tekrardan geçen süreyi ölçer (rtt - round trip zamanı)

Genellikle veritabanları TCP kullanır, bu nedenle ilk önce TCP el sıkışmasını başlatmak için bir SYN paketi göndermeniz gerekir (basitleştirmek için 15ms * + cpu zamanı diyelim, sonra alıp SYN / ACK (15ms + cpu zamanı), bir ACK ve istek (en az 15ms + cpu zamanı), ardından DB'nin sorguyu işlemesi için zaman ve daha sonra verileri geri almak için zaman (15ms + cpu) ve biraz daha bağlantı kurmak ve bağlantıyı kapatmak için zaman.

Tabii ki veritabanına doğrulama (kullanıcı adı / şifre) sayılmaz ve şifreleme (ssl el sıkışmaları / DH veya gerekli olan) sayılmaz.

* gidiş-dönüş süresinin yarısı, oradaki rotanın ve arka kısmın simetrik olduğu varsayılarak


Üç yollu el sıkışma sorununa kalıcı TCP seansları ile karşılaşılabilir.
Michuelnik

@Michuelnik, lütfen detaylandırır mısınız? Gerçekten tüm bu şeyi anlamak ve DB'yi sorgulamak için gecikmeyi en aza indirmenin en iyi yolunu bulmak isterim.
Phil

2
Ne yazık ki, çoğu yazılım (en az web uygulamaları) bunu desteklemiyor: / Fakat fikir, DB ile bağlantıyı (bir kez) kurmak ve bağlantının çalışır durumda kalmasını sağlamak (açık) ve sadece sorguları gönderip cevapları almak, sürekli açık bağlantı. Bu, her seferinde tcp el sıkışmalarına, kimlik doğrulama vb. Gereksinimlerini ortadan kaldırır.
mulaz,

mulaz, açıkladığın için teşekkürler. Python ile çalışacağım, böylece nasıl gideceğini göreceğiz. ;-)
Phil

İsteğin boyutunu ve cevabını unutma. Örneğin, 1 MB / sn'lik bir bağlantı üzerinden, 100 KB'lik bir yük taşıma kapasitesi fazladan 100ms alacaktır.
Dustin Boswell

7

Ping zamanı gidiş dönüş. Eğer bunu düşünürseniz - tek yönlü zamanı nasıl ölçebilir? Bu yüzden 30ms artı sorgu süresi alacaktır.


1
Ben sadece bu muhtemelen 30 saniye + sorgulama süresinden biraz daha uzun süreceğini ekleyeceğim. Ping ICMP bağlıdır ve DB bağlantısı TCP olduğundan, ayrıca orada da kurulum / el sıkışma ve DB Bağlantı başlatılması vb olacak
Doon

@Doon: Kalıcı TCP / veritabanı bağlantılarıyla "engellenebilecek"
Michuelnik

@Michuelnik, kalıcı DB bağlantısının buraya gitmek için yol olduğunu düşünüyor musunuz? Başka sorunlara neden olur mu?
Phil

michuelnik, elbette. Sadece RTT + Query kadar basit olmadığını işaret ediyordu. Gecikme, vb. Nedeniyle oturum başına Maksimum Hız Sınırları da vardır.)
Doon

@ phil Çoğu durumda, kalıcı DB bağlantıları, birden çok sorgulama yapacaksanız faydalıdır. Sorguların yayılması / sporadik olması durumunda kaynakları gereksiz yere bağlarsınız, ancak sorgular her zaman geliyorsa, vb. Talepte her zaman yeni bir bağlantı açmak yerine mevcut bağlantıyı yeniden kullanarak önemsiz miktarda bir ek yükten tasarruf edersiniz.
Doon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.