Các máy chủ đại diện

Một phần của tài liệu Xây dựng giải pháp cho hệ thống mạng phân phối dữ liệu áp dụng vào việc nâng cấp hệ thống mạng của văn phòng trung ương đảng (Trang 53 - 79)

động, sau đó thực hiện lựa chọn trong số những máy chủ hiện tại đang hoạt động. Kết quả, máy chủ nào được lựa chọn sẽ cập nhật vào máy reward để đảm bảo tỉ lệ chọn máy chủ là ngẫu nhiên.

- Tiến hành mô phỏng :

+ Đầu tiên, chạy Máy chủ ra quyết định Front Server

+ 16 máy chủ đại diện : 01Hanoi 02Danang 03HCM 04ankara 05Berlin 06London 07moscow 08nairoby 09NewYork 10Paris 11perth 12singapore 13sydney 14Tokyo 15wien 16zagreb

Trong luận văn này, sau khi đưa vào thử nghiệm, tôi xin phép đưa vào số liệu mô phỏng của 1 client tới 8 máy chủ : Hanoi, Danang, HCM (Viet Nam), Berlin (Đức), Tokyo (Nhật Bản), Paris (Pháp), London (Anh), NewYork (Hoa Kỳ).

Khi có 1 yêu cầu từ máy client đến hệ thống thì frontserver sẽ kiểm tra hoạt động của các máy chủ đại diện sau đó mới ra quyết định lựa chọn máy chủ

Hình 23 : Vấn đề không có server nào hoạt động

rowid sid sname saddr 1. 1 Hanoi localhost:5001 2. 2 Danang localhost:5002 3. 3 HCM localhost:5003 4. 5 Berlin localhost:5005 5. 6 London localhost:5006 6. 9 NewYork localhost:5009 7. 10 Paris localhost:5010 8. 14 Tokyo localhost:5014

Hình 25 : Thông tin 8 máy chủ đại diện đang hoạt động tại thời điểm thực hiện mô phỏng I- Thuật toán -Greedy

1- Yêu cầu đề ra

Dựa trên cơ sở lý thuyết của Thuật toán -Greedy, Luận văn đã nêu tại mục 1.1 của Chương này, chúng ta tiến hành mô phỏng thực nghiệm lựa chọn máy chủ theo Thuật toán -Greedy ở hệ thống giả lập đã mô tả tại phần 2 của chương này như sau :

Từng máy khách tại 1 trong 8 vị trí đặt máy chủ đại diện sẽ gửi yêu cầu đến frontserver, sau khi frontserver nhận được yêu cầu sẽ kiểm tra tình trạng hoạt động của các máy chủ đại diện, các máy chủ đại diện sẽ phản hồi tình trạng đáp ứng tốt hay tắc nghẽn hoặc quá tải sau đó mới tiến hành lựa chọn máy chủ theo Thuật toán -Greedy. Như chúng ta đã biết, Thuật toán -Greedy lựa chọn máy chủ tương tự như ta tung một đồng xu, nếu nhận được mặt hình với xác suất , frontserver sẽ đưa ra máy chủ đại diện ngẫu nhiên. Nhưng nếu nhận được mặt chữ với xác xuất (1- ), thì frontserver sẽ đưa ra máy chủ đại diện có reward dự kiến cao nhất.

Ta sẽ có 2 trường hợp : (1) Không có máy chủ đại diện nào hoạt động ; (2) Xác nhận tình trạng máy chủ hiện tại đang hoạt động và đưa ra phương án tối ưu.

- Trường hợp 1 : Không có máy chủ đại diện nào hoạt động def getRandomServer(self):

"""get a random server. If there is no server then return message to users""" servers = self.mod.getAllServers()

if len(servers) == 0: print("No servers found") return False

else:

# print(servers)

return servers[random.randrange(len(servers))]

- Trường hợp 2 : Xác nhận tình trạng máy chủ hiện tại đang hoạt động và đưa ra phương án tối ưu.

def chooseServer(self, eps, caddr):

"""Choose which server to forward job to""" # get all avail server

servers = self.mod.getAllServers() stats = self.mod.get_all_stat(1)

# check at least a server must be online

print("[x] Total online server counted: {0}".format(len(servers))) if len(servers) <= 0:

