UUID là gì?
UUID (Universally Unique Identifier) là một chuỗi giá trị dài 128 bit được sử dụng để nhận dạng duy nhất thông tin trong hệ thống máy tính. Nó thường được sử dụng trong phát triển phần mềm để chỉ định các mã định danh duy nhất, cung cấp danh tính duy nhất và bền vững cho hầu hết các dữ liệu.
UUID được dùng để làm gì?
Phát triển phần mềm và kiến trúc cơ sở dữ liệu sử dụng UUID để gán hiệu quả các mã định danh duy nhất cho thông tin với chi phí thấp. UUID thường được dùng trong các trường hợp sau:
Hệ thống cơ sở dữ liệu:
UUID có thể được dùng để làm khóa chính trong cơ sở dữ liệu để xác định mỗi bản ghi có một mã định danh duy nhất trên toàn cầu mà không cần phối hợp tập trung. Điều này cho phép các bản ghi dễ dàng liên kết và truy xuất trên hệ thống và môi trường khác nhau.
Hệ thống phân tán
Trong các hệ thống phân tán, dữ liệu được phân bổ trên nhiều nút hoặc máy chủ, UUID giúp tạo các mã định danh duy nhất mà không cần đến cơ quan trung tâm.
Điện toán đám mây:
UUID được sử dụng trong môi trường điện toán đám mây để xác định tài nguyên, như máy ảo, khối lượng lưu trữ và giao diện mạng. Nó cho phép tài nguyên được cung cấp, quản lý và mở rộng dễ dàng trên các môi trường đám mây khác nhau.
Bảo mật
UUID được sử dụng trong các trường hợp liên quan đến bảo mật như tạo mã thông báo phiên duy nhất hoặc theo dõi các phiên bản phần mềm duy nhất.
Hệ thống tệp:
UUID có thể được sử dụng để nhận dạng duy nhất các tệp, giúp các tệp dễ dàng được chia sẻ và truy xuất trên nhiều hệ thống và môi trường khác nhau.
Cấu trúc của một UUID
UUID thường được biển diễn dưới dạng chuỗi 32 ký tự thập lục phân, được chia thành 5 phần, định dạng thường là “8-4-4-4-12”. Trong đó, mỗi phân đoạn sẽ biểu thị số bit riêng cho một thành phần cụ thể. Nó có thể bao gồm dấu thời gian, chuỗi xung nhịp và mã định danh nút.
Biểu diễn nhị phân và 128 bit:
- UUID là giá trị 128 bit, bao gồm 128 chữ số nhị phân (0 và 1)
- Mỗi chữ số thập lục phân sẽ biểu diễn 4 bit tương ứng. Nghĩa là chúng ta có 32 ký tự x 4 bit/ký tự = 128 bit.
Biểu diễn thập lục phân và 32 ký tự:
- UUID được biểu diễn dưới dạng chuỗi 32 ký tự thập lục phân (0-9 và a-f).
- Mỗi cặp ký tự thập lục phân bằng 8 bit ( 4 bit cho mỗi ký tự x 2 ký tự). Do có 16 giá trị cho mỗi ký tự từ (0-9 và a-f), mỗi cặp biểu diễn 2^8 = 256 tổ hợp. Nghĩa là chúng ta sẽ có 32 ký tự => 16 cặp x 8 bit/cặp = 128 bit.
Các phiên bản chính của UUID
UUID có 5 phiên bản chính, mỗi phiên bản sử dụng các phương pháp khác nhau để đảm bảo tính duy nhất trên hệ thống. Cụ thể:
UUID version 1
UUID version 1 dựa trên current timestamp được đo bằng đơn vị 100nano giây, được kết nối với địa chỉ MAC của thiết bị nơi UUID được tạo. Phiên bản này hữu ích để xác định nút nào đã tạo UUID trong các hệ thống phân tán.
UUID version 2
UUID version 2cũng dựa trên timestamp và địa chỉ MAC nhưng RFC 4122 không chỉ định chi tiết thế hệ chính xác. Nó bao gồm thông tin bổ sinh về bảo mật DCE.
UUID version 3 & 5
UUID ở phiên bản này được tạo bằng cách sử dụng hàm băm của namespace và name. Định danh vùng tên là UUID như thế thống tên miền DNS, Object Identifiers (OID), URL,…
UUIDv3 sử dụng MD5 (128 bit) trong khi UUIDv5 sử dụng SHA-1 (160 bit). Tùy vào thuật toán đã chọn, các phiên bản này sẽ cung cấp một số tùy chỉnh nhưng có thể không an toàn về mặt mật mã.
UUID version 4
UUID v4 được tạo ra bằng cách sử dụng số ngẫu nhiên hoặc giản ngẫu nhiên. Đây là phiên bản phổ biến do tính ngẫu nhiên và ẩn danh của nó. Nó mang lại tính duy nhất cao mà không cần dựa vào dấu thời gian hoặc địa chỉ MAC.
Ưu điểm – hạn chế của UUID
Ưu điểm
- Tính duy nhất và phi tập trung: UUID cho phép tạo mà không cần cơ quan trung tâm, giảm khả năng trùng lặp. Điểm quan trọng trong hệ thống phân tán hoặc yêu cầu không cần phối hợp tập trung.
- Tính linh hoạt: UUID được sử dụng trong nhiều ứng dụng khác nhau, tăng tiện ích có nó trên nhiều hệ thống khác nhau, đảm bảo khả năng tương thích trên nhiều môi trường phần mềm khác nhau.
Hạn chế
- Kích thước và khả năng đọc: UUID có kích thước 128 bit khiến chúng lớn hơn và kém thân thiện với người dùng so với các định danh đơn giản hơn. Thêm nữa là định dạng của nó cũng hạn chế khả năng đọc, gây khó khăn cho các ứng dụng hướng đến người dùng.
- Khả năng dự đoán tiềm năng: Một số phiên bản của UUID có thể tiết lộ thông tin về thời điểm và địa điểm chúng được tạo ra, gây ra rủi ro về bảo mật hoặc quyền riêng tư.
So sánh UUID với ID tự tăng (Auto-increment ID).
ID tự động tăng là các số được tạo tuần tự, được sử dụng làm khóa chính trong cơ sở dữ liệu. ID tự động tăng có một số hạn chế về khả năng mở rộng, có thể dự đoán được nên khiến chúng kém an toàn khi sử dụng trong URL hoặc ứng dụng công khai. Trong khi đó, UUID lại mang tính duy nhất trên toàn cầu, không thể dự đoán được nên đảm bảo tính bảo mật và khả năng mở rộng.
Sau đây là bảng so sánh chi tiết!
Tiêu chí | UUID | ID tự tăng |
Khả năng duy nhất | Duy nhất trên toàn cầu | Duy nhất trong phạm vi cơ sở dữ liệu |
Kích thước | 128 bit, biểu diễn bằng chuỗi 36 ký tự | Số nguyên, 4 hoặc 8 byte |
Hiệu suất | Tốn nhiều dung lượng hơn trong cơ sở dữ liệu và chỉ mục | Hiệu quả hơn về mặt lưu trữ và truy vấn |
Bảo mật | Không thể đoán trước nên độ bảo mật cao | Dễ đoán nên kém bảo mật hơn |
Tốc độ tạo ID | Nhanh và không phụ thuộc vào cơ sở dữ liệu | Chậm hơn và phụ thuộc vào cơ sở dữ liệu |
Tốc độ truy vấn | Chậm hơn do kích thước lớn và cấu trúc phức tạp | Nhanh hơn, nhất là khi làm việc với chỉ mục trong cơ sở dữ liệu lớn. |
Khả năng mở rộng | Cao | Thấp hơn |
Ứng dụng | Hệ thống phân tán, API, ứng dụng cần định danh duy nhất toàn cầu. | Hệ thống nhỏ, đơn giản. |
Lời kết
Trên đây, LANIT đã chia sẻ chi tiết về UUID – một chuỗi ký tự định danh duy nhất được sử dụng phổ biến trong cơ sở dữ liệu, API, hệ thống phân tán. Ngoài ra, nếu bạn đang cần tìm giải pháp lưu trữ đám mây cho ứng dụng của doanh nghiệp, liên hệ ngay LANIT để được tư vấn về dịch vụ Cloud VPS, Cloud Hosting giá rẻ của chúng tôi nhé!