Data centers are therefore providing scalable computing resources for reliable computing, for massive internet scale services, that's what we're all used to. These data centers tend to be located in geographically dispersed areas. Often, they maybe in remote areas for optimizing on conditions like energy consumption and making sure that we get economic power. Those are some of the issues in the location of data centers. If you look inside a data center, the network is one of the main components of the computational resources in a data center and these networking fabric connects all of the servers that are inside a data center, and it also provides connectivity to the clients that are out here via the internet. So that's the role of the routing fabric, both for internal communication among these servers inside the data center, as well as for going out on the internet and connecting to the clients that could be anywhere in the world. If you look at the considerations for the design of data center networks, the first thing that should jump at you is the fact that we've got hundreds of thousands of servers that are going to be located inside a data center today and if you take a single app, for example Gmail, it may be running on thousands of servers simultaneously, and these servers have to communicate with one another very quickly, very rapidly, so latency is important, and also throughput is equally important and these data centers are multi-tenancy. What does that mean? Well, it means that simultaneously, there could be multiple applications that can be coexisting on the computation resources of the server. The expectation for applications is that they'll have good performance so that the network capacity is uniform for supporting all the applications that maybe running simultaneously. Now if you think about it, if you have any two servers and they're communicating with each other, the communication is bound by only the network interface between them, that's the expectation. When you're running an application on a local area network and you're connecting it through a local area network, you're bound only by the interface speed that is connecting these servers. But now in a data center, we've got a routing fabric and so these servers actually go through the routing fabric in order to talk to one another, but yet you want layer 2 semantics. Layer 2, is the link layer, so like the Ethernet. When you're connected on a local area network, your expectation is that at link speed you can communicate with one another. But now you're going through a network fabric in order to communicate with one another, but yet you expect that all the individual applications will have layer 2 semantics for communication. That is a key property that you want to have in the network fabric. What that also means is that despite the fact that this network fabric is being shared by multiple servers, every one of these applications is thinking that they're running on a local area network from the point of view of the performance. That's one of the key properties that you want to build into the routing fabric. There's also a need for performance isolation for the applications, meaning that the traffic of one server should not interfere with the traffic of another server. So these are some of the properties or considerations that you have in building data center networks. So if you look at the scale of the data center networks, it's huge, and now it begs the question, how do you build these data center networks? Do you use commodity switches, or do you use special switching fabric? Meaning, if you want to provide this uniform capacity for all the applications, perhaps you want a special switching fabric to connect all these servers together but that won't be cost effective given the scale of the data centers that you're talking about and therefore it is attracted to think about using commodity switches. What I mean by commodity switches is, they are routers and the Ethernet switches that you're all used to and that is in the core of the wide area networks today. So those are the switches are commodity and therefore it is cheap, and therefore you can use that to build large-scale network fabric. So that's the attraction for building data center networks using commodity switching elements. But if you look at it from the point of view of the design, the application considerations that we talked about earlier, what we really want is the network topology to be like a crossbar interconnection network. Because if you have a crossbar interconnection network, then you can connect any element to any other element and all of them can work simultaneously with constant latency for communication, and there is no interference between them, no congestion in the network. So that's what you really want, but that would not be cost effective. So the network topology should look like a crossbar, but it should not cost like a crossbar. So that becomes the important design consideration in building data center networks, and it turns out that if you go back in time, in the early days of telephony, they had the same dilemma while building telephone switches. There also, you have a large number of subscribers who want to communicate with one another and you want a crossbar-like network so that you can connect any subscriber to any other subscriber, and they're not competing with each other, you can have simultaneous connection between all of them. This led Charles Clos to come up with a network called Clos network, which is a scalable interconnection network for meeting the bandwidth requirements for the end devices using commodity switches, this is the key. So instead of building specialist switching fabric, Charles Clos was able to build using commodity switches network for connecting subscribers in a telephone switching network, which had a nice property that I'll talk about in a minute. It turns out that data center networks are taking the same approach in today's world. So in other words, something that was good in the '50s for telephony has become really good for building data center networks today. There are several features of the Clos network, I'll mention that in a minute. First, let's look at the arrangement. So logically, we want a crossbar, but you don't want to spend the resources for building a true crossbar because there are n, capital N elements here, so capital N elements here, that wants to talk to capital N elements at the same time, and so long as the pairs of communicating entities are distinct from one another, all these conversations should go on in parallel simultaneously without interfering with one another, that's the expectation. So the way the Clos network is built is, it's built as a multi-stage interconnection network and this particular example shows a three stage Clos network, and if you see the switching elements that you see in the Clos network, they're all crossbar elements, but they're not n by n crossbar, that's infeasible. Instead, they are much smaller crossbar elements, in particular, n by k crossbar switches at what is called the ingress case, the first stage of a three stage Clos network, and there is a middle stage which has m by m crossbar switches, and there is the egress stage or the output stage, and they also have k by n, which is a mirrored image of the ingress stage, the ingress stage and egress stage tend to be mirror images and this how the structure is, and we'll talk about that in a minute. First observation is that we're using small sized commodity switches for building this Clos network and that is the first thing that you want to take away and you can see that from any ingress stage to a particular middle stage, there is a unique connection, there's only a single connection between here and here, and similarly, the single connection from here and here. But every one of these switches is connected to every one of these middle stages. Similarly, there's unique connection from the middle stage to the egress stage. Again, every one of these middle stages are connected to every one of the egress stages, the output stages. From this structure, there are several things that come out, and that is, there's a constant latency. The constant latency is the number of hops that you have to go through in going from the input to the output. That's a constant latency to connect any input to any output. That's the number 1 thing, and that's a useful property to have because we want this idea of supporting the level 2 semantic. Level 2 semantics is saying that it should appear as though two elements are connected directly to each other. Here also they are directly connected, but through a multi-stage. So there's a constant latency associated with the connection between any two hosts. The other interesting thing is that if k is greater than or equal to one, we can theoretically show that this Clos network will be non-blocking like a crossbar switch, or in other words, you can arrange these switches in a manner that allows any pair of input-output, so long as they are distinct from each other to be happening simultaneously in the Clos network. Then there are redundant paths between any two hosts. So if you take, for instance, going from here to here, to here, I can take this path that I've shown you in red. It can go like this, or you can also choose to go for the same output, you could also choose to go from here to here, and then here to here, and then out to that. So there are multiple paths, and that's another important observation. The reason why the multiple paths is important is because, we're talking about a huge network, so we're going to have failures all the time. If switches fail, you still want the ability to route traffic, and that's the nice thing about this switch. So this is the idea behind the Clos network.