Graffiti Beta 1 - Review (part 2): Performance

by Stephen M. Redd 7. January 2008 03:58

I finally ran some simple performance tests on Graffiti Beta 1. By simple I mean that only a stopwatch and web browser were used. The purpose was to get a general "feel" for Graffiti's performance with a large numbers posts in the database.

I ran the test on a Dell Inspiron Laptop (2GHz Core Duo, 2GB Ram, 7200 RPM HDD) running Windows Vista 32bit, IIS 7, and SQL Express 2005. 

Since I was using my own development laptop, and it has limited free HDD space, I changed the DB recovery mode to "Simple". No other database tuning was performed. 

To generate the data I just created a SQL Schema project in Visual Studio 2008 Team System then created a simple data generation plan. The generated data included 5 categories, 100,000 posts, and 200,000 comments. The posts were split evenly among the 5 categories. Comments were also split evenly among the posts (2 comments to a post).  

Results:

100k posts and 200k comments:

  • Graffiti was able to display the user facing pages with only a minor performance impact.
     
  • The initial load of the site's home page took nearly 5 seconds. 
      
  • Refresh of the home page took less than 1 second. 
     
  • The initial load of a category page took about 2 seconds, with refreshes being nearly instant.
     
  • Clicking the "older posts" button in any content list took about 4 seconds. Once loaded though, revisiting those pages was nearly instant.
     
  • Loading a content item's view took about 1 second on first load, and was nearly instant thereafter.
     
  • Loading the control panel resulted in a SQL Timeout error every time.

    Looking at the queries in SQL Profiler: It performs a select count against the posts table, probably for use by the summary chart on the dashboard. 
       
    Testing the query manually: about 1 minute and 30 seconds to count through the table using the same where and group by clauses. Counting the posts without any where or group clauses still takes around 30 seconds. HDD throughput was at 100% during the entire duration of the query's execution.
      
    This is an area where a full version of SQL server on a dedicated piece of server hardware would make a huge difference. This kind of query bottlenecks on the low throughput of the laptop's hard drive... Low HDD performance is a typical problem on any laptop though.

 50k posts and 100k comments:

  • User facing pages loaded with no noticeable performance problems. Speeds were a little snappier than with 100k posts especially on initial page loads and when using the pager in content lists.
     
  • The admin dashboard page loaded in 17 seconds on the first load, and was nearly instant on subsequent loads. The "posts" tab of the admin section was the slowest, taking about 28 seconds on the initial load, and about 9 seconds on subsequent loads. The "comments" tab of the admin tools was surprisingly snappy, taking only 3 seconds to load initially.  

Conclusion:

Graffiti beta 1, without special optimization, should be able to serve the needs of most realistic sites in it's target market. 

Even on a modestly equipped laptop, performance did not significantly degrade until the number of posts exceeds the 50k mark. On real server hardware it would probably be able to handle well over 100,000 posts with little problem for the end users. The admin tools will degrade more significantly than user-facing pages.

Oddly, the number of comments seemed to have little impact on overall performance. 

Looking at the queries that had the most significant performance problems, it will be rather trivial for Telligent to either optimize the queries for larger numbers of posts, or provide alternate configurations that trade convenience features (such as daily report generation rather than real-time reporting) for better performance.

Reality Checks:

  • If you actually have anywhere near 100k posts, you probably are not going to be using any off-the-shelf product without significant customization and DB tuning anyway. Keep in mind that it takes 273 posts a day to get to 100k in a single year. Only a large news outlet is likely to generate that quantity of content and most of them would still take a few years to break the 100k mark. 
      
    However, 100k comments isn't too terribly unrealistic for a very popular site. 
     
  • There is one major difference between this test and a production environment of Graffiti. In a production situation, Graffiti would have created one folder on the file system for each post that was created via the GUI tools.  Within each generated folder would be a generated "default.aspx" file. The main purpose of these files is to give IIS a default document to use since the graffiti URLs don't specify actual page names. Graffiti also stores a little bit of metadata in these files that can help it render the posts faster (it doesn't seem to have trouble rendering the post if these files are absent though). 
     
    I was unable to quickly find a convenient way to mimic how Graffiti generates these folders and files without resorting to writing a custom app of my own... but this is a simple test, so I deemed it not to be worth the effort.
     
    I personally would not want to deploy Graffiti on a large scale without a way to disable the creation of these files and folders. Strictly speaking, this feature is only necessary on IIS 6, or IIS 7 when using the classic asp.net pipeline. It would not be unreasonable to expect that Graffiti will support the IIS7 integrated pipeline in the future and allow the per-post folders and files feature to be disabled (please!). 

Tags: , , , ,

Filed Under: Code

Graffiti Beta 1 - Review (part 1)

by Stephen M. Redd 17. December 2007 17:53

As some of you may have noticed, Reddnet.net got a face-lift last week.

