This is a really wide-open question, and you can choose your architecture to optimize for different things (e.g. cost, availability, speed). You'll need to decide whether building a single-tenant or multi-tenant app. The former is maybe simpler and easier to meter on per-customer basis since there's effectively one customer (or church) per deployment; however, that could end up being costly to run, since you'll likely have idle web/worker roles during non-peak hours. A multi-tenant app lets you have better overall compute utilization, but you'll need ways of metering each tenant. Even with a multi-tenant app, you can still go with single-tenant database, if there's a need for it.
You may want to consider a tiered pricing model, based on some unit of operation (or some number of users per church). To help with metering, you can:
- Look at storage analytics (this gives detailed logging on blobs/tables/queues accessed, including exact resource accessed, at what time).
- Create custom performance counters and emit these with your Windows Azure diagnostics
- Look at Windows Azure SQL Consumption (including the dynamic management views)
For baselining cost: Consider a few things:
- For SLA and general uptime reliability, you need at least 2 instances
- Always go with smallest instance size you can operate with, and scale out to more instances as load increases
- Let's assume you're optimizing for cost, so you run all your background/queue processing/scheduling/etc in your web role instances without any worker role instances
- For this exercise, assume multi-tenant compute, and single-tenant database (Web Edition, average < 100MB per tenant). This leads to $5 monthly per tenant on database.
- Assume, say, 5 churches. Assume 2 minimum Small instances, and assume it bursts to 4 instances for 12 hours during the day. That's an average run rate of 3 instances, or $260 monthly.
- Assume some bandwidth charges of, oh, $10 monthly.
- Assume some storage charges for queues, blobs, diagnostics of say $25 monthly.
With assumptions above (completely made up to give you a strawman to start with):
- DB: $5 x 5 tenants: $25 monthly.
- Compute: $260 monthly
- Bandwidth: $10 monthly
- Storage: $25 monthly
- Ballpark total: $300-400 monthly.
Now: This is completely made up, and I have no idea how much data or bandwidth your app is going to store / generate. But hopefully this gives you a rough idea how to start projecting cost. Notice that I did not include storage transactions in estimations. I think that's just going to be background noise.