Những thắc mắc về lập trình web với java

Xin chào tất cả mọi người, hiện tại mình đang học lập trình web với java và sẽ chọn nó làm hướng đi chính nhưng có một số câu hỏi vấn thắc mắc mong mọi người giúp đỡ.

  1. Giữa web server và application server thì khác nhau gì, và nên chọn web server/ application server nào cho ứng dụng của mình.
  2. Mình nghe nói với những trang web viết bằng java với một lượng lớn truy cập thì khả năng đáp ứng của server là không tốt so với những loại ngôn ngữ khác như PHP( không biết có đúng không).
  3. Những ưu điểm của nền tảng Java EE so với những nền tảng khác.
1 Like
  1. WebServer xử lý các http request, còn ApplicationServer sẽ phục vụ các business logic thông qua bất cứ giao thức nào.

WebServer: ban đầu được thiết kế với mục đích trả về các tài liệu tra cứu, ở đây là các tài liệu HTML và/hoặc các file tĩnh như ảnh, phim. Sau này, vì nhu cầu serve các trang web dựa vào databased nên sinh ra các app phía server (ScriptingApp) chuyên để xử lý các dữ liệu lấy từ database ra, điển hình như PHP, Ruby, … Các WebServer khi nhận được 1 HTTP request, dựa vào URL này mà sẽ hỏi các ScriptingApp trả về tài liệu HTML tương ứng, sau đó trả về cho browser.

ApplicationServer: trong khi WebServer chỉ đơn giản là gửi cái HTML về thì AppServer được thiết kế giao tiếp với client thông qua các hàm gọi (function) mà trong các hàm đó chưa business logic của app (các client có thể là AppServer #, Desktop App). Trong đa phần trường hợp, AppServer sẽ định nghĩa một API, ví dụ như EJB trong J2EE.

Một ví dụ như bạn làm việc với một đơn hàng:

  • Không có AppServer: bạn gửi request, WebServer nhận dữ liệu qua form, chuyển qua ScriptingApp như PHP, Ruby, … để kết nối cơ sở dữ liệu, trả về cho bạn tổng giá trị bạn cần thanh toán.
  • Có AppServer: Thay vì việc ScriptingApp xử lý database, thì giờ là AppServer. Giờ ScriptingApp sẽ tra cứu bằng cách gọi 1 function từ AppServer, mà không cần thực hiện business logic gì nữa (ở đây là lấy giá rồi cộng để ra giá của cả đơn hàng). VIệc tách business logic giúp cho việc tận dụng từ nhiều client # nhau (ví dụ 1 thằng App # trên mobile cũng dùng function này luôn, mà không cần phải tự mình implement logic nữa). Cách thiết kế này được gọi là Service Oriented Architecture (SOA), một phục vụ cho nhiều người và làm tốt cái service của mình phục vụ (có thể mapping với việc các cô gái đứng đường cung cấp service s.e.x vậy)

Sự phát triển ngày nay:

  • Hiện nay, công nghệ WebService (Rest, Soap, …) cũng rất phát triển, do đó khái niệm WebServer và AppServer có vẻ đang bị xoá mờ. WebServer với sự trợ giúp của ScriptingApp cung cấp service cho rất nhiều client # nhau qua text data. AppServer cũng luôn tích hợp WebServer giúp cho việc phục vụ và giao thông giữa các SubAppServer tốt hơn.
  • Nổi lên hiện nay là công nghệ MicroService, họ lại tách nhỏ WebService ra thành nhiều Service nhỏ hơn. Kiểu như bạn muốn làm đẹp, thì sẽ có 1 cô chuyên đánh son, 1 cô chuyên đánh móng tay, móng chân, 1 cô chuyên làm tóc, …
  • AppServer ngày nay chắc ít dùng, chủ yếu được dùng trong Java Enterprise App World (EJB). Nặng nề, phức tạp là các nhược điểm chính của EJB nên khó cạnh tranh nổi với Rest ^^ (viết 1 app HelloWorld với EJB thì cần define khoảng > 10 file gì đó)
3 Likes

2 và 3:
Java chạy trong 1 máy ảo (hotspot) nên cực kỳ tốn RAM. Còn nói về lượng phục vụ thì chắc cũng same same thôi (Java sử dụng khái niệm JIT compiler nên cho tốc độ trả về kết quả cũng khá tốt)

Ưu điểm:

  • Có lẽ là bảo mật hơn do được chạy trong 1 môi trường ảo, tách biệt với môi trường thật.
  • Vẫn được rất nhiều công ty lớn lựa chọn cho các Enterprise App, nơi business logic được đề cao (cần hỗ trợ fault tolerance và scalability): transaction, fallback, error handling, …
2 Likes

anh cho e hỏi một chút vì e khá rắc rối để phân biệt chúng.
Giữa EJB, Rest và spring fw thì khác nhau thế nào, và nên dùng cái nào ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?