Advanced Coding Techniques for Fast Failure Recovery in Distributed Storage Systems