We rely on mysqldump with these flags:
--single-transaction --quick
This will not lock InnoDB tables and will use the least RAM possible to complete the dump in a consistent state.
However, for MyISAM tables (usually not the case since InnoDB is the default) tables will be locked.