💡 Key Takeaways
- Why UUID Generation Still Matters in 2026
- Understanding UUID v4: The Random Workhorse
- UUID v7: The Game-Changing Evolution
- When to Use v4 vs v7: Real-World Decision Framework
Vào thứ Ba tuần trước lúc 3 giờ sáng, tôi đã chứng kiến hệ thống xác thực của chúng tôi tạo ra UUID tỷ thứ một. Tôi đã là một kiến trúc sư hệ thống phân tán trong 14 năm, và khoảnh khắc đó đã khắc họa một điều mà tôi đã suy nghĩ trong nhiều tháng: chúng ta đang sống qua một cuộc cách mạng âm thầm trong cách chúng ta tạo ra các định danh duy nhất, và hầu hết các nhà phát triển vẫn chưa nhận ra điều đó.
💡 Những điểm chính
- Tại sao việc tạo UUID vẫn quan trọng vào năm 2026
- Hiểu về UUID v4: Con ngựa làm việc ngẫu nhiên
- UUID v7: Sự tiến hóa thay đổi cuộc chơi
- Khi nào sử dụng v4 so với v7: Khung quyết định trong thế giới thực
Sự chuyển đổi từ UUID v4 sang v7 không chỉ là một sự nâng cấp phiên bản—đó là một cách suy nghĩ lại căn bản về những gì mà các định danh duy nhất nên làm trong các hệ thống phân tán hiện đại. Sau khi dành ba năm qua để chuyển đổi năm hệ thống sản xuất trên ba lục địa, tôi đã học được rằng các công cụ chúng tôi sử dụng để tạo ra những định danh này quan trọng hơn nhiều so với hầu hết các nhóm nhận ra. Đó là lý do tại sao tôi muốn nói về bộ tạo UUID của txt1.ai, và quan trọng hơn, tại sao việc hiểu sự khác biệt giữa v4 và v7 có thể cứu bạn khỏi cơn ác mộng về hiệu suất mà tôi đã trải qua vào năm 2022.
Tại sao việc tạo UUID vẫn quan trọng vào năm 2026
Khi tôi bắt đầu sự nghiệp vào năm 2010, việc tạo UUID dường như là một vấn đề đã được giải quyết. RFC 4122 đã tồn tại từ năm 2005, và mọi người đều sử dụng UUID v4 (ngẫu nhiên) mà không phải nghĩ hai lần. Chúng tôi đã rải rác các gọi uuid.randomUUID() khắp mã Java của mình, tạo ra chúng trong PostgreSQL bằng gen_random_uuid(), và kết thúc một ngày.
Rồi các hệ thống của chúng tôi bắt đầu mở rộng. Đến năm 2021, chúng tôi đang xử lý 47 triệu giao dịch hàng ngày trên 12 microservices. Các chỉ mục khóa chính của PostgreSQL của chúng tôi đã phát triển lên 340GB. Hiệu suất truy vấn giảm 3-4% hàng tháng. Thủ phạm? Khóa chính UUID v4 ngẫu nhiên đang gây ra phân mảnh chỉ mục thảm khốc.
Đây là điều mà không ai nói với bạn trong các hướng dẫn: khi bạn chèn UUID ngẫu nhiên làm khóa chính, cơ sở dữ liệu của bạn phải liên tục cân bằng lại các chỉ mục B-tree. Mỗi lần chèn là thực sự ngẫu nhiên, buộc các phân trang và tổ chức lại. Chúng tôi đo được 23% I/O đĩa nhiều hơn so với các định danh tuần tự. Thời gian sao lưu của chúng tôi kéo dài từ 45 phút đến 2,3 giờ. Tỷ lệ trúng cache giảm từ 94% xuống 71%.
Đây là lúc UUID v7 xuất hiện. Được giới thiệu trong bản dự thảo RFC 9562 cập nhật, UUID v7 nhúng một dấu thời gian vào các bit có ý nghĩa nhất, giúp chúng có thể sắp xếp và tuần tự một cách tự nhiên. Khi tôi lần đầu đọc thông số kỹ thuật vào đầu năm 2023, tôi đã hoài nghi. Một phiên bản UUID khác? Thật không? Nhưng sau khi triển khai v7 trong dịch vụ người dùng của chúng tôi—điện thoại đang xử lý 8,2 triệu đăng ký hàng ngày—chúng tôi đã thấy kích thước chỉ mục giảm 31% và hiệu suất chèn cải thiện 47%.
Nhu cầu về các công cụ tạo UUID đáng tin cậy và dễ tiếp cận chưa bao giờ cao như vậy. Không phải nhà phát triển nào cũng có xa xỉ cài đặt thư viện hoặc chạy script địa phương. Đôi khi bạn đang gỡ lỗi trong sản xuất, làm việc trên một máy tính khách được bảo vệ, hoặc tạo mẫu trong một trình duyệt. Đó là khoảng trống mà txt1.ai lấp đầy—tạo UUID ngay lập tức, không cần cài đặt, với hỗ trợ cho cả v4 và v7.
Hiểu về UUID v4: Con ngựa làm việc ngẫu nhiên
UUID v4 đã là lựa chọn mặc định trong hơn 15 năm, và có lý do chính đáng. Nó đơn giản một cách đẹp đẽ: tạo ra 122 bit ngẫu nhiên, đặt một vài bit phiên bản và biến thể, và bạn đã xong. Xác suất va chạm là cực kỳ thấp—1 trong 2^122, hoặc xấp xỉ 5.3 × 10^36—đến mức bạn có thể coi chúng là duy nhất toàn cầu mà không cần đồng bộ hóa.
"Khóa chính UUID v4 ngẫu nhiên không chỉ làm chậm cơ sở dữ liệu của bạn—chúng còn phá hủy tính cục bộ của chỉ mục một cách có hệ thống, biến mỗi lần chèn thành một khoản thuế hiệu suất mà tích lũy hàng ngày."
Tôi đã tạo ra hàng trăm triệu UUID v4 trong suốt sự nghiệp của mình, và tôi chưa bao giờ thấy một va chạm trong môi trường sản xuất. Toán học hoạt động. Nếu bạn tạo ra một tỷ UUID mỗi giây, bạn sẽ cần chạy liên tục trong 85 năm trước khi đạt được xác suất 50% về một va chạm duy nhất. Đối với hầu hết các ứng dụng, điều này là quá đủ.
Cấu trúc rất đơn giản: 32 ký tự thập lục phân được hiển thị trong năm nhóm được phân tách bằng dấu gạch ngang, như 7f3e4d2a-9b1c-4a5e-8f2d-6c9e1b4a7f3e. Nhóm thứ ba luôn bắt đầu bằng '4' (điều này chỉ ra phiên bản 4), và nhóm thứ tư luôn bắt đầu bằng '8', '9', 'a', hoặc 'b' (điều này chỉ ra biến thể).
Nơi mà v4 tỏa sáng chính là trong các hệ thống phân tán không có sự đồng bộ hóa. Khi tôi thiết kế nền tảng IoT của chúng tôi vào năm 2019, chúng tôi có 340,000 thiết bị biên tự tạo ra các định danh một cách độc lập. Không kết nối mạng, không có cơ quan trung ương, không đồng bộ. UUID v4 là hoàn hảo. Mỗi thiết bị có thể tạo ra các định danh mà không có nguy cơ va chạm, bất kể có bao nhiêu thiết bị khác cùng làm điều đó.
Sự ngẫu nhiên cũng mang lại lợi ích về bảo mật. Không giống như các định danh tuần tự, UUID v4 không rò rỉ thông tin về hệ thống của bạn. Một kẻ tấn công không thể đoán ID tiếp theo hoặc ước lượng số lượng người dùng của bạn. Khi chúng tôi công khai các endpoint API của mình, sự không dự đoán này là rất quan trọng để ngăn chặn các cuộc tấn công liệt kê.
Nhưng v4 cũng có những điều chi phí của nó. Sự ngẫu nhiên khiến cho nó chống va chạm nhưng cũng làm cho nó tệ hại cho các chỉ mục cơ sở dữ liệu. Trong nền tảng thương mại điện tử của chúng tôi, chúng tôi đã theo dõi rằng các khóa chính v4 đã gây ra 3.7 lần số lần phân trang hơn so với các ID tuần tự. Các khoảng thời gian bảo trì chỉ mục hàng tháng của chúng tôi đã tăng từ 20 phút lên 94 phút. Phân phối ngẫu nhiên có nghĩa là các bản ghi liên quan bị phân tán khắp đĩa, giết chết tính cục bộ của cache và buộc phải đọc vật lý nhiều hơn.
UUID v7: Sự tiến hóa thay đổi cuộc chơi
UUID v7 đại diện cho sự tiến hóa quan trọng nhất trong thiết kế định danh duy nhất kể từ v4. Sau khi triển khai nó trên bốn hệ thống sản xuất, tôi có thể tự tin nói rằng nó giải quyết vấn đề hiệu suất cơ sở dữ liệu đã làm khổ v4 suốt nhiều năm trong khi duy trì lợi ích của việc tạo ra phân tán mà chúng tôi dựa vào.
| Tính năng | UUID v4 | UUID v7 | Tác động |
|---|---|---|---|
| Phương pháp tạo | Hoàn toàn ngẫu nhiên | Dựa trên dấu thời gian với phần ngẫu nhiên | v7 cho phép sắp xếp theo thời gian |
| Hiệu suất chỉ mục | Gây ra phân mảnh | Mẫu chèn tuần tự | v7 giảm I/O đĩa khoảng 23% |
| Bộ nhớ đệm cơ sở dữ liệu | Tính cục bộ kém (tỷ lệ trúng 71%) | Tính cục bộ tốt hơn (tỷ lệ trúng 94%+) | Tăng hiệu suất truy vấn đáng kể |
| Có thể sắp xếp | Không có thứ tự thời gian | Tự nhiên theo thứ tự thời gian | Loại bỏ cần thiết cho các cột thời gian riêng biệt |
| Trường hợp sử dụng | Các hệ thống kế thừa, định danh không phải DB | Các hệ thống phân tán hiện đại, khóa chính | v7 tối ưu cho quy mô |
Đổi mới chính là nhúng một dấu thời gian Unix trong 48 bit đầu tiên. Điều này có nghĩa là UUID v7 được sắp xếp theo thời gian và có thể sắp xếp tự nhiên. Khi bạn tạo UUID v7 theo thứ tự, chúng sẽ tăng một cách đơn điệu. Thay đổi đơn giản này có tác động sâu sắc đến hiệu suất cơ sở dữ liệu.
Hãy để tôi phân tích cấu trúc: 48 bit đầu tiên chứa một dấu thời gian Unix tính bằng mili giây, cung cấp độ chính xác thời gian đến mili giây và vùng thời gian kéo dài đến năm 10889. 12 bit tiếp theo là ngẫu nhiên, cung cấp thứ tự dưới mili giây và khả năng chống va chạm. 62 bit còn lại là ngẫu nhiên, đảm bảo tính duy nhất ngay cả khi tạo ra hàng nghìn ID mỗi mili giây.
Trong hệ thống xử lý thanh toán của chúng tôi, việc chuyển từ v4 sang v7 đã giảm kích thước chỉ mục xuống 28% trong vòng ba tháng. Hiệu suất chèn cải thiện 52% trong thời gian tải cao. Đặc biệt, độ trễ truy vấn ở phân vị 95 của chúng tôi đã giảm từ 340ms xuống 180ms. Lý do? Các chèn tuần tự có nghĩa là các bản ghi mới tụ tập lại trên đĩa, cải thiện tỷ lệ trúng cache và giảm I/O ngẫu nhiên.
Tôi đã đo lường tác động một cách cẩn thận. Trước v7, chỉ mục khóa chính của bảng giao dịch của chúng tôi yêu cầu 89GB cho 420 triệu bản ghi. Sau khi chuyển sang v7 và xây dựng lại chỉ mục, cùng dữ liệu chỉ chiếm 64GB. Việc tiết kiệm không gian đến từ việc sử dụng trang tốt hơn—các chèn tuần tự lấp đầy các trang một cách hiệu quả hơn, giảm phân mảnh nội bộ.
Sự có thể sắp xếp cũng cho phép các mẫu truy vấn mạnh mẽ. Các quét khoảng thời gian theo ID giờ đây tự động quét theo thời gian, điều mà hầu hết các truy vấn cần. Khi gỡ lỗi các vấn đề trong sản xuất, tôi có thể truy vấn theo khoảng UUID để lấy tất cả các bản ghi từ một khoảng thời gian cụ thể mà không cần một cột thời gian riêng biệt. Điều này đã cứu chúng tôi hàng giờ trong phản ứng sự cố.
Một mối quan tâm mà tôi thường nghe: việc nhúng các dấu thời gian không rò rỉ thông tin sao? Có, nhưng đó là một sự đánh đổi có tính toán. Độ chính xác của dấu thời gian là mili giây, không phải micro giây, giới hạn những gì kẻ tấn công có thể suy ra. Và các bit ngẫu nhiên vẫn khiến các cuộc tấn công liệt kê khó khả thi. Đối với hầu hết các ứng dụng, lợi ích hiệu suất vượt xa việc tiết lộ thông tin tối thiểu.
Khi nào sử dụng v4 so với v7: Khung quyết định trong thế giới thực
Sau khi chuyển nhiều hệ thống giữa v4 và v7, tôi đã phát triển một khung quyết định mà tôi thấy hữu ích. Sự lựa chọn không phải lúc nào cũng rõ ràng, và tôi đã mắc phải những sai lầm khiến mất hàng tuần công việc chuyển đổi. Đây là những gì tôi đã học được qua thử nghiệm và sai lầm.
"Sự chuyển đổi từ UUID v4 sang v7 không chỉ là về việc theo đuổi xu hướng. Đó là về việc công nhận rằng các định danh theo thứ tự thời gian phù hợp hơn với cách mà các cơ sở dữ liệu hiện đại thực sự hoạt động."
Sử dụng UUID v4 khi bạn cần sự không đoán trước tối đa. Hệ thống phát hiện gian lận của chúng tôi tạo ra các ID trường hợp cần hoàn toàn không tuần tự để ngăn chặn việc nhận dạng mẫu. Chúng tôi sử dụng v