Content Distribution Networks: An Engineering Approach