A quick blog post from the OSCON floor where I just finished a
3.5 hour tutorial on "Scaling a Web Application (mostly
PHP/MySQL)". To be honest I submitted this talk as a 45 min talk
and clicked the wrong button and ended up being handed a tutorial
which I think turned out to be a good thing. After all, we could
spend days and years talking about scaling.
One of my goals in this presentation wasn't just to talk about
tips and examples, but also talk about the general business of
scaling and creating scaling plans, scenario planning or capacity
planning. This I believe is almost always more important than
coming up with the small tips that fix a site when you have a
problem!
Thanks to Ronald Bradford for showing up for the last hour
of the presentation and helping out, it's good to have help and
from a knowledgeable expert as well :)
Slides are now …
Funding for Aptana and Jolicloud. Ingres targets MySQL. Trent Reznor on Open Core (sort of). And more.
Follow 451 CAOS Links live @caostheory on Twitter and
Identi.ca
“Tracking the open source news wires, so you don’t have
to.”
Funding
# Aptana raised
$7.8m in funding from Rembrandt Venture Partners and Accel
Partners.
# Jolicloud raised $4.2m in series A funding for a Linux-based Netbook OS.
Not with a bang…
# Sun reported
preliminary revenues for Q4 2009 of $2.58bn to $2.68bn, compared
to $3.78bn a year ago.
Best of the rest
# Ingres …
PHP 5.3 is released and after the release stress is over my mind is open for new ideas. While relaxing yesterday I thought about many things, among them was the Resultset iterator I recently discussed.
Now I wondered where to go next with this and had the idea that an individual Resultset is a child of the whole result and this might be wrapped in an Recursive Iterator. For doing so we don't implement the Iterator interface but RecursiveIterator. RecursiveIterator extends a typical Iterator with two methods: hasChildren() and getChildren(). But now we have a problem: The Iterator returned by getChildren() has to be a RecursiveIterator, too, which makes sense, in general. But I want to return a MySQLi Resultset which isn't recursive - so making this a RecursiveIterator is wrong. My solution now is to introduce yet another Iterator which goes by …
[Read more]It was a long run and I'm sure it felt like an eternity for many - for me it certainly did. PHP 5.3 was branched of over two years ago and finally is ready to be called 5.3.0.
The php.net website and many other blogs discuss the features - from often loved closures, to well discussed namespaces to the sometimes hated goto - so I think I don't have to this here but instead can focus on that what really matters:
- Thanks to all the developers - Without them no new features would be there.
- Thanks to the documentation team - Without them one would have to decipher the NEWS file and guess what exactly is meant.
- Thanks to all participants during the Testfest! - During the Testfest we received many good tests for our regression test suite. Many of these tests represent what people do, not what developers think they should do which is important to …
The call for papers for OSDC 2009 is open until 30 June 2009; yes that’s only a few more days. Submit your abstract and do a talk at this fab conference!
This is a grassroots style conference designed by developers for developers. It covers Perl, Python, Ruby/Rails, PHP, Java/Grails and Open Source operating systems as well as some business aspects. If you’d like to cover something else as well that is Open Source themed, please feel free.
The Call for Papers can be found at: http://2009.osdc.com.au/call-for-papers
The important dates are:
- Call for Papers Closes 30 June, 2009
- Proposal acceptance 20 July, 2009
- Accepted paper submissions 14 September, 2009
- OSDC 2009 Main …
Introduction
StackOverflow is an amazing site for coding questions. It was created by Joel Spolsky of joelonsoftware.com, Jeff Atwood of codinghorror.com, and some other incredibly smart guys who truly care about user experience. I have been a total fan of SO since it went mainstream and it's now a borderline addiction (you can see my StackOverflow badge on the right sidebar).
The Story
Update 6/21/09: This server is currently under very heavy load (10-200), even with caching plugins enabled. Please bear with me as I try to resolve the situation.
Feel free to …
[Read more]Over at phpdeveloper.org I was pointed to a blog post talking about MySQLi and stored procedures. That reminded me about a small thing I recently did: When using MySQLi's multi_query to send queries which return multiple result sets you have to use a rather unintuitive API which can certainly be improved.
Recently I sat down and cooked up a small improvement for that, being an iterator fan I, of course, had to use an iterator for that and implemented the following class:
<?php class MySQLi_ResultsetIterator implements Iterator { private $mysqli; private $counter = 0; private $current = null; private $rewinded = false; public function __construct(mysqli $mysqli) { $this->mysqli = $mysqli; } private function freeCurrent() { if …[Read more]
I recently presented DTrace at Sun's CommunityONE event. My
presentation was focused on observing drupal using DTrace. You
can see a replay of the presentation here. You can get the presentation here as well.
If you are an AMP (Apache MySQL PHP) stack user on
Solaris/OpenSolaris you can benefit from DTrace. Here is a
D-Script that will print the load distribution on your system.
Think of it as "AMP-top" if you may! This was tested on OpenSolaris
2009.06
#!/usr/sbin/dtrace -qs BEGIN { …[Read more]
Yesterday we held our PHP BBQ event at Munich, well it was no BBQ as the weather forecasts predicted rain,which came in the evening, but a nice evening in a beer garden.
We had more than 30 people there, some leaving early, sme arriving late, covering quite different kinds of participants: PHP core developers, professional PHP users, people doing PHP stuff as hobby, friends and PHP community veterans like Till Gerken. Many people didn't know each other or didn't see each other or some time so we had lot's of discussions, and most of them even weren't about PHP and even many non-IT things were covered, which I find always great. If you want an impression check Ulf's photos. I really hope this makes a good foundation for more regular PHP meetups.
There will be a few more events of this kind this week in Germany, so go there if you can, don't be …
[Read more]
So, when you connect on the fly to a database your subject to a
variety of issues, like when the db is not available and when the
db does not have a route.
One of the main reasons why a dev may want to connect on the fly
is because they have too many front ends to hold a persistent
connection on the backends. Since mySQL does not use libevent,
holding open threads to mySQL is much more costly. Threads ==
Memory.
But, that's here nor there. The main purpose of this post is to
talk about how to recover from failed connections that block
apache threads.
Common Failures:
No route to Host
Flapping NIC
Locked Tables
Recovering from a Crash
more of the same.
My Environment:
I have a bunch of webservers (200+) that all have 300 possible
threads (60000 possible connections to a single DB) behind a load
balancer that uses the LB least connections …