Top 10 Architecture Scalability Mistakes Made in ColdFusion
ColdFusion, Software, MySQLThis is a focus on architecture design mistakes I've seen made too often over the years by CF developers building ColdFusion architectures. Often times, the codebase and system started small and grew too fast, such that the original developer/architect didn't have the time or experience to scale the system up with the demands of high-load applications.
- Not dedicating enough time and resources on optimizing the database:
Too often, there are smart, but unqualified programmers/developers designing and maintaining the database. A qualified/certified DBA, even part-time, is well worth the investment. You need one who can profile your database, tune all the server and individual database settings, recomming index changes, be responsible for DB design and integrity, regular maintenance, set up replication/failover/clustering, and will proactively monitor your database to let you know what problems need attention in relationship to your applications. - Not dedicating enough time and resources on optimizing queries:
Again, developers tend to throw themselves into the role of writing all the queries, but don't necessarily think about the performance/scalability issues of writing non-optimal queries. Often times a DBA who is qualified for all the Database Server stuff (see #1 above) isn't the same type of DBA who can optimize your queries. You need someone who can run the queries with explain plans, and then can make recommendations on improvements. These improvements pay off immensely! - Coupling all parts of the system into one mega-application, instead of separate applications
Usually they start out as fine: clever little applications that "do the job". They may have started in the CF 4 or 5 days, and grow and grow over the years until they're a mass of spaghetti code. It may never occur to the developers that as the app gets bigger that not everything belongs together any more. It will take some work, but it's important for long-term stability and scalability that you de-couple big chunks into smaller applications that run independent from the original beast. Scheduled Tasks, Web Services, APIs, User Admin Areas, Reporting, file/image services, Search services, etc. should no longer be coupled to the main application. Each of those parts should be broken out, so that each can be tuned optimally. Do you want your whole system to start bottlenecking because Search or Web Services become slow or go down? If they're decoupled, you don't have that problem. - Not using a good "shared" file system scalable for high numbers of file writes
When there are multiple physical servers in your cluster (if applicable), you may want a single location to save files. No-no's here are mapped drives/mounts to a non-dedicated server (such as a drive on your database server, some external drive, etc.). A good NAS and/or SAN solution with failover scales better as file writes become higher over time. Cloud Computing solutions are becoming big now, too, but I haven't tested enough in this area to make sound recommendations. I'm sure other with more experience can tell us. Comments? - Not tuning the JVM
Many articles have already been written on this subject, so I won't go into it. If you're having performance problems and you don't know how to tune your JVM, get help from one of the many articles out there, hire an expert, or get Adobe Platinum support for CF. - Not tuning Request settings in the ColdFusion Administrator
See #5 above. - Not making good use of Multiple Instances
When you de-couple areas of your application (see #3), often it's wise to put your new applications into separate CF instances. For instance, all heavy tasks (Scheduled Tasks and other "batch" type processes) should run on a separate instance. You don't want to know how many times I've seen a Scheduled Task bring the entire infrastructure to it's knees. - Not using CF Monitoring tools, such as SeeFusion, CF8 Server Monitor, and/or FusiontReactor
Get familiar with at least 2 of these, and hire an expert to help you get up to speed on them more quickly. These save your butt! - Trying to recreate the "holy grail" reporting system from scratch
First, any reporting system should be a prime candidate for de-coupling. And reports that come from the database should not be running against your "write" (master) database, but rather against your "read-only" (slave) database, or else you'll have a lot of bottlenecks on your hands as users create massive reports reading data while other users are trying to simultaneously write data via the rest of the application.
But secondly, look for reporting solutions that are already available. Most of the time users don't really need *real-time* reports, and off-line/archived data lends itself better to the more complex reports that users start to request over time (allowing Excel exports makes a lot of people happy, cuz they know how to generate reports "the way they like them" in familiar Excel. Also, don't write a Report UI that allows users to request *too many* records - your milage will vary, but it's almost never a good idea to allow reports that have no filters, such that they can just *get everything* all at once. Few web apps are built for handling that much data, so find other solutions. - Not taking advantage of various caching capabilities:
We all know (hopefully) to cache queries where possible, but... do you use the Application/Server scope where appropriate, and to use cfcache (or other 3rd party CF cache tags/CFCs/frameworks) in areas that rarely change? Do you come up with caching strategies for data, so that it can persist in the Application/Server scope without going back to the dB unnecessarily? Could other data/files be cached to disk? Can you use Verity (or Lucene/Solr) for searches instead of pulling directly from the database all the time?
MultiCFAdmin Alpha 0.007 is on RIAForge.org now
ColdFusion, Software, MultiCFAdminHere's the link: http://multicfadmin.riaforge.org/
Description:
In this Alpha version 0.007, which allows connection to CF Admin API on local and remote CF instances, there are only a few features:
1) jQuery UI
2) ability to see basic stats of each CF8 Server Monitor API
3) ability to clear Template Cache for all instances
4) ability to toggle Trusted Cache for all instances
5) can configure multiple CF Admin URLs, passwords, and a sleep() time for how long MultiCFAdmin waits after Trusted Cache is changed
Requirements:
* multiple CF instances other than cfusion (default)
* access to jrun-web.xml configuration files on each instance
Multi-CF Admin Alpha 0.02
ColdFusion, Software, MultiCFAdminOkay, this is pretty cool (at least I think so). Here's the zip.
How many of us with multiple instances in a cluster have wanted to be able to do things like clear the template cache for every instance in the cluster with *one* button?
Well, I have.
Now, I have an early alpha that is not much more than a proof-of-concept, but does exactly that.

