As far as web servers go, the answer is 1), with the exception of this very site.
When you request a page from any Stack Exchange site, this request will be answered by one of eleven web servers, NY-WEB01 through NY-WEB11. If your request goes to Meta.SO, the answer comes from WEB10 or WEB11; in all other cases, WEB1 thru WEB9 will answer.
This exact breakdown may change once in a while – until not too long ago, we had three groups, and whenever we fail over to our secondary datacenter in Oregon, things will obviously look different as well.
There is no technical reason for splitting Meta off; the only reason is that we sometimes like to deploy things to only a small portion of the users first, to make sure we didn't break anything. Meta is pretty good for that, because 1) it gets real-world levels of traffic and activity, 2) the regulars here are used to craziness, and 3) the Meta people are very good at identifying our newly introduced bugs pretty quickly.
But the Meta split is not mandated by the code; in fact, WEB10 and WEB11 have the very same setup as the rest of the web servers, and they would happily respond to requests for stackoverflow.com or bicycles.stackexchange.com – they just never get these requests, because the load balancers are configured to send only Meta traffic their way.
As for data, every site has its own dedicated database containing the site's questions, answers, users, elections, etc., and there's a single "master" database (called "Sites", although these days it contains much more than just that) that lets the code know what sites exists and what configuration settings to apply when responding to requests for different sites.
Almost all site differences are either purely CSS (each site has its own CSS file), or based on certain settings that can be turned on and off per-site (e.g whether MathJax or other plugins are enabled, whether the site requires the how-to-ask click-through, and so on). Based on the settings for the requested site, the code will include or not include the particular features in the response.
There are a few places where the code hardcodes something like
else if (Current.Site.IsChildMeta)
but this is the minority (and often only for historical reasons); in most cases feature distinction are made like this:
// source of this page for "schematics.init"
As for the decision factors, I can't claim any first-hand knowledge (the first non-Stack Overflow site launched a year before I was hired), but considering that today our site count is in the three-figure range, it certainly was the right decision.