Phần này sẽ trình bày ý tưởng để đưa ra được mô hình phân tải cho Server sử dụng
Proxy động. Sau đó sẽ trình bày chi tiết về các giải pháp đưa ra trong việc xây dựng mô hình. Cuối cùng sẽ trình bầy và giải thich về mô hình đưa ra cho bài toán đã nêu.
3.2.1. Ý tưởng
Trong bài toán đã đưa ra ở trên, phần đóng gói tính toán và gửi nó đi giữa các Server là phần quan trọng nhất, phần này quyết định tính chất động của Proxy. Các tính toán cần phải được đóng gói theo một cách nào đó để nó có thểlưu giữđược cách thực thi, các dữ
liệu liên quan và trạng thái của nó. Các đóng gói này cũng phải hỗ trợ cho việc chuyển dịch các tính toán đến nơi lưu trữ mới, cho phép các tính toán có thể thực thi ngay trên
nơi trữ mới.
Ý tưởng đưa ra ở đây là sử dụng Agent cho việc đóng và dịch chuyển các tính toán từ Server về Proxy. Mỗi tính toán riêng biệt và đặc thù sẽđược đóng gói thành một Agent
và được lưu trữ trên Server. Thông qua giao tiếp giữa Agent với môi trường hoặc giữa các Agent với nhau, Agent sẽ thực thi các yêu cầu tới nó và trả kết quả cho bên yêu cầu. Các Agent ngoài việc thực thi và trả kết quả, nó còn có thể dịch chuyển nơi cư trú sang một
môi trường khác hoặc một Server khác và thực thi ngay tại đó. Đây chính là yếu tố tạo nên khả năng tính toán động cho Proxy, thực thi tính toán ngay tại chỗ thay cho việc yêu cầu Server và nhận kết quả trả về. Ởđây, các chức tính toán và thực thi yêu cầu của Proxy
không được thiết lập trước, nó có thể thay đổi tuỳ theo yêu cầu của Client và khả năng
thực thi tính toán của Server.
Như vậy, ý tưởng chính đểđưa ra được mô hình sử dụng Proxy động để phân tải cho Server là sử dụng Agent đóng gói và chuyển các tính toán từ Server về Proxy.
21
3.2.2. Giải pháp
Dựa trên ý tưởng đã đưa ra, chúng ta sẽ đưa ra giải pháp cho Server và Proxy để có thểđáp ứng yêu cầu của bài toán.
3.2.2.1. Giải pháp cho Server
Giải pháp cho việc đóng gói và dịch chuyển chuyển các tính toán là sử dụng Agent. Các tính toán sẽ được đóng gói thành các Agent, mỗi Agent sẽ phụ trách một công việc tính toán nhất định. Sử dụng Agent để đóng gói và dịch chuyển các tính toán giữa các Server vì theo các chuẩn về Agent đã được công bố và chấp nhận rộng rãi thì các Agent có thể đóng gói mã nguồn thực thi của nó, các dữ liệu phục vụ cho nó và cả trạng thái hoạt động, tất cảđều được có thể được truyền đi nguyên vẹn sang một Server khác và có thể thực thi tại Server đó mà không cần phải sửa đổi hay can thiệp vào Agent.
Các yêu cầu khi được chuyển đến sẽ được phân loại thành các yêu cầu chuyển Agent và các yêu cầu khác. Để có thể thực hiện được việc phân loại yêu cầu được gửi
đến, lọc ra các yêu cầu thông thường và các yêu cầu về việc đưa tính toán về Proxy, chúng ta sẽđưa ra một mẫu yêu cầu được sử dụng chung cho tất cả các yêu cầu được gửi
đến cho Server.
Với các tính toán yêu cầu chuyển Agent, Server sẽ tìm Agent tương ứng trong các
Agent nó đang chứa. Nếu Agent được tìm ra, Server sẽ tạo ra bản sao của Agent rồi gửi bản sao này cho phía yêu cầu. Nếu Agent không được tìm ra, hay không có Agent tương ứng với yêu cầu đưa ra, Server sẽ gửi thông báo đến cho phía yêu cầu rằng không có
Agent tương ứng. Với các yêu cầu khác, Server sẽ thực hiện tính toán trực tiếp rồi gửi trả
kết quả cho phía yêu cầu. Việc tính toán này hoàn toàn có thể bao gồm cả việc gọi Agent
ra để tính toán và lấy kết quả do Agent trả về.
3.2.2.2. Giải pháp cho Proxy
Proxy nhận yêu cầu từ Client, phân tích yêu cầu dựa trên khuôn dạng chuẩn đã được
quy định trước để phân loại các yêu cầu có sử dụng Agent và các yêu cầu không sử dụng Agent. Khi có nhiều yêu cầu về sử dụng cùng một Agent, Proxy sẽ gửi yêu cầu đến Server để tải Agent tính toán về, sau đó mọi tính toán của phần này sẽ được thực hiện ngay trên Proxy.
22
Các yêu cầu về Agent sau khi được phân loại sẽ được xử lý theo cách thức riêng.
Đầu tiên Proxy sẽ kiểm tra xem có Agent nào nó đang lưu trữ phù hợp yêu cầu hay không. Nếu có, nó sẽ cho Agent đấy thực thi và lấy kết quả trả về, nếu không có, nó sẽ
gửi yêu cầu về Agent tương ứng tới Server. Sau khi nhận được Agent tương ứng từ
Server, nó sẽ cho thực thi Agent đó và lấy kết quả trả về.
Các yêu cầu không liên quan đến Agent cũng sẽ được xử lý riêng. Phần này cho phép Proxy trong mô hình đề ra có thể kết hợp với các Proxy truyền thống khác như dùng để chặn các trang web hay sử dụng cache. Nếu không có sự kết hợp với ứng dụng nào, các yêu không sử dụng Agent sẽđược gửi thẳng đi cho Server và lấy kết quả trả về.
Kết quả trả về từ các tính toán trên Agent sẽđược kết hợp với kết quảđược trả về từ Server trước khi được chuyển về cho Client.
3.2.3. Mô hình
Dựa trên các giải pháp đã đưa ra, chúng ta sẽ xây dựng một mô hình có thể giải quyết được bài toán đặt ra. Mô hình này không những có thểđáp ứng yêu cầu của bài toán mà còn phải có khảnăng ứng dụng được vào thực tế.
3.2.3.1. Mô hình chung
Dựa trên các giải pháp đã đưa ra ở phần trên, mô hình tổng thể sẽnhư hình 3.2.
Theo như hình 3.2, Client sẽ gửi yêu cầu đến cho Proxy và sẽ nhận kết quả trả về từ
Proxy. Phía Proxy, sau khi phân loại yêu cầu được gửi đến từ Client sẽ thực hiện xử lý yêu cầu và gửi yêu cầu đến cho Server. Proxy có thể gửi đi một trong hai loại yêu cầu là yêu cầu Agent hoặc yêu cầu thông thường khác. Nếu yêu cầu thông thường được gửi đến Server thì Server sẽ tính toán và chỉ trả kết quả về cho Proxy. Nếu yêu cầu là yêu cầu Agent, Server sẽ tìm kiếm Agent tương ứng và gửi Agent về cho Proxy. Trong Proxy và
Server đều có một vùng chứa Agent gọi là Agent Container. Các Agent được chứa trong
vùng này đều có thể thực thi và trả ra kết quả. Việc chuyển một Agent từ Server sang Proxy sẽđược thực hiện hoàn toàn trên vùng chứa này.
23
Hình 3.2: Mô hình hệ thống
3.2.3.2. Mô hình của Server
Hình 3.3 là cấu trúc các thành phần bên trong Server chính và chức năng của mỗi thành phần:
- Giao tiếp với Client/Proxy: Phần này làm nhiệm vụ lắng nghe và kết nối tới Client hoặc Proxy. Khi có một yêu cầu được gửi đến, phần này sẽ thực hiện việc gửi yêu cầu xuống phần xử lý và duy trì kết nối để đợi kết quả từ phần xử lý. Khi kết quảđược phần xử lý gửi đến, nó sẽ chuyển tiếp kết quả này sang cho phía yêu cầu và đóng kết nối.
- Xử lý yêu cầu: Phần này sẽ thực hiện việc xử lý các yêu cầu được đưa xuống từ
phần giao tiếp và gửi trả kết quả cho phần giao tiếp. Phần này gồm có 3 thành phần nhỏ:
o Phân loại yêu cầu: Dựa trên các mẫu yêu cầu được gửi đến, thành phần này sẽ phân loại các yêu cầu thành hai loại là yêu cầu Agent và yêu các khác. Các yêu cầu Agent sẽđược gửi xuống cho thành phần Xử lý yêu cầu Agent thực hiện, các yêu cầu khác được gửi xuống cho Xử lý các yêu cầu khác thực hiện.
24
Hình 3.3: Cấu trúc Server
o Xử lý yêu cầu Agent: Khi một yêu cầu vềAgent được gửi đến, phần này sẽ
lấy thông tin vềAgent đó tìm Agent tương ứng trong Agent Container. Nếu trong Agent Container không có Agent này thì phần này sẽ gửi trả về cho phần giao tiếp thông báo là không có Agent tương ứng. Nếu Agent tương ứng tồn tại, phần này sẽ yêu cầu Agent Container tạo ra bảo sao của Agent và gửi bản sao này sang cho Agent Container của Proxy.
o Xử lý yêu cầu khác: Các yêu cầu không phải gửi Agent sẽđược xử lý trong phần này. Các tính toán theo yêu cầu sẽđược thực thi và kết quả sẽđược trả
về cho phần giao tiếp. Việc tính toán này hoàn toàn có thể bao gồm việc gọi
đến các Agent và lấy kết quả trả về từ Agent.
- Agent Container: Đây là vùng chứa các Agent của Server. Các Agent được chứa
trong vùng này đều có thể được thực thi và trả ra kết quả. Việc tạo ra bản sao và chuyển các Agent đến nơi khác cũng được thi ngay tại vùng này.
Để giúp cho việc phân loại các yêu cầu gửi đến một cách nhanh chóng và tiện lợi, chúng ta sẽđưa ra mẫu yêu cầu mà Proxy sẽ gửi đến cho Server như trong hình 3.4. Mẫu này sẽ gồm hai phần chính là phần Header và phần Content. Trong phần Header sẽ chứa
25
thông tin của nơi gửi yêu cầu đến, và loại yêu cầu. Có hai loại yêu cầu là yêu cầu Agent (tức là yêu cầu gửi tính toán) và yêu cầu thông thường ( tức là yêu cầu Server thực thi một số tính toán rồi gửi trả kết quả). Server dựa vào Header để xác định loại yêu cầu và nơi
gửi thông tin, sau đó dựa theo loại yêu cầu để lấy thông tin cần thiết trong phần Content .’
Hình 3.4: Mẫu yêu cầu gửi cho Server
3.2.3.3. Mô hình của Proxy
Hình 3.5 là các thành phần bên trong Proxy Server và chức năng tương ứng với mỗi thành phần đó:
- Giao tiếp với Client: Phần này cung cấp một giao diện để lắng nghe yêu cầu từ
phía Client và gửi trả kết quả về cho Client. Khi một yêu cầu từ Client được gửi
đến, phần giao tiếp này sẽ gửi yêu cầu đó xuống phần xử lý và duy trì kết nối với Client trong khi chờ kết quảđược trả ra. Khi kết quảđược trả ra từ phần xử lý, giao tiếp này sẽđưa kết quảđó cho phía Client và kết thúc kết nối.
- Giao tiếp với Server: Phần này sẽ thực hiện việc kết nối tới Server để chuyển đi
các yêu cầu và nhận về các kết quả. Khi có một yêu cầu được đưa ra từ phần xử lý yêu cầu, giao tiếp này sẽ kết nối tới Server đích gửi đi yêu cầu đi và chờ đợi kết quảđược gửi về từ phía Server. Khi kết quảđược gửi về, giao tiếp này sẽ đưa kết quả xuống cho phần xử lý và kết thúc kết nối tới Server.
HEADER
CONTENT
(Nội dung)
Thông tin nơi gửi Loại yêu cầu
(Agent/thông thường)
26
Hình 3.5: Cấu trúc Proxy Server
- Xử lý yêu cầu: Phần này sẽ thực hiện việc xử lý các yêu cầu được đưa xuống từ
giao tiếp với Client. Trong giai đoạn xử lý sẽ có những yêu cầu được đưa ra và gửi
đến Server thông qua thành phần Giao tiếp với Server, có những yêu cầu được tính toán bởi các Agent đã có trong Proxy. Kết quả trả về từ phía Server sẽđược tổng hợp với kết quả thu được từ các Agent có trong Proxy, sau đó sẽ được đưa sang
thành phần giao tiếp với Client để gửi đi cho Client. Trong phần xử lý này gồm bốn thành phần nhỏ:
o Phân loại yêu cầu: Các yêu cầu được gửi đến từ Client sẽ được phân loại thành các yêu cầu về Agent và các yêu cầu khác. Các yêu cầu về Agent là các yêu cầu đòi hỏi sử dụng Agent để tính toán và trả ra kết quả. Các yêu cầu khác là các yêu cầu không đòi hỏi việc sử dụng Agent để tính toán. Các yêu cầu về Agent sẽđược chuyển sang cho phần Xử lý yêu cầu về Agent xử
lý, còn các yêu cầu về tính toán khác sẽ được chuyển sang cho phần xử lý các yêu cầu khác.
27
o Xử lý yêu cầu về Agent: Khi có yêu cầu về việc sử dụng Agent để tính toán, phần này sẽ kiểm tra trong Agent Container xem có Agent tương ứng với yêu cầu hay không. Nếu có Agent này sẽđược cho thực thi và trả lại két quả của việc thực thi đó. Nếu không có, phần này sẽ gửi yêu cầu sang cho Server thông qua Giao tiếp với Server để yêu cầu gửi Agent tương ứng sang. Khi Agent tương ứng đã được gửi, Agent này sẽ được cho thực thi luôn và lấy kết quả trả về. Kết quả của phần xử lý này sẽ được đưa xuống cho phần tổng hợp kết quả .
o Xử lý các yêu cầu khác: Phần này sẽ phụ trách việc xử lý các yêu cầu
khác. Đây là nơi có thể dùng kết hợp các Proxy truyền thống vào mô hình này. Ví dụnhư việc tìm kiếm thông tin trên cache có thểđược áp dụng trong phần này. Nếu không có sự tích hợp nào xẩy ra, các yêu cầu sẽ gửi cho phần Giao tiếp với Server để lấy kết quả trả về. Kết quả trả về từ Server sẽđược
đưa xuống phần Tổng hợp kết quả.
o Tổng hợp kết quả: Các kết quả được gửi đến từ phần Xử lý yêu cầu về
Agent và Xử lý yêu cầu khác sẽđược tổng hợp lại tạo thành một câu trả lời hoàn chỉnh và đầy đủ trước khi được gửi cho Client. Kết quả của việc tổng hợp sẽđược đưa cho phần Giao tiếp với Client để chuỷên sang cho Client. - Agent Container: Đây là vùng chứa các Agent của Proxy. Việc tiếp nhận các
Agent được gửi đến và thực thi các Agent đó cũng được thực hiện ngay trong phần này. Kết quả trả ra của việc thực thi Agent sẽ được gửi cho phần Xử lý yêu cầu về
Agent. Để tránh tình trạng các Agent dư thừa gây lãng phí, tức là sau một thời gian Agent không còn được sử dụng đến nữa nhưng nó vẫn được lưu trữ trong Proxy, Agent Container sẽ có thêm nhiệm vụ theo dõi tình trạng hoạt động của các Agent. Khi một Agent không được sử dụng đến trong một khoảng thời gian nhất đinh, nó
sẽ bị xoá khỏi vùng chứa.
Các thông điệp hay yêu cầu được gửi từ Client sang cho Proxy cũng cần phải được
quy định theo khuôn dạng chuẩn đề giúp cho việc phân loại các yêu cầu cần sử dụng Agent và không cần sử dụng Agent được nhanh chóng và tiện lợi. Khuôn dạng yêu cầu chuẩn của Client gửi cho Proxy được mô tả như trong hình 3.6. Trong khuôn dạng này phần Header sẽ chỉ chứa thông tin của nơi gửi đến và Server đích cần đến, mọi thông tin
28
khác đều được ghi trong phần Content. Trong phần content này, nếu có yêu cầu về việc sử
dụng Agent để tính toán thì những yêu cầu về Agent cần phải được đưa vào phần đầu của
Content, sau đó mới đến các thông tin khác.
HEADER
CONTENT
Các thông tin còn lại
Thông tin nơi gửi Thông tin nơi đến
Thông tin vềcác Agent được yêu cầu
29
Chương 4 Thực nghiệm
Để chứng minh tính khả thi của mô hình đề xuất trong chương 3, chúng tôi đã xây dựng một thực nghiệm phân tải cho Server sử dụng Proxy động.
4.1. Phân tích thiết kế
Phần này sẽ mô tả các yêu cầu của bài toán đặt ra và các thiết kế chương trình để
giải bài toán đó.
4.1.1. Mô tả chương trình
Chương trình thực nghiệm được xây dựng trên một tính toán đơn giản nhưng đang được sử dụng rộng rãi hiện nay, đó là kiểm chứng người dùng bằng hình ảnh hay còn gọi là CAPTCHA [15].
Một CAPTCHA là một loại kiểm thử dạng hỏi đáp được dùng trong máy tính để xác
định xem người dùng có phải là con người hay không. "CAPTCHA" là một dạng viết tắt chữ đầu của "Completely Automated Public Turing test to tell Computers and Humans Apart" (Phép thử Turing công cộng hoàn toàn tựđộng để phân biệt máy tính với người),
được trường Đại học Carnegie Mellon cố gắng đăng kí thương hiệu nhưng đã bị bác bỏ.
Đây là một quá trình một máy tính (máy chủ) yêu cầu một người dùng hoàn tất một kiểm
tra đơn giản mà máy tính có thể dễ dàng tạo ra và đánh giá, nhưng không thể tự giải nó
được. Vì máy tính không thể giải quyết CAPTCHA, bất kỳngười dùng nào nhập vào lời giải đúng sẽ được xem là con người. Một loại CAPTCHA phổ biến yêu cầu người dùng phải nhập các chữ cái trong một tấm hình méo mó, đôi khi cùng với một dãy số hoặc chữ
lờ mờ xuất hiện trên màn hình.
Thông thường, Server sẽ tạo ra ảnh và hiển thị nó trên trình duyệt, sau đó người