return False

# calculate total req

totalReq = (len(stats) if len(stats) else 1)

# now chosing

epsx = random.random()

print("Random for this turn is: {0}".format(epsx)) if (epsx > eps):

return self.getRewardServer(caddr) else:

return self.getRandomServer()

+ Việc lựa chọn máy chủ ở trường hợp này giống như chúng ta tung đồng xu, giả sử = 0.1 suy ra có 10% khả năng nhận được mặt hình và 90% khả năng nhận được mặt chữ.

+ Nếu kết quả mặt chữ, Thuật toán -Greedy sẽ chọn lựa khai thác. Để khai thác, thuật toán sẽ chọn lựa trong 8 máy chủ đại diện để tìm ra máy chủ đại diện có reward dự kiến cao nhất ứng với yêu cầu người dùng.

+ Nếu kết quả mặt hình, Thuật toán -Greedy sẽ chọn lựa thăm dò. Quá trình thăm dò của Thuật toán -Greedy rất đơn giản, thuật toán coi mỗi máy chủ đại diện là có khả năng phục vụ máy khách ngang nhau và chọn lựa một cách ngẫu nhiên máy chủ đại diện đáp ứng yêu cầu người dùng. Vậy nếu 8 máy chủ đều hoạt động tốt thì mỗi máy chủ đại diện có 12,5% khả năng được chọn.

Sau khi lựa chọn được máy chủ đại diện, ta sẽ tiến hành cập nhật kết quả def getRewardServer(self, caddr):

"""get the rewarded server"""

server = self.mod.get_reward_server('1', caddr) return server

2- Kết quả nghiệm thu

Sau khi thực hiện từ mỗi máy người dùng 1.000 requests (tổng 8.000 requests) tới 8 máy chủ đại diện nhận được :

 Máy người dùng đặt tại Hanoi:

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 50 - 99 1.881 2. 2 Danang localhost:5002 100 -149 1.126 3. 3 HCM localhost:5003 153-197 0.875 4. 5 Berlin localhost:5005 250 - 297 0.593 5. 6 London localhost:5006 312 - 349 0.514 6. 9 NewYork localhost:5009 450 - 488 0.427 7. 10 Paris localhost:5010 500 - 545 0.363 8. 14 Tokyo localhost:5014 707 - 746 0.302

 Máy người dùng đặt tại Danang:

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 100 - 149 1.148 2. 2 Danang localhost:5002 50 - 99 1.860 3. 3 HCM localhost:5003 100 - 148 1.127 4. 5 Berlin localhost:5005 204 - 247 0.681 5. 6 London localhost:5006 250 - 299 0.601 6. 9 NewYork localhost:5009 400 - 449 0.423 7. 10 Paris localhost:5010 461 - 489 0.392 8. 14 Tokyo localhost:5014 650 - 697 0.315

 Máy người dùng đặt tại HCM:

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 150 - 196 0.858

rowid sid sname saddr Ping Reward 3. 3 HCM localhost:5003 50 - 99 1.840 4. 5 Berlin localhost:5005 167 - 198 0.832 5. 6 London localhost:5006 203 - 249 0.681 6. 9 NewYork localhost:5009 359 - 398 0.464 7. 10 Paris localhost:5010 403 - 440 0.423 8. 14 Tokyo localhost:5014 600 - 639 0.322

 Máy người dùng đặt tại Berlin:

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 250 - 299 0.593 2. 2 Danang localhost:5002 200 - 249 0.692 3. 3 HCM localhost:5003 150 - 199 0.858 4. 5 Berlin localhost:5005 50 - 99 1.868 5. 6 London localhost:5006 105 - 137 1.179 6. 9 NewYork localhost:5009 252 - 298 0.589 7. 10 Paris localhost:5010 304 - 349 0.535 8. 14 Tokyo localhost:5014 509 - 545 0.369

 Máy người dùng đặt tại London :

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 300 - 349 0.521 2. 2 Danang localhost:5002 250 - 299 0.594

3. 3 HCM localhost:5003 201 - 249 0.682

4. 5 Berlin localhost:5005 100 - 148 1.137 5. 6 London localhost:5006 50 - 99 1.868

rowid sid sname saddr Ping Reward

6. 9 NewYork localhost:5009 200 - 248 0.690

