ASP.NET on Mono scalability - asp.net

Does anyone know of any ASP.NET Mono production websites that get a substantial amount of traffic - 100 million page views per day, 100-300 page views per second, etc. ? I've searched here and on the HighScalability.com website but didn't find any.
To clarify my question - I'm wondering if I deploy my ASP.NET/C# website on the Mono/Apache/Linux stack will it suffer a performance hit over just keeping deployed on the .NET/IIS/Windows Server stack? If I were to deploy the same app on two separate servers with exactly the same hardware config, one server running .NET/IIS/Windows Server and the other running Mono/Apache/Linux, and then do some benchmark testing(load testing, stress testing, etc.), what would the numbers be?

You cannot expect the same performance numbers for ASP.NET on Mono and Linux as you would expect on Windows. However, things will change with vNext, the next version of ASP.NET, where Mono and Linux are touted to be first class citizens.
Here is a tech power benchmark article that has performance numbers for various web frameworks including mono - http://www.techempower.com/benchmarks/
As you can see ASP.NET on Mono is nowhere near the top for any of categories. However, that should not be a showstopper for picking ASP.NET on Mono. It really depends on your set of requirements. i.e. the response times you are trying to meet satisfying a given number of requests per second. ASP.NET on Mono could very well be good enough for your set of requirements. Add to that any productivity gains you and your team will make by using familiar C# and .NET, ASP.NET on Mono may very well work for you.

Related

Migrating an ASP.Net App to Azure

I'm getting close to finishing a public-facing ASP.Net app and I'm starting to weigh deployment options. I'm an ASP.Net/SQLServer veteran but noob when it comes to Azure. I'm wondering how others have felt about the learning curve to effectively migrate a local dev ASP.Net/SQLServer apps into Azure cloud.
More specifically:
How steep is the learning curve towards understanding administration and programming concepts, and do you think it's worth the investment?
What is Microsoft's support like if I have catastrophic problems from my cloud infrastructure and my live site is down? My expectation is a large price tag for a not-so-urgent SLA.
Will my non-Azure ASP.Net app require significant modification and/or coupling to run in the Azure environment?
Thanks
I answered a similar question a while back, here. Azure has evolved since then:
Azure's AppFabric Cache is currently in CTP (community technology preview) and will go live some time later this year (sorry, I can't quote a date). With a single configuration change, you'll be able to enable the asp.net session state provider without changing any code, and have your session state available to all of your web role instances.
With Azure v1.3 which rolled out in November, you have have the ability to run tasks at startup with elevated privileges (e.g. to run an MSI to install some prerequisite control suite).
For monitoring, you can take advantage of Microsoft System Center, which now supports Azure directly. Alternatively, you can look into 3rd-party options such as AzureWatch.
With Azure's extra-small instance, you can run a site for approx. $44 monthly. You mentioned catastrophic failures and SLA. With Azure, you need a minimum of two instances for SLA to take effect (this is because your virtual machines are located in physically different areas of the data center, in separate fault domains). So you're looking at approx. $90 / month to run a site with 99.95% uptime. Only you can determine whether this is worth it to you. Yes, you can host with a simple hosting provider for significantly less (such as GoDaddy). However, if your site fails there, you have to wait for it to be detected and then installed on a separate box. Also, you share each server with potentially dozens of other tenants, which will impact your site's performance. With Azure, at most 8 tenants will occupy a box, depending on how many cores you configure your virtual machines to use. And it's incredibly simple to scale up or down to handle traffic increases and decreases.
My personal experience is that there isn't much documentation and you have to search through blogs / forums to find answers for more advanced questions. If you have a nicely design app then there shouldn't be much problem with porting - you can google for Azure version of ASP.NET providers, ie. membership.
The biggest disadvantage may be cost: you have to do your maths but for me it turned out that a VPS hosting is much cheaper than Azure.
I would say that unless you get considerable savings on infrastructure don't move to Azure for just the sake of doing it. A hosted server with SQL and IIS will give you less problems and a bit more freedom.
I see an excellent answer by David Makogon already. The following might be helpful for you as well. The last episode of the Connected Show podcast was about migrating Wold Maps to Azure. If you are considering moving to Azure it is certainly worth listening to, as they explain the challenges they faced during the migration.
You could give a look at Moving Applications to the Cloud on the Microsoft Windows Azure Platform in MSDN.
Cheers.

Java and tomcat vs ASP.NET and IIS

