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

image.png

  • 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

image.png

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)

image.png

2. Nhiệm vụ, vai trò các nút

image.png

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)

image.png

  • 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

  1. 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

  1. 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.

  1. 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

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()
  1. 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→

Tài liệu ôn thi

  1. Haale
  2. Tổng hợp
  3. slide
  4. ghi chép của Vũ Huy