7. 10 Paris localhost:5010 260 - 285 0.610

8. 14 Tokyo localhost:5014 451 - 499 0.388

 Máy người dùng đặt tại NewYork :

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 450 - 499 0.403 2. 2 Danang localhost:5002 441 - 449 0.430 3. 3 HCM localhost:5003 350 - 399 0.472 4. 5 Berlin localhost:5005 250 - 299 0.594 5. 6 London localhost:5006 201 - 249 0.690 6. 9 NewYork localhost:5009 50 - 99 1.892 7. 10 Paris localhost:5010 102 - 146 1.162 8. 14 Tokyo localhost:5014 303 - 349 0.511

 Máy người dùng đặt tại Paris :

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 500 - 549 0.376 2. 2 Danang localhost:5002 450 - 499 0.399 3. 3 HCM localhost:5003 400 - 449 0.432 4. 5 Berlin localhost:5005 300 - 348 0.523 5. 6 London localhost:5006 250 - 298 0.601 6. 9 NewYork localhost:5009 100 - 149 1.143 7. 10 Paris localhost:5010 50 - 99 1.881 8. 14 Tokyo localhost:5014 252 - 298 0.604

 Máy người dùng đặt tại Tokyo :

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 700 - 749 0.308 2. 2 Danang localhost:5002 650 - 699 0.320 3. 3 HCM localhost:5003 601 - 646 0.337 4. 5 Berlin localhost:5005 500 - 548 0.375 5. 6 London localhost:5006 450 - 493 0.396 6. 9 NewYork localhost:5009 300 - 349 0.526 7. 10 Paris localhost:5010 255 - 297 0.584 8. 14 Tokyo localhost:5014 50 - 99 1.881

II- Thuật toán Softmax 1- Yêu cầu đề ra

Dựa trên cơ sở lý thuyết của Thuật toán Softmax luận văn đã nêu tại mục 1.2 của chương này, chúng ta tiến hành mô phỏng thực nghiệm lựa chọn máy chủ theo Thuật toán Softmax ở hệ thống giả lập đã mô tả tại phần 2 của chương này như sau : Từng máy khách tại 1 trong 8 vị trí đặt máy chủ đại diện sẽ gửi yêu cầu đến frontserver, sau khi frontserver nhận được yêu cầu sẽ kiểm tra tình trạng hoạt động của các máy chủ đại diện, các máy chủ đại diện sẽ phản hồi tình trạng đáp ứng tốt hay tắc nghẽn hoặc quá tải sau đó mới tiến hành lựa chọn máy chủ theo Thuật toán Softmax. Như chúng ta đã biết, Thuật toán Softmax sẽ cố gắng tìm ra máy chủ đại diện tốt nhất đối với mỗi yêu cầu người dùng bằng những phương pháp sau đây:

- Tính toán reward dự kiến.

- Tính toán lại xác suất chọn lựa của các máy chủ đại diện dựa vào reward dự kiến hiện tại và một tham số nhiệt độ do người dùng cấu hình. Thuật toán Softmax cũng có cho phép cấu hình tham số nhiệt độ tùy theo giai đoạn :

+ Giai đoạn thăm dò, cấu hình tham số nhiệt độ cao để tạo sự hỗn loạn, xác suất lựa chọn bằng nhau, từ đó chọn máy chủ đại diện ngẫu nhiên.

+ Giai đoạn khai thác, cấu hình tham số nhiệt độ thấp, xác suất chọn lựa tỉ lệ thuận với reward dự kiến, những máy chủ đại diện có reward dự kiến cao sẽ được chọn. Tiến hành mô phỏng thực nghiệm chọn tham số nhiệt độ giảm dần theo số lần chọn lựa chọn tăng thuật toán sẽ tự động thăm dò sau đó khai thác.

- Từ xác suất chọn lựa, ta chọn ngẫu nhiên xác suất chọn máy chủ đại diện cao nhất, phù hợp nhất cho yêu cầu người dùng.

def chooseServer(self, caddr):

"""Choosing server in softmax""" try:

# get all avail server

servers = self.mod.getAllServers() stats = self.mod.get_all_stat(2)

# check at least a server must be online

print("[x] Total online server counted: {0}".format(len(servers)))

