Nguồn tham khảo: Udemy — Developer to Architect Series

Mục tiêu bài viết

  • Hiểu 3 vai trò chính của Apache Web Server.
  • Nắm vấn đề về RAM/Disk khi serve static content.
  • Hiểu Apache không phải Java Servlet Container.
  • Biết khi nào Apache không phải lựa chọn tốt nhất so với Nginx.

1) Tổng quan 3 vai trò

                    Apache Web Server
                           │
          ┌────────────────┼────────────────┐
          ▼                ▼                ▼
   Static Content    Dynamic Content   Reverse Proxy
                                      + Load Balancer

2) Serve Static Content

Static content được lưu trên hard disk của Apache.

Lần đầu request:

Request → Apache → Hard Disk → Load file
                       │
                       ├──► RAM Cache
                       │
                       ▼
                    Client

Disk I/O chậm → Apache cache file vào RAM để phục vụ nhanh hơn.

Request tiếp theo:

Request → Apache → RAM Cache ⚡ → Client

⚠️ Vấn đề khi static content lớn hơn RAM:

Static Content = 200 GB
RAM            = 32 GB

→ Không thể cache toàn bộ vào RAM

                 Static Content
                       │
          ┌────────────┴────────────┐
          ▼                         ▼
      RAM Cache                 Hard Disk
       ⚡ Fast                    🐌 Slow

Static-content-heavy website phải cân nhắc rất kỹ RAM và disk I/O.


3) Generate Dynamic Content

Apache có thể generate dynamic HTML thông qua PHP, Python, Perl.

GET /products
       │
       ▼
Apache
       │
       ▼
PHP / Python / Perl script
       │
       ▼
Database
       │
       ▼
Generate HTML → Client

Dynamic content tiêu tốn CPU + RAM:

Requests ↑
    ├──► CPU utilization ↑
    └──► RAM utilization ↑

→ Khi thiết kế web server xử lý dynamic content, phải theo dõi CPU và RAM rất sát.


4) Apache không phải Servlet Container

Apache có thể chạy PHP, Python, Perl — nhưng không tự đóng vai trò Java Servlet Container.

Apache
  ├── PHP       ✅
  ├── Python    ✅
  ├── Perl      ✅
  └── Servlet   ❌
       JSP      ❌

Nếu cần chạy Java Servlet/JSP:

Apache → Tomcat / Jetty → Java Application

5) Reverse Proxy + Load Balancer

Apache có thể đứng phía trước nhiều application instances:

                         Clients
                    👤 👤 👤 👤 👤
                         │
                         ▼
                ┌─────────────────┐
                │     Apache      │
                │ Reverse Proxy   │
                │ Load Balancer   │
                └────────┬────────┘
                         │
             ┌───────────┼───────────┐
             ▼           ▼           ▼
         App #1       App #2       App #3

Client chỉ cần biết một địa chỉ duy nhất — Apache quyết định request đi đến instance nào.

Đây là Single Point of Contact — đây chính là vai trò Reverse Proxy.


6) Apache không phải lựa chọn tốt nhất cho Reverse Proxy

Apache có thể làm reverse proxy/load balancer, nhưng đây không phải thế mạnh chính.

Có những sản phẩm được thiết kế từ đầu để trở thành reverse proxy:

                 Reverse Proxy
                      │
          ┌───────────┼───────────┐
          ▼           ▼           ▼
       Apache       Nginx       Other
    (có thể)     (chuyên dụng)

Nginx thường là lựa chọn phù hợp hơn cho vai trò này.


7) Tổng hợp

                         APACHE
                           │
       ┌───────────────────┼───────────────────┐
       ▼                   ▼                   ▼
    STATIC              DYNAMIC           REVERSE PROXY
    CONTENT             CONTENT            + LOAD BALANCER
       │                   │                   │
   Hard Disk           PHP/Python/Perl    Backend Instances
       │                   │
   RAM Cache           CPU + RAM
Capability Apache
Static content ✅ Tốt, nhưng disk I/O có thể bottleneck
Dynamic content ✅ PHP / Python / Perl
Java Servlet/JSP ❌ Cần Servlet Container riêng
Reverse Proxy ✅ Có thể
Load Balancer ✅ Có thể
RAM Quan trọng cho static content caching
CPU + RAM Quan trọng khi generate dynamic content

Tóm tắt

Apache = Static Server + Dynamic Content Generator + Reverse Proxy

Nhưng trong kiến trúc hiện đại:

"Apache có làm được không?" → YES
         │
         ▼
"Nhưng có phải lựa chọn tốt nhất không?"
         │
         ▼
        NGINX

Đây là lý do phần Nginx Web Server tiếp theo quan trọng: không chỉ xem Nginx làm được gì, mà còn tại sao Nginx thường phù hợp hơn Apache cho reverse proxy, caching và high-load web architecture.