Phạm Văn Tính 2 SVTH: Thành Phát – Công Lý - Cấu hình mạng Gói tin Kết nối o Triển khai load balancing cho Liferay kết hợp với Apache o Tiến hành đánh giá hiệu suất từ các mô hình - Hiệu
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
*********
KHÓA LUẬN TỐT NGHIỆP
NGHIÊN CỨU TRIỂN KHAI VÀ ĐÁNH GIÁ SỰ HIỆU QUẢ
KỸ THUẬT LOAD BALANCING CHO ỨNG DỤNG WEB
XÂY DỰNG TRÊN CỔNG THÔNG TIN LIFERAY
Ngành: Công nghệ thông tin
Lớp: DH08DT Giáo viên HD: TS Phạm Văn Tính Sinh viên thực hiện: Lâm Thành Phát
TP.HỒ CHÍ MINH, Tháng 08 năm 2012
Trang 2ii
KHOA CÔNG NGHỆ THÔNG TIN
*********
NGHIÊN CỨU TRIỂN KHAI VÀ ĐÁNH GIÁ SỰ HIỆU QUẢ
KỸ THUẬT LOAD BALANCING CHO ỨNG DỤNG WEB
XÂY DỰNG TRÊN CỔNG THÔNG TIN LIFERAY
Giáo viên hướng dẫn Sinh viên thực hiện
Tháng 08/2012
Trang 3iii
Chúng tôi xin gửi lời biết ơn đến Thầy Phạm Văn Tính, người đã truyền đạt
nhiều kiến thức, luôn giúp đỡ và tận tình hướng dẫn chúng tôi trong suốt quá trình
nghiên cứu và hoàn thành khóa luận Trong những giờ học của Thầy, ngoài việc
truyền dạy kiến thức, Thầy còn truyền dạy cho chúng tôi nhiều kinh nghiệm sống và
nhiều kiến thức ở các lĩnh vực khác
Xin chân thành cảm ơn Thầy Phan Vĩnh Thuần, thầy giáo đã dạy chúng tôi
hai môn học “Hệ điều hành cơ bản” và “Hệ điều hành nâng cao” Nhờ những kiến
thức này, chúng tôi có thể hoàn thành khóa luận này
Gửi lời cảm ơn đến cô Nhi và cô Trâm ở phòng giáo vụ Khoa đã tạo điều
kiện cho chúng tôi hoàn thành khóa luận này
Chân thành cảm ơn!
Lâm Thành Phát Trần Công Lý
Trang 4iv
Người sử dụng bây giờ yêu cầu một ứng dụng phải có khả năng đáp ứng
nhanh Nếu một ứng dụng xử lý quá chậm sẽ không được người sử dụng quan tâm
đến Đặc biệt là các ứng dụng web Hiện nay, các phần mềm đang dịch chuyển dần
sang nền tảng web để tăng tính linh động khi người sử có thể di chuyển tùy ý
Vấn đề đặt ra là làm sao một máy chủ dành cho ứng dụng web có thể đáp ứng
nhanh yêu cầu của nhiều người dùng đồng thời
Load balancing là một giải pháp đã được sử dụng rộng rãi nhằm tăng khả
năng xử lý ứng dụng web Trong luận văn này, chúng tôi tiến hành nghiên cứu về
load balancing để triển khai một ứng dụng web cụ thể
Bên cạnh đó, chúng tôi phát triển kịch bản để kiểm tra hiệu suất của ứng dụng
khi tiến hành load balancing Dựa trên các kết quả thu được sau các bài test sẽ đưa ra
đánh giá sự hiệu quả của kĩ thuật Load balancing
Trang 5v
Trang
LỜI CẢM ƠN iii
TÓM TẮT iv
MỤC LỤC v
DANH SÁCH CÁC HÌNH viii
DANH SÁCH CÁC BIỂU ĐỒ ix
Chương 1 MỞ ĐẦU 1
Chương 2 TỔNG QUAN 3
2.1 Server load balancing 3
2.1.1 Khái niệm 3
2.1.2 Ưu điểm của load balancing 3
2.1.3 Các công nghệ khác 4
2.2 Cấu hình giữa Apache và Tomcat 5
2.2.1 AJP Connector 5
2.2.2 Máy chủ Tomcat (Tomcat Workers) 7
2.2.3 Load Balancing 12
2.3 Tomcat Clustering 15
2.3.2 Mô hình Tomcat Clustering 16
2.3.3 Quản lý Sessions: 19
2.3.4 Cấu hình nhiều Tomcat cùng hoạt động trên một máy chủ: 20
2.3.5 Chia sẻ session: 22
2.4 Performance test 28
2.4.1 Giới thiệu 28
2.4.2 Tính cấp thiết 28
2.4.3 Các yếu tố chính 29
2.4.4 Phân loại 30
2.4.5 Một số ứng dụng thực hiện 30
2.4.6 Workflow Testing 31
Trang 6vi
2.5.2 Các thành phần trong JMeter 31
2.5.3 Hạn chế của JMeter 32
2.5.4 Cài đặt 33
2.5.5 Sử dụng JMeter 34
2.5.6 JMeter Proxy 37
2.5.7 Xây dựng một hệ thống phục vụ kiểm thử 38
2.5.8 Theo dõi tài nguyên sử dụng của máy chủ thông qua Tomcat server 39
2.5.9 Sử dụng dữ liệu người dùng 41
2.5.10 Sử dụng JMeter Plugin để theo dõi server 42
2.5.11 Trích xuất giá trị từ response 43
Chương 3 NỘI DUNG VÀ PHƯƠNG PHÁP 45
3.1 Nội dung 45
3.2 Mục tiêu 45
3.3 Các mô hình triển khai 45
3.3.1 Giới thiệu ứng dụng 45
3.3.2 Môi trường triển khai kiểm thử 45
3.3.3 Mô hình kiểm thử 46
3.3.4 Danh sách các bài kiểm thử 48
3.3.5 Điều kiện đánh giá 50
3.4 Tạo test plan với JMeter 50
3.4.1 Qui trình công việc 50
3.4.2 Qui trình công việc được giả lập 51
3.4.3 Tạo test plan 51
3.4.4 Vấn đề khó khăn khi thực hiện 53
3.4.5 Phương pháp xử lý 53
Chương 4 KẾT QUẢ VÀ THẢO LUẬN 59
4.1 Kết quả kiểm thử hiệu suất 59
4.1.1 Bài 1 59
4.1.2 Bài 2 60
Trang 7vii
4.1.5 Bài 5 66
4.1.6 Bài 6 67
4.1.7 Bài 7 70
4.1.8 Bài 8 71
4.2 Phân tích 73
Chương 5 KẾT LUẬN VÀ ĐỀ NGHỊ 74
5.1 Kết luận: 75
5.2 Đề nghị: 76
Phụ lục CÁC BƯỚC TẠO JMETER TEST PLAN 77
TÀI LIỆU THAM KHẢO 87
Trang 8
viii
Trang
Hình 2.1 Mô hình hoạt động Apache + Tomcat 5
Hình 2.2 Load balancing Tomcat với Apache 15
Hình 2.3 Mô hình Tomcat Clustering 16
Hình 2.4 Sticky sessions Tomcat 17
Hình 2.5 Chia sẻ session của Tomcat 23
Hình 2.6 Cơ chế hoạt động Server agent 43
Hình 3.1 Mô hình thử nghiệm 1 46
Hình 3.2 Mô hình thử nghiệm 2 47
Hình 3.3 Mô hình thử nghiệm 3 47
Trang 9
ix
Trang Bài test 1
Biểu đồ 4.1 ResponseTime và V-user 59
Biểu đồ 4.2 ResponseTime code 60
Biểu đồ 4.3 ResponseTime Over Time 60
Bài test 2
Biểu đồ 4.4 ResponseTime và V-user 61
Biểu đồ 4.5 ResponseTime code 61
Biểu đồ 4.6 ResponseTime Over Time 62
Bài test 3
Biểu đồ 4.7 ResponseTime và V-user 63
Biểu đồ 4.8 ResponseTime code 63
Biểu đồ 4.9 ResponseTime Over Time 64
Bài test 4
Biểu đồ 4.10 ResponseTime và V-user 64
Biểu đồ 4.11 ResponseTime code 65
Biểu đồ 4.12 ResponseTime Over Time 65
Bài test 5
Biểu đồ 4.13 ResponseTime và V-user 66
Biểu đồ 4.14 ResponseTime code 67
Biểu đồ 4.15 ResponseTime Over Time 67
Trang 10
x
Biểu đồ 4.17 ResponseTime code 68
Biểu đồ 4.18 ResponseTime Over Time 69
Bài test 7
Biểu đồ 4.19 ResponseTime và V-user 70
Biểu đồ 4.20 ResponseTime code 70
Biểu đồ 4.21 ResponseTime Over Time 71
Bài test 8
Biểu đồ 4.22 ResponseTime và V-user 71
Biểu đồ 4.23 ResponseTime code 72
Biểu đồ 4.24 ResponseTime Over Time 72
Trang 11
Chương 1
MỞ ĐẦU
Chúng ta đang chứng kiến sự phát triển vượt bậc của nền khoa học công nghệ
- đặc biệt là công nghệ thông tin Máy tính đã giúp con người rất nhiều từ tối ưu hóa công việc, giảm thời gian làm việc, tăng hiệu suất và mang lại hiệu quả cao
Với tình hình phát triển như hiện nay thì hầu hết các cơ quan, tổ chức đều cần một hệ thống máy chủ (Server) chứ không phải chỉ một vài máy tính con đơn lẻ nữa
Máy chủ về bản chất cũng là một máy tính nhưng có cấu hình, tính năng và các chức năng lớn hơn hẳn các máy tính thông thường Nói chung máy chủ là một máy tính có thể cung cấp các dịch vụ như là: mail, database, Web, Ftp, File service,…
Thế nhưng thực tế khi hoạt động các máy chủ ít khi quản lý tốt các tài nguyên hiện có Ví dụ: Chỉ sử dụng 20% – 30% tài nguyên máy chủ hoặc trong một hệ thống có máy sử dụng đến 70% - 80% tài nguyên thì máy khác lại không được sử dụng đến… Thực tế đã có nhiều biện pháp được đưa ra nhằm quản lý tốt tài nguyên
hệ thống Giải pháp phổ biến hiện nay thực hiện Load balancing
Trong thời đại hiện nay, tốc độ của ứng dụng web đồng nghĩa với doanh thu đạt được Theo các khảo sát mới nhất, thì người dùng sẽ bắt đầu mất kiên nhẫn với những ứng dụng web tốn thời gian quá 5 giây để tải Một vấn đề quan trọng đặt ra là tăng hiệu suất của một ứng dụng web
Trong luận văn này, chúng tôi tiến cấu hình load balacing trên các máy này Sau đó sẽ thử nghiệm các mô hình khác nhau và đưa ra các đánh giá về hiệu suất trên mỗi mô hình Từ đó đưa ra các ý kiến để nâng cao hiệu suất cho một máy chủ web
Mục tiêu đề tài: “Nghiên cứu triển khai và đánh giá sự hiệu quả kỹ thuật
Load Balancing cho ứng dụng web xây dựng trên cổng thông tin Liferay”
Nội dung nghiên cứu:
o Các mô hình triển khai load balancing từ các cấp độ
- Hệ điều hành (Windows, Linux)
- Ứng dụng (Apache + Tomcat)
Trang 12GVHD: TS Phạm Văn Tính 2 SVTH: Thành Phát – Công Lý
- Cấu hình mạng Gói tin Kết nối
o Triển khai load balancing cho Liferay kết hợp với Apache
o Tiến hành đánh giá hiệu suất từ các mô hình
- Hiệu suất khi sử dụng Apache kết hợp Tomcat
- Hiệu suất khi thực hiện load balancing 2 Tomcat với Apache trên cùng một máy chủ
Trang 13Chương 2 TỔNG QUAN
2.1 Server load balancing
Cơ sở hạ tầng CNTT đang đóng một vai trò ngày càng quan trọng trong sự thành công của xã hội Mạng lưới các máy chủ hiện nay thường xuyên được sử dụng
để lưu trữ ERP, thương mại điện tử và vô số các ứng dụng khác Nền tảng của các trang web này, các chiến lược kinh doanh, cơ sở hạ tầng tốt sẽ cung cấp hiệu suất cao, tính sẵn sàng cao, và các giải pháp an toàn và khả năng mở rộng để hỗ trợ tất cả các ứng dụng
Tuy nhiên, sự sẵn có của các ứng dụng này thường bị đe dọa bởi quá tải mạng cũng như sự cố xảy ra trên các máy chủ và các ứng dụng Sử dụng tài nguyên hệ thống không cân đối dẫn đến có hệ thống đang quá tải với các yêu cầu, trong khi hệ thống khác vẫn nhàn rỗi Server Load Balancing là một giải pháp giúp sử dụng cân đối các nguồn tài nguyên và giúp tăng hiệu suất làm việc cho hệ thống mạng
2.1.1 Khái niệm
Load balancing là một mô hình luận lí mạng máy tính để phân phối khối lượng công việc thông qua nhiều máy tính hoặc đường truyền mạng, bộ xử lý trung tâm (CPU), ổ đĩa hay các tài nguyên khác nhằm sử dụng tối ưu nguồn tài nguyên, giảm thời gian đáp ứng, tránh tình trạng quá tải Việc sử dụng nhiều thành phần trong Load balancing thay vì một thành phần có thể làm tăng độ tin cậy thông qua
dự phòng
Load balancing có thể được cung cấp bằng các phần mềm hoặc phần cứng
Có một phương pháp thay thế Load balancing mà không cần dùng phần cứng hay phần mềm được gọi là round robin DNS Trong kĩ thuật này nhiều địa chỉ IP được kết hợp với một tên miền duy nhất
Persistence: còn biết đến như là “sticky”, persistence giữ một người dùng cụ thể với một máy chủ đã định hướng lần đầu tiên Nó sẽ luôn luôn giữ cho các truy cập của người dùng vào cùng một máy chủ
2.1.2 Ưu điểm của load balancing
Trang 14GVHD: TS Phạm Văn Tính 4 SVTH: Thành Phát – Công Lý
Nó rõ ràng là một giải pháp tốt để quản lý các vấn đề dự phòng, khả năng mở rộng Các trang web ngày càng có giá trị, thời gian chờ lâu hoặc “chết” sẽ gây thiệt hại lớn Server load balancing có 3 lợi ích chính trực tiếp giải quyết các mối quan tâm của các trang web
a Tính linh hoạt
Server load balancing cho phép bổ sung và loại bỏ các máy chủ bất cứ lúc nào, và có tác động ngay lập tức Điều này cho phép bảo trì máy tính mà không làm trang web bị gián đoạn
b Tính sẵn sàng cao
Server load balancing có thể kiểm tra trạng thái của một máy chủ, điều hướng các yêu cầu đến nơi khác khi máy chủ ngừng phản hồi và điều hướng trở lại khi máy chủ làm việc lại Việc này hoàn toàn tự động mà không cần sự can thiệp của quản trị viên
Ngoài ra, load balancing thường có cấu hình dự phòng, sử dụng nhiều hơn một thành phần trong trường hợp có một thành phần bị lỗi
c Khả năng mở rộng
Khi server load balancing phân tải giữa các máy chủ, tất cả những gì cần thiết
để nâng cao năng suất một trang web là thêm nhiều máy chủ vào Điều này có thể rất kinh tế khi sử dụng máy chủ nhỏ hoặc trung bình sẽ ít tốt kém hơn máy chủ cao cấp
2.1.3 Các công nghệ khác
Có nhiều công nghệ khác giải quyết các vấn đề tương tự Server load balancing theo những cách khác Cũng có những công nghệ giải quyết những vấn đề
mà server load balancing không hỗ trợ, nhưng theo một cách tương tự
a Firewall Load Balancing
Firewall Load Balancing (FWLB) được phát triển để khắc phục một số hạn chế của công nghệ firewall
b Global Server Load Balancing
Có cùng khái niệm như SLB, nhưng nó phân tải đến các địa điểm khác nhau SLB làm việc trên LAN, trong khi GSLB làm việc trên WAN
c Clustering
Trang 15GVHD: TS Phạm Văn Tính 5 SVTH: Thành Phát – Công Lý
Clustering cung cấp các giải pháp tương tự SLB, cụ thể là tính sẵn sàng và
khả năng mở rộng tốt hơn Clustering liên quan nhiều đến giao thức phần mềm chạy
trên một vài máy chủ tập trung và chia sẻ gánh nặng Thay vì nằm phía trước các
máy chủ và thao tác các gói tin Điều này liên quan đến việc tích hợp khá chặt chẽ
các phần mềm máy chủ Load balancing ít quan tâm đến việc tương tác giữa các
máy chủ như clustering
2.2 Cấu hình giữa Apache và Tomcat
Trên thực tế, hầu hết cấu hình của Tomcat là cấu hình giữa Apache và Tomcat, bởi vì nhằm đảm bảo tính nhanh chóng và ổn định của Website, những nội
dung tĩnh được Apache xử lý và những nội dung động như JSP/Serverlet được
chuyển cho Tomcat Tomcat và Apache có thể kết hợp để cùng hoạt động với nhau
thông qua modoule JK Connector JK Connector sử dụng Apache Jserv Protocol (AJP) để giao tiếp giữa Tomcat và Apache
2.2.1 AJP Connector
Để Apache và Tomcat có thể hoạt động với nhau, người ta sử dụng giao thức
AJP, và trên Apache, đó là các modoules mod_jk hoặc mod_proxy Cả hai đều được
viết dựa trên ngôn ngữ C/C++, còn Tomcat sử dụng modoule AJP Connector được
viết bằng ngôn ngữ Java
Hình sau để mô phỏng các hoạt động giữa các moudoules mod_jk hoặc
mod_proxy của Apache với Tomcat Apache sẽ nhận các yêu cầu của JSP hoặc
servlet và sử dụng các modoule của mình để chuyển các yêu cầu đó qua giao thức
AJP của Tomcat, đương nhiên, nội dung trả về Apache cũng sẽ được gởi thông qua
giao thức AJP
Hình 2.1 Mô hình hoạt động Apache + Tomcat
Apache web server
Tomcat instance Mod_jk
Static content
Dynamic content
Trang 16GVHD: TS Phạm Văn Tính 6 SVTH: Thành Phát – Công Lý
AJP sử dụng định dạng nhị phân để truyền tải dữ liệu giữa Web server và Tomcat, một socket sẽ được mở ra để sử dụng cho tất cả các dữ liệu truyền tải Dưới đây là cấu trúc của một gói tin AJP:
Contents 0x12 0x34 Data length Actual data payload
AJP packet structure from the Web server side to the Servlet container
Contents A B Data length Actual data payload
AJP packet structure from the Servlet container side to the Web server
Chúng ta có thể thấy, gói tin nhị phân sẽ được bắt đầu bằng chuỗi 0x1234, một chuỗi 2 bytes chứa thông tin độ dài gói tin và sau đó là nội dung của gói tin yêu cầu Khi gói tin được trả lại từ Tomcat, nó trả về bắt đầu bằng chữ AB, độ dài gói tin
và nội dung của gói tin
Công việc thật sự của giao thức là:
- Tối ưu hóa tốc độ truyền tải dữ liệu
Trang 17GVHD: TS Phạm Văn Tính 7 SVTH: Thành Phát – Công Lý
2.2.2 Máy chủ Tomcat (Tomcat Workers)
Một máy chủ Tomcat sẽ xử lý tất cả những nội dung động của ứng dụng web Tuy nhiên, để sử dụng máy chủ Tomcat như một cluster để load balancing thì mỗi máy chủ phải định nghĩa một hostname riêng hoặc một IP và port riêng cho mình Những lý do mà ta cần nhiều máy chủ Tomcat hoạt động như:
- Khi ta muốn nhiều ứng dụng Web được xử lý bởi nhiều máy chủ Tomcat được đặt trên cùng 1 server và hoạt động cùng 1 Web server như Apache
- Khi máy chủ hoạt động với nhiều Virtual hosts khác nhau
- Khi ta muốn đáp ứng nhiều yêu cầu hơn khi đã đạt đến mức giới hạn trên cùng 1 máy chủ vật lý
Để làm cho Apache hoạt động cùng với Tomcat Ta phải tạo một file với tên gọi workers.properties với các thông tin chi tiết như sau:
Danh sách các Workers
work.list Liệt kê các danh sách workers có thể hoạt động chung với Apache
Kiểu hoạt động của Worker
ajp13 Để Apache biết rằng đang hoạt động chung với một server Tomcat
lb Được sử dụng cho load balancing
status Được sử dụng để cho ta thông tin về tải của các máy chủ Tomcat mà
từ đó có thể phân bổ cho hoạt động tốt hơn
jni Sử dụng với các process, máy chủ Tomcat sẽ chuyển các yêu cầu vào
process để xử lý bằng cách sử dụng JNDI ajp12 Hoạt động với các Worker hỗ trợ giao thức AJP 1.2
Trang 18
GVHD: TS Phạm Văn Tính 8 SVTH: Thành Phát – Công Lý
Những thuộc tính khác của Worker
worker.test1.type Thông báo kiểu hoạt động của worker
worker.test1.host Thông tin host mà máy chủ Tomcat đang hoạt
động worker.test1.port Cổng để giao thức AJP 1.3 của Tomcat đang sử
dụng (mặc định thì là 8009) worker.test1
connection_pool_size
Số lượng connections được sử dụng cho worker
để giữ chúng trong một connection pool
worker.test1.mount Đường dẫn được worker làm việc, ta cũng có thể
chỉ định bằng JkMount trong file httpd.conf
worker.test1.retries Số lần mod_jk sẽ thử lại khi worker trả về lỗi
Trang 19
Danh sách các worker hoạt động load balancing
worker.bal1.lock Các hoạt động của load balancing O (Chủ động)
hoặc P (Bị động) worker.bal1.method Phương thức hoạt động giữa các load balancer R
(Requests), T (Traffic), B (Busy-ness)
R = Các workers sẽ được sử dụng dựa trên số gói tin đã được chuyển qua
T = Các workers sẽ được sử dụng dựa trên dung lượng đã được chuyển qua
B = Các workers sẽ được sử dụng dựa trên mức độ
xử lý của gói tin đã được chuyển qua
worker.bal1.secret Quy định mật khẩu giữa các workder
worker.bal1
sticky_session
Đảm bảo việc mỗi sessionID chỉ hoạt động đúng trên máy chủ Tomcat đã được sử dụng để xử lý sessionID trước đó
worker.bal1
sticky_session_force
Sử dụng cho việc fail-over
Trang 20
worker.worker1.connection_pool_size = 5 worker.worker1.connection_pool_timeout = 300
Ví dụ load balancing worker.list = loadbal1,stat1
worker.tomcatA.type = ajp13 worker.tomcatA.host =192.168.0.1 worker.tomcatA.port = 8009
worker.tomcatA.lbfactor = 10 worker.tomcatB.type = ajp13 worker.tomcatB.host =192.168.0.2 worker.tomcatB.port = 8009
worker.tomcatB.lbfactor = 10 worker.tomcatC.type = ajp13 worker.tomcatC.host =192.168.0.3 worker.tomcatC.port = 8009
worker.tomcatC.lbfactor = 10 worker.loadbal1.type = lb worker.loadbal1.sticky_seesion = 1 worker.loadbal1.balance_workers = tomcatA, tomcatB, tomcatC
worker.stat1.type= status
Trang 21
JkWorkerFile Thông báo cho mod_jk biết nơi để tìm file workers.properties
JkLogFile Thông báo cho mod_jk biết nơi sẽ ghi các file logs
JkLogLevel Chỉ định mức độ log thông tin (info, error hoặc debug)
JkRequestLog
Format
Thông tin cần log
%b hoặc %B Số bytes đã được trao đổi
%H Giao thức request
%m Phương thức request
%p Cổng được request trên server
%r Dòng đầu tiên của request
%T Thời gian request
%U URL được request (khi đã lược bỏ các thông số
%v or %V Tên server
%w Tên của worker
%R Đường đi của session JkMount Quản lý các URL phù hợp để chuyển qua các workers
Trang 22GVHD: TS Phạm Văn Tính 12 SVTH: Thành Phát – Công Lý
2.2.3 Load Balancing
Module mod_proxy có thể được sử dụng để phục vụ load balancing, tuy nhiên, chúng ta sẽ phân tích một cách chi tiết hơn ở phần sau Phần này ta chỉ phân thích mod_jk phục vụ cho việc load balancing mà không quan tâm đến chia sẻ sessions, bởi vì mod_jk sử dụng thuật toán xoay vòng Mỗi một worker Tomcat sẽ được cấu hình một giá trị dựa trên mức độ xử lý của mình, giá trị đó được cấu hình trong file workers.properties, nhờ giá trị đó mà mod_jk sẽ phân bổ các request
Thuật ngữ không quan tâm đến việc chia sẻ sessions được gọi là seamless session hoặc sticky session Khi một request được tiếp nhận bởi một máy chủ Tomcat, thì những request về sau cùng session cũng sẽ hoạt động trên đúng máy chủ Tomcat đó
Những bước cấu hình trên sẽ giúp ta có các máy chủ Tomcat cùng hoạt động trên một máy chủ vật lý
Bước đầu tiên cầu thay đổi giá trị CATALINE_HOME trên mỗi file startup.bat (Windows) hoặc startup.sh (Unix)
CATALINA_HOME set CATALINA_HOME=c:\liferay\tomcatA
Mỗi một máy chủ Tomcat sẽ được thay đổi cho phù hợp
Quy định mỗi một máy chủ Tomcat hoạt động trên một cổng AJP khác nhau (server.xml)
AJP Connector port <Connector port="8009" protocol="AJP/1.3"
Trang 23GVHD: TS Phạm Văn Tính 13 SVTH: Thành Phát – Công Lý
Bởi vì tất cả các máy chủ Tomcat đều hoạt động thông qua giao thức HTTP,
do đó, ta phải thay đổi cho phù hợp (server.xml)
jvmRoute <Engine name="Standalone" defaultHost="localhost"
jvmRoute="tomcatA">
Trong file cấu hình httpd.conf của Apache, bạn phải chắc rằng đã gọi modoule mod_jk
JkMount /examples/jsp/* bal1 JkMount /jkstatus/ stat1 worker.properties worker.list = loadbal1,stat1
worker.tomcatA.type = ajp13 worker.tomcatA.host =192.168.0.1 worker.tomcatA.port = 8009
worker.tomcatA.lbfactor = 10 worker.tomcatB.type = ajp13 worker.tomcatB.host =192.168.0.1 worker.tomcatB.port = 8010
worker.tomcatB.lbfactor = 10 worker.tomcatC.type = ajp13 worker.tomcatC.host =192.168.0.1 worker.tomcatC.port = 8011
worker.tomcatC.lbfactor = 10 worker.loadbal1.type = lb worker.loadbal1.sticky_seesion = 1 worker.loadbal1.balance_workers = tomcatA, tomcatB, tomcatC
worker.stat1.type= status
Trang 24Để test load balancer hoạt động ổn định hay chưa, ta tạo một file test JSP và đặt nó vào trong thư mục webapps/examples/jsp của mỗi máy chủ Tomcat
Và test bằng URL sau:
- http://local/examples/jsp/index.jsp
- http://localhost/jkstatus
Giao diện quản lý các máy chủ Tomcat
Trang 25
GVHD: TS Phạm Văn Tính 15 SVTH: Thành Phát – Công Lý
2.3 Tomcat Clustering
Thuật nghữ Tomcat Clustering có nghĩa là nhiều máy chủ Tomcat hoạt động cùng một lúc Tuy nhiên, nếu một máy chủ Tomcat bị trục trặc thì những máy chủ khác sẽ thay thế và về phía người dùng, không có bất cứ trục trặc nào xảy ra cả
Clustering trong Tomcat để kích hoạt một loạt máy chủ Tomcat trên mạng LAN để cho người dùng sử dụng như 1 máy chủ Tomcat duy nhất Mô hình này cho phép ta xử lý nhiều requests hơn nữa và cũng giúp ta quản lý được nếu một máy chủ
bị treo
Hình 2.2 Load balancing Tomcat với Apache
Những requests đến thì được phân phối đến tất cả các servers, vì vậy, một ứng dụng Web có thể xử lý nhiều người dùng cùng lúc Mô hình này được gọi là horizontal scaling (tỉ lệ ngang) giúp ta có thể tận dụng tối ưu phần cứng hiện có mà không cần phải nâng cấp phần cứng
Có nhiều mô hình khác nhau trong clustering như là Master – Backup, Over, và Tomcat thì sử dụng cả hai mô hình đó trong lĩnh vực load balancing
AJP
Without load balancing Load balancing
Trang 26GVHD: TS Phạm Văn Tính 16 SVTH: Thành Phát – Công Lý
2.3.2 Mô hình Tomcat Clustering
Hình 2.3 Mô hình Tomcat Clustering
Có hai lớp để kích hoạt clustering là load balancing bên ngoài (frontend) và chia sẻ, đồng bộ hóa trạng thái, session bên trong (backend) Phần bên ngoài sẽ chịu trách nhiệm nhận các requests và chia sẻ chúng đến các máy chủ Tomcat phía trong, trong khi ở phía trong, tất cả phải đảm bảo rằng các sessions chia sẻ với nhau
Một số mô hình load balancing phía ngoài mà ta có thể sử dụng:
- Round-robin DNS (xoay vòng DNS), để việc phân giải tên miền thành một dãi các địa chỉ IP khác nhau
- Load balancing dựa trên phần cứng
- Load balancing dựa trên phần mềm như Pure Load Balancer
- Sử dụng modoule mod_proxyhoặc mod_jk như một load balancer Thông thường, người ta dùng cả phương pháp là load balancing dựa trên phần cứng hoặc là sử dụng Apache như một load balancer Phần trên chúng ta đã đề cập đến phương pháp Stickey Sessions nghĩa là session nào đã được sử dụng thì khi sử dụng lại sẽ chuyển về đúng máy chủ Tomcat xử lý trước đó
STATE/SESSIONS SHARING
BACK-END
In coming requests
LOAD BALANCING FRONT-END
Tomcats server
Trang 27GVHD: TS Phạm Văn Tính 17 SVTH: Thành Phát – Công Lý
Hình 2.4 Sticky sessions Tomcat
Có một vấn đề xảy ra với phương pháp Sticky Sessions là nếu một máy chủ Tomcat bị trục trặc thì tất cả các sessions trên máy chủ đó sẽ mất đi, nhưng với phương pháp load balancing phía ngoài (load balancing frontend), chúng ta có rất nhiều session để cho phía trong xử lý Mỗi phương pháp có mỗi mức độ hoạt động
và cách cấu hình khác nhau
Mod_proxy và mod_jk cho ta những lựa chọn sau:
- Sticky Sessions mà không cần chia sẻ session: các requests thì được
xử lý bởi máy chủ đã xử lý trước đó, sessionID sẽ làm nhiệm vụ xác định máy chủ nào đã tạo ra nó, xác định máy chủ ở lần xử lý tiếp theo Giải pháp này được sử dụng hầu hết các ứng dụng Web không cần nhiều thông tin người dùng như là: ứng dụng Web giới thiệu công ty,
Session XAJP
Request A Session X
TomcatSession YAJP
Request BSession YRequest C
No session
Trang 28- Sticky Sessions sử dụng Persistent Session Manager và JDBC để lưu trữ trong cơ sở dữ liệu: Phương pháp này tương tự phương pháp ghi thông tin session ra file, tuy nhiên, thông tin này thay vì được ghi lên file thì được ghi vào cơ sở dữ liệu
- Chia sẻ session trong bộ nhớ: dữ liệu session sẽ được phân bổ cho tất
cả các máy chủ Tomcat nằm trong phân vùng chỉ định sử dụng cluster Tomcat có hai giải pháp cho phương pháp này: chia sẻ tất cả dữ liệu sessions cho các máy chủ Tomcat khác hoặc là chỉ lưu dữ liệu sessions lên một máy chủ backup Phương pháp này đảm bảo việc lưu trữ session, tuy nhiên, nó cũng phức tạp hơn trong cấu hình cũng như cách hoạt động
Trang 29Tất cả máy chủ Tomcat hoạt động trong cluster thì được xem như một nhóm thông tin Ở máy chủ Tomcat, chúng ta phải sử dụng đến lớp SimpleTcpCluster Tùy theo cách chúng ta muốn quản lý sessions mà ta cấu hình SimpleTcpCluster với một hoặc hai phương pháp quản lý:
- DeltaManager – chia sẻ thông tin sessions cho tất cả máy chủ Tomcat
- BackupManager – chia sẻ thông tin sessions từ máy chính sang một máy dự phòng
SimpleTcpCluster sử dụng Apache Tribes để quản lý thông tin trao đổi trong nhóm các máy chủ Các máy trong nhóm được quản lý bởi Apache Tribes để đảm bảo khi nào máy chủ bị treo và khôi phục lại Apache Tribes còn vài mức độ đảm bảo dữ liệu được chuyển đi giữa các thành viên trong nhóm Khi có một máy chủ cập nhật thông tin về một session mới thì thông tin ngay lập tức được gởi đi đến các máy chủ khác trong nhóm Phương pháp này đảm bảo tính sẵn sàng nhưng lại rất tốn dung lượng mạng và đôi khi lại yêu cầu phần cứng đảm bảo rằng không có điểm chết trong hệ thống mạng
2.3.3 Quản lý Sessions:
Sessions được xem như một đối tượng có thể chứa và tham khảo đến một đối tượng khác, được giữ một phần ở phía client Bởi vì giao thức HTTP là stateless (không trạng thái) nên không có cách nào đơn giản để ứng dụng có thể quản lý được các giao thức truyền tải Ở phía máy chủ, sessions thì được quản lý như sau:
Trang 30- Nếu trình duyệt không hỗ trợ cookie, thì ta có một phương pháp khác
là URL rewrite – chỉnh sửa lại URL để thông tin session nằm trên URL
2.3.4 Cấu hình nhiều Tomcat cùng hoạt động trên một máy chủ:
Ở mục này, chúng ta sẽ sử dụng 3 máy chủ Tomcat cùng hoạt động và tất cả đều sử dụng phương pháp chia sẻ session Để sử dụng phương pháp này, ta cần yêu cầu ở mỗi máy chủ như sau:
- Có thư mục cấu hình riêng biệt
- Có thư mục tạm riêng biệt
- Có thư mục chứa web riêng biệt
- Cổng để kết nối AJP phải khác nhau
Tạo ba files gọi là startup1.bat, startup2.bat và startup3.bat ở trong thư mục bin của mỗi máy chủ Tomcat Mỗi files thì được cấu hình lại đường dẫn CATALINA_HOME cho phù hợp, sau đó, gọi đến file startup.bat để kích hoạt máy chủ
set CATALINA_HOME=c:\liferay\tomcat1
call startup shutdown # stop1.bat
set CATALINA_HOME=c:\liferay\tomcat1
call shutdown
Và sơ đồ cây thư mục như sau:
Trang 31Máy chủ File cần chỉnh sửa TCP Ports
(Shutdown, AJP Connector)
Máy chủ 1 \liferay\tomcat1\conf\server.xml 8005, 8009 Máy chủ 2 \liferay\tomcat2\conf\server.xml 8105, 8109 Máy chủ 3 \liferay\tomcat3\conf\server.xml 8205, 8209
Tiếp tục chỉnh giá trị jvmRoute
jvmRoute <Engine name="Catalina"
Trang 32GVHD: TS Phạm Văn Tính 22 SVTH: Thành Phát – Công Lý
Tiếp tục cấu hình Apache như ta đã cấu hình ở phần trên
workers.properties file worker.list = loadbal1,stat1
worker.tomcat1.type = ajp13 worker.tomcat1.host =192.168.0.1 worker.tomcat1.port = 8009
worker.tomcat1.lbfactor = 10 worker.tomcat2.type = ajp13 worker.tomcat2.host =192.168.0.2 worker.tomcat2.port = 8109
worker.tomcat2.lbfactor = 10 worker.tomcat3.type = ajp13 worker.tomcat3.host =192.168.0.3 worker.tomcat3.port = 8209
worker.tomcat3.lbfactor = 10 worker.bal1.type = lb
worker.bal1.sticky_session = 1 worker.bal1.balance_workers = tomcat1, tomcat2, tomcat3
worker.stat1.type= status httpd.conf updates JkMount /examples/jsp/* bal1
JkMount /jkstatus/ stat1 JkWorkersFile conf/workers.properties
2.3.5 Chia sẻ session:
Trước tiên, ta sẽ cấu hình cho phương pháp chia sẻ session trong memory, chúng ta có hai thành phần cần được cấu hình để kích hoạt việc chia sẻ thông tin session trong memory Thẻ <Cluster> chịu trách nhiệm cho việc phân phối sessions,
nó bao gồm việc gởi đi thông tin sessions mới cho nhóm, kết hợp thông tin các session cục bộ và sessions được gởi đến Thành phần khác là Valve, Valve được sử dụng để giảm lưu lượng bằng cách lọc ra các sessions
Trang 33Hình 2.5 Chia sẻ session của Tomcat
SimpleTcpCluster được sử dụng để chia sẻ sessions trong bộ nhớ, nó sử dụng Apache Tribes để gởi các thông tin đi bằng multicasts (gói tin heartbeat) đến các máy chủ khác Tất cả các máy chủ phải chạy multicasts gói tin heartbeat, nếu không thì máy chủ đó được xem như đã chết và bị loại khỏi cluster Các máy chủ của cluster được quản lý động trong việc thêm vào và xóa đi
Chúng ta nên sử dụng ít máy chủ Tomcat trong một cluster nếu không sẽ rất tốn bộ nhớ và ảnh hưởng đến băng thông của mạng Nhằm giảm thiểu dữ liệu truyền
Trang 34GVHD: TS Phạm Văn Tính 24 SVTH: Thành Phát – Công Lý
tải trong mạng, chúng ta nên sử dụng BackupManager (chỉ gởi đến một máy chủ dự phòng) thay vì DeltaManager (gởi đến tất cả máy chủ trong cluster)
Thành phần Chú thích
<Cluster> <Cluster> phải nằm bên trong <Host>, nó thông báo rằng máy chủ
Tomcat sẽ sử dụng phương pháp chia sẻ dữ liệu cho tất cả các ứng dụng
<Manager> Đây là thành phần chính để chúng ta cấu hình DeltaManager hoặc
là BackupManager
<Channel> Channel là một kênh trừu tượng để các máy chủ của nhóm có thể
gởi thông tin qua lại với nhau
<Membership> Thuộc tính này nhằm để chọn mạng vật lý sử dụng trên máy chủ
(nếu máy chủ chỉ có một cổng mang thì chúng ta không cần quan tâm nhiều đến nó) Dịch vụ này dựa trên việc gởi các gói tin multicasts heartbeat nhằm xác định máy chủ nằm trong cluster
<Receiver> Cấu hình việc nhận thông tin qua giao thức TCP
<Sender> Cấu hình việc gởi thông tin qua giao thức TCP
<Transport> Quy định thông tin được gởi đi là song song hoặc đồng thời
<Valve> Thành phần này được sử dụng như một bộ lọc nhằm giảm thiểu
thông tin session gởi đi để tránh quá tải đường truyền bằng cách quyết định xem sessions nào là cần thiết hoặc đã hết hạn sử dụng
Trang 35
er để truyền tải dữ liệu
channelSendOptions Giá trị channel sẽ được gắn lên các gói tin gởi đi
Channel.SEND_OPTIONS_ASYNCHRONRONUS Channel.SEND_OPTIONS_BYTE_MESSAGE Channel.SEND_OPTIONS_SECURE
Channel.SEND_OPTIONS_SYNCHRONIZED_ACK Channel.SEND_OPTIONS_USE_ACK
name Tên của cluster nhằm để quản lý, tất cả các máy chủ đều
phải cùng tên cluster
expireSessions-OnShutdown Quyết định xem các sessions có bị hủy nếu máy chủ bị
tắt đi hay không
false
domainReplication Xác định sự giới hạn của việc chia sẻ các sessions trên
một phân vùng nhất định, tùy chọn cho DeltaManager
Trang 36frequency Tần số multicast gởi gói tin heartbeat (mili giây) 500 dropTime Thời gian để xác định xem một máy chủ Tomcat đã chết
hay chưa (mili giây)
3000
ttl Định giá trị time-to-live để xác đinh số routers mà gói
tin có thể chuyển qua
soTimeout Xác định thời gian tối đa chờ để gới/nhận thông tin 0
domain Để chia các máy chủ Tomcat ra thành nhiều vùng khác
autoBind Tự động tìm cổng trống để nhận thông tin đến 1000 selectorTimeout Thời gian chờ để nhận thông tin đến (mili giây) 5000 maxThreads Số lượng thread nhiều nhất tạo ra để nhận thông tin đến 6
minThreads Số lượng thread thấp nhật tạo ra để nhận thông tin đến 6
<Sender> (Phải chứa thông tin <Transmitter>)
Tên thuộc tính Giải thích Mặc định
PooledMultiSender maxRetryAttempts Số lần thử lại khi gởi thông tin đi bị lỗi 1
Trang 37Ví dụ: File server.xml
timeout Thời gian chờ lớn nhất để hoàn tất gởi một gói tin đi 3000
poolsize Quản lý số lượng kết nối TCP nhiều nhất được mở ra để
gởi thông tin đi đến một máy chủ khác trong nhóm
Trang 382.4.2 Tính cấp thiết
Performance testing là một công việc cực kỳ quan trọng vì trong thời đại hiện nay, tốc độ của ứng dụng web đồng nghĩa với doanh thu đạt được Theo các khảo sát mới nhất, thì người dùng sẽ bắt đầu mất kiên nhẫn với những ứng dụng web tốn thời gian quá 5 giây để tải
Ở cấp cao nhất, performance testing hầu như luôn được tiến hành để giải quyết một hay nhiều rủi ro liên quan đến chi phí chi phí cơ hội, tính liên tục, hoặc danh tiếng của công ty Một số lý do cụ thể để tiến hành thử nghiệm hiệu suất bao gồm:
Đánh giá sự sẵn sàng phát hành:
Cho phép dự đoán hoặc ước tính hiệu suất của một ứng dụng trong sản xuất Những dự đoán này có giá trị để đưa ra quyết định về việc liệu một ứng dụng đã sẵn sàng để phát hành hoặc có khả năng xử lý nhu cầu cao hơn trong tương lai, hoặc nó đòi hỏi sự nâng cấp phần cứng trước khi phát hành
Cung cấp dữ liệu cho thấy khả năng người sử dụng không hài lòng với các đặc điểm hiệu suất của hệ thống
Cung cấp dữ liệu để hỗ trợ dự đoán do các vấn đề khả năng mở rộng hay sự
ổn định, hoặc do người sử dụng không hài lòng với thời gian đáp ứng của ứng dụng
Đánh giá đầy đủ cơ sở hạ tầng:
Đánh giá đầy đủ năng lực hiện tại
Xác định sự chấp nhận cho sự ổn định
Trang 39 Đánh giá đầy đủ hiệu suất phần mềm theo:
Xác định đặc tính của ứng dụng mong muốn trước và sau khi thay đổi
Cung cấp so sánh giữa các đặc điểm hiệu suất hiện tại và mong muốn
Nâng cao hiệu suất bằng cách điều chỉnh:
Phân tích hành vi của ứng dụng ở các mức tải khác nhau
Throughput: Số lượng yêu cầu trên đơn vị thời gian Khi tăng số lượng người
sử dụng đồng thời, throughput cũng tăng lên gần như tuyến tính với số lượng người dùng
Response Time: Thời gian đáp ứng một yêu cầu
Tuning: là các bước điều chỉnh hiệu suất bằng cách thay đổi các giá trị khác nhau cho các thông số của hệ điều hành hoặc phần mềm, các thành phần khác Tuning cải thiện hiệu suất mà không cần phải động đến mã nguồn
Benchmarking: Phương pháp so sánh các yếu tố, chỉ tiêu của ứng dụng với chuẩn chung hoặc ứng dụng tương tự Một hiệu suất được cải thiện của một sản phẩm sẽ không có ý nghĩa nếu nó không phù hợp với các sản phẩm cạnh tranh khác Benchmarking sẽ đưa ra các yêu cầu cần thiết để cải tiến
Mức sử dụng tài nguyên: Xem xét mức độ sử dụng CPU, bộ nhớ, disk I/O, network I/O… Từ đó đưa ra hướng điều chỉnh cơ sở hạ tầng để đáp ứng yêu cầu về hiệu suất
Trang 40Capacity: Xác định có bao nhiều người dùng hoặc transaction hệ thống hỗ trợ
mà vẫn đáp ứng chỉ tiêu hiệu suất
2.4.5 Một số ứng dụng thực hiện
LoadRunner: LoadRunner có thể kiểm tra hầu hết các ứng dụng hoặc cơ sở
dữ liệu Nó thường được dùng trong các công ty lớn bởi vì phần mềm có rất nhiều chức năng và cũng như rất tốn thời gian nếu tìm hiểu hết các chức năng đó
Visual Studio Team System: là một phần của ứng dụng Visual Studio của Microsoft dùng để kiểm tra ứng dụng web Nó thông thường được sử dụng để kiểm tra các ứng dụng web được viết ra trên nền tảng NET
Silk: được viết bởi công ty Borland Cũng tương tự LoadRunner, phần mềm
có rất nhiều chức năng hỗ trợ để kiểm thử ứng dụng
LoadStorm: là một phần mềm điện toán đám mây của Amazon EC2 được thiết kế để kiểm thử các ứng dụng web Phần mềm có thể tạo biểu đồ theo thời gian thực như thời gian máy chủ trả lời, lỗi, throughput, số request mỗi giây và số lượng người dùng ảo Có thể kiểm tra ứng dụng web với số lượng 50.000 người dùng ảo
ApacheBench: là một API của ngôn ngữ Perl, ApacheBench thông thường để kiểm tra tốc độ, kiểm tra gói tin trả về là đúng hay sai với của các máy chủ HTTP
JMeter: phần mềm mã nguồn mở được viết bằng ngôn ngữ Java và hỗ trợ bởi Apache Software Foundation JMeter là phần mềm chuyên dụng để kiểm tra các ứng dụng web Nó dùng để kiểm tra cả những ứng dụng web tĩnh và động (files, Servlets, Perl, Java, v.v…) JMeter có thể tạo một số lượng kết nối ảo nhằm kiểm tra mức độ chịu tải của server, hệ thống mạng cũng như thống kê toàn bộ với nhiều kiểu kiểm tra performance khác nhau