if len(servers) <= 0: return False # calculate total req

totalReq = (len(stats) if len(stats) else 1)

print("[x] Total requests using this alg: {0}".format(totalReq)) # calculate average t. As the requests go high, tm is lower # it's logic with boltzman law

tm = self.t / totalReq totalRw = 0

# calculate total avg rewards for server in servers:

curReward = self.mod.get_reward_by_server(2, server[0], caddr)

totalRw += math.exp(curReward/tm)

print("[x] Total Reward is: {0}. tm: {1}".format(totalRw, tm)) # calculate p

# compare p with maxRw to select a list of server # Choose random in this list

# maxRw = 0 to ensure at least a server is in the list maxRw = 0

ls = [] # list selected servers for server in servers:

curReward = self.mod.get_reward_by_server(2, server[0], caddr)

print("[x] [{0}] Reward is: {1}".format(server[0], curReward))

p = math.exp(curReward/tm) / totalRw

print("[x] [{0}] P is calculated: {1}".format(server[0], p))

# Append P & server into a hash dt = { 's': server, 'min': maxRw, 'max': maxRw + p, } ls.append(dt) # update maxRw

maxRw = maxRw+p

# choose a random server in the list

# the max rand sould be 0.999 since we not count the max (<max)

rand = random.randint(1, 99)/100.0 chosen = ''

print("Random is: {0}".format(rand)) for d in ls:

print("This server is: {0} with dmin: {1} and dmax: {2}".format(d['s'][0], d['min'], d['max']))

if(rand >= d['min'] and rand < d['max']): chosen = d['s'] # sv = ls[random.randrange(len(ls))] return chosen except Exception as e: print(e) return False

2- Kết quả nghiệm thu

Sau khi thực hiện từ mỗi máy người dùng 1.000 requests (tổng 8.000 requests) tới 8 máy chủ đại diện nhận được :

 Máy người dùng đặt tại Hanoi :

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 50 - 99 1.870 2. 2 Danang localhost:5002 100 -149 1.135

3. 3 HCM localhost:5003 153-197 0.852

4. 5 Berlin localhost:5005 250 - 297 0.595 5. 6 London localhost:5006 312 - 349 0.526

rowid sid sname saddr Ping Reward

6. 9 NewYork localhost:5009 450 - 488 0.402

7. 10 Paris localhost:5010 500 - 545 0.378

8. 14 Tokyo localhost:5014 707 - 746 0.309

 Máy người dùng đặt tại Danang :

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 100 - 149 1.163 2. 2 Danang localhost:5002 50 - 99 1.897 3. 3 HCM localhost:5003 100 - 148 1.157 4. 5 Berlin localhost:5005 204 - 247 0.693 5. 6 London localhost:5006 250 - 299 0.590 6. 9 NewYork localhost:5009 400 - 449 0.429 7. 10 Paris localhost:5010 461 - 489 0.398 8. 14 Tokyo localhost:5014 650 - 697 0.320

 Máy người dùng đặt tại HCM :

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 150 - 196 0.860 2. 2 Danang localhost:5002 100 - 149 1.163 3. 3 HCM localhost:5003 50 - 99 1.886 4. 5 Berlin localhost:5005 167 - 198 0.854 5. 6 London localhost:5006 203 - 249 0.690 6. 9 NewYork localhost:5009 359 - 398 0.469 7. 10 Paris localhost:5010 403 - 440 0.431 8. 14 Tokyo localhost:5014 600 - 639 0.333

 Máy người dùng đặt tại Berlin :

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 250 - 299 2. 2 Danang localhost:5002 200 - 249 3. 3 HCM localhost:5003 150 - 199 0.878 4. 5 Berlin localhost:5005 50 - 99 1.889 5. 6 London localhost:5006 105 - 137 1.146 6. 9 NewYork localhost:5009 252 - 298 0.604 7. 10 Paris localhost:5010 304 - 349 0.524 8. 14 Tokyo localhost:5014 509 - 545 0.365

 Máy người dùng đặt tại London :

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 300 - 349 0.525 2. 2 Danang localhost:5002 250 - 299 0.582 3. 3 HCM localhost:5003 201 - 249 0.713 4. 5 Berlin localhost:5005 100 - 148 1.164 5. 6 London localhost:5006 50 - 99 1.884 6. 9 NewYork localhost:5009 200 - 248 0.687 7. 10 Paris localhost:5010 260 - 285 0.587 8. 14 Tokyo localhost:5014 451 - 499 0.388

 Máy người dùng đặt tại NewYork :

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 450 - 499 0.373 2. 2 Danang localhost:5002 441 - 449

