Lời khuyên triển khai tệp chiến tranh so với jar thực thi với vùng chứa được nhúng


89

Dường như có một xu hướng hiện tại trong không gian java là chuyển từ việc triển khai các ứng dụng web java sang vùng chứa java servlet (hoặc máy chủ ứng dụng) ở dạng tệp war (hoặc tệp tai) và thay vào đó đóng gói ứng dụng dưới dạng jar thực thi với một máy chủ servlet / HTTP được nhúng như cầu cảng. Và tôi muốn nói điều này nhiều hơn theo cách mà các khung công tác mới hơn đang ảnh hưởng đến cách các ứng dụng mới được phát triển và triển khai hơn là cách các ứng dụng được phân phối đến người dùng cuối (ví dụ: vì tôi hiểu tại sao Jenkins sử dụng một vùng chứa nhúng, rất dễ lấy và sử dụng ). Ví dụ về các khung công tác sử dụng tùy chọn jar thực thi: Dropwizard , Spring BootPlay (nó không chạy trên vùng chứa servlet nhưng máy chủ HTTP được nhúng).

Câu hỏi của tôi là, đến từ một môi trường mà chúng tôi đã triển khai các ứng dụng của mình (cho đến thời điểm này chủ yếu là Struts2) đến một máy chủ ứng dụng tomcat duy nhất, những thay đổi, phương pháp hay nhất hoặc cần cân nhắc nào cần được thực hiện nếu chúng tôi định sử dụng phương pháp tiếp cận vùng chứa nhúng ? Hiện tại, chúng tôi có khoảng 10 ứng dụng cây nhà lá vườn chạy trên một máy chủ tomcat duy nhất và đối với những ứng dụng nhỏ bé này, khả năng chia sẻ tài nguyên và được quản lý trên một máy chủ là rất tốt. Các ứng dụng của chúng tôi không nhằm mục đích phân phối cho người dùng cuối để chạy trong môi trường của họ. Tuy nhiên, trong tương lai nếu chúng ta quyết định tận dụng một khuôn khổ java mới hơn, thì cách tiếp cận này có nên thay đổi không? Việc chuyển đổi sang các lọ thực thi có được thúc đẩy bởi việc sử dụng ngày càng nhiều các triển khai đám mây (ví dụ: Heroku) không?

Nếu bạn đã có kinh nghiệm quản lý nhiều ứng dụng theo kiểu triển khai Play so với triển khai tệp chiến tranh truyền thống trên một máy chủ ứng dụng, vui lòng chia sẻ thông tin chi tiết của bạn.

Câu trả lời:


81

Một câu hỏi thú vị. Đây chỉ là quan điểm của tôi về chủ đề này, vì vậy hãy coi mọi thứ như muối bỏ bể. Đôi khi tôi đã triển khai và quản lý các ứng dụng bằng cách sử dụng cả thùng chứa servlet và máy chủ nhúng. Tôi chắc rằng vẫn còn nhiều lý do chính đáng để sử dụng các thùng chứa servlet nhưng tôi sẽ cố gắng tập trung vào lý do tại sao chúng ngày nay ít phổ biến hơn.

Phiên bản ngắn: Bộ chứa Servlet rất tuyệt vời để quản lý nhiều ứng dụng trên một máy chủ duy nhất nhưng dường như không hữu ích lắm khi chỉ quản lý một ứng dụng duy nhất. Với môi trường đám mây, một ứng dụng duy nhất trên mỗi máy ảo dường như được ưa chuộng hơn và phổ biến hơn. Các khuôn khổ hiện đại muốn tương thích với đám mây, do đó việc chuyển sang các máy chủ nhúng.


Vì vậy, tôi nghĩ rằng các dịch vụ đám mây là lý do chính để từ bỏ các thùng chứa servlet. Giống như các thùng chứa servlet cho phép bạn quản lý các ứng dụng, các dịch vụ đám mây cho phép bạn quản lý các máy ảo, phiên bản, lưu trữ dữ liệu và hơn thế nữa. Điều này nghe có vẻ phức tạp hơn, nhưng với môi trường đám mây, đã có sự chuyển đổi sang các máy ứng dụng đơn lẻ. Điều này có nghĩa bạn thường có thể điều trị toàn bộ máy như nó là các ứng dụng. Mỗi ứng dụng chạy trên một máy với kích thước phù hợp. Các phiên bản đám mây có thể bật lên và biến mất bất kỳ lúc nào, điều này rất tốt cho việc mở rộng quy mô. Nếu một ứng dụng cần nhiều tài nguyên hơn, bạn sẽ tạo nhiều phiên bản hơn.

