Hacker News new | past | comments | ask | show | jobs | submit login

In fact it was a design flaw, though not in the server.

The code for checking whether a username was taken was inefficient, so it was taking a huge amount of time to create a new account. The culprit was this line:

  (some [is dcuser (downcase _)] (keys hpasswords*))
The reason the TechCrunch post slowed the site down so much was not the traffic per se but the number of those visitors who were creating new accounts. I pasted a fix into the repl, so the site should be faster now.

Thanks to Rtm for narrowing the problem down to account creation.




   The reason [the site was slow] was not the traffic... 
   but the number of visitors who were creating new accounts.
The only better startup problem than that is "the site was slow because so many people were trying to give us money that our credit card processor crashed".


My friend Mike once told me: "When you can't tell the difference between public opinion and a DDoS, you're either doing something right, or doing something horribly wrong."


Are you coding live on the server? Or do you have a test platform that you work on first, and then past working code to the repl on the webserver?


Any chance you could fix a bug in the header handling as well? It's not accepting "Content-length" headers (lower case l) which is perfectly acceptable HTTP and happens to be what w3m produces. Means I can't post comments from w3m.


What type of tests do you guys maintain for news.yc other than the live deployment? Did this hiccup result in something like an account creation stress test being added to an automated test suite?


Hope you'll actually commit the change to the codebase so that the problem doesn't resurface on server restart like it happened once...


I wish my webserver had a repl.



Django has a shell that automatically loads all model objects. If you've got a decent shared-nothing architecture and point your config to the live DB (bad idea, but for the sake of argument...) that's effectively a REPL for the webserver.

For that matter, you can get the same effect with the MySQL prompt and a shared-nothing PHP architecture.


>For that matter, you can get the same effect with the MySQL prompt and a shared-nothing PHP architecture.

I see how you could, say, drop a user from the users table using this; but how would you fix a login bug like the one under discussion?


  EXPLAIN SELECT username FROM users WHERE username = $dc_user
Then look at the output, and either

  CREATE INDEX users_username ON users(username)
Or cache the result, or do something else to fix the performance problem...

If you meant "How do you find out it was in the registration check?", that's what the slow query log and query profilers are for...


FWIW, you can log into Erlang's Yaws.



ruby script/console




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: