2014-05-05 17 views
69

Java dosyasında java web uygulamalarını bir java sunucu kapsayıcısına (veya uygulama sunucusuna) bir savaş dosyası biçiminde dağıtmak için mevcut bir eğilim var gibi görünüyor (veya kulak dosyası) ve bunun yerine uygulamayı, iskeleye gömülü bir sunucu/HTTP sunucusu olan yürütülebilir bir jar olarak paketleyin. Demek istediğim, daha yeni çerçeveler, uygulamaların son kullanıcılara nasıl sunulduğundan ziyade yeni uygulamaların nasıl geliştirildiğini ve kullanıldığını etkilemesinde (örneğin, Jenkins'in neden gömülü bir kapsayıcı kullandığını anlayabiliyorum,). Yürütülebilir jar seçeneklerini benimseyen çerçevelere örnekler: Dropwizard, Spring Boot ve Play (bir sunucu kabında çalışmaz, ancak HTTP sunucusu gömülüdür).Yerleşik kapsayıcıyla yürütülebilir dosyalara karşı yürütülebilir dosyalar dağıtımıyla ilgili öneri

Sorum şu ki, (bu noktaya kadar çoğunlukla Struts2) uygulamalarımızı tek bir tomcat uygulama sunucusuna yerleştirdiğimiz bir ortamdan geliyor, eğer kullanmayı planlıyorsak hangi değişiklikler, en iyi uygulamalar veya dikkat edilmesi gerekenler nelerdir? gömülü bir konteyner yaklaşımı? Şu anda, tek bir tomcat sunucu üzerinde çalışan yaklaşık 10 homegrown uygulamaları var ve bu ufacık uygulamalar için kaynakları paylaşmak ve tek bir sunucu üzerinde yönetilen yeteneği iyidir. Uygulamalarımız son kullanıcılara çevrelerinde çalışacak şekilde dağıtılmak üzere tasarlanmamıştır. Ancak, daha yeni bir java çerçevesini kullanmaya karar verirsek, bu yaklaşım değişmeli mi? Bulut dağıtımlarının (ör. Heroku) kullanımının artmasıyla yürütülebilir kavanozlara geçiş gerçekleşmeye mi başlıyor?

Tek bir uygulama sunucusunda, geleneksel Play dosyası dağıtımına göre, Play stili dağıtımında birden çok uygulamayı yönetme deneyiminiz varsa, lütfen içgörünüzü paylaşın.

cevap

65

İlginç bir soru. Bu konu hakkında sadece benim görüşüm, bu yüzden her şeyi bir tuz parçası ile al. Hem sunucu kapsayıcılarını hem de katıştırılmış sunucuları kullanarak uygulamaları zaman zaman dağıttım ve yönetdim. Eminim servlet konteynırlarını kullanmanın hala çok iyi nedenleri var, ancak bugün neden daha az popüler olduklarına odaklanmaya çalışacağım.

Kısa sürüm: Servlet konteynerleri tek bir ana bilgisayarda birden fazla uygulamayı yönetmek için harika ancak tek bir uygulamayı yönetmek için çok yararlı görünmüyor. Bulut ortamlarında, sanal makine başına tek bir uygulama tercih edilir ve daha sık görülür. Modern çerçeveler bulut uyumlu olmak, dolayısıyla gömülü sunuculara geçiş yapmak ister.


yüzden bulut hizmetleri servlet konteynerleri terk başlıca nedeni olduğunu düşünüyorum. Servlet kapsayıcıları uygulamaları yönetmenizi sağladığından, bulut hizmetleri sanal makineleri, örnekleri, veri depolamayı ve çok daha fazlasını yönetmenizi sağlar. Bu daha karmaşık geliyor, ancak bulut ortamlarında, tek uygulama makinelerine geçiş oldu. Bu, tüm makineyi uygulaması gibi sık sık tedavi edebileceğiniz anlamına gelir. Her uygulama uygun boyutta bir makinede çalışır. Bulut örnekleri, ölçeklendirme için harika olan herhangi bir zamanda açılır ve yok olabilir. Bir uygulamanın daha fazla kaynağa ihtiyacı varsa, daha fazla örnek oluşturur. Öte yandan

Adanmış sunucular genellikle güçlü ama sabit boyutlu, bu yüzden kaynakların kullanımını maksimize etmek tek bir makinede birden fazla uygulama çalıştırın. Düzinelerce uygulamayı yönetme - her biri kendi yapılandırmaları, web sunucuları, rotaları ve bağlantıları vb. Ile eğlenceli değildir, bu nedenle bir sunucu kabı kullanmak herşeyi yönetilebilir ve kendinizi aklınızda tutmanıza yardımcı olur. Yine de ölçeklendirmek daha zordur. Buluttaki servlet konteynerleri çok kullanışlı görünmüyor. Her küçük örnek için, tek bir uygulamayı yönetebildiklerinden çok değer vermeden kurulmak zorunda kalacaklardı.

Ayrıca bulutlar (hala yutturmaca inanıyorsanız) serin ve olmayan bulut şeyler sıkıcı vardır.Birçok çerçeve varsayılan olarak ölçeklenebilir olmaya çalışır, böylece kolayca bulutlara yerleştirilebilirler. Gömülü sunucuların dağıtımı ve çalıştırılması hızlıdır, dolayısıyla makul bir çözüm gibi görünürler. Servlet konteynerleri genellikle desteklenmektedir ancak daha karmaşık bir kurulum gerektirir.

Diğer bazı noktalar:

  • gömülü sunucu çerçevesi için optimize edilmiş ya da (örneğin, oyun konsolu gibi) çerçeveler kalıp daha entegre olduğunu edilebilir.
  • Tüm bulut ortamları, özelleştirilebilir makine görüntüleriyle birlikte gelmez. Servlet konteynerlerini indirmek ve kurmak için başlatma komut dosyaları yazmak yerine, bulut uygulama dağıtımları için özel yazılım kullanmak çok daha basittir.
  • Henüz uygulamanızın her birkaç yeniden kullanımında bir izin alanı hatası ile karşılanmayan bir Tomcat kurulumunu henüz bulmuyorum. Yerleşik sunucuların (yeniden) başlatılması için biraz daha uzun süren bir işlem, herhangi bir kesinti olmaksızın aşamalandırma ve üretim örnekleri arasında hemen hemen geçiş yapabileceğiniz zaman sorun olmaz.
  • Soruda daha önce bahsedildiği gibi, son kullanıcının uygulamayı çalıştırması çok uygundur.
  • Gömülü sunucular geliştirilebilir ve taşınabilirdir. Bugün her şey hızlı, prototipler ve MVP'lerin mümkün olduğunca çabuk oluşturulması ve teslim edilmesi gerekiyor. Hiç kimse, her geliştirici için bir ortam oluşturmak için çok fazla zaman harcamak istemez.
+0

Cevabınız için teşekkür ederiz, iyi puanlar yazabilirsiniz. Bulut sürüş faktörüdür! Bizim durumumuzda, sadece bir la Google App Engine (Hizmet olarak Platform) uygulamasının dağıtılmasından ziyade, bir bulut sunucusuna bir Amazon sunucusuna sahip olmaktan daha rahat olacağımı düşünmekteyim (Hizmet olarak Platform). eski düşünce okulu. Bu nedenle, paket servisi: Bulutu bir hizmet yolu olarak bir platformda kullanmayı planlamıyorsak, savaş dağıtımları tek bir sunucuda birden çok bağımsız java web uygulamasını yönetmek yerine gitmek için bir yoldur. Girdiğin için tekrar teşekkürler. –

+2

Sadece 2cc: tek bir makinede birden fazla _jar-apps_'ı proxy gibi bazı hafif HTTP sunucularıyla çalıştırabilirsiniz, örneğin: nginx, özel CDN, yük dengeleyici, güvenlik duvarı gibi tipik web trafiği için de kullanılabilir. Büyük trafik planlarken bunu kullanmayı düşünün (daha iyi bir performansa sahip olur, ardından her bir isteği ele alır - ana uygulamanız aracılığıyla statik kaynaklar için bile). – biesior

İlgili konular