May 25, 2005
Gavin tipped me off a while ago that Joel Reymont, the guy with the unusual background who was writing an industrial strength poker server in Lisp, switched to Erlang.
It took him 6 weeks to rewrite his server, which can now handle 27,000 simultaneous games on his Powerbook.
Joel first looks at Erlang:
I got depressed looking at Erlang today.
Joel decides to switch languages:
I want to scale well above 10,000 users. I want load balancing, fault tolerance, failover, a database that lets me store objects without writing a lot of code, etc. With all the bells and whistles that Allegro CL provides it does not help me with the above and Erlang does. And it's free too.
Joel talks more about why he switched to Erlang:
You can build a server that handles a few hundred users in any programming language. You cannot compete with such a server, though. You need a design that lets you cluster together a few poker servers, adding more as needed. You need a live poker server to take over when another one dies. This has to work seamlessly and be easy to setup and maintain. This is a prerequisite, the membership to the club if you will. You need to offer more to compete with the big guys and this is where the going gets tough. Think zero configuration, 100% uptime and unlimited scalability.
Allegro CL is known for coming with everything and the kitchen sink. Web server, web services, RPC, you name it and it's included. The price bites but the customer service is great. There's nothing in Allegro CL that helps me compete with the big boys, though. I have to build it myself
Erlang was designed to handle problems like this. Fail-over, take-over and load balancing are built-in concepts
I'm a little disappointed because I thought his project was going to make a great Lisp success story, but it sounds like he made the right choice for his application, and for his business. I'm curious to know how it turns out.
Posted by jjwiseman at May 25, 2005 07:35 PM
I can not see any problem why someone should not use
another language if it fits the application area better than Common Lisp.
Erlang (http://www.erlang.org)is a wonderful language IMHO, so why should anyone excuse it's use?
I'm using both, Erlang and Common Lisp.
Erlang is perfect choice for critical 24/7 network applications. My RAS-server(Tacacs) and SNMP-monitors are implemented in Erlang.
Erlang is not a good choice for GUI applications so I'm starting to use Common Lisp(Portable Aserve/CLSQL/CL-EMB/AJAX) for these purposes now.
Joel Reymont's Erlang code handles 27,000 games _without_ _sockets_ - apparently he hasn't added the network code yet. Once he does, memory and CPU usage will increase significantly. My estimate is that, once all I/O is included, the 27k value will drop at least ten-fold, but that's still great.
Joel is convinced that the marketplace demands certain features (e.g., 100% uptime, total scalability) that Erlang can give him. He's competing with "the big boys" who have more money and more developers and who probably use more commonplace web technology. And he's a single developer with a single machine, all which adds up to a convincing argument for a small language/environment like Erlang that is optimized for such applications and that gives him considerable leverage in that marketplace. So his situation looks like Paul Graham's ViaWeb development efforts, but with a different language (albeit one suited especially for the problem domain).
I love Erlang... but...
Did Joel ever consider PLT Scheme's webserver?
I don't think it's a bad thing that he's using Erlang! I just said I was disappointed that this isn't going to turn out to be a Lisp success story.
It'd be silly to use Lisp only for the sake of using Lisp, if it didn't help him as much as some other technology could.
Did Joel ever consider PLT Scheme's webserver? I've seen comments from the PLT developers on the mailing list to the effect that they don't recommend it for "production-quality Amazon-like sites" or something to that effect. Sounds like a showstopper to me. There also was some talk about memory leaks in the PLT web server, though v299 may fix that, I don't know.
I agree that for his purposes (five-nines availability, radical uptime) Erlang is almost certainly the right choice. The only other credible candidate that I can think of offhand is Oz, and it's nowhere near as mature as Erlang. In fact, AFAIK, there's nothing on Oz to compete with Mnesia, which is a shame.