add async reading
set parts size for 1mb
refactor some code