and in a few seconds, it's all cleared (see below)...

Here's the readme.txt:
Requirements:
* ColdFusion 8.01 Enterprise or Developer, Multi-server
* multiple CF instances other than cfusion (default)
Installation:
1.) put /MultiCFAdmin folder at www root
2.) open jrun-web.xml file at [jrun_root]\servers\[instance_name]\cfusion.ear\cfusion.war\WEB-INF (you may need to create it by copying over from cfusion instance if it doesn't exist)
3.) add a line within the
���
���
4.) NOTE: don't attempt to connect to the cfusion instance because it causes errors with the Web Service calls to try and connect from the same instance
5.) set environment info for Application.Environment in config/Environment.cfm
6.) set instance info in config/CFInstances.cfm
Here's the zip again.
Send me a tweet if you're interested in helping with the code: http://twitter.com/aqlong
I'm on twitter now: aqlong
ColdFusion, SoftwareIf you care to follow me on twitter now, my account is aqlong
anyone use Nirvanix CloudNAS?
ColdFusion, Software, cloudI'm looking for feedback, good or bad, on Nirvanix.
When looking at potential "cloud providers", I was amazed to read about the CloudNAS solution that Nirvanix has, which gives your servers a way to mount Nirvanix cloud storage as a drive... too cool!
It has the traditional advantages of "Global Virtualization, Unlimited Scalability, Continuous Availability, and a Usage Based Service Model." - http://www.nirvanix.com/resources.aspx#documentation.
Anyone used the CloudNAS or heard of it?
Zen Web Software Management
ColdFusion, Zen, SoftwareI thought I'd throw together a list of simple and basic (Zen) web software development "principles" that I try to keep in mind as I work on infrastructure, architecture, release process planning for my company, Peoplexs.com.
DISCLAIMER: These are pretty high-level, may be obvious to many and cliche to others, but are worth mentioning because they are so often missed or ignored by very smart people and organizations.
(in no particular order)
- Communicate constantly, both upwards and downwards.
- Spend the highest percentage of time on design, UI, and detailed specifications, rather than on development.
- Under-promise, and over-deliver.
- Commit to, and invest in, professional QA Testing.
- The time to build automated tools (for testing, making builds, and releases) is well worth it in the end.
- Document, practice, and update your Disaster Recovery Plan.
- Lead Developers must manage expections for Product Managers at least as much as Product Managers manage the products.
- Use quality, time-tested, software for integrating release management, defect tracking, and project management such as Jira or FogBugz.
- Inform everyone as early as possible if project is running late.
- Adding more developers late in a project only makes it more late.
- Have Product Managers review, and then commit to, a final UI before development begins.
- Developers want and need time to do cool and fun work. Giving them some such will help motivation and productivity.
- Schedule in patch releases and archictural releases regularly, and at least 2 times per year if usage is growing quickly.
- Listen fully to all suggestions and criticism, without a defensive attitude.
- Be strong, and don't let a few clients dictate your long-term strategies.
- Invest in Technical Conferences and Training for your team.
- Empower every team member. Give each person at least one specialty that he is "in charge of".
- Trust your veterans, even after they make mistakes, as they are probably more upset at themselves than you are at them.
- Use something simple and flexible, like a Wiki, for internal documentation. And don't be too strict on *how* it's documented - you're lucky that there is *any*.
- Lead, don't push or drag.
- Celebrate, or at least acknowledge, significant accomplishments. It doesn't have to be a huge party. Something as simple as a short, yet specific, thank you on IM will do nicely... or saying to one of the Executives, "Check out the creative and helpful widget that [Developer X] whipped up last Friday!" in front of a room full of co-workers (unless Developer X is extremely shy... which sounds like a mythical person to me ;)
- Keep your negative comments to private conversations as much as you can. Publicly positive people are much more likely to be followed and liked. Of course there's a fine line you must walk to keep from seeming like you're *two-faced*.
- A fun, exciting work environment begins with you, from within.
I'll probably add to this list as I think of ramdom, appropriate items.
Peace.





Loading....