





Preview text:
lOMoAR cPSD| 61552860 BÀI TẬP TRÊN LỚP
MÔN HỌC: HỆ PHÂN TÁN
CHƯƠNG 2: TIẾN TRÌNH VÀ TRAO ĐỔI THÔNG TIN HỌ
TÊN SV: Nguyễn Đặng Phương Anh MSSV: 20210079 MÃ LỚP: 154056 MÃ HỌC PHẦN: IT4611
Câu hỏi 1: Có cần thiết phải giới hạn số lượng các luồng trong một tiến trình server? Trả lời:
Việc giới hạn số lượng các luồng (threads) trong một tiến trình server là rất cần thiết
vì đó là một cách quản lý tài nguyên hiệu quả, giúp server hoạt động ổn định và đáng
tin cậy, giúp tránh các vấn đề về tranh chấp tài nguyên, tối ưu hóa hiệu suất, và đảm
bảo khả năng dự đoạn của hệ thống.
Câu hỏi 2: Có nên chỉ gắn một luồng đơn duy nhất với một tiến trình nhẹ? Trả lời:
Việc gắn một luồng đơn duy nhất với một tiến trình nhẹ có thể là một cách tiếp cận
hiệu quả trong những trường hợp cụ thể, đặc biệt khi ứng dụng đơn giản và không
yêu cầu xử lý đồng thời. Tuy nhiên, đối với các ứng dụng phức tạp hoặc có yêu cầu
hiệu suất cao, cần xem xét việc sử dụng nhiều luồng hoặc tận dụng các mô hình xử
lý đồng thời khác để tăng cường hiệu suất và khả năng phản hồi của hệ thống.
Câu hỏi 3: Có nên chỉ có một tiến trình nhẹ đơn gắn với 1 tiến trình? Trả lời:
Việc chỉ sử dụng một tiến trình nhẹ đơn trong một tiến trình có thể phù hợp cho các
ứng dụng đơn giản hoặc môi trường tài nguyên hạn chế, giúp đơn giản hóa thiết kế
và tiết kiệm tài nguyên. Tuy nhiên, đối với các ứng dụng phức tạp hoặc cần xử lý
đồng thời, bạn nên xem xét các mô hình xử lý đa tiến trình hoặc đa luồng để tối ưu
hiệu suất và khả năng mở rộng của hệ thống.
Câu hỏi 4: Bài toán này yêu cầu bạn so sánh thời gian đọc một tệp (file) của một
máy chủ tập tin (file server) đơn luồng và một máy chủ đa luồng. Phải mất tổng cộng
15 ms để nhận 1 yêu cầu (request) và thực hiện quá trình xử lý, giả định rằng các dữ
liệu cần thiết nằm ở bộ nhớ đệm trong bộ nhớ chính. Nếu cần thiết phải thực hiện
một thao tác truy cập ổ đĩa thì cần thêm 75 ms, biết rằng việc phải thực hiện thao tác
này có xắc suất là 1/3. Hỏi máy chủ có thể nhận bao nhiêu yêu cầu/giây trong 2
trường hợp: máy chủ là đơn luồng và máy chủ là đa luồng (ngoài luồng nhận và xử
lý request, sẽ có thêm 1 luồng để truy cập ổ đĩa nếu cần thiết)? Giải thích. lOMoAR cPSD| 61552860 Trả lời:
Câu hỏi 5: Hệ thống X chỉ định máy của user chưa server, trong khi các ứng dụng
lại được coi như client. Điều đó có vô lý không? Giải thích. Trả lời:
Việc Hệ thống X chỉ định máy của người dùng là server và các ứng dụng là client
không vô lý. Đây là một mô hình client-server đảo ngược so với thông thường, nhưng
nó phản ánh đúng vai trò của các thành phần trong việc hiển thị giao diện đồ họa.
Các client (ứng dụng) cần yêu cầu dịch vụ hiển thị từ X Server để tương tác với
người dùng, bất kể chúng chạy ở đâu.
Câu hỏi 6: Giao thức thiết kế cho hệ thống X gặp phải vấn đề về tính mở rộng. Chỉ
ra các giải pháp để giải quyết vấn đề đó? Trả lời:
Các vấn đề về tính mở rộng trong hệ thống X có thể được giải quyết thông qua việc
cải tiến giao thức, sử dụng kiến trúc proxy, tối ưu hóa quản lý kết nối, và cân nhắc
áp dụng các giao thức mới như Wayland. Ngoài ra, việc cải thiện hiệu suất thông qua
tối ưu hóa đồ họa và giảm bớt khối lượng dữ liệu truyền cũng là những giải pháp
hiệu quả để nâng cao khả năng mở rộng của hệ thống.
Câu hỏi 7: Với việc xây dựng một server đồng thời, hãy so sánh việc server này tạo
một luồng mới và tạo một tiến trình mới khi nhận được yêu cầu từ phía client. Trả lời:
- Sử dụng luồng là một lựa chọn tốt cho các Server yêu cầu xử lý nhiều yêu cầu
đồng thời với hiệu suất cao và chi phí thấp. Tuy nhiên, cần chú ý đến các vấn
đề về đồng bộ hóa và an toàn dữ liệu.
- Sử dụng tiến trình phù hợp cho các ứng dụng cần tính ổn định và an toàn cao
hơn, mặc dù có thể tiêu tốn nhiều tài nguyên hơn và gây khó khăn trong việc
giao tiếp giữa các tiến trình.
Tùy thuộc vào yêu cầu cụ thể của ứng dụng và tài nguyên hệ thống, có thể
chọn giữa việc sử dụng luồng hay tiến trình để đạt được hiệu suất và tính ổn
định tốt nhất cho Server.
Câu hỏi 8: Nếu bây giờ một webserver tổ chức lưu lại thông tin về địa chỉ IP của
client và trang web client đó vừa truy cập. Khi có 1 client kết nối với server đó,
server sẽ tra xem trong bảng thông tin, nếu tìm thấy thì sẽ gửi nội dung trang web
đó cho client. Server này là có trạng thái (stateful) hay không trạng thái (stateless)? Trả lời: lOMoAR cPSD| 61552860
Webserver là có trạng thái (stateful) vì nó lưu giữ và quản lý thông tin liên quan đến
client và yêu cầu của họ. Điều này giúp cải thiện hiệu suất và trải nghiệm của client
nhưng cũng có thể làm tăng độ phức tạp trong việc quản lý trạng thái và bảo trì hệ thống.
Câu hỏi 9: So sánh Docker và Virtual Machine. Trả lời: Docker Virtual Machine (VM) Khái niệm
Công nghệ container hóa cho Công nghệ ảo hóa tạo ra các
phép đóng gói ứng dụng và phụ máy ảo (VM) trên một máy
thuộc của nó vào một container. chủ vật lý, mỗi máy có hệ điều hành riêng. Cấu trúc
Chạy trên kernel của hệ điều Chạy trên hypervisor với một
hành host, chia sẻ kernel giữa hệ điều hành riêng cho mỗi các container
máy ảo, không chia sẻ kernel. Tài nguyên
Nhẹ hơn, yêu cầu ít tài nguyên Nặng hơn, yêu cầu nhiều tài
hơn, vì không cần tải một hệ nguyên hơn, vì mỗi VM cần
điều hành đầy đủ cho mỗi một hệ điều hành đầy đủ và container tài nguyên riêng.
Thời gian khởi Khởi động nhanh chóng (vài Khởi động chậm hơn (có thể động
phút hoặc thậm chí mili giây) do mất vài phút) do cần khởi
không cần khởi động hệ điều động toàn bộ hệ điều hành. hành Quản lý
Quản lý đơn giản và dễ dàng Quản lý phức tạp hơn, vì cần
hơn, cho phép xây dựng, triển quản lý nhiều hệ điều hành và
khai, và mở rộng ứng dụng tài nguyên cho mỗi máy áo nhanh chóng
Khả năng tương Tốt cho việc phát triển ứng Thích hợp cho các ứng dụng thích
dụng microservices và DevOps. yêu cầu hoàn toàn tách biệt và
Tương thích tốt với các ứng không tương thích với nhau. dụng hiện có. Bảo mật
An toàn hơn nhưng chia sẻ Tách biệt tốt hơn, vì mỗi VM
kernel có thể tạo ra rủi ro bảo chạy một kernel riêng biệt, mật.
giảm thiểu rủi ro bảo mật lOMoAR cPSD| 61552860
Câu hỏi 10: Trong các giao thức phân tầng, mỗi tầng sẽ có một header riêng. Vậy
có nên triển khai một hệ thống mà tất cả các header của các tầng đưa chung vào một
phần (gọi là header chung), gắn vào đầu mỗi thông điệp để có thể xử lý chung? Giải thích. Trả lời:
Việc đưa tất cả các header của các tầng vào một header chung ở đầu mỗi thông điệp
là không hợp lý vì: vi phạm nguyên tắc phân tầng, Khó khăn trong xử lý, Giảm tính
linh hoạt, Ảnh hưởng hiệu suất, Khó khăn trong việc kiểm soát lỗi và bảo mật. Việc
giữ header của mỗi tầng riêng biệt là hợp lý hơn vì nó duy trì tính phân tầng, tăng
tính linh hoạt, giảm độ phức tạp trong xử lý, và giữ hiệu suất cũng như bảo mật của
hệ thống ở mức tối ưu.
Câu hỏi 11: Xét 1 thủ tục incr với 2 tham số nguyên. Thủ tục làm nhiệm vụ là cộng
1 đơn vị vào mỗi tham số. Bây giờ xét trường hợp chúng ta gọi thủ tục đó với cùng
một biến, ví dụ incr(i, i). Nếu biến i được khởi tạo giá trị 0, vậy giá trị của i sẽ là bao
nhiêu sau khi gọi thủ tục này trong 2 trường hợp sau: - Lời gọi tham chiếu - Phương
pháp sao chép-phục hồi được sử dụng. Trả lời:
Lời gọi tham chiếu: Sau khi gọi incr(i, i), giá trị của i sẽ là 2
Phương pháp sao chép – phục hồi: sau khi gọi incr(i, i) giá trị của i vẫn là 0.
Câu hỏi 12: Một kết nối socket cần 4 thông tin nào? Tại sao phải cần đủ 4 thông tin đó? Trả lời:
Một kết nối socket cần 4 thông tin cơ bản sau:
1. Địa chỉ IP của máy chủ: Địa chỉ của máy chủ mà client muốn kết nối đến
2. Cổng (Port): Số cổng của dịch vụ chạy trên máy chủ để giao tiếp với client
3. Giao thức: Giao thức truyền thông, thường là TCP(kết nối) hoặc UPD (không kết nối)
4. Địa chỉ IP của client: Địa chỉ của máy client (có thể là địa chỉ nội bộ, hoặc bên
ngoài, tùy vào kết nối mạng)
Phải cần đủ 4 thông tin này là vì nếu không đủ 4 yếu tố này, kết nối không thể định
tuyến chính xác, và dữ liệu không thể truyền đến đúng dịch vụ hoặc ứng dụng cần giao tiếp.
Câu hỏi 13: Tại sao giao thức yêu cầu-trả lời (request-reply) lại được coi là đồng bộ và tin cậy? Trả lời: lOMoAR cPSD| 61552860
Giao thức yêu cầu – trả lời được coi là đồng bộ và tin cậy vì những lý do sau:
- Trong mô hình request – reply, quá trình giao tiếp giữa client và Server diễn
ra theo thứ tự định sẵn. Client gửi một yêu cầu (request) và đợi cho đến khi
Server gửi phản hồi (reply) trước khi tiếp tục tác vụ tiếp theo. Quá trình này
tạo ra một dòng chảy nhất quán, giúp đảm bảo rằng mỗi yêu cầu được nhận
phản hồi đầy đủ, và các bước thực hiện đều tuân thủ một trình tự đồng bộ
- Thường triển khai cơ chế xác nhận và quản lý lỗi. Nếu không nhận được phản
hồi, client có thể thiết lập lại yêu cầu hoặc báo lỗi, giúp phát hiện và xử lý tình
huống mất dữ liệu hoặc lỗi truyền tải.
Câu hỏi 14: Hai vấn đề chính đối với giao thức RPC là gì? Trả lời:
Hai vấn đề chính với giao thức RPC đó là: - Vấn
đề tương thích và khác biệt về nền tảng - Vấn
đề hiệu suất và độ trễ.
Câu hỏi 15: Vấn đề đối với truyền tham biến trong RPC là gì? Còn đồi với truyền
tham chiếu? Giải pháp đưa ra là gì? Trả lời:
Việc truyền tham biến trong RPC có thể gặp phải nhiều vấn đề liên quan đến sự
tương thích, hiệu suất, quản lý trạng thái, đồng thời và bảo mật. Việc truyền tham
chiếu trong RPC có thể gặp phải các vấn đề như sao chép dữ liệu, quản lý bộ nhớ,
đồng bộ nhớ và xử lý trạng thái. Để giải quyết vấn đề này, các nhà phát triển có thể
sử dụng IDL, serialization, cơ chế đồng bộ hóa, tham chiếu cho phép và mã hóa dữ
liệu để đảm bảo tính nhất quán và hiệu suất của hệ thống.
Câu hỏi 16: So sánh RMI và RPC. Nhược điểm của RMI so với RPC là gì? Trả lời: RPC RMI Đặc điểm
RPC là một trang web cho các Là một diễn đàn cho Java
thư viện và hệ điều hành Đặc tính
RPC tạo điều kiện thuận lợi cho RMI hỗ trợ lập trình hướng
việc lập trình các thủ tục đối tượng Power RPC kém mạnh mẽ hơn RMI mạnh mẽ hơn Sự bảo vệ Không có bảo vệ cho RPC
Nó cung cấp sự bảo vệ ở cấp độ khác hàng lOMoAR cPSD| 61552860 Các ứng dụng
Đối với các ứng dụng RPC cơ Nhiều mã cho các ứng dụng
bản, cần có một số mã
RMI cơ bản là không cần thiết
Nhược điểm của RMI so với RPC là:
- RMI chỉ hoạt hoạt động trong môi trường Java, trong khi RPC có thể được
triển khai với nhiều ngôn ngữ khác nhau. Điều này hạn chế khả năng tích hợp
của RMI với các hệ thống viết bằng các ngôn ngữ khác.
- RMI có thể phức tạp hơn trong việc thiết lập và cấu hình so với RPC, đặc biệt
khi cần phải xử lý các đối tượng phức tạp và cấu hình các máy chủ RMI.
- RMI phụ thuộc vào phiên bản của Java. Nếu có sự thay đổi trong phiển bản
Java hoặc trong cách mà Java xử lý serialization, có thể gây ra sự cố tương
thích. Ngược lại RPC có thể bị ít ảnh hưởng trong vấn đề nay.
- RMI có thể yêu cầu nhiều tài nguyên hơn do tính chất truyền tải các đối tượng
phức tạp và quá trình serialization, trong khi RPC thường nhẹ hơn khi làm
việc với các kiểu dữ liệu đơn giản.
Câu hỏi 17: Hàm listen được sử dụng bởi TCP server có tham số là backlog. Giải
thích ý nghĩa tham số đó. Trả lời:
Tham số backlog trong hàm listen được sử dụng bởi TCP Server định nghĩa số lượng
kết nối đang chờ trong hàng đợi (queue) khi Server bận xử lý các kết nối trước đó.
Khi một client gửi yêu cầu kết nối đến Server, và Server đã đạt đến giới hạn của số
lượng kết nối mà nó có thể xử lý ngay lập tức, các yêu cầu kết nối tiếp theo sẽ được
đưa và hàng đợi cho đến khi Server sẵn sàng xử lý.
Câu hỏi 18: Trong trao đổi thông tin hướng dòng, những cơ chế thực thi QoS được
thực hiện ở tầng nào? Giải thích. Trình bày một số cơ chế thực thi QoS để chứng minh điều đó. Trả lời:
Các cơ chế thực thi QoS chủ yếu được thực hiện ở tầng liên kết dữ liệu và tầng mạng
trong mô hình OSI. Tầng liên kết dữ liệu tập trung vào quản lý băng thông và độ tin
cậy trong mạng cục bộ, trong khi tâng mạng quản lý định tuyến và chất lượng dịch
vụ qua nhiều mạng. Các cơ chế như Ethernet Priority, VLAN Tagging, … đều góp
phần vào việc đảm bảo QoS trong việc truyền tải thông tin hướng dòng.