I use a combination of ISP/proxy blocking (using this addon), Akismet spam checks (the previous addon causes it to keep going to Akismet until they make 'x' good messages), blocking new users from posting to profiles comments/links in signatures straight away from registration.
Once single method isn't a golden bullet. But a number of them do help.
You can't stop 100% of spam. You can stop 100% of bots.... but human spammers are dedicated people, and the harder you make it for them is what significantly reduces things for you.
There are quality add-ons to help achieve this, though you can do it with user group permissions and promotions, making new registered members abilities strict, opening them up as they continue to post with history, accessing more areas and features.