We need to port our mature Saas application to .NET / msft stack. Before finalizing v2.0 architecture, we'd like to get a few more opinions from experienced Architects with real-world installations. This is a classic n-tier application that works great in the cloud. Unfortunately, some of our clients cannot have their customer list in the cloud for security reasons. What hybrid options are available, using best practices and latest technology?
Here is the basic layout of the app:
Back End: Task 1: load millions of sales records into MS-SQL from ftp flat files in real time, Task 2: calculate pricing on sales records (qty * price), Task 3: Build nightly invoices (10 or 10,000) by consolidating sales records for each customer.
Front End - Admins: Task 1: Enter customers and pricing terms, Task 2: Review customer sales records and invoices as needed.
Customer Web Portal: Task 1: View invoices and search for subset of sales records (this could yield millions of records). Task 2: update email addresses for invoice delivery.
Our Saas application is white labeled and available in BRONZE / SILVER / GOLD flavors. The BRONZE is low cost, so it is important to utilize open source and low cost tools (eg. MS-SQL Express) for it. The GOLD edition should scale to enterprise level if a customer is willing to pay for that performance (10,000 invoices from millions of sales records daily).
The current plan is to write one application using MVC4 / C# / EF / MS-SQL. Most installations would run in the cloud (eg Azure) but others could run on a local intranet for clients requiring in-house installations (high security). The downside here is that a local intranet installation would require some extra work to allow customers to access the web portal (if needed).
Is there a more efficient architecture we should consider? For example, should WPF be used as the client app, then push/synch selected customer data to a cloud web portal db? What would this look like, in detail?
Recognize that our BRONZE customers are non-tech types. It would be really sweet for them to simply download a WPF app with a lightweight DB that installs painlessly. Otherwise, it would require more support $ to walk them through an IIS7 / MS-SQL Express installations, for example, so they could use a MVC web app locally (assuming they don't want to be in the cloud). Could shared libraries make building two apps (MVC and WPF) a viable option (in terms of develop/maintenance costs)? Or is there a good reason to use a WPF client for GOLD installation too? What are the pros/cons to both approaches? (keep in mind that the actual application is much more involved that what is presented here)
Reporting is a big problem for us too. The GOLD installations require a lot of report processing muscle when a large customer wants to see their "near real time" sales records, fully priced. Is it better to mirror a dedicated "report" database on separate server? Other techniques?
Example: We are loading flat file records into MS-SQL, then looking up a price for each particular customer with a sales record (qty * price). At that point, the Customer wants to pull up a report via web portal to see "near real time" activity. At the same time, the Administrators are pulling up activity for another customer (phone support). And another Administrator may need to kick off creating 10,000 invoices that must query millions of sales records.
Here's what we're thinking for GOLD installations:
Server 1: dedicated to loading flat files into MS-SQL, real time as available.
Server 2: dedicated to serving report data
Server 3: dedicated to front end data entry (customers, price plans)
Here's what we're thinking for BRONZE installations: Everything runs on one machine (laptop).
JOB: We are looking for experts to verify which system architecture makes the most sense based on the above description, and also provide specific details on how that architecture is wired together across servers. Please provide specific real-world examples of any app installations you have worked on, and why the architecture made sense. Please limit your "Architecture Recommendation" to a 1 or 2 hr effort. Flat fee. Name your price. We are seeking a few different Architects to submit their recommendations. We will likely request additional work from the Architect with the best recommendation. We will award the job based on oDesk experience, ratings, portfolio, and feedback.