Stories
Slash Boxes
Comments

News for nerds, stuff that matters

Slashdot Log In

Log In

Create Account  |  Retrieve Password

Is Apache 2.0 Worth the Switch for PHP?

Posted by michael on Tue Dec 21, 2004 02:30 PM
from the play-nicely-children dept.
An anonymous reader writes "It seems like some of the members of the Apache Software Foundation are a little angry with the PHP Community because they don't recommend using Apache 2.0 with PHP. Since PHP is installed on half of all Apache servers this is a major issue for them. A number of high-profile PHP community members such as John Coggeshall and Chris Shiflett have blogged about this decision in light of a recent posting by Apache Software Foundation Member Rich Bowen which called PHP's anti-Apache2 stance FUD. Is there any real reason for the PHP community to start recommending Apache 2.0, especially when the 1.3.x series of Apache is rock solid and proven? Note Rich did later commend PHP for being a great product, so it's not all flames."
+ -
story
This discussion has been archived. No new comments can be posted.
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More
Loading... please wait.
  • by gtrubetskoy (734033) * on Tuesday December 21 2004, @02:32PM (#11150738) Homepage

    I should probably be noted that PHP used to be an official Apache Software Foundation project until it was mutually agreed to end this relationship. I have no clue as to what the underlying reasons were and as an ASF member myself would rather not speculate on this. See ASF Board Meeting Minutes [apache.org] for Feb 2004 (section 5.G).

    P.S. Apache 2.0 is great and there is no reason not to use it IMO.

    • by Matt Perry (793115) on Tuesday December 21 2004, @03:56PM (#11151953)
      IIRC, it was a license issue. The AFS wanted the PHP project to switch to using one of the ASF licenses [apache.org] while the PHP folks did not. PHP is still listed as a sister project. It's just not under the official ASF umbrella.
      • by iamlucky13 (795185) on Tuesday December 21 2004, @03:20PM (#11151423)
        From the blogs, it sounds to me like the php guys haven't recommended not using Apache 2, but rather have not recommended it. Although they haven't stated any harms aside from it's an unproven platform, they haven't found any benefits, either. So they said why bother.

        Although on the surface that sounds pretty neutral, I can certainly understand Apache being concerned about this, considering how closely affiliated the two are (as the grandparent noted). I like analogies so imagine bringing home a couple of girlfriends over the years for Mom and Dad to meet. Then you meet an even better girl whom you invest a lot of effort into impressing and you're sure they'll love her, but instead they say, "what was wrong with your last girlfriend?" While your parents haven't said anything against your new lady friend, they've implied they're not impressed. I admit, dating is a poor analogy for some of the regulars here, but at least it was fun while lasted, right?

        I agree that it sounds somewhat petty. Why not say something a little more friendly like, "We've seen great things from the Apache Foundation, and while we're not prepared to fully endorse version 2, we're anxious to see how it performs?" It's simple, generic, non-committal, open-ended, political-style BS, but it keeps people happy.
      • by JamesOfTheDesert (188356) on Tuesday December 21 2004, @03:40PM (#11151735) Journal
        But then again I'm a perl developer and php is obsolete to me.

        Hello, pot? This is kettle ...

  • by hey (83763) on Tuesday December 21 2004, @02:32PM (#11150744) Journal
    Anybody still running Apache1 on Windows is nuts.
    Apache2 works way better on Windows.
  • by Sonic McTails (700139) on Tuesday December 21 2004, @02:33PM (#11150751)
    The problem that PHP can be linked against non-threadsafe libraries, and this causes issues with Apache 2 when it's using the Worker MPM. However, if PHP died and takes the thread with it Apache simple restarts it. I had Apache2 and PHP in this configuration for almost a year, and expect for threads randomly restarting because of PHP, I had no issues. If you want to solve the thread problem, change the MPM to prefork (which is the default last I looked), which emulates the Apache1 behavior, and stops that problem.
      • by Matt Perry (793115) on Tuesday December 21 2004, @03:59PM (#11151998)
        Because v2 is more powerful. Filter chains for one. You can have the output routed through various modules and even shell commands before it's served up to the user. For example, if you want the output of a CGI to then go through server side includes expansion, then gzipped and served to the user. Apache 1.x doesn't have that kind of flexability.
        • by JabberWokky (19442) <slashdot.com@timewarp.org> on Tuesday December 21 2004, @03:59PM (#11152004) Homepage Journal
          Several of the libraries are commercial software interfaces. I have no idea how many (if any) are unsafe, but they are things like interfaces to Oracle, commercial layout software, etc.

          As for putting a lock around them, I'd imagine that when that happens, it would be considered thread safe *except*...

          PHP has a user contributed library system similar to CPAN called PEAR. Some of the libraries in PEAR aren't threadsafe... and even if somebody went through and updated them, next week there will be several new one that are not threadsafe.

          Now, all of this would be moot if there were a compelling reason to push to Apache2. The impetus would be there to do the work. But, right now, the last of the 1.x series is just as stable and performs as well as Apache2. That means that there's simply no reason to do the work, and Open Source doesn't like to do unnecessary work.

          When there is a benefit to the ongoing work necessary to make it and *keep* it threadsafe, it will likely be done.

          --
          Evan "And yes, I realize the irony of saying how Open Source works in this reply"

  • by Bruce Perens (3872) <bruce.perens@com> on Tuesday December 21 2004, @02:34PM (#11150764) Homepage Journal
    Either PHP itself, or many PHP applications, are not written to deal with the multi-threading offered by Apache 2.0 . So, it seems, you will do best if you install one of the less optimal threading models. And then you lose much of the benefit of Apache 2.

    Apache 2 and a recent Linux kernel come pretty close to the theoretical limits of the hardware when it comes to serving static content. It just loafs along while saturating whatever net connection you give it. It's worth trying out.

    Bruce

    • by Mr Guy (547690) on Tuesday December 21 2004, @02:37PM (#11150804) Journal
      It's not nearly late enough in the thread for someone respected to post correct, non-inflamatory, rational information.

      You're going to stop all the foaming at the mouth, and who wants a half-frothed troll this close to Christmas?
    • by TheTomcat (53158) on Tuesday December 21 2004, @02:46PM (#11150932) Homepage
      All due repect (and I have a lot of it), but:
      Either PHP itself, or many PHP applications, are not written to deal with the multi-threading offered by Apache 2.0.

      That's just plain not true. The underlying threading problem has little to do with PHP, and absolutely nothing to do with PHP applications, but libraries to which PHP links (libmysqlclient, libpdf, libmcrypt, etc etc etc). It's these third-party libraries (over which the PHP developers have no control) that cause Apache2 to be unstable in the various threading modes (prefork works fine, but is just not officially supported).

      S
      • by Bruce Perens (3872) <bruce.perens@com> on Tuesday December 21 2004, @03:02PM (#11151157) Homepage Journal
        No problem with the respect, this is an area in which I don't have tremendous expertise. But I submit that if PHP itself is in charge of its interface to a non-thread-safe library, it can put a lock around calls into it - effectively single-threading each library and that would perform at least as well as going to a less efficient threading model for apache, and potentially better depending upon where contention happens. And given that this is Free Software, thread-safe successors of those libraries can be developed.

        Bruce

          • er, no... (Score:4, Informative)

            by MenTaLguY (5483) on Tuesday December 21 2004, @05:20PM (#11153209) Homepage

            Kill-9ing does not always clean memory, open files, sockets, etc.

            Yes it does. The only exceptions are SYSV IPC objects which don't get automatically reaped, and temporarily created filesystem objects that still have links.

            Assuming your kernel isn't buggy, anyway.

    • by pthisis (27352) on Tuesday December 21 2004, @03:07PM (#11151218) Homepage Journal
      Most of the benchmarks I've seen for Apache 2.0 on linux have been pretty ambivalent; the prefork MPM is generally better at ramping up to handle large numbers of connections, and serves more reqs/sec under high load, while the worker MPM serves large numbers of requests to small numbers of connections more efficiently. But those numbers seem to fluctuate based on the application and the number of processors used, and I've seen some applications where one model was nearly twice as efficient as the other--and I've seen that big a difference work in favor of both models, for different apps (which probably points to some MPM-specific design decisions in that particular application).

      As always, the decision over whether to use threads or processes should be based primarily over whether you want to give up protected memory within your application or not (unless you're dealing with a platform like Windows where the process model simply isn't flexible enough to avoid throwing memory protection out the window).
        • by pthisis (27352) on Tuesday December 21 2004, @05:03PM (#11152989) Homepage Journal
          You raise an excellent point. If the data you are serving up is highly sensitive then you are better served by the forking model which has a process wall between the data in your HTTP connections. You never know what kind of bugs a module will exhibit in a multithreaded scenario.

          Absolutely. But it's not merely protecting sensitive data--OS architects worked hard for years to implement protected memory, and threads circumvent a lot of those gains (a bug in one thread can affect them all, all memory access needs to be synchronized, etc).

          There are good times to use them, but the choice should be based on whether you need to share all (or most) of the memory as opposed to sharing little or none (when processes, possibly with shared memory segments, are the correct choice).

          Too many people think that somehow "threads are faster" when (excepting egregious disparities a la Windows) that isn't necessarily true--and even when it is, the performance benefits are often tiny compared to the costs you pay.
      • by Tim Macinta (1052) * <twm@alum.mit.edu> on Tuesday December 21 2004, @02:48PM (#11150954) Homepage
        I beg to differ. Apache 1 or 2 for that matter is no where near the maximum performance level when it come sto serving static content. As projects such as thttpd, tux, boa, lighttpd and many others clearly demonstrate. In fact the performance of Apache 1/2 is no where near what the solutions I've mentioned offer.
        Quite true. I've improved the performance in the past of a very high traffic website by switching what content I could from Apache to Boa. Boa performed substantially better than both Apache 1.3 and 2.0. If you need further evidence, look at the HTTP response headers for one of Slashdot's own images [slashdot.org] - they are serving images using Boa instead of Apache for a reason.

        This isn't to say that Apache is worthless. On the contrary, it is an exceptionally good server. It just doesn't scale as well as some others for static content.

      • by Bruce Perens (3872) <bruce.perens@com> on Tuesday December 21 2004, @03:15PM (#11151337) Homepage Journal
        For most web servers on Linux, once the server has figured out what static file to send, it calls sendfile() and the rest of the work is entirely in the kernel until the file has been transmitted. On certain network cards, sendfile() has the property of being able to DMA from the disk to the network card without intermediate buffers. At least for big files, this is probably running very close to the hardware limit. For small files, the server efficiency is more of a factor.

        Bruce

      • by Bruce Perens (3872) <bruce.perens@com> on Tuesday December 21 2004, @03:10PM (#11151255) Homepage Journal
        It's because there are potentially random problems because of two threads writing the same data at the same time. Code that depends on the value of a global variable not changing from one line to the next might break. Imagine that you increment a variable and then assume that its value is one greater than before, but it's really two greater.

        To their defense, the PHP folks say the problem is with libraries they don't control. But there could be a thread-safe PHP interface to them.

        And I guess the bottom line is that they don't want to keep answering questions about this, so they just say don't upgrade to Apache 2.

        Me, I use Zope. I think it's always been multithreaded.

        Bruce

      • by Bruce Perens (3872) <bruce.perens@com> on Tuesday December 21 2004, @03:27PM (#11151527) Homepage Journal
        Consider that this could be a speed vs. space tradeoff. They are inefficient in terms of memory use. However, it's nice to have memory that is private to a thread such that only that thread accesses the entire memory page. That means that the caches and the TLBs don't invalidate as often because some other CPU has touched the data. Remember that in a multi-processor system the cache and TLBs have to watch what is happening on the bus, and invalidate themselves when they see someone else do a write to some data that they hold. Given that we have really fast processors and slow memory, this can get expensive.

        Bruce

  • by Anonymous Coward on Tuesday December 21 2004, @02:35PM (#11150783)
    I run a FreeBSD server with Apache 1.3.33 and PHP 4.3.10. When I was upgrading it a week or two ago to FreeBSD 5.3, I thought about making the switch to Apache 2.0. But then I thought ... What is that going to bring me?

    Apache 1.3 has been working flawlessly for me. Until I have a compelling need to switch to Apache 2.0, I'm not going to. I understand that there are some nifty new features in Apache 2.0, but not a single one of them is something that I want/need.

    This, I think, is the primary reason why people aren't going to Apache 2.0 in droves, not the PHP team's "FUD".
          • by Khazunga (176423) * on Tuesday December 21 2004, @06:36PM (#11153930) Homepage
            I suppose it depends on what you use the machine for. Linux isn't ready for the desktop so I don't run a GUI on it. Thus I really have no latency issues running maild/httpd/sshd/etcd.
            :-)))) I'd moderate you funny if I hadn't commented yet. My desktop is linux for three years now.

            Hint: Don't wait until the media says linux is desktop-ready.

  • by jdavidb (449077) on Tuesday December 21 2004, @02:37PM (#11150806) Homepage Journal

    Can anyone point me to a succint explanation of why there have been an Apache 1.x line and an Apache 2.0 line for years? This to me has always seemed like an implicit statement from the Apache people that I should not yet move to 2.0.

    I checked the front page of Apache and there were release announcements for the latest version of both lines. Neither announcement carried a statement indicating when you should use it over the other. The front page does not appear to link to anything addressing the issue, and the FAQ does not appear to handle it, either.

    • by Anonymous Coward on Tuesday December 21 2004, @02:51PM (#11151008)
      I checked the front page of Apache and there were release announcements for the latest version of both lines. Neither announcement carried a statement indicating when you should use it over the other.

      It's on the download page [apache.org]:

      "Apache 2.0.52 is the best available version"

      "Apache 1.3.33 is also available"

      The message would appear to be '2.0.52 is the best, but if you insist you can get a lesser version'.

    • by rbowen (112459) on Tuesday December 21 2004, @02:56PM (#11151064) Homepage
      It's very simple. We want people to move to 2.0, but since people have not done so, we're not going to leave them high and dry.
      • by jdavidb (449077) on Tuesday December 21 2004, @03:13PM (#11151293) Homepage Journal

        I have no problem with that policy at all. But there is nothing at all on the front page to answer the question "Which Apache version should I use?" Even if the answer is not a simple "Use 2.0" or "Use 1.x," there needs to be answers to "Why would I want to use 2.0" and "Why would I want to use 1.x."

        I have been interpreting the continued maintenance of the 1.x line for years as a statement that 2.0 was not ready for prime time. I'm pretty sure this was the case at one time. The website needs to just come right out and say, "If you are starting with Apache for the first time, please use 2.0. The 1.x branch continues to be maintained for existing users who need to remain with an older version." Couldn't that at least make it to the FAQ?

  • by Daeron (4056) on Tuesday December 21 2004, @02:39PM (#11150826)
    I guess the only reason i can think of not to use PHP on Apache-2 ... is if you absolutely HAVE to use a threaded version of Apache-2.

    THe apache-2 (Worker MPM) itself is rock solid and definately seems to boost performance of ones http-server compared to traditional apache-1.3.

    I am not exactly sure about a prefork-MPM vs apache-1.3 comparison.

    The biggest problem with PHP on any threaded Apache-2 (i am not sure if this holds true for the 1.3 series as well) ... is the fact that PHP keeps continuously crashing your httpd-processes.

    Switching to the prefork MPM makes everything rock-solid again ... but looses the benefits the threaded-MPMs offer.

    If PHP could actually solve their problems with running in a threaded Apache-2 ... i would jump right on it :)

    Again .. i never experimented with a threaded apache-1.3 (not even sure if that's possible) ... but for Apache-2 with the current state of PHP .. it's not recommended ...
  • by cybermint (255744) * on Tuesday December 21 2004, @02:40PM (#11150830)
    Apache 2.0 has proven to have so many new features that it was well worth the upgrade. Early on we encountered some minor issues with the threads, so we switched to pre-fork and have had no issues. We have been running PHP and mod_perl in pre-fork mode without a single issue for the last year. Unless you cannot switch because you use a module with no 2.0 support, I would make the switch immediately. And don't forget, you can always install both apache 1.x and 2.0 to give it a test run.
  • Nobody told me! (Score:3, Interesting)

    by Anne Thwacks (531696) on Tuesday December 21 2004, @02:40PM (#11150834)
    I never knew there was a problem - I have three mission critical servers (telecomms billing) running PHP5 on Apache 2, and nothing seems to have gone wrong in 12 months of 24/7 operation.

    What is supposed to be the problem?

  • by suso (153703) on Tuesday December 21 2004, @02:46PM (#11150925) Homepage Journal
    I'm using PHP on Apache 2.0 production servers right now. Honestly, I can say that PHP is more at fault for its own problems. I think that having lots of configurable options for a programming language is a bad idea. It leads to applications working on one installation of PHP, but not another. Administrators who enable things like safe_mode and turn off register_globals on shared servers are made fun of by ignorant programmers who don't understand what safe_mode is for and its usefulness. I have encountered all of this.

    The one thing that I wish PHP would take advantage of in Apache 2.0 is the ability to run code as a user other than the web server. Every time I bring this up with the PHP developers, nobody really runs with it. A feature like this would make PHP much better in shared systems and prevent people from having to do weird things to ensure security. I guess PHP is not that great for shared systems right now.
  • by Jason Hood (721277) on Tuesday December 21 2004, @02:49PM (#11150976)

    Stick with kernel 1.3.79 and Apache 1.1 just to be "safe".
  • What extensions? (Score:4, Interesting)

    by bucky0 (229117) on Tuesday December 21 2004, @02:51PM (#11150994)
    Is there a list somewhere of extensions that are known to be non-thread safe? Or do I need to just test them one by one?
  • How many hits? (Score:5, Informative)

    by dsb3 (129585) on Tuesday December 21 2004, @02:58PM (#11151103) Homepage Journal
    I sustain 5 million hits per day on an Apache2+PHP server that (for me) indicates it's a "do-able" platform to run with.
  • by jeif1k (809151) on Tuesday December 21 2004, @03:00PM (#11151121)
    PHP prides itself on being an easy-to-use language for web applications, and it succeeds. Unfortunately, Apache hasn't become any easier to install and configure between 1.x and 2.x; in fact, if anything, I think it has gotten overall worse. That's why Apache 1.x is a better match to PHP than Apache 2.x. If Apache wants 2.x to be a better match with PHP, then Apache needs to address the problems the PHP community sees with 2.x.

    Personally, I'd like to see more server alternatives to Apache anyway. I think there should be a handful of FOSS web servers capable of hosting PHP, web servers that make different kinds of tradeoffs between performance, security, and ease-of-use. The huge market share that Apache has, from my point of view, is a problem, just like the huge market share that Microsoft has in other areas.
  • Apache Tweak. (Score:5, Interesting)

    by DarkHelmet (120004) * <mark @ s e v e n t h cycle.net> on Tuesday December 21 2004, @03:04PM (#11151184) Homepage
    I've been running Apache 2.0 for the past year or so, without any problems whatsoever.

    The problem is running apache in WORKER or PERCHILD MPM modes. Those are the ones that are using threading.

    What I'd recommend to anyone who wants to have a robust, fast apache implementation is to do the following:

    • Setup a version of Apache on port 80 that runs worker MPM. Use this version for serving images and html files.
    • Setup a separate version of apache (port 9000 or whatever) on prefork that runs all CGI / PHP based stuff.
    • Proxy requests matching PHP / CGI / etc to the port 9000 version of apache.

    There you go... performance increase for 75% of serving requests.

    P.S: Avoid perchild at all costs!

  • FUD is logical. (Score:4, Insightful)

    by Spy der Mann (805235) <spydermann.slashdot@NoSpAm.gmail.com> on Tuesday December 21 2004, @03:08PM (#11151230) Homepage Journal
    PHP spread FUD about Apache2 because that's what they *THINK* of it.

    [F]ear - what if my PHP processes crash?
    [U]ncertainty - has this thing been tested yet?
    [D]oubt - Hmmm I'm not sure...

    And as far as I know, no one has dared to make a COMPLETE TEST of PHP running with Apache2, explaining which PHP modules fail and why.

    In other words, it's simply FEAR OF THE UNKNOWN what the php community has about Apache2.
  • by Duncan3 (10537) on Tuesday December 21 2004, @03:19PM (#11151405) Homepage
    Stop being so mean! It's not PHP's fault they can't run in a thread model. Threads have only been commonplace for 25 years, and the standard way you do things for 15.

    They just need some time to catch up. Apache 2.x is light years faster/leaner/meaner then 1.x was. Oh, and PHP runs perfectly fine under 2.x, as others have pointed out.

    OK, so yea, it's actually kinda sad (read: pathetic)
    • by JimDabell (42870) on Tuesday December 21 2004, @03:50PM (#11151869) Homepage

      I'd gladly ask the Apache and PHP guys to fix their "nobody" user problem, and start PHP with separate accounts.

      Apache 2 threaded MPMs can run different vhosts under different users, so this has been fixed for over two years. If PHP was thread-safe, you wouldn't have a problem, but as this story highlights, PHP doesn't play nice with threads.