Erasure Coding For Big-Data Systems: Theory And Practice