Until recently I'd considered myself to be a pretty good web programmer (coming up for 10yrs commercial experience on a variety of e-commerce, static and enterprise applications). I'm self taught and have always used the Microsoft product stack (ASP, ASP.NET)...
My applications are always functional, relatively bug free, but have never been lightening quick. As a frequent web user I always found this to be the norm... how fast are the websites from the big tech players (eBay, Facebook, Microsoft, IBM, Dell, Telerik etc etc) - in truth none are particularly fast. I always attributed this to "the way things are with web apps"...
...then I cam across a product called Jira from atlasian and this has stopped me in my tracks...
This application is fast, and I mean blindingly fast.. too fast to time the switches between pages, fully live content, lots of images and data and cross references etc etc...
I run this on an intranet, with a large application DB, and this is running on a very normal server (single processor, SATA HDD, 8GB RAM).
Am I missing something?? Are my programming techniques that bad?? I am wondering if this speed gain is down to it being written in Java and running on Tomcat.
Does anyone have any benchmarks to compare JSP / ASP or Tomcat / IIS???
Thanks,
Mark
NOTE: this isn't a blatant plug for Jira. I don't work for them or have any affiliation to them... but I would like to be able to write applications like them :)
YMMV. But one of the longest-lived Things That Aren't True Anymore is the assertion that "Java Is Slow". Excepting floating-point (where most Java implementations aren't at liberty to use the floating-point hardware), Java is generally as fast or faster than compiled code. Some of the best and brightest have spent years of effort ensuring this, including such things as dynamic recompilation/re-optimization of code based on run-time metrics - something that statically-compiled languages like C or assembler cannot boast.
ASP is sort of the opposite extreme, since the original ASP had to recompile each page request each and every time it was made. ASPX addressed this by allowing retention of the compiled page code. That got rid of a lot of useless overhead.
A more compelling reason to prefer Java over ASPanything/IIS is freedom. A Java/Tomcat webapp will run under almost any OS on almost any hardware. IIS runs on Windows. Period. And for the most part, that also means Intel. Not Sparc, Not zSeries. Maybe you don't care. But then again, maybe next week IBM will offer your employer a can't-refuse deal on a mainframe.
I don't have benchmarks, and there are a lot of things that can make one platform preferable. But I permanently gave up on the "Java is slow" idea when I encountered the Poseidon UML tool with its cool real-time graphics UI and the FreeMind mindmapper tool. A small hit to startup the JVM, but after that, you'd never know what language you were working under.
The great debate. Java vs. .Net.
When .Net first came out there was an application written called "The Pet Shop." Which was a .Net port of Sun's J2EE reference application, "The Pet Store". It was announced that Microsoft's implementation was "faster."
As with anything, especially anything to do with marketing, you have to dig deeper to find the truth.
Any technology can be fast with enough hardware and the correct design.
In my experience there are two factors to speed: What type of hardware is used and how you architect your application (this includes database tuning).
Caching at various levels (response, db, etc.) makes a huge different in responsiveness of a web application. There is also a lot of things that are done to reduce time consuming operations like db connection pooling, sql statement caching, etc. As much as I'd like to say Java is better :-), I think in this case the performance is due to the way Jira was written and the fact that it's being run internally (probably with few users as compared to eBay, Facebook, Microsoft). This site, Stackoverflow, uses ASP.NET MVC and IIS and is very responsive and my guess (since code is not open sourced, yet) is that they use many of the same techniques you would find in Jira or any other web application built to scale.
I think that it is not typically the frameworks and languages used that make an application slow. In my experience, some frameworks like JSF or .NET server side controls give developers alot of freedom to make too many database calls and look things up too often, but that's definitely not the fault of the framework used.
Keep your application as light as possible and focus on keeping the data sent to the client as small as possible, and you will have a fast application. It's usually faster to develop fast applications too.
The Jira folks have written a best in class application (and charge for it) - nice work crocodile dundees.
I also suggest to consider also two aspects:
the maintenance activities: logging and deployment. In my opinion under a unix like server is more easier to log, deploy, and maintain new release than doing the same on a Windows server.
if the project require to use some open source application (i.e. Alfresco repository) Java is better solutions
People's opinion is mostly biased. Most people have never really tried the other while claiming the other is slower. I wouldn't trust any answer: it's mere opinion. It's boring to always read the same 4 cents again and again.

Performance of ASP.NET in Mono(Linux) vs IIS(Window)

