Xem mẫu
- ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Đoàn Quang Vinh
NGHIÊN CỨU KIẾN TRÚC CỦA APACHE,
CÁCH TÍCH HỢP THÊM MODULE MỚI
VÀ ỨNG DỤNG
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
HÀ NỘI - 2010
1
- ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Đoàn Quang Vinh
NGHIÊN CỨU KIẾN TRÚC CỦA APACHE,
CÁCH TÍCH HỢP THÊM MODULE MỚI
VÀ ỨNG DỤNG
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành : Công nghệ thông tin
Cán bộ hướng dẫn : TS. Nguyễn Trí Thành
HÀ NỘI - 2010
2
- LỜI NÓI ĐẦU
Lời đầu tiên, tôi xin được bày tỏ lòng biết ơn sâu sắc tới thầy giáo - Tiến sĩ
Nguyễn Trí Thành đã tận tình hướng dẫn, chỉ bảo cho tôi các phương pháp tiếp cận
vấn đề, giúp tôi giải đáp những thắc mắc, giải quyết các khó khăn mắc phải để có thể
hoàn thành được khóa luận này.
Tôi xin chân thành cảm ơn các thầy cô đã hết lòng truyền đạt cho tôi những kiến
thức nền tảng về CNTT và đặc biệt là Ban giám hiệu trường Đại Học Công Nghệ đã
tạo cho tôi những điều kiện thuận lợi để học tập và nghiên cứu.
Cuối cùng, tôi muốn được gửi lời cảm ơn tới gia đình và bạn bè, những người
thân yêu luôn bên cạnh và động viên tôi trong suốt quá trình học tập và nghiên cứu.
Hà Nội, ngày 23, tháng 5, năm 2010
Sinh viên
Đoàn Quang Vinh
3
- TÓM TẮT NỘI DUNG KHÓA LUẬN
Khóa luận tốt nghiệp đề tài Nghiên cứu kiến trúc của Apache, cách tích hợp thêm
Module mới và ứng dụng. Đề tài khóa luận được chọn lựa để nghiên cứu về 1 phần mềm
mở được ứng dụng rộng rãi nhất trên thế giới – phần mềm máy chủ web Apache. Khóa
luận này tập trung nghiên cứu vào phần cấu trúc của Apache, các module trong Apache.
Phần đầu của khóa luận giới thiệu về Apache và các web serser phổ biến, độ áp dụng rộng
rãi của chương trình từ đó đánh giá được ưu điểm nổi bật cho biết vì sao Apache lại là
phần mềm máy chủ web phổ dụng nhất trên thế giới. Phần tiếp theo của khóa luận đi sâu
vào nghiên cứu thành phần cấu trúc và cách hoạt động, vòng đời hoạt động, xử lý yêu cầu
của Apache, tập trung vào các hoạt động bên trong của Apache - cốt lõi chính của phần
mềm. Từ đó đưa ra cách thức viết và cài đặt chung cho các module, tập trung với cách
viết module bằng ngôn ngữ C, trên cơ sở đó sẽ nghiên cứu, phát triển một module thêm
vào Apache để phục vụ các ứng dụng có yêu cầu nâng cao đối với Web server. Cuối cùng
là kết luận và hướng phát triển tương lai của khóa luận.
4
- MỤC LỤC
PHẦN MỞ ĐẦU ..................................................................................................................7
CHƯƠNG 1. GIỚI THIỆU ..................................................................................................8
1.1 Giới thiệu về Apache Webserver ............................................................................8
1.2 Nội dung, ý nghĩa của đề tài ...................................................................................8
CHƯƠNG 2. ƯU ĐIỂM CỦA APACHE SO VỚI CÁC WEBSERVER THÔNG DỤNG
KHÁC.................................................................................................................................11
2.1 Các web server thông dụng nhất...........................................................................11
2.1.1 Apache HTTP server.....................................................................................11
2.1.2 Internet Information Services (IIS) ...............................................................11
2.1.3 Sun Java System Web Server.........................................................................12
2.1.4 Nginx [engine X]............................................................................................12
2.1.5 Lighttpd (Light-TPD hoặc Lighty) ................................................................12
2.1.6 Bảng biểu đồ thị phần của các web server .....................................................12
2.2 Ưu điểm của Apache.............................................................................................14
2.3 So sánh Apache với IIS.........................................................................................15
CHƯƠNG 3. KIẾN TRÚC APACHE................................................................................17
3.1 Cấu trúc lõi của Apache (Apache HTTPD) ..........................................................18
3.1.1 Request_rec ....................................................................................................18
3.1.1 Server_rec.......................................................................................................19
3.1.2 Conn_rec ........................................................................................................19
3.1.3 Process_rec.....................................................................................................20
3.2 Module đa xử lý (Multi-Processing Modules -MPM) ..........................................20
3.2.1 Giải pháp MPMs ............................................................................................20
3.2.2 Các MPM .......................................................................................................21
3.2.3 Bộ lọc vào-ra (filtering I/O) ...........................................................................23
3.3 Apache Portable Run-Time (APR) .......................................................................24
3.4 Quá trình làm việc của Apache.............................................................................24
5
- 3.4.1 Quá trình khởi động .......................................................................................26
3.4.2 Quá trình xử lý ...............................................................................................28
3.4.2.1 Bộ sinh nội dung..................................................................................29
3.4.2.2 Các quá trình yêu cầu xử lý .................................................................30
3.4.2.3 Xử lý yêu cầu không theo chuẩn .........................................................31
3.4.2.4 Xử lý đường ống..................................................................................31
3.4.2.5 Lựa chọn giữa bộ điều khiển và bộ lọc................................................35
3.4.2.6 Thứ tự của xử lý...................................................................................35
3.4.3 Quá trình kết thúc...........................................................................................36
3.5 Các thành phần khóa API khác.............................................................................36
CHƯƠNG 4. CÁCH XÂY DỰNG MỘT MODULE APACHE .......................................39
4.1 Các nhóm module cơ bản......................................................................................39
4.2 Cách viết các Module bằng ngôn ngữ C ...............................................................42
4.3 Cách cài đặt và ghép các Module .........................................................................46
4.3.1 Cấu trúc chung các thư mục của Apache............................................................46
4.3.2 Cách cài module C..............................................................................................50
4.4 Xây dựng một module C API tải động .................................................................54
CHƯƠNG 5. THỬ NGHIỆM XÂY DỰNG MODULE APACHE...................................57
5.1 Tên chương trình...................................................................................................57
5.2 Mục đích ...............................................................................................................57
5.3 Cấu hình ................................................................................................................57
5.4 Cài đặt ...................................................................................................................59
5.5 Thực nghiệm và đánh giá kết quả Module............................................................59
CHƯƠNG 6. KẾT LUẬN..................................................................................................66
Tài liệu tham khảo ..............................................................................................................68
PHỤ LỤC 1. CÁC API ĐỂ VIẾT MODULE BẰNG C....................................................69
PHỤ LỤC 2. MÃ NGUỒN CỦA MODULE Apache::Maxconnt.....................................99
6
- PHẦN MỞ ĐẦU
Website được coi là ứng dụng Internet lớn mạnh và phát triển nhanh nhất trong thời
điểm hiện nay. Tính đến thời điểm tháng 5-2010, đã có tới 240 triệu tên miền được sử
dụng; so với tháng 8 năm 2000 (24 triệu tên miền) con số tên miền đã phát triển gấp 10
lần [9]. Ứng dụng Web đã phát triển đến hầu hết các nơi trên toàn cầu, mọi cơ quan, nhà
nước, trường học cho đến người dùng cá nhân đều có thể tự thành lập cho mình 1 trang
Web riêng. Điều đó cho thấy Web đã phát triển và lớn mạnh như một phần tất yếu trong
cuộc sống hiện nay. Để thiết lập 1 trang Web, người dùng cần thiết phải có 1 phần mềm
WebServer như là bộ não điều khiển của cả Website. Trong các trang Web hiện nay, phần
lớn người dùng chọn Apache làm WebServer (với 54.68% các webserver), tuy vậy hầu
như người dùng chỉ biết đến cách cài đặt và sử dụng Apache, không quan tâm nhiều đến
cấu trúc và cách hoạt động của Apache. Điều này làm cho phần mềm Apache không được
sử dụng hết các chức năng, cũng như không được tối ưu hóa cách sử dụng. Hơn nữa, việc
các nhu cầu sử dụng Web ngày càng đa dạng, các nhu cầu về các chức năng mới của Web
tăng lên theo từng ngày dẫn đến việc người dùng không hoàn toàn hài lòng khi
WebServer Apache của họ không thích ứng kịp với các yêu cầu mới nảy sinh. Việc này
hoàn toàn có thể được giải quyết nếu nhà phát triển hay cũng có thể là chính người dùng
có thể tự thiết kế và lắp đặt các Module để phù hợp với yêu cầu mới nảy sinh.
Do vậy, một yêu cầu cấp thiết đặt ra trong thời điểm hiện tại là việc nghiên cứu cấu
trúc Apache để tối ưu hóa các chức năng của nó, thay đổi các tùy chỉnh mặc định để phục
vụ cho nhu cầu của mình, chạy tiết kiệm tối đa thời gian hay bộ nhớ giúp cho hiệu suất
trang web hoạt động tốt hơn. Thêm vào đó, nhu cầu nghiên cứu về cách viết cách Module
mới, cấu hình và tích hợp vào Apache cũng ngày càng trở nên cấp thiết.
Từ những nghiên cứu trên, em đã lựa chọn đề tài khóa luận để giải quyết các yêu
cầu cấp thiết đặt ra như trên. Đề tài : Nghiên cứu kiến trúc của Apache, cách tích hợp
thêm Module mới và ứng dụng.
7
- CHƯƠNG 1. GIỚI THIỆU
1.1 Giới thiệu về Apache Webserver
Apache là một chương trình dành cho máy chủ đối thoại qua giao thức HTTP.
Apache chạy trên hầu hết các hệ điều hành như Unix, Microsoft Windows, Novell
Netware và các hệ điều hành khác. Apache đóng một vai trò quan trọng trong quá trình
phát triển của mạng web thế giới.
Khi được phát hành lần đầu, Apache là chương trình máy chủ mã nguồn mở duy
nhất có khả năng cạnh tranh với chương trình máy chủ tương tự của Netscape
Communications Corporation mà ngày nay được biết đến qua tên thương mại Sun Java
System Web Server. Từ đó trở đi, Apache đã không ngừng tiến triển và trở thành một
phần mềm có sức cạnh tranh mạnh so với các chương trình máy chủ khác về mặt hiệu
suất và tính năng phong phú. Từ tháng 4 năm 1996, Apache trở thành một chương trình
máy chủ HTTP thông dụng nhất. Tính đến tháng 5 năm 2010 thì Apache chiếm đến
54.68% thị trường các chương trình phân phối trang web.
Apache là 1 Web server mã nguồn mở và miễn phí được hỗ trợ bởi Apache Software
Foundation.
Mặc dù miễn phí và mă nguồn mở nhưng sức mạnh và tính ổn định của Apache
được đánh giá rất cao. Đến nay đây vẫn là sự lựa chọn tối ưu cho giải pháp máy chủ Web.
1.2 Nội dung, ý nghĩa của đề tài
Việc Internet ngày càng phổ dụng trên thế giới, cũng như sự phát triển đến chóng
mặt của ứng dụng Web - ứng dụng quan trọng bậc nhất của internet đã làm cho việc tạo
lập và sử dụng 1 trang Web đã trở thành 1 điều hết sức đơn giản. Thành phần không thể
thiếu cho 1 trang web đó là máy chủ Web chạy 1 phần mềm máy chủ để phục vụ các yêu
cầu từ phía người dùng. Theo nghiên cứu, phần mềm máy chủ Web được ứng dụng rộng
rãi nhất trên thế giới là phần mềm Apache với 54.68% thị phần.
8
- Mặc dù Apache là 1 phần mềm mở, hoàn toàn dễ dàng nghiên cứu nhưng hầu hết
người sử dụng chỉ biết 1 vài nét cơ bản nhất về cách dùng Apache để tạo nên 1 trang web
hay 1 ứng dụng web. Tuy nhiên nếu dành thời gian để tìm hiểu về bản chất, quá trình hoạt
động, cùng các cấu trúc lõi bên trong Apache, người dùng hoàn toàn có thể sử dụng tối đa
các tiện ích mà Apache cung cấp, hay có thể thay đổi các tùy chỉnh mặc định để phục vụ
cho nhu cầu của mình, chạy tiết kiệm tối đa thời gian hay bộ nhớ giúp cho hiệu suất trang
web hoạt động tốt hơn. Hay 1 nhu cầu xa hơn nữa là tự mình có thể viết lên những
module chương trình riêng tùy theo yêu cầu sử dụng. Tất cả các nguyện vọng trên có thể
đáp ứng dễ dàng nếu ta có hiểu biết sâu sắc về kiến trúc, cách thức hoạt động của Apache,
cũng như cách viết, ghép nối các module mới.
Xuất phát từ nhu cầu trên, em đã tìm hiểu và lựa chọn đề tài nghiên cứu khóa luận
Nghiên cứu kiến trúc của Apache, cách tích hợp thêm Module mới và ứng dụng.
Ngoài ra, Apache còn có những đặc điểm thuận lợi, phù hợp cho nghiên cứu như sau
- Hiện nay Apache đang chiếm lĩnh vị trí dẫn đầu trong các web server, với hàng tỷ
người sử dụng, nên việc nghiên cứu cấu trúc và cài đặt các module trở thành công việc
cần thiết, phù hợp với yêu cầu thực tại trong nền CNTT. Các trang web ngày càng mở
rộng nên tính ứng dụng của nó ngày càng được quan tâm nhiều hơn, càng được phát triển
liên tục.
- Apache là phần mềm miễn phí, mã nguồn mở. Điều này hỗ trợ rất nhiều cho việc
nghiên cứu, công việc trở nên dễ dàng thuận lợi hơn khi có thể nắm được cấu trúc bên
trong của hệ thống. Mã nguồn được viết bằng C - ngôn ngữ phổ dụng, có thể nắm bắt cấu
trúc bằng việc nghiên cứu mã nguồn.
- Apache được thiết kế trên cấu trúc module, sẵn sàng cho việc tự tìm hiểu và viết
thêm các module với yêu cầu đặc biệt. Với việc bùng nổ các ứng dụng Web như hiện nay
thì việc cung cấp thêm các Module phục vụ những yêu cầu riêng càng trở nên cấp thiết.
Không thể chờ đợi các nhà phân phối, phát triển phần mềm Web server đánh giá lại nhu
cầu và xây dựng, cải tiến các phần mềm cho phù hợp với các yêu cầu ứng dụng nảy sinh
9
- trong thực tại. Các nhu cầu ứng dụng Web vào mọi mặt, các yêu cầu mới nảy sinh, yêu
cầu riêng biệt chuyên biệt, nảy sinh ngày 1 nhiều và người sử dụng sẽ không hoàn toàn
hài lòng nếu phần mềm máy chủ của họ sẽ không thích ứng kịp với các nhu cầu đó. Và
giải pháp đặt ra là phải tự xây dựng các Module để có thể ghép vào các WebServer để
ngay lập tức triển khai ứng dụng theo nhu cầu. Đây cũng là 1 ưu điểm điển hình của
Apache, với kiến trúc theo các module, việc viết thêm và ghép các module mới vào trong
Server sẽ không còn là 1 việc quá khó khăn. Cá nhân Sinh viên hoàn toàn có thể tự tìm 1
yêu cầu thực tế để sẵn sàng lập trình, tích hợp module vào hệ thống, phục vụ ngay cho các
yêu cầu thực tế đặt ra học tập và làm việc.
- Apache yêu cầu điều kiện nghiên cứu phù hợp. Với điều kiện phần cứng không
quá lớn, với 1 máy tính cá nhân đơn, sinh viên có thể hoàn toàn cài đặt server Apache,
viết các module triển khai và ứng dụng.
10
- CHƯƠNG 2. ƯU ĐIỂM CỦA APACHE SO VỚI CÁC
WEBSERVER THÔNG DỤNG KHÁC
Bên cạnh Apache, các máy chủ Web trên thế giới còn sử dụng rất nhiều phần mềm
phổ biến. Tuy nhiên, so với Apache chúng chưa chiếm được thị phần người sử dụng cao.
Do những ưu điểm nổi bật và đặc biệt là sự miễn phí và mã nguồn mở của Apache đã
đánh bật các đối thủ cạnh tranh. Để tìm hiểu về sự thống trị của Apache, Chương này
nghiên cứu về các đối thủ cạnh tranh, đồng thời cũng tìm ra những đặc điểm nổi trội của
nó.
2.1 Các web server thông dụng nhất
Apache, ISS, Sun Java System, Nginx, Lighttpd là 5 webserver được sử dụng nhiều
nhất trên toàn cầu theo số liệu thống kê đến tháng 5-2010 [9]. Trong đó, Apache của
Apache Software Foundation và đối thủ thứ 2 là ISS của Microsoft đã chiếm lĩnh tới gần
80% thị trường.
2.1.1 Apache HTTP server
Apache HTTP Server thường được gọi Apache, được phát triển bởi Apache
Software Foundation, tích hợp nhiều hệ điều hành như Unix, Linux, Solaris, Mac OS X,
MS Windows, OS/2, FreeBSD. Từ tháng 4 năm 1996, Apache trở thành một chương trình
máy chủ HTTP thông dụng nhất. Tính đến tháng 5 năm 2010 thì Apache chiếm đến
54.68% thị trường các web server.
Phiên bản mới nhất: 2.2.15 / 6-3-2010.
2.1.2 Internet Information Services (IIS)
Internet Information Services (IIS) – được phát triển bởi hãng Microsoft ứng dụng
phục vụ chủ yếu cho hệ điều hành MS - windows. Là phần mềm đứng thứ 2 trong thị
trường web server. Tới tháng ba năm 2010 phần mềm này được ứng dụng trên 24.47%
tổng số các website.
11
- Phiên bản mới nhất: ISS 7.5 (phát hành ngày 22-10-2009) ứng dụng trên phiên bản
Windows Server 2008 R2 và Windows 7.
2.1.3 Sun Java System Web Server
Sun Java System Web Server là 1 web server thiết kế nhằm phục vụ cho các ứng
dụng kinh doanh vừa và lớn. Sun Java System Web Server hỗ trợ JSP and Java Servlet
technologies, PHP, NSAPI, CGI, and ColdFusion.
Phiên bản mới nhất 7.0 phát hành 22-1-2007.
2.1.4 Nginx [engine X]
Viết bởi Igor Sysoev và được phát triển rộng rãi trên các website của CHLB Nga
như RamblerMedia.com. Tháng 5-2010, Nginx phục vụ 6.55% tổng số các web site
Phiên bản mới nhất 0.8.36 mới đang được đưa ra thử nghiệm vào ngày 22-4-2010.
2.1.5 Lighttpd (Light-TPD hoặc Lighty)
Là 1 web server mã nguồn mở viết bởi Jan Kneschke, tối ưu cho môi trường giới
hạn tấc độ, có tính bảo mật và mềm dẻo. Lighttpd được ứng dụng trên các web ứng dụng
nhanh trong gói Web 2.0 như YouTube, Wikipedia và Meebo.
Phiên bản mới nhất : 1.5.0.
2.1.6 Bảng biểu đồ thị phần của các web server
Bảng thống kê chi tiết hơn nữa về số lượng thị phần các web server tháng 5 -2010,
với sự dẫn đầu gần như tuyệt đối của Apache:
12
- Hình 1: Tổng kết các máy chủ hoạt động trên các miền từ tháng 8/1995 đến tháng
5/2010 [9].
Hình 2: Biểu đồ chia sẻ thị trường của các máy chủ đứng đầu trên hàng triệu các site
hoạt động mạnh nhất từ tháng 9/2008 đến tháng 9/2009 [10].
13
- 2.2 Ưu điểm của Apache
Apache mang lại rất nhiều ưu điểm thích hợp cho cả người sử dụng, người phát triển
(developer) và nhà quản trị mạng (web administrator).
- Apache là 1 web server có khả năng cấu hình cao với thiết kế module. Điều đó
làm cho khả năng mở rộng của Apache là khá dễ dàng. Bất cứ ai thông thạo ngôn ngữ lập
trình C hoặc Perl đều có thể viết thêm 1 module để thực hiện 1 chức năng đặc biệt. Người
dùng cũng có thể hoàn toàn tự viết code của mình và tích hợp vào server, triển khai và
điều chỉnh cho phù hợp với yêu cầu đề ra.
- Làm việc tốt với các ngôn ngữ Perl, PHP và các ngôn ngữ kịch bản khác. Các
ngôn ngữ kịch bản đang được ứng dụng rộng rãi và Apache cũng cung cấp các hỗ trợ
dành cho các ngôn ngữ kịch bản bằng cách sử dụng các module như mod_php,
mod_perl,..
- Apache là ứng dụng miễn phí, mã nguồn mở. Miễn phí và mã nguồn mở là 2 ưu
điểm quan trọng giúp Apache trở thành phần mềm được ứng dụng rộng rãi nhất trên thế
giới.
- Apache server là 1 web server thường xuyên cải tiến và có khả năng sử dụng
những phương thức mới nhất trên Internet, điều đó được thể hiện khi nó là 1 trong những
web server đầu tiên ứng dụng phương thức HTTP 1.1.
- Dễ dàng để quản lý. Sự quản trị là 1 trong những thành phần chính của tất cả các
server. Với Apache Server, ta không gặp phải các vấn đề lớn về quản trị vì nó rất dễ để xử
lý. Apache có có 1 tập các files configure với tất cả các thông tin cần thiết để có thể đọc
và tự cấu hình những thông tin cần thiết về tất cả các tính năng và cài đặt của server.
Ngoài ra, tất cả các file cấu hình đều ở dạng mã ASCII đơn giản, có thể dễ dàng hiệu
chỉnh bằng các editor thông thường. Nhà quản trị có thể điều khiển server từ dòng lệnh
(command line), làm cho công việc quản trị từ xa trở nên thuận lợi.
14
- - Sự hiệu quả của Apache Web Server. Sự hiệu quả của Apache là khá tốt so với
các web server khác. Apache dùng ngôn ngữ C để tối ưu mã hóa, đạt hiệu năng cao nhất.
Kết quả là, nó chạy nhanh hơn và tiêu tốn ít tiềm lực hệ thống hơn tất cả các server hiện
hành.
- Apache mang tới tính khả chuyển tuyệt vời, nó thể được cài đặt và triển khai
dưới nhiều nền với cấp độ khả chuyển cao nhất bao gồm các biến thể của UNIX,
WINDOWS 9X/NT, MAC OS…
- Tính ổn định và tin cậy. Mã nguồn Apache là mã nguồn mở. Với bất kỳ 1 lỗi nhỏ
nào được phát hiện thì đều được thông báo và được sửa chữa nhanh chóng. Bản cập nhật
vá lỗi sẽ được tạo và báo ngay sau đó. Điều đó làm cho hệ thống ngày càng trở nên càng
bền vững, tin cậy.
2.3 So sánh Apache với IIS
Có thể so sánh ngay Apache với đối thủ cạnh tranh trực tiếp là ISS để tìm ra những
ưu điểm chính mà Apache đang sở hữu:
Môi trường tốt nhất để sử dụng Apache là Unix. Khác với IIS trên Windows,
Apache trên Unix có 3 chế độ hoạt động khác nhau: winnt, prefork và worker. Đây là
điểm mà IIS được cho là kém hẳn so với Apache.
Với IIS, Web Server chỉ có 1 Child Process và Child Process này sẽ tạo các Thread
để handle các request, cơ chế này tương ứng với winnt của Apache, và cũng là mức hoạt
động thấp nhất.
Apache prefork và worker cho phép mở nhiều Child Process, với 1 thread/1 child
process (prefork) hoặc many thread/1 child process (worker). Do đó Apache cho phép xử
lý mạnh hơn với prefork và càng mạnh hơn nữa với worker. Tuy nhiên xử lý mạnh thì lại
tốn tài nguyên, còn prefork lại là ổn định nhất.
Với prefork và 1 server Unix tầm trung phải chia sẻ cho khoảng 500 người dùng
nhiều dịch vụ khác cùng lúc, Apache có thể đạt tới mức xử lý 5000 request/1 second.
15
- Apache là 1 OSS còn IIS thì ko, và thường thì Apache đi chung Unix + PHP +
MySQL (+ Perl + JSP), còn IIS thì Win2k3 + ASP + SQL Server. Trong xu thế ngày nay,
máy chủ Web được hướng tới ưa sử dụng Unix cho việc phục vụ các yêu cầu mạnh hơn,
mà trong đó thì Apache lại là phần mềm Web chạy trên Unix ổn định nhất.
16
- CHƯƠNG 3. KIẾN TRÚC APACHE
Với việc mã nguồn Apache được viết bằng C là mã nguồn mở, thì việc nghiên cứu
kiến trúc của Apache không còn là việc quá phức tạp. Điểm cốt lõi trong quá trình nghiên
cứu cấu trúc Apache là xem xét các quá trình thực thi từ khi khởi động tới khi kết thúc
của nó. Giải pháp chia các Module đa nhiệm vụ thành các module con và trực tiếp phân
luồng để phục vụ nhiều yêu cầu làm tăng thêm sức mạnh thực thi của máy chủ Web. Kiến
trúc Apache được phân vào 4 module quan trọng nhất, xử lý toàn bộ thực thi trong
Apache. Việc nắm bắt được các quá trình thực thi và nhiệm vụ của 4 module này sẽ giúp
người dùng sử dụng được tối đa sức mạnh của Apache.
Apache được chạy ngầm thường trực dưới dạng một deamon (thuật ngữ trên Unix)
hoặc một dịch vụ (thuật ngữ trên Windows). Quá trình khởi động là một quá trình chậm
và tốn bộ nhớ, nên để làm một server tốt nhất là cho Apache khởi động lúc hệ thống khởi
động và sau đó cho chạy cố định.
Hình 3: Kiến trúc Apache
Máy chủ Apache HTTP bao gồm một số lượng tương đối các lõi (core) nhỏ, cùng
với một số lượng các modules. Các Module có thế được dịch một các tĩnh vào trong
17
- server hoặc, thông thường hơn, được trữ bên trong đường dẫn /modules/ hoặc /libexec/ và
được tải động khi dịch vụ khởi động.
Kiến trúc của Apache được mô họa trên hình 3, trong đó phần lõi của Apache là
Apache HTTPD; xung quanh là các module có thể tải động, MPM là các Module đa xử
lý.
Trong chương này, ta lần lượt đi nghiên cứu các thành phần trên theo thứ tự (dựa
trên cấu trúc minh họa trong hình 3): cấu trúc lõi Apache HTTPD, các Module đa xử lý
MPM, hệ APR. Sau đó nghiên cứu về các bước hoạt động của Apache và các khâu quan
trọng nhất trong các quá trình đó.
3.1 Cấu trúc lõi của Apache (Apache HTTPD)
Theo thứ tự sắp xếp về các module quan trọng trong lõi của Apache:
1. Request_rec
2. Server_rec
3. Conn_rec
4. Process_rec
Hai thành phần đầu tiên là các thành phần sẽ gặp phải nhiều trong phát triển ứng
dụng.
3.1.1 Request_rec
Một thành phần request_rec được tạo khi Apache chấp nhận một yêu cầu HTTP từ
phía máy khách, và sẽ được hủy ngay lập tức khi mà Apache xử lý xong yêu cầu đó.
Thành phần request_rec sẽ được thông qua mỗi khi được triển khai bởi bất kỳ module
trong quá trình xử lý một yêu cầu. Nó giữ mọi dữ liệu (cục bộ) thích hợp để xử lý một yêu
cầu HTTP. request_rec bao gồm một số lượng trường được sử dụng bên trong để bảo trì
trạng thái và dữ liệu từ máy khác. Một số các trường quan trọng mà request_rec lưu trữ là:
18
- • Một vector hệ yêu cầu, nó được sử dụng để quản lý tài nguyên cấp phát khi xử lý
yêu cầu.
• Một vec tor của bản lưu cấu hình cho việc tự động cầu hình yêu cầu (từng đường
dẫn dữ liệu riêng trong httpd.conf hoặc .htaccess).
• Một vector bản lưu cấu hình cho những dữ liệu tạm thời, được sử dụng khi xử lý
• Một bảng của đầu vào, đầu ra HTTP và các lỗi header.
• Một bảng của các biến môi trường (môi trường được coi là một kịch bản thêm
vào như là SSI, CGI, mod_rewrite, và PHP), và tương tự bảng “notes” cho yêu
cầu dữ liệu mà không tìm thấy trong kịch bản.
• Các con trỏ (pointer) tới tất các các thành phần thích hợp khác, bao gồm các kết
nối, máy chủ, và các yêu cầu thành phần liên quan.
• Các con trỏ đến đầu vào và đầu ra các chuỗi lọc (filter).
• Các URI được yêu cầu.
Chi tiết đầy đủ xem thêm ở file httpd.h.
3.1.1 Server_rec
Server_rec được tạo lúc khởi động máy chủ, và chỉ kết thúc khi toàn bộ httpd được
tắt. server_rec không hề có hệ pool riêng; thay vào đó, tài nguyên máy chủ cần thiết sẽ
được cấp phát từ tiến trình pool. Nếu ta sử dụng host ảo, mỗi host ảo sẽ có server_rec
riêng, xác định nó độc lập với các host khác.
Server_rec là cấu trúc quan trọng thứ 2 đối với người lập trình, sau request_rec.
Chi tiết đầy đủ xem thêm ở file httpd.h.
3.1.2 Conn_rec
Conn_rec là thành phần trong Apache đại diện của kết nối TCP, được tạo ra khi
Apache chấp nhận một kết nối từ phía máy khác, và được hủy khi kết nối đóng lại. Hầu
19
- hết các ứng dụng đều tập trung vào các yêu cầu mà bỏ qua conn_rec, tuy nhiên các
module phương thức và các bộ lọc kết nối sẽ sử dụng conn_rec, các module có thể sử
dụng chúng trong các nhiệm vụ như là tối ưu hóa việc sử dụng tài nguyên thông qua thời
gian tồn tại của một HTTP Keepalive (kết nối ổn định).
Conn_rec không có thông tin cấu hình, nhưng có một vector cấu hình cho các dữ
liệu kết nối tạm thời với một kết nối giống như là một pool cho các tài nguyên kết nối.
Chi tiết đầy đủ xem thêm ở file httpd.h.
3.1.3 Process_rec
Không giống như các thành phần lõi khác như đã nghiên cứu ở bên trên, Process_rec
là một thành phần hệ điều hành, đúng hơn là một thành phần kiến trúc web. Chỉ khi nào
các ứng dụng cần liên quan tới nó thì nó mới xuất hiện, khi làm việc với các tài nguyên
mà có thời gian tồn tại của máy chủ, khi các tiến trình pool phục vụ mọi thành phần của
server_rec(và được truy cập từ server_rec như là s->process-pool).
Chi tiết đầy đủ xem thêm ở file httpd.h.
3.2 Module đa xử lý (Multi-Processing Modules -MPM)
Tại thời điểm kết thúc của quá trình khởi động, sau khi cấu hình đã được thông qua,
toàn bộ điều khiển của Apache được chuyển qua Module đa xử lý. MPM cung cấp giao
diện giữa máy chủ chạy Apache và Hệ điều hành. Nó đóng vai trò chính trong việc tối ưu
Apache cho từng các HĐH khác nhau, trong khi vẫn đảm bảo máy chủ chạy hiệu quả và
bảo mật.
MPM bản thân nó đã là một module, tuy nhiên MPM là Module duy nhất ở cấp hệ
thống. Mỗi Apache đều phải chứa chính xác một MPM được chọn lựa trong thời gian xử
lý.
3.2.1 Giải pháp MPMs
20
nguon tai.lieu . vn