Xem mẫu

  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 HÀ NỘI - 2010 1
  2. ĐẠ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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. - 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
  16. 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
  17. 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
  18. 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
  19. • 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
  20. 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