Is there any performance different between hosting your asp.net in mono on linux and iis on window server?
Of course there is a difference, just like there is a performance difference between Java and .Net. However, it is going to vary widely based on what the application is doing.
There are things where .Net is much faster than Mono. There are things where Mono is much faster than .Net. There are things where they perform roughly equal. The same holds true when comparing applications running on Windows or Linux. The same holds true when comparing applications running on IIS and Apache.
Likely, either can run your application fast enough, and you will find that your performance is going to be driven by your programming techniques. The difference of a few requests per second probably isn't a huge issue unless you have a large server farm, in which case you most likely have the resources to test on both and see which is faster for your particular application.
In regards to the suggestion by lextm that publishing the results of perf comparisons is "not possible", the End-User License Agreement (aka EULA) for Windows Vista Ultimate allows it, with conditions.
MICROSOFT .NET BENCHMARK TESTING. The
software includes one or more
components of the .NET Framework 3.0
(“.NET Components”). You may conduct
internal benchmark testing of those
components. You may disclose the
results of any benchmark test of those
components, provided that you comply
with the conditions set forth at
http://go.microsoft.com/fwlink/?LinkID=66406.
Notwithstanding any other agreement
you may have with Microsoft, if you
disclose such benchmark test results,
Microsoft shall have the right to
disclose the results of benchmark
tests it conducts of your products
that compete with the applicable .NET
Component, provided it complies with
the same conditions set forth at
http://go.microsoft.com/fwlink/?LinkID=66406.
The conditions, as I read them, are reasonable disclosure requirements: the source code you used to do the testing, the versions of software you tested, the date you conducted the tests, the configuration and optimizations you made, etc.
The EULA for Windows Server 2003 includes the same provisions. I couldn't find the EULA for Windows Server 2008 (the latest incarnation) but I assume the benchmarking provisions remain.
Addendum: If you look in the EULA for Windows7, you will probably find a no-benchmarking clause, or more accurately a no-publish clause; this is because Win7 is still in pre-release. When it is officially released, expect the standard benchmark publishing conditions to be present.
In the past Microsoft had a more restrictive policy on this topic. Basically: you need permission from us (Microsoft) to disclose performance comparisons. This policy has been relaxed, even retroactively to .NET v1.0 and v1.1, as per the link in the above EULA.
Mono sucks!
http://art-blog.no-ip.info/cppcms/blog/post/27
http://www.phpvs.net/2008/02/08/benchmarking-mono-aspnet-vs-php-a-slight-problem/
Or more politically correct: Mono is not yet ready for prime time at least for Asp.Net web applications:
No support of caching
Performance is terribly unstable and dropping after application start.
EDIT: Added quotes for my post, answer to latest comment.
However, in order to make fair comparison ... I should enable caching ... adding following line at the header of aspx file should help me.
<%# OutputCache Duration="20" VaryByParam="None" %>
I'd done it — no result! The performance is the same.
Note: after deeper check, the implementation of cache in modo is very limited and poor, after recent checks it still holds in newer versions of mono.
Ok, anyway I did some benchmarks(...)simple clock gives me about 750 pages per second
for cached variant and 650 for non cached one.
The tests were done under IIS 5.0 on Dual Core Pentium D 3G
The same code ... with mod_mono (under Signle Core AMD Athlon 3000)
had given me:
350 pages per second.
Next run had given 300.
next 200
and next 150
So, benchmarking is impossible.
Does referring to post is still not augmentative?
No mono is definitely not ready for prime-time.
Here is a nice benchmark where someone tested the difference of windows/IIS vs Linux/Apache/Mono(mod_mono). Crazy enough mod_mono (apache's mono plugin) was significantly more performant. Granted I am sure that in certain circumstances it would be different, but given how low profile linux and apache are plus the great job the mono guys have done, it stands to reason that Linux/Apache/Mono is a better way to go. Now that being said, hopefully with the new open source ASP, we will see some super performant Linux .Net servers coming soon (primed and ready for the cloud).
graph of the performance comparison
I've run mono apps under mod_mono. From a usability, it functions fine, though I didn't do any benchmarks. Still IIS really is an incredibly convenient environment to work in. Given the choice I'd still hosts my web-server in IIS and use linux mono clients to connect to it.
First, it was said that publishing performance statistics to compare CLR implementations (.NET vs Mono) is not possible.I am not sure what is the source, but Mono team only published comparison among Mono versions (1.x, 2.0, 2.2, and 2.4), so I assume the saying is real. Therefore, you can only test the performance in your own environment.
Second, Mono is evolving much faster lately, which gives you a chance to gain performance boost simply by upgrading Mono runtime.
Third, please use a different attitude to judge an open source product. For closed source products, you can do nothing but begging its vendor to improve performance or providing your support on how to tune your applications. For open source projects, you have access to the code base, and you can tailor it to suit your own needs, and fix the issues for your own applications.
As jpobst mentioned, even if you cannot fix issues yourself, you can contact the Mono guys.

When should new .NET projects be designed for .NET 4 Framework

I am preparing to start on a new short-term contract (1-2 months) that involves replacing an Access application by moving it to ASP.NET and SQL Server.
I am only responsible for the ASP part and connecting it to the database.
The only requirement is that whatever technologies I use be relatively well-known in the area, so that if they need to have someone else work on it, it isn't specialized knowledge.
So, I could do this in Rails or ASP.NET, but, when should the development be aiming for .NET 4 Framework, as there are many changes coming out that may be advantageous to use.
Or, even though it may be useful, when is it better to just ignore new features and stay on an older version of .NET?
I am assuming that hardware isn't the limitation, as many computers won't be able to run .NET 4 Framework, but that would be an issue for a hosting company, as they can find a hosting company to support whichever framework the application is designed for. If Rails makes the most sense, as their hope is to have the application written quickly, but have it reliable, then again, the hosting company would need to support it, or they use a different one.
This company hasn't used a hosting company, they need to find one, so there isn't a relationship that could be an issue.
UPDATE: Part of my concern is that initially the application will not require javascript, but phase 2 will be to make it more interactive, as some clients won't be allowed to have javascript on their computers. In order to limit how much javascript must be known by a developer there are frameworks that will adapt to browsers and situations fairly well, which is why I am also thinking about RoR and the fact that there appears to be changes coming out in .NET 4 that may help with this.
As a general rule of thumb, I wait one year before building sites in a new framework unless the client specifically asks for the newest technology. This has worked out very well for me. The advantages are:
The technology is much more stable (hotfixes, service packs, etc.)
Common complaints about missing functionality are usually resolved
Hosting companies, support communities and corporate IT departments have had time to get used to the technology, find out more about it, play around with it and have it mature within their organization
Unless there is specific need for new functionality introduced by .Net 4, there is no point in subjecting your clients to the immediate problems with an initial release, or making it more difficult for them to find hosting. You should either investigate all of this up-front, or use .Net 3.5 in the meantime.
The only requirement is that whatever
technologies I use that it be
relatively well-known in the area, so
that if they need to have someone else
work on it, it isn't specialized
knowledge.
I would have thought that requirement was enough not to develop this project on .NET 4.0 - it takes time for a new framework version to filter down into the market, and it will be a while yet before there are a lot of developers around with .NET 4.0 experience.
Also, you would be essentially developing on top of a BETA product - while I'm sure most of the features will remain unbroken from BETA -> RTM, there is always a risk that something will break or not work like it did in BETA, so why risk this on a commercial project?
I wouldn't target .NET 4.0 yet on a commercial project unless there was a specific reason for doing so, and even then you would have to have buy-in from the client, ie "I can do this much more quickly and with less effort if we use the current beta version X rather than established, stable version Y" - good luck with that.
I worked on a commercial project that used the CTP version of LINQ to SQL - then when we went to VS2008 / 3.5, suddenly everything changed and we had to make a lot of changes just to get LINQ to SQL working again.
Stick with 3.5 - it's easier for hosting and getting developers.
Just a couple of thoughts, I wouldn't even think about creating an application for production use in .NET 4/ASP.NET 4 until:
There is a release candidate. It's
not the first time I've seen
features in beta's not make it to
RC/RTM.
Microsoft have permitted development and deployment
of production applications by way of a 'Go
Live' license.
There are some hosters out in the market such as OrcsWeb who are participating in public beta testing, but they aren't intended for production use.
I'd run with the .NET 3.5/ASP.NET 2.0 or MVC bits for now. Better safe than sorry.
Generally speaking it's going to be easier finding hosting for a Rails app. If you want to run .net 4.0 you're probably going to have to run a VPS or dedicated machine. However if you're bailing after the application is finished and assuming your client is in Knoxville, they're going to have a tougher time finding a Rails developer to maintain the application.
I think the bigger question is your role. They're looking to you to solve this problem for them. Are you productive in both technologies? How about getting a Windows server up and running? A Linux server? How's your SQL Server vs MySql? I'd guess that you're probably stronger on one stack vs the other - for a contract that short I wouldn't want to be doing a lot of experimental development.
i wait until the OS that everyone will be using has it.
Just last month i took a dependancy on GDI+, which first shipped with Windows XP.

Can Windows Web Server 2008 be used to host games?

I'm currently using a linux server, we run a couple of web sites of it, PHP apps with MySQL, the usual. Since the server is privately owned by some friends and myself (we do have it hosted at a professional datacenter though), from time to time we also use it to host our smallish counter-strike source and call of duty 4 matches by running the released dedicated game server packages.
I've recently subscribed to DevExpress' excellent WinForms and ASP.Net component suite, and is contemplating moving to Windows to make use of those ASP.Net components. I'm currently trying to decide between the Web and Standard editions of Windows Server, since there is a difference of nearly a thousand bucks (where I come from)
For Windows Web Server 2008, Microsoft has softened the database server restrictions and made it clear there is no need for CALs. But would one be able to run the above mentioned web servers? I've been googling and searching through forums to no avail.
Need some help before I plunk in the cash.
Thanks.
Before I give any opinion, I'll start by answering your core questions:
Yes, you can run dedicated game servers on Windows Server Web ed.
The differences between web and standard:
Web only supports 2 gigs of ram. Standard in 64bit mode can support 32gigs (and more?).
Standard comes with more things that are better suited to local server environments (eg: active directory). If you want LDAP controlled Exchange email, you'll need Standard. Most web server don't need these.
Web (apparently) won't support full-on SQL server versions. Express should run though.
Opinion time.
Dedicated and virtual dedicated monetary overheads on Windows servers are a lot... To the degree where you're paying more for the software than the hardware costs, at least for the first year.
Renting the software (as part of a managed dedicated server or VPS) is initially a lot cheaper, but over the course of a couple of years, will cost you about the same and if you run it longer, it'll eventually cost you more.
Shared Windows hosts can be good. I've been with a company called Hostek (Florida-based) and they've bent over backwards to make hosting a fairly busy site (around 6000 uniques a day) very cheap for me. It can also be atrocious. I've had bad hosting companies too. Shop around.
About a year ago, I dropped Windows at home in favour of Linux. I'm not going to enumerate the many benefits and drawbacks; I'll just tell you that that's when I stopped doing .NET in favour of more open Frameworks. I'm not using Django (a Python-based web framework). While you might not like it (or other frameworks - eg Ruby on Rails), I plead that you do check out what's happening in the open-source world before you plonk for anything Windows related since you already have the infrastructure available for hosting Django/Rails/et al.
If you wanted your own Linux server, VPSs start from around $20pcm. As I said before, severely cheaper than Windows counterparts. I now use Linode to host everything new I make. Highly affordable and they'll easily run dedicated games like your current set-up does.
Mono isn't an option for you. Not yet anyway. It does go some length to help people migrate their applications but it's still pretty sketchy on the ASPNET front. And as a comment says on another answer: the controls you want to use are strictly Windows-only for the moment.
Linux will consume fewer baseline resources than Windows will. On an old server (Windows 2000, IIRC) I had to administer, the core of Windows would consume anywhere from 100-200 megs of RAM. My current Ubuntu server eats 40megs. I'm not sure how much RAM you have to play with on your server but if it's a lower amount, you're going to fit a lot more on a Linux host. (Remember that if you have more than 2gigs, you don't have the choice of the Web Server edition)
It's clear from this that I'm a complete Linux super-enthusiast, but I know my needs differ from yours. ASP.NET is a great platform but it costs a lot of money even if you're splitting it between friends. You could opt for Windows... Or you could go Linux, donate a bit to the projects you use and buy a new plasma or something shiny for the lady.
SPLA? Isn't that for service providers? My friends and I use the hosted services for ourselves (games, email and web), though of course our web sites are publicly viewable by all; but I think that hardly qualifies as "providing a service"?
Unfortunately, staying with Linux would make it such that I would not be able to use my DevExpress components, which is my reason for considering Windows Server in the first place. .NET may be partially supported by Mono, but not fully, and DevExpress makes use of certain features of .NET that aren't (at least as yet) supported by Mono.
We also already own our own dedicated server, so are only looking for a suitable OS.
Still, your reply is appreciated.

Resources