A sequence item is an object that models a piece of information being transmitted between two components (sometimes it's called a "transaction"). It can be can be directed, constrained randomized or fully randomized.
Sequences are objects whose body() method is used to generate sequence_items, optionally randomize it and sent to the driver through sequencer.
UVM Sequences can be transient or persistent means it may drive stimulus for the duration of the simulation, or anywhere in-between.
UVM Sequences are not part of the component hierarchy.
UVM Sequencer controls the flow of UVM Sequence Items (transactions) generated by one or more UVM Sequences.
get_next_item(), item_done() is implemented in uvm_sequencer.
When multiple sequences are running in parallel, then sequencer is responsible for arbitrating between the parallel sequences.
lock(), unlock(), grab(), ungrab() is implemented in uvm_sequencer.
sequences can call other sequences (via sequence.start()). A sequence that is started from another sequence (as opposed to from a test) is called a sub-sequence.