The Changelog: Software Development, Open Source - Travis CI, Scaling Apps, Riak (Interview)

Episode Date: March 6, 2012

Wynn caught up with Josh Kalderimis and Mathias Meyer from Travis CI to talk about hosted CI in the sky, scaling apps, and a little Riak....

Transcript
Discussion (0)
Starting point is 00:00:00 The Change Log is brought to you by Pusher, and they're looking for system engineers who specialize in evented systems. If you're happy to work with multiple languages and you have experience in building evented systems, our friends at Pusher want to talk to you. This is a real hands-on job at Pusher, so relocation or London-based residents are the prime targets are seeking out. Send a cover letter about how you will make Pusher more awesome, your GitHub profile link, and your CV to jobs at pusher.com. Don't push me away! We're also up on GitHub. Head to github.com slash explore. You'll find some training repos, some feature repos from our blog, as well as the audio podcast. And if you're on Twitter, don't follow the ChangeLog show. Follow the ChangeLog. And I'm Adam Stack. And I'm Penguin, P-E-N-G-W-I-N-N.
Starting point is 00:01:15 Fun episode this week. Talked to Josh and Matthias over at Travis CI about hosted continuous integration in the sky. That was a very fun conversation. It seems like they're trying to do a lot of fun stuff, but they're also supporting a lot of different languages as well. Yeah, Ruby's been supported out of the box since its inception, but now we've got PHP, Python, Perl support, as well as Java, Scala, the usual suspects.
Starting point is 00:01:40 So if you're looking for a hosted CI solution for your open source project, private projects are coming, and you don't want to stand up your own Jenkins box, then you might look at Travis CI. It seems like it's pretty easy to get started with it, too. Yeah, you just go in and configure it right there in your GitHub project
Starting point is 00:01:58 page, and you can embed an image in your readme. You see this a lot of times where it has the build status right there in the readme of the project. It just has the image tag phone home to check the status of the build, and you see red, green, or yellow right there in the README. It's pretty cool. Colors accordingly. And then not only that, but they're also using Pusher,
Starting point is 00:02:16 which is quite nice, and they're our sponsor. Yeah, we talk about that in the episode. It's a neat way to power the real-time UI that they've got in Travis. You can just sit there and watch the output from your project or someone else's project as it's happening. Well, sounds like a fun episode. You want to get to it? Let's do it. We're talking today with Josh Matias from the Travis CI project. So you guys want to introduce yourself and a little bit about Travis.
Starting point is 00:02:47 So Josh, you go first. Well, my name is Josh Calderimas. I'm one of the core team members of the Travis CI project. I've been working on the project since February 2011 with Sven Fuchs, and we've since grown to four team members. Matias? My name is Matthias Meyer. I am the infrastructure guy on the Travis team,
Starting point is 00:03:09 and I've hopped on rather recently. And I'm also the author of the React handbook. So, yeah, that is my introduction. Definitely want to talk more about React later in the episode. So for the folks that don't know, Josh, why don't you give a little bit, a big picture of what Travis is and what it does. Well, Travis CI is a distributed continuous integration system for open source projects. It's also technically open source as well, but we try to emphasize that it's for open source projects. So if you think about Rails or Symfony, even no JS Rubinius, they're all using Travis because not only are your logs out in the open, but it
Starting point is 00:03:54 just makes testing dead simple. So we've been testing Rails for the last eight months now, nine months. We've done two and a half thousand builds across different matrix variations so we can help test rails projects for example against different ruby versions previous to rails 4.0 which is in master at the moment or still in development we were testing against three different ruby versions 1.8.7 192 and 193 and now that rails master has moved to 4.0, it's only against 197. Oh, sorry, sorry, 193. We've got some big plans on how we can help increase testing as well to make it even better. For example, testing against different architectures for systems, if it be Windows or 32 or 64-bit Linux. But essentially, we're just trying to make testing easy for
Starting point is 00:04:53 open-source developers, because who wants to actually set up a CI system for their little library in-house and hire a server or remember to run it against 10 different rubies? You guys have some big news. Last couple of weeks, you know, support Python. So adding Python support was fantastic. It was a great reception in the Python community. It was actually one of our biggest growth days. It wasn't just Python support that we had last week.
Starting point is 00:05:19 It was Perl. And in fact, a week earlier, we added Java, Clojure, and Scala, and Groovy. We've actually technically had all of these languages supported for a long time now, just we only supported one version of the language, only one VM version. So if you think about when we added Ruby, we had Ruby 1.8.7 and 1.9.2 and 1.9.3, and that's what we call first-class support. And for a long time, Python and Perl didn't have first-class support. You could only use one variation of the VM, of their VM.
Starting point is 00:05:55 And now we essentially support, I think it's 10 different languages, with most of those having different versions of the language available. So even when you think about Ruby, you can test against Ruby head and Ruby 193, JRuby in 1.9 mode, Rubinius in 1.8 mode and 1.9 mode. There are so many different possibilities of what a normal developer can test against now.
Starting point is 00:06:21 And we generally think that every language developer, all open source developers should have the benefit of Travis for their open source community. So with all of those languages, that entire list of languages that you support, what about the different testing frameworks for each of those languages?
Starting point is 00:06:43 So part of the idea that we've got in our worker at the moment is what we call the builder. And Sven extracted that to its own repo, so it makes it very easy for other people to add different language support. And the builder encompasses a lot of standard defaults that that community might use. If we think about Ruby, we know that
Starting point is 00:07:06 bundler and using rake are some of the very basic defaults that we use. So we can detect if there's a gem file. If there's a gem file, we'll run bundle install. If there's a gem file, then we'll use bundle exec rake. And we apply that to different languages in different ways. So in PHP, there is no standard way of doing dependency installation, but there is a standard way of running the tests. And in Python, there's various standards for each of these, but the general consensus within the community is, instead, we should just prompt them to define that in their Travis email which is the configuration for Travis for your project when we had Dr. Nick on a previous
Starting point is 00:07:53 episode we brought up Travis had just come out or I think you had just contacted me you guys were just getting started with it and he's a big Jenkins fan. What's the selling point of Travis over Jenkins? I'm definitely going to leave this one to Matthias. He's been working with Jenkins a lot recently. Yeah, I just used Jenkins on a project recently. And well, I got to say, the ideas are very similar. It's continuous integration. The ideas behind that are very straightforward. And you find a lot of similarities in Jenkins compared to Travis, for example.
Starting point is 00:08:31 But what repelled me a little bit from Jenkins was the user interface. And the point of Travis is to hide all that from the developer. So in Travis you only have a YAML file where you define your complete build metrics
Starting point is 00:08:48 and stuff like that. And in Jenkins, you do all of that through user interface. And that's not the main selling point, but it's just, I didn't have a lot of fun using that user interface because there's a lot of options you can set on Jenkins and it becomes a bit of a pain to use for me. That's why GitHub, for example, built their
Starting point is 00:09:09 own janky bridge for Jenkins so that they can hook up their U-bot to Jenkins and not worry about the user interface at all. Speaking of the user interface, the Travis CI interface is real-time powered by Pusher, I take it. What sort of challenges have you found just scaling that for so many projects? It's been an interesting ride over the last year. And if you look how the code has changed over that year time, so it's been one of the talks I've given at conferences about how we've really deconstructed Travis into separate deployable apps. And that's helped us scale tremendously.
Starting point is 00:09:46 We run... We're pretty much entirely on Heroku for the platform part, and we use dedicated workers or dedicated machines with the most inefficient way of using a VM technology, which is VirtualBox, because it was handy for development. It's definitely a pain for maintaining, but it works. So on the platform side where we're using Heroku, we're using 192 and what we call the Travis CI.
Starting point is 00:10:16 It's just Travis CI. And that's using Unicorn and 192. We've also got Travis Hub, which is a JRuby app, and that's using the AMQP Java library for its communications. So we're using JRuby for Travis Hub on Heroku as well, and that uses Hot Bunnies, which is actually a Ruby wrapper around the Java AMQP library. That's actually allowed us to scale quite well because we just use native threading and we spin up about 10, 12 different threads
Starting point is 00:10:51 for managing the different queues. And we've also got another project which isn't fully live yet called Travis Listener, which allows us to take the various components of Travis offline, but still listen to the GitHub pings. And also behind the scenes, we're using RabbitMQ for messaging between all of these projects or applications. I know it's not a fair comparison since you usually have to set up
Starting point is 00:11:15 your own Jenkins box as opposed to a hosted system like Travis, but what's the comparison of setup if you wanted to set up a project on CI between the two? I wish I could use swear words right now, but I would highly recommend people don't try and use Travis internally right now because it is a huge undertaking. It's much harder than just setting up a Jenkins in-house.
Starting point is 00:11:44 It's not to say that I'm a huge fan of Jenkins. What I am really appreciative for them for, what I really do respect them for, is that they've come a long way in building a CI system that is easy for people to install, or generally easy for people to install, and it works. But if you've got an open-source project, let's say a RubyGem project out there, and you want to make sure that it works across several different versions of Ruby, what's the process to set it up on GitHub with Travis?
Starting point is 00:12:14 So to set up your project on Travis is tremendously easy, and I think this is definitely one of the reasons why it's taken off. There is no huge setup process to go, and we try and get it up and running. And also, we automatically detect a lot of the defaults. So it's as simple as logging with GitHub on Travis. You can see all of your projects, you can turn on the service hook, and then you can either push your code to GitHub and will automatically pick it up, or you can go to GitHub and you can send a test hook. The trouble is that if you're a Python Perl or Java developer, then you'll also need to definitely, you'll definitely want to add a.traverse.yml file. Even if you're a Ruby
Starting point is 00:12:58 developer, you'll want to add that file because by default, you don't want to just test against 187. You'd like to add you know different rubies to be um you know quite compatible to make sure you've got compatibility which version of ruby gives you the most fits to maintain with travis sorry how do you mean with uh so how many versions of ruby you support? We're talking MRI. Oh, I think we're up to 11 different versions of Ruby. Two of them are temporary. Yeah.
Starting point is 00:13:39 Which versions of those are the most problematic to work with Travis, just getting it to run? I'd actually, well, we, so Michael Klischine, so we've actually got kind of five team members on Travis. We've got Constantine House and Matthias, who recently joined, Sven Fuchs and myself, and also Michael Klischine. And Michael Klischine has done an amazing job in maintaining our workers and our cookbooks.
Starting point is 00:14:04 The great thing about using cookbooks is that anyone can start contributing and saying, oh, can you add the service here as a cookbook for it? So Pat Allen from Thinking Sphinx fame, he did the cookbooks for adding different versions of Sphinx so he could then test against different versions. Michael has put a huge amount of effort into getting the cookbooks and the recipes right for RVM testing or for adding different rubies into RVM. And we have to give huge credit and huge thanks
Starting point is 00:14:37 to the whole RVM team. They've put a lot of work in making or adding extra configuration options so we could get adding Rubinius in 1.8 and 1.9 mode and jruby in 1.8 and 1.9 mode so it makes it a lot easier within your yaml when you're travis yaml to say i want to test against 1.8.7 1.9.2 1.9.3 and jruby in 1.8 mode jruby in 1.9 mode etc souby in 1.9 mode, etc. So recently you had the Love Travis campaign. How's that going?
Starting point is 00:15:11 I'm really happy with how that's gone. I'm so appreciative for the community and to the community. They've helped us so much. A lot of companies have jumped on board and helped us with just being able to pay our rent effectively. Sven and I have spent the last six months kind of, I guess, job-free just working on Travis, and being able to have the community help us out like this is just amazing. We've got some big features in the pipeline.
Starting point is 00:15:42 Konstantina's currently working on the pull request support I think that's going to be a game changer I think this is going to explode Travis as well we're going to have to throw workers at it like I can't believe if you think about Spree or
Starting point is 00:15:59 Symphony even Rails, Rails is a perfect example the the usual workflow of a lot of Rails core is they'll get a lot of pull requests come in, they'll check through the code on GitHub, and then they'll hit the merge button. And if it fails, then they have to go into their console and they'll have to revert that and then push it back. And testing pull requests will now mean that you do a pull request for Rails, we will test it, and then we'll leave a comment in the pull request
Starting point is 00:16:29 to say if it passed or failed. And this will just be an absolute game changer for open source projects. It means accepting pull requests, it's all about, did the tests pass? Did Travis say it passed? And can I look over the code to see, you know, is it clean?
Starting point is 00:16:45 Is it doing things right? And then you can hit merge. Yeah, I'm surprised that all the low-tech solutions we're finding to integrate with GitHub around like badges and the readmes for build status and things of that sort. And you're talking about build comments. Do you wish GitHub had more like meta hooks that you could hook into at the repo level? Actually, it's only because of Rick Olson, Techno Weenie,
Starting point is 00:17:11 that we're able to start adding the support. We talked to him last year at Frozen Rails about how we really want to work on pull request support. And the thing that was partially holding us back is that we needed some APIs for when people add pull requests. Because for us to pull GitHub over the 6 6 000 projects we've currently got on there to see if a pull request is being added isn't really going to scale on our end and we just needed to get some notifications if a pull request is added and if it's updated so he worked really well he added that specifically for us which was fantastic and now we can actually
Starting point is 00:17:47 work on that feature which constantine is is most of the way through i think we're probably about two or three weeks off until we can start rolling that out incrementally once we've got those notifications then when even when you update your pull request, we can then retest it as well. So think about pull requests as a discussion. You add a little bit of code, we'll tell you it fails. You add some more code, now it passes. You add another feature to that code, it fails again. It becomes something where all of those Travis comments are going to stay within the discussion, and then eventually it will be, hey, it passes, time to merge.
Starting point is 00:18:29 What's your roadmap for private repos and when you can turn that on for everybody? Well, we're looking into the options right now. We're actually actively, Swin just started actively working on it on getting what we're calling Travis Pro Codename Magnum setup. And we've been looking at different options on how we can make that scale better
Starting point is 00:18:51 because obviously when you offer commercial solutions, you have to think a lot more about SLAs and ensuring a quality of service and stuff like that. And so we've been looking at the options of what we can use, for example, instead of VirtualBox for virtualization on machines. And, well, we figured out ways
Starting point is 00:19:13 to actually shorten the path to getting to an alpha. So I'm not sure if I'm ready to announce a date for that yet, but yeah. How much more complex of a problem is it? Do you have to add multi-tenancy to cover things like that, or is it the same platform
Starting point is 00:19:30 you're just having to worry more about and how to scale that? Yeah, it's actually the multi-tenancy thing. That's what's going to keep us busy the most. And to make sure security issues and stuff like that, because obviously we're going to be dealing with people's private source codes and stuff like that. because obviously we're going to be dealing with people's private source codes and stuff like that.
Starting point is 00:19:46 But yeah, on the application side, it's mostly a multi-tenancy. And that's what Sven is actually currently working on. So if you want to speed that up as a listener, you can donate, pitch in. Open source is free, but it's not cheap. So Josh, tell them what they've won if they do donate to Travis. Well, we'll send you a beautiful picture of Sven Fuchs. Well, we've got a whole range of donation options. We just love anything. If you want to donate a buck, that's perfect. If you want to donate the top, which is like 500, that would also be
Starting point is 00:20:23 amazing. In fact, the one thing that we haven't really highlighted enough on the site is that we had a whole range of amazing developers come out like Aaron Patterson, Yehuda Katz, Jose Valim, John... Now, I keep pronouncing John Leighton's name or John Leighton's name is Leightonon and he loves that because he's like, oh, that's so Leighton. But you can also program with John Leighton as well. So if you donate 500, you'll get an hour online pair programming with them. Aaron's ready to take a day off, you know, the job, off his job just to help out with this.
Starting point is 00:21:00 Sponsored pair programming. I love it. And you get some credit on Travis Pro when we're all ready to go live and you get beta access. But anything that anyone wants to donate is just fantastic by us. So speaking of sponsorship, Pusher backs this podcast
Starting point is 00:21:16 and we're so very thankful for them. Matthias, what has Pusher meant to Travis? Well, mostly allowing us to have a pretty nicely responsive real-time user interface. That's probably, well, that's the one thing we really use it for and that's what it's been really fantastic for,
Starting point is 00:21:33 to have a really short loop user feedback that when a build starts, we can immediately pop up the new library and the user interface and we can keep, you know, as a build proceeds, as new log output comes up from the build, we can immediately push it out and the user interface, and we can keep, you know, as a build proceeds, as new log output comes up from the build, we can immediately push it out to the user interface,
Starting point is 00:21:49 and it's just fantastic for that. Complete with syntax highlighting and color coding. It's awesome. I love the UI on Travis. So, Matthias, you're also an author of the React handbook we mentioned earlier, so what's the backstory on that? Well, the backstory is that I wanted to write a book
Starting point is 00:22:08 on NoSQL databases. And the other part of the backstory is that I worked for Basho for a while. And yeah, that book kind of came about to be the collective, well, brain dump of everything I learned about React up until that point. And it still is so I'm still working on it to get
Starting point is 00:22:26 updates out and to produce more content for example just recently they released React 1.1 and 1.1.1 is actually still in the works and they added some new features which I would like to cover in the book as well so I'm
Starting point is 00:22:42 pretty much still working on it it's still a work in progress but it's been really fantastic to sell. And I self-published the book, kind of built my own production chain for the book and it's just been going very well. Much better than I
Starting point is 00:22:57 originally expected actually. Is React your favorite NoSQL solution? Oh, the answer to this could get me in trouble. I don't know. It depends, right? Yeah. I don't really have a favorite database in general. To me, I don't make the difference that much anymore
Starting point is 00:23:17 between NoSQL databases and relational databases. To me, they're all just databases, and they have their strengths and weaknesses, and that's pretty much how I look at things right now. So, but I do like React a lot. What sort of use cases is React just made for? Well, the one use case that most people that come to React have is to really have high availability, to have a database that can, you know, even when stuff falls on its face,
Starting point is 00:23:44 when servers fall down, you still have availability to accept read or write requests no matter what. And that's where React really shines. And that's where I really like it for. And yeah, the problem with that is that it obviously brings a lot of trade-offs and a lot of people have some difficulties, you know, getting into these trade-offs or changing the mindset from relational databases where you have stronger consistency, where you have different data models and things like that. And that's where people struggle a little bit with React. And that was kind of the point of the book originally, to make that part a lot easier. Because it's just right up to right
Starting point is 00:24:21 until the end, I added stuff on how you would model data for eventual consistency, for example. And that was kind of fun because it's kind of mind bending to do that. And just to show people how you would, you know, how you would do that with React. And it's just what you have to do when you have a lot of rights and you have a lot of updates on the same data. You just have to prepare your data for that. And but yeah, in scenarios like that where high availability and fault tolerance is just really important. And it's React is just awesome. I love it for that. But yeah, in scenarios like that where high availability and fault tolerance is just really important, Rearc is just awesome. I love it for that. I want to take a moment to talk to you about Hover.com, our latest sponsor that we're actually quite stoked about because
Starting point is 00:24:57 Wynn and I, we use GoDaddy primarily for all of our domain purchases in the past and with all the recent fiascos, and I'm sure you know what I'm talking about, there was some major need in the area of domain registrations and taking care of that stuff. So lo and behold, we actually found Hover, decided to start using them. They became a sponsor of the show, which is kind of neat as well. But if you go to hover.com slash the changelog, you can save 10% on all orders.
Starting point is 00:25:31 They actually have this valet service that will move your domains for you. So if you're at GoDaddy or anywhere else, doesn't matter where, you give them a phone call, you talk to a human being, they go through all the details with you. Now, obviously, there's fees applied to moving your domains which they can help but that service to you is no cost whatsoever they do all
Starting point is 00:25:51 the valet all the moving all the mx records all the dns reset up for you and that's no cost you go in and give a final approval and they go ahead and take care of it if you have lots of domains like we have like 30 or more domains, they can actually break that up into chunks so it's not just one big hit, and it's quite nice. So Hover.com is a fantastic new sponsor. We gladly thank them for supporting the show, and we hope that you do the same.
Starting point is 00:26:19 Again, you can use the change log to save 10% on all orders at Hover.com or just go to Hover.com slash the change logging to be grandfathered right in. Seems like almost every app has a big data problem now. What about Travis? What sorts of data do you guys have in the back end or is it mostly just within Git indexes? I think the biggest data we actually have are the result logs. For example, the Rails log when a build fails
Starting point is 00:26:46 because something changed in the database adapter and everything breaks is that a Rails log can grow quite significantly. It's more than quite significantly. We had some huge issues for a while where if
Starting point is 00:27:01 something went wrong in Rails or even other big test suites. So Rails, their test suite, when we first approached it, tried to get on Travis, ran for two hours. So their feedback loop was tremendous. And the first thing that Sven worked on was to break that up into five units. So you can now have 20-minute units. So if we could have them running concurrently, it would only take 20 minutes.
Starting point is 00:27:26 But it's still active record, for example, has a huge test suite, which will take a long time. And if you have warnings pop up on every single test, it can grow a 100-kilobyte log to, I think, our largest log that we saw clog up, Travis. Like, it brought the entire system to a halt was 184 megs and we're storing that in a single database column um and it it was quite funny like we're like oh god we're having another warning and someone's test suite like someone would update their rails and now it was all over their test suite, and everything would stop. So we added log limiting to that. So now a test log can only be a maximum of four megs,
Starting point is 00:28:13 and then we add a warning to the bottom to say, I'm sorry, your log is too long. It's over four megs. We've had to halt the test. But yeah, other than that, Travis doesn't really have a big data problem. I don't know about you, Josh, but I'm fine with that.
Starting point is 00:28:30 I'm quite happy with that. What parts are the most challenging to scale? Where are you focusing your brain power on right now? Well, the one part that is actually harder to scale is being able to scale out the hub part and making it redundant and fault-tolerant in that way.
Starting point is 00:28:50 But the solution to that is actually not that hard. It's mostly related to an ordering of events. So, for example, when we push stuff, when the worker just continuously keeps pushing a lock output through pusher out to the user interface. And right now it's assumed that that always comes up in order. And the simplest fix to that problem would be to make sure it doesn't come up in order, if you know what I mean. And that you have some sort of buffering in the client
Starting point is 00:29:21 that can keep track of sequences where the log currently left off and where this chunk that just came in belongs. And if there's a hole in the data the client still has, it holds out on displaying that chunk of data until the rest arrives and stuff like that. So from my point of view, that's the hardest part to scale. The rest is pretty easygoing. So I wanted to get personal here a little bit. So Josh, you are quite the globetrotter.
Starting point is 00:29:49 You speak at various conferences across the globe. What areas have the most vibrant Ruby community that you've noticed? The States is completely vibrant. It's been vibrant for a long time now. What I was surprised about was I went to Ukraine and Russia recently source and how it can benefit them. There's probably a little bit of hesitation to jump in and make as much of your code open source. And I think that's where a lot of the Ruby community
Starting point is 00:30:33 has kind of grown. It's like by having an open source movement, we've become very active of talking online and pull requests and issues and helping each other. I really enjoyed the Cape Town guys as well. Cape Town in some ways reminds me of New Zealand in that it's quite far removed from a lot of areas. Like it's a long flight from Europe. It's a long flight from America.
Starting point is 00:31:00 It's a long flight to Australia. But it reminds me of New Zealand a lot in the wineries and the friendliness of the people. And it's got a fantastic developer community where Ruby Fooza, which is run by the Mad Mimi guys every year. It's a fantastic conference. If there was a conference I could recommend some people to go to, it'd be head to Cape Town and stay there for a month and just enjoy. That's a good question of each of you now. Who's your programming hero?
Starting point is 00:31:33 Matthias, you go first. Josh, can you go first? I was going to be cheesy and say it was you, Matthias. Then I'm going to say Josh. Personally, I don't have heroes. I have a lot of people who I respect for doing what they do. But I don't have any hero in particular, I'm afraid.
Starting point is 00:31:53 Actually, I think I'm going to go for Jose Valim. He puts out a lot of code. He puts out a lot of code, but he also puts out a lot of community effort. There's a lot of code, but he also puts out a lot of community effort. Like there's a lot of main, you know, you can code and you can commit and you can, you can push to GitHub, but it's also about being available and asking questions, answering questions and mentoring people. He was one of the, he was the guy that helped me get a lot of commits into Rails. Like I'd be sitting on IM with him and I'd ask him questions, how to fix this,
Starting point is 00:32:25 approach that. And he doesn't have to do that. People have their day jobs. But he puts in a lot of love and helps a lot of people out. So I really respect that. So Matthias, let me put it a different way. If you could pair a program with anybody in the
Starting point is 00:32:41 community, who would it be? Hmm. I still have to think about that. Well, Matias is going to email, so we'll put it in the show notes. So when you're not hacking on Travis, you're not hacking on React, what open source software out there just has you excited that you just want to play with? Well, I can start with that.
Starting point is 00:33:10 That's what I'm actually prepared for. Well, currently, I'm very interested in distributed message queues. So currently, I have my eyes on Kafka and Castrell. Castrell is kind of what Twitter built as a replacement for their RubyQ Starling, I think, if I remember correctly. And Kafka was built at LinkedIn, and
Starting point is 00:33:32 they're both pretty fantastic. And I would definitely want to spend more time playing with them. And also with Zookeeper, which powers Kafka in a way. Zookeeper is like a distributed process coordination framework. And it looks really interesting.
Starting point is 00:33:48 That kind of has me really excited. But the other part from the Ruby world I'm excited about is Tony Arcieri's Celluloid and all the libraries he's been pushing out. He's been pushing out an amazing amount of code. And yeah, I definitely need to play with that more because Celluloid in particular would be a nice fit for some of the things I have in mind
Starting point is 00:34:09 for some parts of Stravus. I completely agree there. I'm really impressed with celluloid and Sidekick as well. But that's by Mike. Mike's a friend of the show.
Starting point is 00:34:25 Basically, Sidekick is rescue in a more thread-safe manner. Is that right? Well, it's based on Celluloid, but, yeah, it's an in-process rescue, if you will. I think a lot of Ruby developers at the moment are still a little bit hesitant to use threading because threading is seen as, well, you know, there are threading issues all over the show.
Starting point is 00:34:49 How do I solve that? How do I work with it? And I think we need to kind of get over that hang-up and learn how to use threading properly because it has, you know, if it's implemented in a VM like JRuby or Rubinius, you've got a great, a whole set of fantastic concurrency models available
Starting point is 00:35:07 which can really utilize the VM in many different ways. So we shouldn't be scared of that, and that's why I really like Sidekick, is that instead of going for this process model, we can use it within a single code base in a single instance. We don't have to do a whole lot of crazy stuff. We've got a great threading model available. Are tools like
Starting point is 00:35:28 this going to just make it easier to architect our applications as just small atomic services that we can consume? How many services are in Travis? Put it that way. It's not one giant Rails app. We've got four deployable apps, and we've got a total of about 11 GitHub repos.
Starting point is 00:35:53 I just added new relic messaging to the Travis Hub today to test it on staging, and it's interesting to see what's going on under the hood and what are the slow bits. But we're using things like CouchDB at the moment for some of our archiving. We've got Pusher, IRC notifications, email. It's utilizing a lot of services. But we've got four distinct Travis services.
Starting point is 00:36:24 I can talk about external services we use, but I'm not sure. Sure, go for it. Well, yeah, we have a couple of internal services, and just as Josh said, we use New Relic for monitoring the performance and stuff like that. Well, I'm a big fan of using external services myself
Starting point is 00:36:39 because I've been... Well, we're building one, and I've always been building infrastructure services. I recently added Librado's metrics, which is a pretty nice way to get real-time graphs and stuff that happens inside of Travis. And we're using a pretty funny setup for that. The metrics are regularly dumped to our log files, and from there they're aggregated into a log collector, and from that log collector they're sent to a tiny app on Heroku
Starting point is 00:37:10 that aggregates the data again, and then it's pushed from that app into Libratos metrics. So our app itself is totally oblivious to the fact that there is some metrics collecting going on, and it just dumps them into the log, and some other part of the service will take care of it. So I just increased complexity of Travis by a lot. But it's pretty transparent.
Starting point is 00:37:34 It doesn't matter to the app if the metrics actually end up somewhere. And it's just a really nice way. And I have to say, Eric Lindvall from Paper Trail and 7Scale, he built the libraries for that, and I'm very thankful for that. And they're actually both open source.
Starting point is 00:37:52 And what else do we use? We use Pusher for the real-time communication. We use RabbitMQ as a service. We use... Josh, what else do we use? We're using Postgres for the database, which I really love. I think those are the majority of the services.
Starting point is 00:38:12 I'd like to look into using Elasticsearch for some of our search and faceting. I'd also like to potentially look into ZeroMQ in the future for our job queuing. RabbitMQ is great as a messaging protocol uh it has it's a little bit tricky to put in really fine-grained controls like if we wanted a worker to say give me you know these are my capabilities give me x job if it's available otherwise give me y job we have to do we have to actually set up two different queues, and then we have to set up...
Starting point is 00:38:46 Either way, what we have to do with Rabbit is more constricting than what you could do with maybe Xero, where you've got a lot... It's much more bare bones, so we can put in a lot of our own custom business logic for that. I'm hesitant of adding XeroMQ, though, because it adds extra complexity onto the Travis model. We're trying to
Starting point is 00:39:07 keep it as simple as possible as well. I think that's the main selling point from the outside looking in is I'm not sure that you're competing with other CI platforms as much as you're just growing the tent for folks that may not be doing CI just to make it dead easy for them to add CI
Starting point is 00:39:23 to their open source projects that are hosted on GitHub. We're excited about what you guys are doing and the whole team and look forward to see what's coming out of Travis. And if you're out there listening as a user or as a company and want to pitch in, be sure and go to love.travis-ci.org. Can I do a really shameless plug though?
Starting point is 00:39:44 Sure. I actually really want to thank a lot of our sponsors that have helped us out. So I really want to thank a lot of our sponsors, like Wooga, Bendyworks as well. Bendyworks built a really cool iOS open source app for Travis, so you can check out the log streaming live on your phone. Also, Cloud Control and Zing,
Starting point is 00:40:09 these guys have really helped us out. Heroku and SoundCloud, NetApp, MongoHQ. I mean, the list goes on. CanBannery, Ticket Evolution. And this is, I'm probably not saying this right, but Zweitag? No, you said it right. Oh, perfect.
Starting point is 00:40:26 These guys have really helped us out, and we've raised a lot of our money through company sponsorship. So these are the companies that are helping keep Travis alive and helping us pay our rent. So if you're either looking for a job or just want to send some thanks to them, that would be fantastic. Thanks for joining us today, guys. Our pleasure. Thank you. See it in my eyes
Starting point is 00:41:06 So how could I forget when I found myself for the first time Safe in your arms As the dark passion shines

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.