 All right, this is Arya Lerner, the in-blog founder and coder extraordinaire. This is Michael Fairchild, he's a sailor. We're a senior. And we both work at the software engineers at AT&T Interactive, really far away from here. And we are working on a piece of software, an open-source software called O-Party. So that's a great idea. It lets you message your friends, and they can follow you. No way, no! It's just what it's like to live in a character town. I'm pretty much a character. I don't want to name you. Well, let's get started. All right, this week. So first we have to write. It should be pretty easy. Maybe we'll write it in random. No way. Yeah, that's right. And then you have to configure it. Yeah. Install stuff. It's going to be popular, so we're going to need to scale them up. Yeah, because we're like, the day of open, there's going to be like more than a billion hits. Probably. More than 10, I guess that's the story. Yeah. And then we're going to read the figure. It's going to change. We want videos on the messages instead of text. We're going to make a 139-bit video. Totally. And then of course when we don't want to spend money, we don't have. We've got to make sure we scale them. So, I think you've got to pay for it. That's a brag. I mean the rest of it's kind of fun. Let's have to like configure it. But anyway. Whoa, went too fast. So it would be nice if we could just do that. Yeah, one file, and we could just have one file. Define our infrastructure, check it into version control, and run tests against it. That would be awesome. Embrace the group. Yeah, that's something beautiful. Yeah, so hey, listen. Let's see what it would look like. Well, I think maybe we could define our application. Yeah, let's do it. Yeah, we should probably extend some servers. Yeah, we should make sure that we limit them to, we don't want too many, we can't be too many, in case like there are four million. Yeah. But we also don't want there to be zero. So we've got to make sure there's at least one. Yes, indeed. And we also should probably take a remote base somewhere to run it, you know, Sly Souls. ECT is probably a good example. I think I've heard about that one. I think we should go with that one. Okay, all right, let's do it. Oh, you know what? We should keep it all approved. Yeah, totally. That's what we just said. Okay, this is an example. All right, so now we'll talk to you guys. Whoa, where'd you guys come from? All right, so in this example, we're going to have to show you a little example. We are going to put a file on our cloud. And by cloud, we mean a plamondinous set of resources. So it doesn't matter how many instances you have, it's our view that a cloud is just a collection of resources that you can use with no difference in each sector. And it's good to think of, I mean, these services are all provided, the work unit is an instance, an EC2 instance in our case. But the important thing with design is to think of a cloud as just a set of services. It's got EC2, of course, 80. For 80, it's got maybe XMPP, whatever we want. But we don't want to think about, we don't want to be designing our servers on Ubuntu, or we're going to be using YAML. We want to have that. Yeah, that way. But I mean, as long as we can find something. And as long as we make sure that you can hit any node, I know how to access all of our resources within a cloud. So let's go. Oh, my God. All right, so let's go. So let's write this application. Let's configure our servers. Let's scale them up. Let's let everyone in this room get it real fast. And then let's scale down and everybody's getting it. Oh, God, that one's so much nicer, doesn't it? It's awful. That's right. This is our live-curing session. What? I did a cloud start already, because it takes a little bit of a while to understand YAML stuff. But I promise you it's there. I can show you if you really want it out there. But we want to reserve some space. So we can show you actually some other cool features of it. But yes, cloud start. Start doing that. And it did that. Took a screenshot so you can see it. Well, that's not a pretty right copy. It's the text. So what does that do? It launches our servers. So it's going to make it call out EC2 extension servers. We have already, if you have the defaults for .ec2 directory, that's right at the keys there. You can use them. You can specify your keys. We'll be trying to come up with a set of defaults and defaults. But this is going to go out on EC2 extension. And it's going to never get there. Bootstrap them so that we have all the top-loading, or the pool party needs to run on it. Rubygen, Ruby. It's going to update the servers. So we're going to just do that basic bootstrap and it is basically a fast strip. And then we also configure based off, or that will also configure based off your configuration. Another thing about the bootstrap that's nice is that that could definitely be local dependencies that you have on your machine, which is nice in case you change your gems, some of the gems, you can use your local gems. You don't have to just use the ones you get, which can be handy. That's true. Now that our cloud has started, let's actually go look at it. So if you don't follow the pool party convention, you can do... you can pass... I'll tell you what the pool party convention is in just a second, but you can pass a file, you can pass your cloud.rb file to every command line. And we're... Yes, okay. But we're using the pool party convention, which is keep your cloud.rb file on the sub directory and the current working directory that you're calling these commands at. As an environment variable. So you never have to actually remember where it's at. Or your dot pool party is the default location. It's a quote-unquote intelligently searches where you would expect that you could put your cloud.rb file. So you can run... It's still small. There we go. So you can run that cloud list and that will show you can do that. Small file. That's in the case of the live... That's right. So then we can also do that sensation. Oh, okay. So... So let's cloud that sensation. So we're going to get into this little loop. Pool party... Pool party is pretty much completely decentralized, where we don't have a master server. We have every server... We look at the entire instance. We look at every instance or every node as the same. Just as I said, the top is... The clouds are all logical. So you can connect to any of them. Update your configuration on any of them and they will broadcast the virus out to the rest of them. I probably shouldn't send virus to that. It's a gossip. That still has a negative connotation. Anyway, our local thing to change is this is our clouds.rdcloud You see it? This is the clouds.rdcloud in here. We have a file in here called NTMOTD that's your message of the day for anyone who's ever logged into the server. For this cloud, the only thing it's going to do is put up the Chef cookbooks so we can get to that in a minute and it will change the message of the day. So when we log in, we'll see the message of the day on the new servers. We're using the default AMI as the Ubuntu Elastic AMI 8.1 That AMI is an Amazon machine image which is the default machine image format for EC2. Oh, I didn't even start the timer. Sorry, guys. Alright, so... We have some basic resources for both parties. You saw that has file in there. It also has directory. So if you want to run anything that's... If you want to run a command execution on the AMI servers every time that you've convinced you can as host, I mean, you get free. There's a basic set we've got here but we decided in the beginning we're supporting a whole system to build a server but that problem has already been solved or actually been solved but there's other people already working on that as their core thing. To give an example, Google uses it with all their desktop computers but another one that this is... I'm really excited about this one that I already mentioned is Chef. Chef is the state-based declarative configuration management engine. You can find recipes of how you want your server to look and Chef makes it happen. So the nice thing is the reasons that we're public still supportive but Chef is the new cool kid on the lot because it's all roomy. It's... It actually looks very similar to the CoolParty syntax. So this is a Chef configuration file. Chef is outside the scope of this talk so I'm not going to get into how this works but this is what a basic Chef recipe looks like and this is how you include it in CoolParty. You just create a Chef block and tell what recipe you want. Actually, I even wanted to show you that there is no HasKeeveryBoard. That's CoolParty syntax so we can actually remove that from the slide entirely which we'll do before we post it. But that's how we look in our Clouds.rb file. Wow, it's so small and I can know what to do. That is so cool. So Cloud Configure. So let's say you change your cloud. So let's say you change your cloud. We no longer want to say welcome to new CoolParty and since we want to say welcome to new CoolParty, save that. Then the way that you update it is by just typing Cloud Configure. What's really neat about that also is if you define a deployment in your deployment in your Clouds.rb file every time you do Cloud Configure it will update your resources and deploy your applications. Which is super nice because a lot of times you can forget that you have other dependencies and you don't end up installing them. So this way Cloud Configure just takes care of you. But CoolParty doesn't it's only an assumption if you want to use a give repository in your Clouds.rb file. So you don't have to, you can still use Flat or Capistrano or Arsene. We have our own basic deployment which we did, we also have a Capistrano deployment but it's sort of starting to feel like Capistrano is a little bit more than we needed. So this is a really basic command. So that's what Clouds Configure will look like. We'll switch back over in a little while so we can keep going. So Cloud Configure title code. Which basically means unchanging both by itself or in simpler words run a bunch and it won't change things unless it needs to. Which means that we can Cloud Configure and then Cloud Configure and Cloud Configure and Cloud Configure. It's all happening. So I have just a basic rinse I just want to throw a rinse or a snot drip or a wave and just pass up. I'm going to do that. I don't want to have to go right all that. Which is a big reason why we switch over to using Chef. So we can support all these cookbooks. So this is the off-screen repository. That's like a quarter of the page of the recipes that are available. I think there's 55 up there you can cut it out. And then third set of signals has a repository for some recipes and Retro has a passenger repository. Holy heck. Oh my god. You know what I just heard. Twitter flow you got talked about Oh crap. Oh crap. Yeah. Seriously. We better we better know how to expand. Yeah. So how do we do that? Well actually it's okay. Oh no way out. It takes a grand win to load greater than .8. I think that would be a nice go-to. Yeah. That's not bad. And contracting the load is awesome. Yeah. So what we've got to these metrics, this is what the next slide says, these metrics are not just for instance, but these are items across the cloud. Because if you just have one that's real busy, you don't want to go to the cloud to expand. Yeah. The other problem that with the cloud, I want to note about resource usage is that if you built a large rail that's operating out of that the resource usage is different for different resources. So the rail site might be, the rail's long rails might be just cruising along your database is getting comfortable. But there's a solution to that. What's that? How about multiple cloud? Awesome. We'll put our database server in one cloud and our application server in another. So that way we can expand our database cloud and we can keep our application cloud small. And we can use different metrics because perhaps our database cloud such as in the memory goes low but our application server is more important, more based on load. That's great. Well one important thing also when we're talking about instances or nodes, those can be anything. We have core support for EC2 right now. There are slides on that to look into that. But anyway we have multiple clouds that will expand them differently. And you can set, obviously if you want to do a deployment in here, you can set those deployments in here if you want or you just have to turn forward. So a basic cloud looks like that. Just the one of you here that's like a any good framework you don't want to have to make a bunch of choices. So these are the defaults. Two to five instances using EC2. The AMI actually would be that. It would be an instance ID but that's more descriptive. At the open. And contract load is less than 0.65 load is greater than 1.9. So these are just basic defaults. There's a list of other defaults that are more detailed. In a classical default too. Yes. What is the range on the one? It's uptime. It's uptime. It's uptime. Remember we're on the uptime plan. It's just based on the load. I don't know the exact numbers. It's just based on, what's that? Wait. Yeah, it's numbers where I'm waiting on like current CPU. There's a main page. Yeah. So as we said before full part is decentralized. So in any instance all the instances themselves are act as a quote unquote master. And all the instances themselves act as a quote unquote slave. Which is actually kind of cool to think about it. No words. Okay, so full party doesn't make any applications sometimes. Cloud architecture sometimes. That's right. Which actually is a big slide. So you can deploy anything using full party. So if I have PHP site and I want to put it up in the cloud, you can use full party to do that. It's just written in Ruby because Ruby is beautiful. Or maybe you have a part of the simulation cluster that you want for some reason. The point being that it doesn't have to be anything. You might have a application where you have a video sharing site. So you need your web fun end. But then on the backside you need another cloud for your grants coding. And then you need another cloud that's going to be your email blast update to friends. So full point here is start with just one cloud. You can start working on everything. You can sort of break out and then comment. That's it. Okay, so let's install our teacher in full party. Number one, four remover raises. So right now we've really been supporting DC2 and the plan is to add the VMWare. We actually have one branch that's almost done that supports VMWare. So if you have VMWare on the Mac, there's a command line VMWare. You can instantiate some servers and run them so the idea is it will be a lot cheaper and easier to just instantiate some servers on your laptop. So how can you have your own boxes at home? I have like six servers to some wire I'm sure. Everyone's going to get a credit card statement and they're like oh yeah. I have a slice host. I want to use those. So you can add your own. It's super easy. There's only four methods you have to add and these are lots of incidents. Just need to return an ID at least. You can return a hash. You just need to be able to launch an instance and then describe an instance with that idea. The key thing you need to get back is the ID. You need some way to access it. The only way to get this is HPEs and all that is going to be dependent on that's not part of full party for your other remover raises. I mean for DC2 it takes care of that and full party supports that. So one thing that we're also we have in another branch is scripted automated deployment partners. Automated scripted deployment testing. So if you do have VMware this is a great this is a great place to use it if you want to use full party with VMware. Put it on another box. Do some changes to your configuration say go and then it'll you can see it on the screen with VMware. What is it? We have a framework spec but it would be nice to actually have more actually launch the cloud and then end that bit and make sure those ports are basic. So another thing that full party has been doing we've been working pretty hard in the past couple weeks doing pretty much we've kind of sweeping up the core so we've been sweeping up the core. Anyway one of the things that's come out of that is even modularizing full party part of it. So if anyone's been to A's or a GitHub you'll see there's like 50 gens over there and probably like 50 more in the next couple weeks. So there's tons of component types just like just like Sinatra's doing things like just like Sinatra's doing we're taking core functionality and placing the gens so you can use them outside of full party and also so that when we continue to update say the DSL you don't have to go to full party and update that and all that stuff to take care of the gens. The latest gen that's coming in is Butterfly. It's a rack app. It's a rack app. Basically basically we're using HTTP for Internet of Communication something again we were talking about earlier today we're not looking at HTTP as something for the browser we look at it as a very solid protocol we can use and jump on top of for our Internet of Communication that's what Butterfly does when you look at Butterfly that really cool description really just means past information over HTTP. A nice thing about it is that we have a description of the files that have JSON files we're storing the state we're updating that with our load and cloud information so we just want to do an HTTP request to that and get the data so Butterfly is kind of nice because if you just do an HTTP request to a URL it will just pull the data out of the JSON so we go to slash load and we go to the JSON file and find the load out and just send that back it's super basic but a lot of times that's all you need we just have a class that has an object and it will call that method So for the Keemans you notice I just switch slipped aside we'll go back in a second I think these are a little out of order so the nodes themselves they update their own state and they push out their state to the rest of the file so at any given time your instances will know relatively the current state of the entire file which is much it's more efficient than doing pull so any time that it needs it they would pull it in the bus so that's what that that's what that slide means and you go back the other thing we're trying to do before we were discussing earlier is a tighter integration with PNS and as soon as you can have clouds you can balance within the cloud or you can you can make up a proxy cloud if you do want to use a proxy or a smarter or NGNX proxy you can write a cloud that will handle that proxy or you can use it to be smarter what we feel DNS is a great example of peer-to-peer is a great peer-to-peer network and it's been around for a hell of a long time so that's how our nodes knows inside a pool party get all about each other and we also have it where when you launch a cloud there are some recipes to take care of the DNS and the automatically load balance and the short time it lives in is to use the web infrastructure that already exists for your basic load balance and then when you need it you can do your own proxy or NGNX load balance so alternatives not necessarily alternatives a lot of these things are not either or but together so for instance ROKU is a great option you're a snot drop through that way but maybe you can have a trans-coding site and they're not going to give you as much power as you need for trans-coding your glitter clone videos so you might want to launch that and you can still launch a cloud or pool party in your trans-coding cloud and actually if I'm not mistaken ROKU is hosted in EC2 so you should have a pretty good connection there and pretty bandwidth between the two which is nice that's right and also you can use if you make say multiple clouds and you have a development cloud and you can use pool party to make your development cloud and then when you're ready you can push you can use that development cloud to test and see what's working then you can easily cloud terminate that's the next one you can easily cloud terminate and then just push ROKU or push two and both at the same time and for the right scale also I mean I use right scale and so I still get emails from right scale when I launch an incident so you can, it's not either or a proposition apart yeah so more resources we are both generally in the IRC channel it's called pool party army because pool party dot com is leaving so pool party army also if you want some more resources which is now the pool party army has been relaunched and those are our emails and slides we'll see and we also want to give a thanks to everybody here we're also thanks to AT&T and senior actor for supporting us and you guys and you guys cool car sitting right behind it it's so cool any way I'm talking any questions I have VMware mounted on my you say basically you have an app where I could deploy my VMware put the switch to EC2 change that using from VMware to EC2 and then run, I'll start again and we'll start EC2 and the answer is yes almost because like we said VMware is not an official gem yet but that's that's the way it's going to work so let's build things that you can try and we'll be in EC2 instead or you can do this so in EC2 we don't have a custom like something we have early installed but we just have a base and we're not tied to the moon too either although I wouldn't recommend using the moon because that's where we use the test with but you can just boot with any Linux distro and we're going to take full of young or african distro and we'll take care of some Ruby and new gems and configure passenger whatever recipes that already exist or that you can bring I just wanted to show you this you can also just deploy to your developer top and not update your production top and just use so you'll notice that this is pool application and it's consistent so all of those in the outer block are going to inherit from the inner block so like bottom production EC2 is going to have instances one to three if they're also work, AMI it's going to have a lot so you can override it inside the cloud so we have a pool of clouds that is you guys don't want to see me have a commerce see if you have commerce actually any queries using an EC2 of commerce that's the most and we're hoping to use it we don't know what that is you should have what is your sense of what is the roadmap going forward and what is the response of the community like that's a roadmap and it's responsible for the community roadmap on forward we have I didn't answer that or integration with Chef? well it'll be most of it will be directed towards a remote basis for instance having tiny deployments or read-only file systems but maybe I should or like maybe deploying to the cell phone in your cloud to handle different loads so we're hoping to open that up on our ticket fullpartylighthouse.com fullpartyrv.lighthouse.com yeah so you can check that out and then what's the response of the community tonight it's been great especially the Chef guys that have been helping out a little bit lately watch them