rowid sid sname saddr Ping Reward 4. 5 Berlin localhost:5005 250 - 299 0.553 5. 6 London localhost:5006 201 - 249 0.700 6. 9 NewYork localhost:5009 50 - 99 1.880 7. 10 Paris localhost:5010 102 - 146 8. 14 Tokyo localhost:5014 303 - 349

 Máy người dùng đặt tại Paris :

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 500 - 549 2. 2 Danang localhost:5002 450 - 499 3. 3 HCM localhost:5003 400 - 449 4. 5 Berlin localhost:5005 300 - 348 0.545 5. 6 London localhost:5006 250 - 298 6. 9 NewYork localhost:5009 100 - 149 7. 10 Paris localhost:5010 50 - 99 1.889 8. 14 Tokyo localhost:5014 252 - 298

 Máy người dùng đặt tại Tokyo :

rowid sid sname saddr Ping Reward

1. 1 Hanoi localhost:5001 700 - 749 2. 2 Danang localhost:5002 650 - 699 0.318 3. 3 HCM localhost:5003 601 - 646 0.337 4. 5 Berlin localhost:5005 500 - 548 0.374 5. 6 London localhost:5006 450 - 493 0.399 6. 9 NewYork localhost:5009 300 - 349 0.523 7. 10 Paris localhost:5010 255 - 297 0.591 8. 14 Tokyo localhost:5014 50 - 99

III- Thuật toán UCB 1- Yêu cầu đề ra

Dựa trên cơ sở lý thuyết của Thuật toán UCB luận văn đã nêu tại mục 1.3 của chương này, chúng ta tiến hành mô phỏng thực nghiệm lựa chọn máy chủ theo Thuật toán UCB ở hệ thống giả lập đã mô tả tại phần 2 của chương này như sau :

Từng máy khách tại 1 trong 8 vị trí đặt máy chủ đại diện sẽ gửi yêu cầu đến frontserver, sau khi frontserver nhận được yêu cầu sẽ kiểm tra tình trạng hoạt động của các máy chủ đại diện, các máy chủ đại diện sẽ phản hồi tình trạng đáp ứng tốt hay tắc nghẽn hoặc quá tải sau đó mới tiến hành lựa chọn máy chủ theo Thuật toán UCB. Như chúng ta đã biết, Thuật toán UCB sẽ cố gắng tìm ra máy chủ đại diện tốt nhất đối với mỗi yêu cầu người dùng bằng những phương pháp sau đây:

- Tính toán reward dự kiến.

- Căn cứ vào reward dự kiến của các máy chủ đại diện, Thuật toán UCB sẽ tính UCBIndex. UCBIndex thực chất là tổng của reward dự kiến với giới hạn tự tin với các máy chủ đại diện.

- Chọn ngẫu nhiên các máy chủ đại diện có UCBIndex cao nhất đáp ứng yêu cầu của người dùng

def chooseServer(self, caddr):

"""Choosing server in UCB""" try:

servers = self.mod.getAllServers() stats = self.mod.get_all_stat(3) maxRw = 0 # initial max reward ls = [] #a list to hold servers totalserver = len(servers)

# check at least a server must be online

print("[x] Total online server counted: {0}".format(totalserver))

if totalserver <= 0: return False # calculate total req

totalReq = (len(stats) if len(stats) else 1)

for server in servers:

# get current reward for server and client + alg

curRw = self.mod.get_reward_by_server(3, server[0], caddr)

# get total request by this client and server & alg

totalRq = self.mod.get_total_request(3, server[0], caddr) print("curRw: {0} and totalRq: {1} and numofserver:

Một phần của tài liệu Xây dựng giải pháp cho hệ thống mạng phân phối dữ liệu áp dụng vào việc nâng cấp hệ thống mạng của văn phòng trung ương đảng (Trang 53 - 79)

Tải bản đầy đủ (PDF)

(87 trang)