I've migrated off of the BlogEngine code base (which I reviewed a while back) in favor of Telligent's new Graffiti CMS product. So far Graffiti is making me quite happy even though it is only in beta 1, but a few important features are still missing.

I thought I'd go ahead and do a review on it, but once I started writing I ended up with a lot to say. So I'll be splitting the review into a several parts over the next week or two.

So for the first part let me just tell you a little about Graffiti and Telligent in general.

Graffiti - It's not a blog exactly...

Graffiti's Logo Graffiti CMS is the newest product from Telligent, the folks that brought us Community Server.
 
 CMS is an industry standard acronym for "Content Management System", but with Graffiti the "CMS" part of this product's name supposedly stands for "Content Made Simple" instead. The dual meaning is quite deliberate, and Telligent is promoting Graffiti as a light-weight Content Management System even though they are playing around with the acronym.
 
 Graffiti is somewhere between a simple HTML content platform and a traditional CMS system.
 
 I should say up-font that I'm very skeptical of anything that calls itself a web based CMS system. The web itself IS a CMS system by design, and so the only real value anything can add to that is just gravy. CMS as a term is kinda hard to define. But generally CMS systems manifest by giving the site operator tools to organize, control, and search content once you've accumulated a metric ass-ton of it. Of course, any web platform has to provide this kind of functionality so generally when you hear someone talk about CMS they are either stating the obvious, or just talking out of their ass.
 
 But even though CMS is a flimsy marketing word there are a couple of things a good "CMS" will have to provide. The most important is tools for creating content that is of high quality. That means a simple and effective online content editor and usually also includes revision tracking, and content review and approval (work-flow) features. On the other end, a CMS should provide some mechanisms for organizing content. Usually that means categorization, labeling of some sort, reporting, and searching functionality. All this is necessary to keep old content from being buried under a mountain of newer stuff.
 
 As I said though, any decent web platform has to do this. The only difference between a "CMS" and an online catalog or online discussion forum is the kind of content being dealt with. In Graffiti's case, the content being managed is HTML "posts" like articles, blog posts, and similar.
  
 In beta 1, Graffiti has a good start on the publishing end of things. It provides the essential tools to easily and quickly creates content, and it presents that content in an effective way. It also presents content over RSS feeds as well as HTML web pages. It is also highly optimized to search engines and has a beautifully simple way of managing URLs automatically so they remain very human friendly.
 
 But the bulk of the heavy CMS features such as revisioning, review, and moderation are incomplete in beta 1. The searching, sorting, and categorization of content is present, but also not quite complete yet. There are a few rudimentary reports in beta 1 but presently this is limited mostly to summary traffic information... Basically beta 1's reporting amounts to a glorified "view counter", but the reports are very pretty.
 
 Fortunately for smaller organizations or casual bloggers, the heavy CMS stuff is unobtrusive, optional, and if used will add a lot of value without adding a lot of complexity. 

 While Telligent is very careful to make sure everyone knows that Graffiti can do things other than blogs, the reality is that Graffiti's design is very much blog-inspired. The only real difference between Graffiti and most other blog kits is that Graffiti is a tad more polished, more flexible, and built to be extended in other directions. But the core is very bloggish.
 
 The light-weight CMS components will probably allow Graffiti a good bit of success in other markets such as for news and other "article" based sites as well as in product/service support applications as a knowledge base. I fully expect to see Graffiti add simple forums and wiki functionality very soon after the initial RTM release. If not, I expect the developer community will probably quickly move to supply such as add-ons.
 
 But the largest market for Graffiti will certainly be the bloggers. Beta 1 lacks some essential blog related functionality though. The biggest for me is support referral services and trackbacks. But those are promised for the final release, and  it already has rock solid posting and RSS support. 

About Telligent:

 I'm a huge fan of Telligent and I've been closely following their work since the company first formed a few years ago. If you were to ask me where I'd most likely seek employment if I were to relocate out of South Carolina, then I'd give you a list of companies with Telligent's name at the top. They are a great group of very talented people and they make some of the best code on the planet!

 On the flip side though, I've never been that big a fan of Telligent's flagship product, Community Server. CS is just too big, heavy, and purpose built for my tastes. CS is most certainly the best large scale forums and blog hosting platform on the market. CS does what it does very well, but it also sticks to its niche pretty tightly and is hard to adapt, especially in smaller environments. 

 As a developer, I've always found extending and customizing CS to be... well... less than fun. It is quite painful and difficult to work with and requires a strong grasp of both .net as well as the CS product's internal architecture. CS has gotten much easier to develop against over the years though, but also during that time it has grown into a monstrous beast with about a dozen optional enterprise level add-ons. So while developing for CS may be easier than in the past, there is a lot more to develop against too. CS is almost so big that you could make an entire career out of just developing CS sites.... kinda like sharepoint, which is another product I'm not all that fond of --and for many of the same reasons.

Tags: , , , ,

Filed Under: Code

Powered by BlogEngine.NET 1.6.1.6
Theme by Stephen M. Redd