Şu anda yeni ürün / projemiz üzerinde çalışıyoruz, belirli belirli sanayi / hizmet işletmelerine yönelik bir istemci-sunucu uygulamasıdır. TCP'nin üstünde Java ön uçlu özel bir protokol çalıştıran bir sunucu (Sadece C Dili ve Linux) kuruyoruz. Kodlama işinin yaklaşık% 20'sindeyiz ve Mikro veya Monolitik Çekirdek Mimarisi arasında seçim yapmak zorunda olan bir durumla karşı karşıyayız.
Micro vs. Monolithic'in genellikle çekirdek mimarisiyle ilişkili olduğunun farkındayım, ancak özellikle sunuculardan bahsediyoruz.
Neden var olan bir şey değil, özel bir sunucu?
- Kullanıcı arayüzü ihtiyaçlarımız önemli ve çok dinamik olduğundan Web / Web tarayıcı tabanlı çözümler uygun değildi.
- İstatistiksel işlem, istemci sonunda önemlidir ve bu nedenle, tarayıcılar çok az yardımcı olmuştur. (Tabii ki, işlemi sunucu sonunda yapabilir ve işlenen verileri istemciye aktarabiliriz, ancak bu sunucuda çok fazla yük ve istemci kaynaklarının israfı anlamına gelir).
- Dahası, tek bir olayı bile yönetmek için en az üç teknoloji (JS / HTML / CSS) ile, tüm deneyimi bir çöl fırtınasının ortasında evi süpürmek gibi yapar - n-kez süpürürsünüz, toz n + 1 kez birikir.
Mikro ve Monolitik Sunucu ne olacak? Ne konuşuyorsun?
Aşağıdaki (varsayımsal) istemci isteğini göz önünde bulundurun:
request-id: 123
request-service: HistoricDataSets
request-message: Fetch all records upto the year 2010
Böyle bir isteği alırken, bir sunucu genellikle (basitlik için iplik ve çatal gibi eşzamanlılık tekniklerini göz ardı ediyoruz):
- İstek dizesini ayrıştırın
- Eylemi tanımlayın (
HistoricDataSets LIMIT Year (2010)
Bizim durumumuzda getirin) - Kalıcılık katmanıyla etkileşime geçin (Oracle, örneğimizde diyelim) ve verileri getirin.
Verileri protokole göre biçimlendirin. Ör:
response-id: 123
başarı: gerçek
yanıt metni: DataSetsBu şekilde biçimlendirilmiş verilerle istemciye yanıt verin.
Biz buna Monolithic Server diyoruz (tüm OS işlemlerinin çekirdek alanında yapıldığı monolitik bir çekirdeğe benzer).
Aynı isteği, makbuzda, bu sefer sunucu üzerinde tekrar düşünün (basitlik için tekrar IPC olarak yalnızca paylaşılan belleği varsaydık):
- İsteği
Parser
işlem için paylaşılan belleğe koyar Parser
Görevi tanımlar, dizeyi ayrıştırır ve yönlendirirExecutioner
görevleri yürütmek için süreç.Executioner
Daha sonra veri geçerFomatter
işlemi, hangi bir protokol dizesine veri biçimlendirme sonra, sunucu döner.- Sunucu istemciye gönderir (yanıt).
Tabii ki, yerine Parser
, Executioner
ve Formatter
bu tek ama ayrı bir süreç olabilirdi. Biz buna Micro Server diyoruz (gerekli olan zar zor minimum bir mikro çekirdeğe benzer). Sunucu etkili bir şekilde sadece dinliyor ve yanıt veriyorken, tüm adımlar farklı süreç (ler) tarafından halledilir.
Hangisini seçmeli? Kafamız karıştı! Monolitik sunucular denenip test edilirken (çoğu HTTP-Web Sunucusu?) Ve programlanması daha kolaydır ve eşzamanlılığı oldukça iyi idare edebilir. Mikro sunucular, prima facie, bir program yapmak için bir programın UNIX prensibine göre hızlı ve hızlı görünmektedir, ancak aynı zamanda geliştirilmesi karmaşıktır, esp. eşzamanlılığı akılda tutarak.
Soru (lar)
- Her yaklaşımın artıları ve eksileri nelerdir (muhtemelen olabilir)?
- Hangisi ne zaman kullanılır? (Ayrıca genel bir soru olarak da yorumlanabilir: IPC ne zaman kullanılır?)
- Mikro çekirdek seçilirse, hangi işlevlerin çekirdek sunucunun bir parçası olması gerekir, ne yapılmaz?
Benzer / İlgili sorular
- Büyük monolitik uygulama tehlikeleri
- Harici Vs Gömülü tarayıcı (Teğet)
- Monolitik uygulamayı çoklu iş parçacığına dönüştürme (Teğet)
Yararlı olabilecek bazı bilgiler:
- Potansiyel müşterilerimiz iki kategoriye ayrılabilir:
- Büyük: Dakikada yaklaşık 1.700 - 2.000 istek
- Küçük: Dakikada yaklaşık 650 - 700 istek
- Talep döngüsü başına veri hacminin (talep ve sonraki yanıt) normal olarak ortalama ~ 1.20 MB ve daha kötü durumda yaklaşık 250-300 MB ile dağıtıldığı varsayılabilir.
- Ürün konsepti nispeten yenidir ancak çekirdek operasyonları etkileme yeteneğine sahiptir, bu nedenle müşteri bütçelerinin, dağıtımdan sonra belirli bir gecikme (9-12 ay) sonra esnek olmasını bekleriz, bu da müşterinin istediği donanım miktarını sınırlar esp. küçük olanlar.
- Her müşterinin kendi istemci-sunucu yığını olacaktır. Sunucu, müşterinin ekibi tarafından yönetilen müşterinin donanımında çalışacak, istemciler ise işlevsel çalışanların makinelerine dağıtılacak
- Hem istemci hem de sunucu uygulaması için uzaktan güncellemeler bir zorunluluktur
PUSH
Ürün tıklarsa, sunucunun gerçek zamanlı hizmetleri 'çok' istenebilir!