You could accumulate orders for, say, five minutes (or whatever amount of time you prefer) after something goes on sale. Then, at the end of that time, if you have more orders than items, randomly select the orders you can fill. Send an email to the successful and unsuccessful buyers, and charge credit cards accordingly.
Waiting more than five minutes or so might not be such a bad idea, depending on whether you want to cater to people in different times zones in the US or overseas. Personally, I really dislike sales where the only way to have a chance at a ticket is to to place the order in the first few seconds. It either means sitting at the computer at 3 am local time to hit the button at the right moment, to (maybe) get a ticket, or sitting down and writing a bot, which clearly disadvantages the majority of buyers because they lack the programming skills (or determination).