Building Distributed Systems Using Programmable Networks