Thực hành chương 1 hệ phân tán | Đại học Bách khoa Hà Nội
Thực hành chương 1 hệ phân tán | Đại học Bách khoa Hà Nội được biên soạn dưới dạng file PDF cho các bạn sinh viên tham khảo, ôn tập đầy đủ kiến thức, chuẩn bị thật tốt cho kì thi sắp tới. Mời bạn đọc đón xem.
112
56 lượt tải
Tải xuống
Môn: Hệ thống phân tán và ứng dụng
Trường: Đại học Bách Khoa Hà Nội
Thông tin:
21 trang
6 tháng trước
Tác giả:
BÀI TẬP THỰC HÀNH
MÔN HỌC: HỆ PHÂN TÁN
CHƯƠNG 1: TỔNG QUAN VÀ KIẾN TRÚC HỆ PHÂN TÁN
HỌ TÊN SV: TRƯƠNG VĂN HIN MSSV: 20194276
MÃ LỚP: 132666 MÃ HỌC PHẦN: IT4611
1. Web server apache2
Câu hi 1: Đưng dn đn file html cha ni dung mc đnh ca trang web l
“/var/www/html/index.html”
Câu hi 2: Cng mc đnh ca dch v www l cng 80
Câu hi 3: Quyn mang s 755 ngha l
7 = 4 + 2 + 1: Ngưi sở hữu thư mc có quyn đọc thư mc (read), chỉnh sửa thư
mc(write) v liệt kê các thư mc bên trong (execute).
5 = 4 + 0 + 1: Những ngưi cùng nhóm chỉ có quyn đọc thư mc (read), liệt kê
các thư mc v file bên trong (execute).
5 = 4 + 0 + 1: Những ngưi còn lại chỉ có quyn đọc thư mc (read), liệt kê các
thư mc v file bên trong (execute).
Câu hi 4: Ni dung trang web sau khi g 2 đa chỉ
Giải thích: Khi ta nhập vo 2 đa chỉ l example.com v test.com, trình duyệt
ngưi dùng sẽ gửi yêu cầu tải trang web đó lên 2 server có tên l test.com v
example.com. Sau đó, Apache sẽ truy cập vo đưng dn thư mc
/var/www/test.com/public_html hoc example.com/public_html v lấy ra tất cả
các file cấu thnh lên trang l 2 file index.html, chạy v hiển th lên trình duyệt
ni dung ca ca nó l ni dung m ta nhìn thấy.
Câu hi 5: Khi truy cập t các máy tính khác trong cùng mạng LAN vo 2 trang
web đó thì ni dung hiển th ging như trên.
2. Interface trong Java
Câu hi 6:
Câu hi 7:
- Vai trò ca phương thc run(): Lấy mt chuỗi s t client gửi lên cách nhau bằng
khoảng trng, chuyển chuỗi thành mảng integer sau đó sắp xp theo th tự tăng
dần và gửi lại v cho client. Nó sẽ chạy đoạn code thông qua mt lung kt ni
client-server.
- Nó được gọi khi: Có yêu cầu gửi lên t phía client có s hiệu cng trùng với s
hiệu cng ca server. Phương thc run() sẽ được gọi tự đng khi phương thc
start() được gọi để tạo mt lung mới.
3. Kin trc Microservices
Câu hi 1:
- Lệnh “.mvnwclean package -Dmaven.test.skip=true” gip dọn dp các
project maven v xây dựng các dch v cho các tệp jar l các dch v được
xây dựng trong Java maven.
- Lệnh “docker build --tag=microservice-kubernetes-demo-apache apache”
xây dựng ảnh docker bằng cách sử dng thit k t Docker hub l mt
microservice-kubernetes-demo-apache. Apache l thư mc cha Dockerfile
cần để xây dựng ảnh docker ‘docker tag microservice-kubernetes-demo-
apache your_docker_account/microservice-kubernetes-demo-apache:latest’
gip gắn liên kt tag ảnh mới với ti khoản. Bằng cách ny, ta đang tạo mt
tham chiu đn hình ảnh để có thể deploy chng v sau.
- Lệnh “docker push your_docker_account/microservice-kubernetes-demo-
apache” được sử dng để deploy các ảnh mới lên Docker hub.
- Các lệnh khác được dùng để clone mt git reposity hoc đăng nhập vo mt
Docker account.
Câu hi 2: Repository cha ảnh mới, l ảnh microservice-kubernetes-demo-
apache với tag mới nhất.
Câu hi 3: Trạng thái ca các pods va mới được tạo ny l Container
Creating, nhưng sau đó chng chuyển sang trạng thái Running.
Họ tên: Nguyễn Tôn Tú
Lớp: INPG 15
MSSV: 20158412
BÀI THỰC HÀNH : HỆ PHÂN TÁN
Chương 1
Câu 1: Đường dẫn đến file html chữa nội dung mặc định của trang web apache là:
“var/www/html/index.html”
Câu 2: Cổng mặc đinh của dịch vụ www là cổng 80
Câu 3:
Quyền mang số 755 nghĩa là:
7: Người sở hữu thư mục có quyền đọc thư mục (read), chỉnh sửa thư mục (write),
liệt kê các thư mục và file bên trong (execute);
5: Những người cùng nhóm chỉ có quyền đọc thư mục (read), liệt kê các thư mục
và file bên trong (execute)
5: Những người khác không ở trong nhóm với người sở hữu chỉ có quyền đọc thư
mục (read), liệt kê các thư mục và file bên trong (execute)
Câu 4:
- Sau khi gõ địa chỉ trên, trên trang trình duyệt sẽ hiển thị :
“Welcome to Example.com !
Success! The example.com virtual host is working ! “
- Khi tạo 2 file “example.com.config” và “test.com.config” với 2 đoạn code trên,
thì nó đều tạo ra 1 file config trên server (Apache2) cùng truy cập vào file “test.com”
trong thư mục test.com . Đường dẫn trên thay đổi domain của cổng www trên máy từ
localhost/test.com thành example.com và test.com . TỪ đó thấy được nội dung như trên
Câu 5:
Khi truy cập thì nội dung hiển thị giống như trên .
Câu 6:
- Về bên client:
public static void main(String[] args) throws IOException,
InterruptedException {
Socket socket = null;
try {
socket = new Socket(SERVER_IP, SERVER_PORT); // Connect to
server
System.out.println("Connected: " + socket);
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
for (int i = '0'; i <= '9'; i++) {
os.write(i); // Send each number to the server
int ch = is.read(); // Waiting for results from server
System.out.print((char) ch + " "); // Display the results received from
the server
Thread.sleep(200);
}
} catch (IOException ie) {
System.out.println("Can't connect to server");
} finally {
if (socket != null) {
socket.close();
}
}
}
- Về bên Server:
while (true) {
try {
Socket socket = serverSocket.accept();
System.out.println("Client accepted: " + socket);
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
int ch = 0;
while (true) {
ch = is.read(); // nhận số từ client
if (ch == -1) {
break;
}
os.write(ch); // gửi kết quả về client
}
socket.close();
} catch (IOException e) {
System.err.println(" Connection Error: " + e);
}
}
Câu 7:
Phương thức “run” trong ví dụ trên thực hiện việc sắp xếp dãy số từ client gửi lên
Phương thức đó được gọi khi phương thức start được chạy.
H PHÂN TÁN
1
BÀI THC HÀNH
HC PHN: H PHÂN TÁN
1: TNG QUAN VÀ KIN TRÚC HPT
1. Web server apache2
1.1. Ni dung
Trên lc h t rng tt c các
dch v mu s dng lý thuyt ca H Phân Tán. bài thc hành này các bn s
th trin khai dch v WWW. C th, các bn s t 1 web server.
1.2. Yêu cu
1.2.1. Lý thuyt
Làm ch Unix OS
Kin thn ca Mng máy tính
1.2.2. Thit b
PC hoc VM
1.2.3. Phn mm
1.3. c thc hành
1.3.1. t web server apache2
c ht chúng ta pht mt phn mm máy ch web, và ngày nay thì apache
là thông dng nht. Hãy s dng lnh sau:
sudo apt install apache2
Th truy cp vào webserver này ba ch IP ca mày này t mt máy
khác (2 máy cn trong cùng 1 mng LAN). Các bn s thy hin lên trang web mc
nh ca apache (Có ch bt
thành công webserver.
Câu hi 1: ng dn file html cha ni dung mnh ca trang web các bn
va xem là gì?
Câu hi 2: Cng mnh ca dch v www là gì?
1.3.2. t virtual hosts cho apache2
Máy ch apache2 có kh a nhiu máy o vi ch a ch IP. Bây gi chúng
ta hãy tu tiên, tc có cha ni
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
H PHÂN TÁN
2
i quy bng lnh sau:
sudo chmod -R 755 /var/www
Câu hi 3: Hãy gii thích quyn mang s 755 là gì?
Vit nnh sa ni dung c
mc public_html mà bn va t
<html>
<head>
<title>Welcome to Example.com!</title>
</head>
<body>
<h1>Success! The example.com virtual host is working!</h1>
</body>
</html>
(Nh i thành test.com vc test.com).
File cu hình mnh ca các máy o ca apache là:
/etc/apache2/sites-available/000-default.conf
Bây gi hãy to 2 file sau:
/etc/apache2/sites-available/example.com.conf
/etc/apache2/sites-available/test.com.conf
i dung ca file example.com.conf
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
i dung ca file test.com.conf :
<VirtualHost *:80>
ServerAdmin admin@test.com
ServerName test.com
ServerAlias www.test.com
DocumentRoot /var/www/test.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
H PHÂN TÁN
3
Chy 2 l kích hot 2 file trên:
sudo a2ensite example.com.conf
sudo a2ensite test.com.conf
Khng li dch v apache:
sudo service apache2 restart
M file /etc/hosts và thêm nhng dòng sau:
127.0.0.1 example.com
127.0.0.1 test.com
Bây gi hãy m trình duyt web và th nghia ch example.com và test.com
Câu hi 4: Bn quan sát thy na ch trên? Gii thích.
Câu hi 5: Th truy cp t các máy tính khác trong cùng mng LAN vào 2 trang web
2. Interface trong Java
2.1. Ni dung
Trên lc v Tính m trong H m bo Tính
m, chúng ta cn phi xây dng các interface gia các thành phn ca h thng.
Trong phn thc hành này, chúng ta s xây dng mt mô hình client-n,
gi mt chui s lên cho server. Server s sp xp nhng s nhn
c vi vic s dc sort c khai báo trong interface. Chúng ta s
thy có nhiu các tric sort i phát biu
ca tính m là cho phép nhièu nhà sn xut có th tham gia vào xây dng các thành
phn theo các cách khác nhau).
2.2. Yêu cu
2.2.1. Lý thuyt
Lp trình Java
2.2.2. Thit b
PC
2.2.3. Phn mm
Eclipse IDE
JDK/JRE
2.3. c thc hành
H PHÂN TÁN
4
2.3.1. t các công c cn thit
- Ti v t IDE Eclipse: https://www.eclipse.org/downloads/packages/
- Ti JDK/JRE:
https://www.oracle.com/technetwork/java/javase/downloads/index.html
2.3.2. Xây d
u tiên, m Eclipse và to mt java project mi vi vic chn File
New
Java
project. Hãy t
Sau khi to xong, bn s nhìn thy mc tên là src cha
mã ngun.
Tng cách n phi chuc src
chn New
Package
t tên 2
com.hust.soict.your_name.client_server
com.hust.soict.your_name.helper
ng tên bn)
Trong package client_server, to 2 lt tên là Client và Server.
Bây gi chúng ta s l
2.3.2.1. Client
Hãy m file Client.java ra và bu lp trình.
y tiên chúng ta phi import các lp ca b n Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
c main, chúng ta s khi to mt thc th socket bng cách
dùng lp Socket:
Socket socket = new Socket("127.0.0.1", 9898);
Bn có th thay th a ch IP và s hiu cn mua
ch IP và cng mà server s lng nghe các yêu cu mà Client s gi lên.
Bây gi chúng ta s khi to 2 thc th ca 2 lp BufferedReader và PrintWriter
gi và nhn d liu:
BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
Khi to 1 thc th cho lp Scanner:
System.out.println(in.readLine());
Scanner scanner = new Scanner(System.in);
H PHÂN TÁN
5
Câu hi 6: Hãy t vit m thc hin 1 vòng lp while sao cho nó s
nhn các s i dùng gõ và gi v i dùng gõ ký t
rng ri n enter. Gi ý: hãy dùng l nhn xâu ký t i dùng gõ vào:
String message = scanner.nextLine();
Cusocket và scanner li:
socket.close();
scanner.close();
2.3.2.2. Server
Bây gi hãy m và chnh sa file Server.java. Mng m
lu nhn các s i dùng gi lên và sp xp nó theo th t n (hoc
nh dn) và gi tr li cho Client.
u tiên hãy import mt s n Java cn thit:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import com.hust.soict.haianh.helper.*;
import java.util.Arrays;
c main, hãy vi
System.out.println("The Sorter Server is running!");
int clientNumber = 0;
try (ServerSocket listener = new ServerSocket(9898)) {
while (true) {
new Sorter(listener.accept(), clientNumber++).start();
}
}
Chú ý là s hiu cng ph hiu cng mà client gi lên.
c main, hãy to 1 lp Sorter t lung. Và
nó phi k tha t lp Thread:
private static class Sorter extends Thread {
private Socket socket;
private int clientNumber;
public Sorter(Socket socket, int clientNumber) {
this.socket = socket;
this.clientNumber = clientNumber;
System.out.println("New client #" + clientNumber + " connected at " + socket);
}
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// Send a welcome message to the client.
H PHÂN TÁN
6
out.println("Hello, you are client #" + clientNumber);
// Get messages from the client, line by line; Each line has several numbers separated by a space
character
while (true) {
String input = in.readLine();
if (input == null || input.isEmpty()) {
break;
}
//Put it in a string array
String[] nums = input.split(" ");
//Convert this string array to an int array
int[] intarr = new int[ nums.length ];
int i = 0;
for ( String textValue : nums ) {
intarr[i] = Integer.parseInt( textValue );
i++;
}
//Sort the numbers in this int array
new SelectionSort().sort(intarr);
//Convert the int array to String
String strArray[] = Arrays.stream(intarr)
.mapToObj(String::valueOf)
.toArray(String[]::new);
//Send the result to Client
out.println(Arrays.toString(strArray));
}
} catch (IOException e) {
System.out.println("Error handling client #" + clientNumber);
} finally {
try { socket.close(); } catch (IOException e) {}
System.out.println("Connection with client # " + clientNumber + " closed");
}
}
}
Câu hi 7: Vai trò cc run là gì? c gi?
n có th thc gi thuc lp
SelectionSort. Bây gi chúng ta s xây dng mt giao din (interface) và khai báo
c sort bên trong. Lp SelectionSort là mt trong nhng lp trin khai
giao din này.
2.3.2.3. Interface và các cách trin khai khác nhau
Bây gi hãy n phi chut vào package com.hust.soict.your_name.helper , chn New
Interface
To mt interface mt tên nó là NumberSorter.
c sort:
public interface NumberSorter {
void sort(int arr[]);
}
Vo mt lt tên là SelectionSort.
H PHÂN TÁN
7
Thc t là, lp SelectionSort s trin khai giao din NumberSorter
th c sort da trên thut toán selection sort. M file SelectionSort.java và
vin code sau:
public class SelectionSort implements NumberSorter{
public void sort(int arr[]) {
int n = arr.length;
// One by one move boundary of unsorted subarray
for (int i = 0; i < n-1; i++)
{
// Find the minimum element in unsorted array
int min_idx = i;
for (int j = i+1; j < n; j++)
if (arr[j] < arr[min_idx])
min_idx = j;
// Swap the found minimum element with the first
// element
int temp = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temp;
}
}
}
2.3.2.4. Ch
Bây gi hãy chy th ng quên là phi chc khi chy
client.
2.3.2.5. Trin khai các gii thut sp xp khác
Bây gi hãy t mình trin khai các gii thut sp xp khác. Bc
trên (to lp mn khai li interface NumberSorter).
Th trin khai vi 3 gii thut sau (có th tham kho mã ngun trên Internet):
Bubble sort
Insertion sort
Shell sort
3. Kin trúc Microservices
3.1. Ni dung
bài thc hành này chúng ta s xây dng mt kin
bng cách s dng Kubernetes, mt nn tng m qun lý nhng dch v dng
container. Chúng ta s s d to ra các containers.
H PHÂN TÁN
8
3.2. Yêu cu
3.2.1. Lý thuyt
Microservices
Kube fundamentals: Pods, Services, Deployments et al.
Docker
3.2.2. Phn cng
Laptop/PC on Windows
3.2.3. Phn mm
VirtualBox
Docker
The kubernetes command line tool kubectl
The minikube binary
Git bash
3.3. c thc hành
t
- t VirtualBox: https://www.virtualbox.org/wiki/Downloads
- t kubectl trên Windows, chúng ta s cn pht Chocolatey c:
https://chocolatey.org/docs/installation#installing-chocolatey
- Bây gi t công c kubernetes vi lnh sau:
>choco install kubernetes-cli
Kim tra lng lnh sau:
>kubectl version
- Bây gi hãy cài minikube-windows-amd64.exe:
https://github.com/kubernetes/minikube/releases
t tên li cho file va ti là minikube.exe và thêm nó vào Path. (N
bit thêm bi ng vào Path th ng dn link sau:
https://www.java.com/en/download/help/path.xml)
- i vi bn nào dùng Windows thì s b v khi cài song song Docker và
VirtualBox là ti vì Docker trên Windows thì cn Hyper-V, còn VirtualBox thì li
không ho c vi Hyper-V. Vì vy, gi dng
ng thì hãy s dng Docker Toolbox:
https://docs.docker.com/toolbox/overview/
S dng ki xây dng ng dng web
Bây gi chúng ta s phát trin mt ng d n bng vic s dng
kin trúc microservices. C th chúng ta s xây dng 4 microservices sau:
1. Dch v Apache HTTP: Apache HTTP c s d cung ng dch v
trang web cng 8080. Nó s làm nhim v là chuyn tip các HTTP
n cho 3 microservices khác. Lý do s dng dch v này là vì
H PHÂN TÁN
9
tht s không cn thit nu chúng ta xây dng cho mi microservices mt
cng riêng trên host ca minikube, thay vì th chúng ta s dng chung 1
m vào cho c 3 dch v (xem hình c cu hình
t reversy proxy cho h thch cân bng ti thì s do
m nhim.
2. Dch v Order: Dch v x t hàng ci dùng. Dch
v này kt ni vi dch v ly thông tin.
3. Dch v Customer: dch v này có nhim v qun lý d liu khách hàng.
4. Dch v Catalog: Dch v này qun lý các danh mc hàng hóa.
Mã ngun có th xem link sau: https://github.com/anhth318/microservices-
demo
S dc mà bn mut c ti v:
>git clone https://github.com/anhth318/microservices-demo.git
c microservices-demo, chy lnh sau:
./mvnw clean package -Dmaven.test.skip=true
hoc nu dùng Windows thì chy lnh:
mvnw.cmd clean package -Dmaven.test.skip=true
Nhng l build/re-build 3 dch v trên.
n cn phi lên to tài khon trên Docker Hub: https://hub.docker.com/
Chy docker toolbox máy ca bn bng cách click t vào bing
H PHÂN TÁN
10
Docker Quickstart Terminal.
Bây gi, bch v trên vào dng nh (images) c
bn s ti lên máy ch c tiên, bn cp vào
Docker Hub dòng lnh bng lnh sau:
>docker login
Gõ li username và mt khu tài khon ca bo trên DockerHub.
Bây gi c bn va ti v build và ti docker image ca
tng dch v lên DockerHub:
i vi dch v apache:
>docker build --tag=microservice-kubernetes-demo-apache apache
>docker tag microservice-kubernetes-demo-apache
your_docker_account/microservice-kubernetes-demo-apache:latest
>docker push your_docker_account/microservice-kubernetes-demo-
apache
Câu hi 1: Hãy thc hin gõ nhng l i 3 dch v còn li.
Câu hi 2: p vào tài khon ca bn. Bn
thy nhng gì mi xut hin trên docker hub repository ca bn?
Minikube là mt công c trin khai Kubernetes mn. Nó s to
mt máy o và trin khai mn có cha mt nút thc thi duy nht.
Minikube có th chy trên nhiu nn tng h u hành bao gm Linux, MacOS,
Windows.
Bây gi, hãy s d to mt cluster bao gm 1 nút thc thi
Kubernetes (máy o) duy nht, nó s chy các ng dng/dch v i dng các
u khin bi Kubernetes master.
>minikube start
Bn trin khai các dch v bng cách s dng các nh docker mà bi nó lên
DockerHub. Bn hãy m file microservices.yaml và thay th tt c nhng ch nào
xut hin tên tài khon docker hub là anhth bng tên tài khon ca bn, c th là
nhng dòng bu bng t image
- image: docker.io/anhth/microservice-kubernetes-demo-apache:latest
Tiy l trin khai các
H PHÂN TÁN
11
>kubectl apply -f microservices.yaml
Câu lnh trên to ra các Pods. Mt Pods có th cha mt hay nhiu Docker
Containers. Trong ví d này mi Pod ch cha mt Docker container. Các dch v
c to. Các dch v có duy nht ma ch IP và mt bn ghi DNS. Các
dch v có th s d cân bng ti.
S dng l cho hin tt c các thông tin ca Kubernetes master ca bn:
>kubectl get all
Câu hi 3: Trng thái (status) ca các pods va mi tc là gì? Bây gi, hãy
ch vài phút và gõ li lng thái mi ca các pods gi n thành
gì?
xem chi tinh kubectl describe services. Lnh nãy
c cho các pods (kubectl describe pods) và các deployments
(kubectl describe deployments).
B xem logs ca mt pod (thay th bng ID ca pod ca bn):
>kubectl logs catalog-269679894-60dr0
Bn thm chí có th m 1 shell ca pod ca bn:
>kubectl exec catalog-269679894-60dr0 -it /bin/sh
Hãy ch n khi trng thái ca tt c các pods ca bn chuyn thành "Running",
chy ng dng ca mình. Hãy gõ lnh sau:
>minikube service apache
Vi lnh trên thì bn có th m c trang web thông qua Apache httpd server
trên trình duyt web ca bn.
Bây gi hãy chy ng dng.
n vào "Customer", bn s thy tt c các tên cn vào "Add
customer", bn s tc khách hàng mi.
Tr v trang ch vi Catalog.
Tr v trang ch Home, n vào Order, và hãy th thêm vào vài yêu cu mua hàng.
Sau khi kng quên xóa toàn b các dch v và các deployments:
>kubectl delete service apache catalog customer order
H PHÂN TÁN
12
>kubectl delete deployments apache catalog customer order
và tt cluster:
>minikube stop
Bấm Tải xuống để xem toàn bộ.
Preview text:
Success! The example.com virtual host is working!