Mặt khác, các máy chủ chuyên dụng thường mạnh mẽ nhưng có kích thước cố định, do đó bạn chạy nhiều ứng dụng trên một máy để tối đa hóa việc sử dụng tài nguyên. Quản lý hàng tá ứng dụng - mỗi ứng dụng có cấu hình, máy chủ web, đường dẫn và kết nối, v.v. - không phải là điều thú vị, vì vậy việc sử dụng vùng chứa servlet sẽ giúp bạn quản lý mọi thứ và bản thân khỏe mạnh. Tuy nhiên, nó khó mở rộng hơn. Bộ chứa Servlet trên đám mây dường như không hữu ích lắm. Chúng sẽ phải được thiết lập cho từng phiên bản nhỏ, mà không cung cấp nhiều giá trị vì chúng chỉ quản lý một ứng dụng duy nhất.

Ngoài ra, những đám mây rất thú vị và những thứ không phải là đám mây thì thật nhàm chán (nếu chúng ta vẫn tin vào sự cường điệu). Nhiều khung công tác cố gắng có thể mở rộng theo mặc định, để chúng có thể dễ dàng được triển khai lên các đám mây. Máy chủ nhúng nhanh để triển khai và chạy vì vậy chúng có vẻ là một giải pháp hợp lý. Vùng chứa Servlet thường vẫn được hỗ trợ nhưng yêu cầu thiết lập phức tạp hơn.

Một số điểm khác:

  • Máy chủ nhúng có thể được tối ưu hóa cho khung hoặc được tích hợp tốt hơn với công cụ khung (như bảng điều khiển chơi chẳng hạn).
  • Không phải tất cả các môi trường đám mây đều có hình ảnh máy có thể tùy chỉnh. Thay vì viết các tập lệnh khởi tạo để tải xuống và thiết lập các thùng chứa servlet, việc sử dụng phần mềm chuyên dụng để triển khai ứng dụng đám mây đơn giản hơn nhiều.
  • Tôi vẫn chưa tìm thấy thiết lập Tomcat không chào đón bạn với lỗi không gian gen cố định sau mỗi vài lần triển khai lại ứng dụng của bạn. Mất thêm một chút thời gian để khởi động (lại) các máy chủ nhúng không có vấn đề gì khi bạn gần như có thể chuyển đổi ngay lập tức giữa các phiên bản giai đoạn và sản xuất mà không có bất kỳ thời gian chết nào.
  • Như đã đề cập trong câu hỏi, rất thuận tiện cho người dùng cuối chỉ cần chạy ứng dụng.
  • Máy chủ nhúng có thể di động và thuận tiện cho việc phát triển. Ngày nay mọi thứ đều diễn ra nhanh chóng , các nguyên mẫu và MVP cần được tạo và phân phối càng nhanh càng tốt. Không ai muốn mất quá nhiều thời gian để thiết lập môi trường cho mọi nhà phát triển.

1
Cảm ơn bạn đã trả lời, bạn tạo ra một số điểm tốt. Đám mây là yếu tố thúc đẩy! Trong tình huống của chúng tôi, tôi cảm thấy thoải mái hơn khi sở hữu một máy chủ đám mây theo mô hình Dịch vụ web của Amazon (Cơ sở hạ tầng như một dịch vụ) thay vì chỉ triển khai ứng dụng một Công cụ ứng dụng của Google (Nền tảng như một dịch vụ), nhưng tôi cho rằng đây là trường phái tư tưởng cũ. Vì vậy, rút ​​ra là: trừ khi chúng tôi có kế hoạch tận dụng đám mây trong một nền tảng như một cách dịch vụ, triển khai chiến tranh là cách để thực hiện hơn là quản lý nhiều ứng dụng web java độc lập trên một máy chủ. Cảm ơn một lần nữa cho đầu vào của bạn.
Brice Roncace

3
Chỉ 2cc: bạn có thể chạy nhiều ứng dụng jar trên một máy với một số máy chủ HTTP nhẹ làm proxy, tức là: nginx, nó có thể được sử dụng bổ sung cho lưu lượng web điển hình như CDN tùy chỉnh, bộ cân bằng tải, tường lửa, v.v. Vì vậy, nó là hợp lý để xem xét sử dụng nó khi lập kế hoạch lưu lượng lớn (nó có hiệu suất tốt hơn, sau đó xử lý mọi yêu cầu đơn lẻ - ngay cả đối với các tài nguyên tĩnh thông qua ứng dụng chính của bạn).
biesior
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.