I think you have three choices:
- Timestamps, if you know that all clocks are synchronized.
Serially incrementing numbers, if you have a known interlocking mechanism.
Pseudo-random numbers, such as UUIDs, which are, after all, designed for just this purpose. (You can, as I have opined before, prepend a human-readable string to these, without compromising their randomness.)
Consider whether the “unique identifier” would benefit from having some “human readable” content, such as a timestamp would have ... whether the unique id needs to be “unique across systems” ... what your practical timing considerations are.