Trước tiên
Mình là Glutis, sinh viên ngành toán tại Hust, kỳ vừa rồi mình vừa học xong học phần hệ thống phân tán - mới thi xong môn này là tôi đã biết tình hình và điểm không mấy khả quan rồi và chả cả kỳ tôi cũng đi học đầy đủ và ghi chép cũng oke. Tôi ko muốn đống ghi chép này tồn đọng trên storage local lâu dài và cũng là để tôi nhớ thì tôi đăng lên đây cho ae cùng xem. Ghi chép chăm vlin mà đi thi chán ơi là chán.
Hệ thống phân tán là môn học quan trọng, ai học xong môn này thì có thể đi làm và hiểu hầu hết các khái niệm hạ tầng của công ty ngon ơ. Dưới đây là tổng hợp một số cái tôi ghi chép được trong kỳ, sẽ có những phần còn thiếu, nếu có thể ai đó hãy nhắc tôi bổ sung sau. 1 điều nữa đây là tài liệu cực kỳ đỉnh vì nó ko chỉ ghi chép lại lý thuyết thông thường mà con ghi lại mọi cái thầy nói, cứ cái nào hay hay tôi cho là có ích thì tôi ghi vào. Trong này có nhiều cái mà trong các tài liệu slide không có đâu nha. Ae xem kĩ :)
Chương 1: Mô hình truyền thông trực tiếp
2 khía cạnh của truyền thông
- time;
- location
độc lập
1 .Cơ chế
Group communication: hỗ trợ nhiều 1 ông khi gửi có thể đến nhiều ông
pub - sub, queue: phổ biến trên đám mây (mức logic)
- queue: 1 - 1: A gửi cho B
- pub- sub: 1 - n: A gửi cho ABCD…..
Dùng cơ chế bộ nhớ gián tiếp (Distributed share memory): chia sẻ chung 1 không gian bộ nhỡ của toàn hệ thống (mức con đến tận core)
2. Nhiệm vụ, vai trò các nút
Một số mô hình:
- CLient - Server: request - response (trách nhiệm của mỗi bên được phân chia không giống nhau). Server là bên cung cấp tài nguyên dịch vụ, Client là bên sử dụng. 1 client có thể có nhiều server. Chống chịu sự cố (1 dịch vụ triển khai trên nhiều máy). Có thể ánh xạ 1 dịch vụ trên nhiều node.
- Peer to Peer: Vai trò giống nhau giữa các nút (trong một chức năng dịch vụ). Nút nào cx có lúc là client, server. Hay để dữ liệu tài nguyên phân tán, mỗi node quản lý 1 phần csdl. Ưu điểm: khả năng chống chịu sự cố tốt hơn nhưng phức tạp hơn.
torrent (mạng chia sẻ ngang hàng) - một kiểu peer to peer
khác nhau: là peer to peer trong cùng 1 dịch vụ, client - server ở các chức năng dịch vụ khác nhau đều được.
3. Phân chia vai trò - placement
phân bố các cấu phần trên hệ thống như thế nào
- Ánh xạ tới mô hình vật lý
Một số các để phân bố các cấu phần của hệ thống
- Triển khai 1 cấu phần dvu trên nhiều máy, đảm bảo tính đáp ứng tải, chống chịu sự cố.
- Tạo bản sao theo mô hình cache: dữ liệu tạm thời được lưu gần client (giúp truy cập nhanh hơn do được đưa tới nơi gần nó - giống CDN)
Ví dụ vào hust lần đầu thì nó lưu js/css là những thành phần ko thay đổi, lần sau vào lại thì js/css sẽ ko lấy về nữa mà sẽ dùng ngay ở cache (có thể xóa bằng ctrl - F5)
Cache thì mất đồng bộ với ông gốc, thường chỉ là những cái rất ít thay đổi thôi)
Cache tại server, db server: cache ảnh, ….lần đầu đọc ở đĩa lần sau đọc ở cache
Cache dữ liệu tạo 1 bản sao để truy cập nhanh hơn
Mobile code: mã lệnh thay đổi vị trí (js là một mobile code)
mobile agent: mã lệnh dữ liệu di trú từ node này sang node khác.
Mô hình kiến trúc - các mẫu thiết kế hệ thống phân tán (design patern)
tái sử dụng, phục vụ cho một giải pháp nào đó
Các mẫu thiết kế kiến trúc thường sử dụng
- Layering: phân lớp(chia logic các tác vụ), tiering - phân tầng(đưa về chạy trên máy nào). Phân lớp chung chung: app - service, middleware, OS, Compute, network hardware
- thin client - client đơn giản
- proxy - đại diện để tương tác với ông nào đấy (đại diện)
- Broker - môi giới (trong bài toán khi tìm 1 dịch vụ mà ko bt nó ở đâu thì đi qua broker) + xử lý luồng theo sự kiện
1. Event sourcing (mô hình xử lý theo kiểu sự kiện)
Thường cho dữ liệu real - time cho dữ liệu cảm biến, mô hình tiếp nhận xử lý phân tích
một số mô hình mức cơ bản
- Mô hình tương tác
- Mô hình lỗi
- Mô hình an ninh
Đồng bộ về thời gian: thời gian là một yếu tố cần tính toán trong hệ phân tán: máy tính nào cx có đồng hồ mà đồng hồ có sai số, các máy tính có sai số khác nhau.
Đồng bộ - async: tuân thủ theo một giao thức nào đấy (một số yếu tố thời gian phải có ngưỡng) - giả định node B sẽ nhận được sau một thời gian nào đấy
Không đồng bộ - ko có ngưỡng khi nào nhận được
→ Internet ko đồng bộ do ko đảm bảo được thời gian, phần lớn là đủ ổn thôi
2. Mô hình lỗi (phần xử lý, phần truyền)
- Lỗi trên kênh truyền: gửi yêu cầu nhận được phản hồi nghĩ là B ổn, bên mạng có timeout, gửi lại….. Thường liên quan đến mất gói tin. Khắc phục: TCP có timeout (sau 1 hồi ko có xác nhận sẽ tự gửi lại), lỗi xử lý: xem log, transaction (muốn đảm bảo phải dựa vào log).
- Lỗi bất kỳ: ví dụ lỗi xử lý sai, tính toán ko đúng, quá trình xử lý ko hoàn thành đầy đủ thiếu 1 số tác vụ, lặp một số yêu cầu các thông điệp
- Lỗi thời gian/đồng hồ: Các máy tính độ sai lệch thời gian khác nhau, tại 1 thời điểm các server có thể giống nhau, sau 1 tuần sẽ khác. Sai lệch này là cực kỳ quan trọng
JWT: có ai, thời gian, t_0 + N phút
Người cấp là ông thứ 3, nếu 2 ông này cấp thời gian quá 1p thì hơi căng, 1 day thì quá là căng (vé ko hợp lệ) độ lệch này tă
3. Mô hình an ninh - an toàn thông tin
Trên đường truyền có các rủi ro giả mạo → mã hóa
Trên nút dùng các phần mềm phòng chống mã độc, …..
Khi sửa, có thay đổi thì ghi log thay đổi
một số giải pháp:
- cài phần mềm chống mã độc
- IAM
Nhắc lại một số thứ: xong kiến trúc → đi vào các kiến thức chung hệ thông phân tán: định danh, truyền thông
Truyền thông trong hệ phân tán
- Requests - response
- RPC (mức cao hơn): từ xa
- RMI (mức cao hơn): hướng đối tượng
Truyền thông giữa các nút sẽ qua hạ tầng mạng
Trong hệ phân tán:
- thường dùng truyên thông điệp
- đặc điểm môi trường ko tin cậy
Số lượng bên tham gia: point2point >< multicast
Liên quan:
- Truyền thông điệp
- Hàng đợi (gián tiếp)
- Phần mềm trung gian MOM (Hàng đợi có phần mềm trung gian message origanted ….
- Luồng - STREAM
II. $1 Truyền thông trong hệ Phân tán
A. Gọi từ xa
Request - response
RPC
RMI
1. Mạng và giao thức mạng
- phân lớp mạng
- PHân lớp OSI
- TCP/IP: physical, datalink
- network, app
Nguyên lý vận hành
- Phân loại truyền thông
- Phần mềm trung gian (tầng dưới trên network)
Truyền thông bền bỉ >< nhất thời
- bền bỉ: có đến nơi nhận
- nhất thời (ko bền bỉ): A gửi cho B thì A, B phải cùng tồn tại hoặc B phải sẵn sàng nhận
Truyền thông đồng bộ >< dị bộ
- Đồng bộ : tài 1 thời điểm làm 1 việc, sau đó mới đi làm việc khác. (lập trình dễ — bị log để lãng phí thời gian, làm trải nghiệm ko tốt)
- Dị bộ ngược lại: trải nghiệm tốt hơn ko lãng phí thời gian chờ (khó code)
- multi thread: đa luồng
Những trường cần thiết cho gửi thông tin:
- ID
- Ref ID
- t (time)
- sender receiver
- content
- error code
- signature
Gọi thủ tục từ xa RPC (RPC là 1 cái nền tảng)
- Gọi thủ tục trong tiến trình
- Khi tiến trình gọi thủ tục:
- Vùng trong ngắn xếp stack được cấp để lưu thông tin cho thủ tục
- Tham số thủ túc truyền vào thứ tự ngược FIFO
- Thực hiện thủ tục, trả về kết quả (trong thanh ghi), giải phóng bộ nhớ
- Điều khiển chuyển về tiến trình gọi, giải phóng ngắn xếp
Ví dụ thủ tục đọc file
- bên gọi : stub
- bên thực thi: skeleton
đồng bộ:
5. Gọi phương thức từ xa - tương tự như RPC nhưng hướng đối tượng
Đối tượng A trên 1 máy gọi đến đối tượng B trên một máy khác (khởi tạo từ xa)
b = newB(), khi gọi sẽ ko thấy gì tuy nhiên nó sẽ trả về Ref_ID
B. Truyền thống gián tiếp
- Truyền thông theo nhóm - Group communication
bao gồm :
- group
- member
Thứ tự:
- FIFO / source ordering
- causal: theo thứ tự thời gian
- total ordering: với 1 process, thông điệp A gửi trước thông điệp B thì cần ứng xử như thế với tất cả các process khác (chung là phải giống nhau)
quản lý nhóm:
- thêm bớt thành viên/đăng ký
- rời khỏi nhóm
- sự cố
3. Truyền thông theo hàng đợi - Message Queue
Truyền thông phổ biên trên cloud 1 - 1
queue | FIFO | priority
Cài đặt thực hiện các hàm
- Send()
- Receive()
- Có thể blocking receive: chưa xác nhận xong mới đọc thông điệp tiếp
- non blocking: phải xác nhận xong mới được đọc tiếp
- Notify()
Một số tính năng khác:
- transacstion: tác vụ send, receive bảo toàn -
- message transformation - xử lý chuyển sang định dạng khác
- security: ai được quyền gửi ai được quyền nhận
Ưu điểm:
- Ko phụ thuộc (kết nối các hệ thống ko đồng nhất với nhau)
cluster thì có liên quan đến nhau và là 1 cụm duy nhất, có vai trò ngang nhau
còn cơ chế load balancing cho server ko phải dạng cluster.
- Pub
Để xác định điểm truy cập, có thể sử dụng các kỹ thuật
- Giải pháp đơn giản - quảng bá, nhóm
- Dựa trên nguồn gốc - home based
- Bảng băm
Bảng băng phân tán:
Giới thiệu
- Được sử dụng trong các hệ phân tán, ngang hàng (như Napster, Freenet)
- Tổ chức tương tự bảng băm thông thường, nhưng được lưu trữ phân tán trên nhiều nút. Do đó khi có cập nhật/thay đổi (vd các bản ghi, các nút quản lý bảng băm) => chỉ ảnh hưởng một số nút
- Cung cấp chức năng tìm kiếm bản ghi trong hệ phân tán
- Bản ghi: là cặp {khóa, giá trị} - {key,value}
- Chức năng tìm kiếm chính xác: theo khóa /key
Consistent hash (kĩ thuật thường dùng để triển khai mảng băm): xác định hàm khoảng cách khi có khóa k_1, k_2, xác định được hàm khoảng các giữa 2 khóa s(k1, k2)
- Nút - gán id cho 1 giá trị khóa nào đó kx
- k
Giao thức Chord: không gian khóa biểu diễn thành các điểm trên hình tròn, chiều cố định
DHT: Cơ chế quản lý
Bảng băm phân tán - HTT
- Cách phân chia không gian khóa
- Kĩ thuật consistent hash:
- 1 node ra nhập (join) hoặc rời bỏ (leave) ht được uản lý như nào
- Tham gia - Node join
- Rời bỏ - Node leave
- 1 node ra nhập (join) hoặc rời bỏ (leave) ht được uản lý như nào
- Kĩ thuật consistent hash:
Giao thức Chord (1 cách cài đặt của consistent hash)
- Tìm kiếm: khóa k, tìm successor(k)
- Tìm kiếm (đơn giản)
- Mỗi nút: cần biết nút kết tiếp - successor(id). Tất nhiên nó bt quản lý các khóa nào successor(k))
- Yêu cầu tìm kiếm k gửi tới nút N
- Nếu N quản lý k ⇒ trả lại successor(k)
- Nếu ko: N chuyển yêu cầu tìm k tới nút kế tiếp của N - successor(N)
- Duyệt tuyến tính - tuần tự
→ Cải tiến tìm kiếm
Đồng bộ thời gian
Đồng hồ
để đồng bộ dùng giao thức NTP
- time server (nhiều máy) tổ chức thành cây phân cấp, máy ở gốc là chính xác nhất, các máy ở cấp dưới có độ chính xác kém hơn, tùy theo máy trạm gần server nào thì đồng bộ với server đấy.
Có nhiều giao thức phục vụ cho nhiều tình huống đồng bộ khác nhau
multicast: đồng bộ 1 chiều
procedure-call:
symmetric: phục vụ giữa các time server phục vụ chính xác
3. Logical time & logical clock
chỉ quan tâm đến sự kiện nào xảy ra trước, xảy ra sau
- Đồng hồ Lamport: sự kiện xảy ra trước → sự kiện xảy ra sau
- h1: trong cùng tiến trình và a xảy ra trước b
- h2: khác tiến trình: a là sk gửi msg, b là sk nhận msg tương ứng
- h3: bắc cầu a → b, b → c thì a → c
Sự kiện nào xảy ra trước thì có đồng hồ nhỏ hơn
khi trao đổi giữa các tiến trình leien quan đến gửi nhận
- Khi sk
sk nòa xảy ra trước phải có giá trị nhỏ hơn giá trị sau
- Vector clock: gồm nhiều thành phần
- NẾu có n process, thì có n vector có n thành phần
- Quy tắc cập nhập:
4. Trạng thái toàn cục - global state
để nói tại 1 thời điểm t hệ thống có trạng thái gì cần biết các tiến trình có trạng thái gì. Chúng ta có thể biết được trạng thái của hệ thống khi ghi nhận trạng thái của các tiến trình.
Trạng thái của hệ thống có thể xác định qua lịch sử thay đổi của từng tiến trình
Lát cắt khi lấy ra 1 tập con các sự kiện thì cta xác định ra một lát cắt chứa các sk cắt trên 1 tiến trình. Cần lát cắt để 1 hệ thống có lỗi cta muốn khôi phục phải đưa về trạng thái trước đấy
Tương tranh - khi có nhiều giao dịch cùng xảy ra. ko kiểm soát tốt thì dữ liệu có thể chưa hợp lệ
- Kĩ thuật hay dùng là loại trừ nhau.
- loại trừ nhau khi nhiều tiến trình cùng truy cập vào 1 tài nguyên chung để tranh xung đột nhiều cần cài đặt loại trừ
- Giả định môi truồng là async: thời gian gửi là hữu hạn, giả định môi trường ổn, ko gặp sự cố, thông điệp gửi sẽ ko bị thất lạc
Hệ thống phân tán bất đồng bộ (async)
Để vào tiến trình có 3 tác vụ:
- enter()
- resourceAcess()
- exit()
- Yêu cầu cơ bản đối với thuật toán loại trừ nhau
B. Bầu chọn - Election
thường ko cho tập chung
Tại 1 thời điểm có một bầu chọn có thể xảy ra (nếu nhiều bầu chọn thì ra kết quả ko xác định)
Status:
- Chưa tham gia
- Đã tham gia
biến elected_i: = p nếu tiến trình chưa end
:= none nếu tiến trình end rồi
Bầu chọn trong môi trường ko dây
C. Điều khiển tương tranh
khi có nhiều giao dịch mà ko kiểm soát thì sẽ có
VD trong csdl có nhiều thay đổi 1 lúc → dẫn đến ko nhất quán
→ Đảm bảo hệ thống luôn ở trạng thái nhất quán
Giao dịch theo nghĩa các tác vụ
Xử lý bảo giờ cũng thực hiện ghi vào logs trước xong làm gì thì làm 😊. Server ko phản hồi gì thì timeout → thực hiện lại transaction từ đầu
Kiểm soát/điều khiển tương tranh (concurrrency control)
khi tương tranh thì ko cho nó chạy đồng thời mà chạy tuần tự.
Chương 6: công nghệ xây dựng hệ thống phân tán
Service khác function ở: service triển khai độc lập ko phụ thuộc các ông khác, che giấu bên trong (interface)
dịch vụ web khác service: dvu web sử dụng nền tảng công nghệ web qua internet
lib khác service ở lib phải tương thích với nền tảng công nghệ
SOAP
Cơ bản về web service
- Độc lập - loose coupling (phụ thuộc lỏng lẻo) >< tight
Dịch vụ thư mục
Rest API (Representational State Transfer
là lựa chọn phổ biến thay cho SOAP
Sử dụng HTTP(s) để quản lý trạng thái các đối tượng,
Rest chỉ hỗ trợ HTTP(s) thôi
Methods
Get, post, put, delete là phổ biến
- Với SOAP khi thiết kế thì kiểu function, thể hiện qua các method,
- Rest API theo resouce (CRUD)
Ví dụ quản lý hồ sơ sinh viên thì coi hoofo sơ sinh viên là một tài nguyên, 1 dòng dữ liệu.
- C → Post
- R → Get
- U → Put
- D → Delete
Status code
- Thêm mới response: 201
- Họ 300: redirect
- Họ 400: Ko có gì thay đổi, ko tìm thấy, các loại lỗi
- Họ 500: Lỗi server
Nguyên tắc thiết kế
Hướng theo tài nguyên (xoay)
- Mỗi tài nguyên có định danh id
- Ưu điểm json hơn XML là dễ hiểu hơn → Dùng json tiết kiệm hơn (băng thông)
- Rest stateless (ko duy trì, phi trạng thái)
Di chuyển đối tượng này sang đối tượng khác dùng Hateoas: di chuyển giữa các resouce liên quan
Đặt tên cho API
ví dụ có APi quản lý hồ sơ sinh viên: cần có một URL để tham chiếu
- / /create_std: theo chức năng ( ko khuyến nghị)
- / / student/
→ Tên URL là danh từ
sh
Chương 7: Điện toán đám mây
cho phép khai thác tài nguyên theo yêu cầu
Đặc điểm
- Khả năng co dãn: chỉ sử dụng tài nguyên theo yêu cầu, lúc nào cần nhiều sẽ tăng lên, khi sử dụng ít thì ít
- Sẵn sàng, ổn định
- Tối ưu:
- Truy cập:
- Quản trị & tích hợp
IaaS: cung cấp tài nguyên tính toán thô
- CPU, RAM, storage, network,
- Thường là các vitual core
→ Công nghệ ảo hóa
Paas: EKS, ECS, Fargat là
thuê 1 web server
thuê 1 db - postgres
Saas: càng lên tầm này thì chi phí càng giamgr
Chương 8: Mô hình triển khai
Public cloud
Các nền tảng cloud nổi bật hiện tại: AWS, GCP, Azure
Private cloud
- virtual: có cái mất tiền, có cái free
- net:
- ip: thách thức: chi phí, nguồn lực bỏ ra rất lớn
Hybird cloud
Web, App thuê của public cloud
db tự mình làm chủ
? Ứng dụng nào nên để ở private, ứng dụng nào lên để ở public
- seld service: Ứng dụng phải phù hợp đơn giản cho người dùng sử dụng và làm được mọi thứ, nếu không sẽ phải tốn nguồn lực đi đào tạo khách hàng sẽ rất khó
- multi Ternance: Mỗi khách hàng có một nơi lưu trữ riêng
Cloud Native
Đưa ra các đặc tả để xây dựng các ứng dụng phù hợp với đám mây
- Microservice
- Container
- CI/CD: Nâng cấp mà không làm gián đoạn, dừng hệ thống
- Devops, Agile
→ Lợi ích của cloud native: có platform chung cho mọi khách hàng, thay đổi nhanh chóng
→ Thách thức
Kiến trúc Microservice
K/n:
- Độc lập mọi thứ từ lúc phát triển → Service
- Nhiều thành phần quy mô nhỏ → Micro
- Tái sử dụng được nhiều lần → Ưu điểm
- Quản lý nhiều service → Nhược điểm
Mô hình Monolithic “truyền thống”
- Tính monolithich: phụ thuộc, db tập trung
- Monolithic >< Microservice
Service Registry và Discorvery (Truy tìm dịch vụ)
API GW: client không đi trực tiếp dùng service mà đi qua một ông trung gian là API GW
Container và orchestrator
→ Là 1 môi trường thực thi , khởi động nhanh → user hầu như không ảnh hưởng khi sử dụng
Docker container
- là linux
- phổ biến nhất trong các loại container
Image
- Đóng gói môi trường chạy (là ảnh của một container)
- Tất cả là file, đóng gói trạng thái
Docker build → Tạo image
Docker pull → Kéo image từ internet hoặc một nơi nào đó về
run → Từ image thành container
Container Orchestrator
Công cụ quản lý vận hành nhiều container
- Theo dõi contain lỗi → reset
- Quá tải → Tạo thêm container
- Quản lý image
- Dư thừa container thì tắt bớt
Kubernet là một tools free để quản lý vận hành container orchestrator
- Pod: tập hợp các container liên quan đến nhau
- Để giao tiếp nhanh hơn
- Giao tiếp nhanh do cùng mạng
- Node: chạy Pod nào trên máy nào gọi là 1 node
UI → API → Kurbernet → Nodes
CLI→