As we mentioned back in March, we switched NeoSmart Technologies over from PHP‘s ISAPI extension for Windows/IIS to Microsoft’s “FastCGI for IIS” implementation instead in hopes of achieving better reliability and uptime during times of heavy load.
Whether you like Windows or not, at some point or the other, you may find yourself using IIS 6 or even 7, and then you’ll be wondering why the open source technologies you’re using aren’t as stable as ASP or MSSQL on Windows. However, ever since the release of IIS 6, Microsoft has truly remade Internet Information Services as a real contender in the server market, providing a highly secure, stable, fast, and flexible web server for the masses. IIS 7 (due to ship with Longhorn Server sometime in 2007) is currently showing all the signs of being even better, with complete modularization of all components and a highly extensible, XML-based framework.
We’re really happy to be able to finally say with all conviction that it really works! This week, NeoSmart Technologies was featured on the homepages of many link aggregation sites (including Slashdot) for our Desktop vs. Web RIAs article. And we’re glad to say that even with the extreme load, for the entire past week we’ve had 100.00% uptime with respect to network, IIS, MySQL, and everything else!
We can conclude with all certainty that PHP’s extensions and modules for Windows servers aren’t to be trusted and should be avoided at all cost for anyone looking to achieve any sort of uptime. The other changes that we did involved removing MySQL as a service and launching it as a standalone app via Microsoft’s srvany application-service bridge – it seems that a good portion of the Open Source community has a severe problem dealing with load in a Windows-only environment.
However, for those looking for a “no-nonsense” open source approach, we can confidently recommend Perl, Python, and PostgreSQL as being the way to go. Unlike PHP, Perl is highly stable with or without the ISAPI extensions, and works even better in FastCGI mode – though that’s unnecessary given the (minimal) performance hit comparing ISAPI to FastCGI (ISAPI is about 10% faster under load).
Python is similarly very reliable and highly stable extension for IIS, though we haven’t had the chance to test it under (real-user) extreme load as we have with PHP and Perl. However, in our simulated load extended-testing scenarios, both Python’s ISAPI and (Fast)CGI implementations worked great and without a flaw on IIS 6.
In running and maintaining the NeoSmart servers, we’ve come to get a good “feel” for the various companies out there catering to webmasters around cyberspace. Some, like PHP, seem to only focus on their “recommend platforms” when it comes to stability, and don’t really care about any other configuration. However, ActiveState gets 5 out of 5 stars when it comes to producing excellent implementations of open source languages, and we can only hope that PHP and others can someday achieve even 80% of what ActiveState has done with their high-reliability, high-performance packages for Windows. ActivePerl and ActivePython are the only way to go if you’re looking to deploy either scripting language in a Windows environment. And if you want to go with CGI instead of IIS, make sure to use Microsoft’s FastCGI solution as well, since the 3rd party FastCGI implementation for IIS is very buggy and not under active development.
PostgreSQL undoubtedly wins the performance challenge when it’s paired up with the likes of MySQL. PostgreSQL is a fully matured RDBMS solution that works just great out of the box on Windows and Linux alike. We’ve never had any stability or compatibility problems with it on Windows Server 2003, and we highly recommend it for anyone looking to run a minimal-maintenance web server on Windows.
The only problem with this picture is that two most popular open source scripting dependencies are the least reliable out there on Windows. Just why PHP and MySQL don’t focus on what is fast-becoming a decent-sized chunk of the user market isn’t very clear to us. However, MySQL is fairly reliable on the majority of systems we tested it on, with the only issues occurring after upgrading to another version, or when the service becomes corrupted and you’re forced to run it as a standalone application.
We wish we could say the same for PHP, which despite the most popular open source scripting language in use today remains absolutely unreliable and completely indifferent in its attitude towards users of Microsoft’s operating system and web server. Thankfully, Microsoft’s FastCGI solution addresses most of the issues present with regards to stability and reliability on Windows, however, the companies attitude as a whole isn’t what we would consider to be “user-friendly” with respect to this issue.
At the end of the day, if you want to use Microsoft Windows Server 2003 and IIS to power your website,1 and are looking to deploy open source products on Windows 2003, then you should look for or write your own platforms that use Python or Perl in combination with PostgreSQL for maximum efficiency, minimum downtime, and least headache.
And you might as well, since Apache on Windows has its own host of problems to worry about and Apache + Windows (WAMP) isn’t as “successful” of a combination as IIS + Windows (WIMP) 9 times out of 10. ↩