2 Replies Latest reply on Aug 24, 2006 8:17 PM by adiabata

    Increasing performance with clustering


      We have developed an application using CFMX7 that performs rostering/scheduling. It works well for small roster generation but as we increase the crew and complexity of the constraints the system really struggles. By clustering multiple CFMX7 servers together would it spread performance across the servers or just provide fail over. We don’t need the clustering to allow for the application to be available 100’s of thousands of users but more to concentrate on finishing one running task as fast as possible. Is there any other way of providing a performance increase? The application is very heavy on the DB side so we have converted the majority of the queries to stored procedures to eliminate this as a performance issue.

      Thanks, Mat
        • 1. Re: Increasing performance with clustering
          <newbie /> Level 1

          > the system really struggles

          Have you been able to identify where or which part of the system
          is really slow? (is it the database, coldfusion, network, web browser, etc.)

          > would it spread performance across the servers

          Clustering will not take one request and process it across servers.
          I think taking one request and processing it on multiple servers is called
          parallel processing and I'm not sure there are any products out there that
          would allow CF to do this. However, I believe CF can take a request and
          process it across multiple processors (provided that your machine has
          multiple CPUs).

          Ideally, clustering would distribute many requests across many servers so
          that no one machine is required to process all incoming requests. As you
          know, this method is called Load Balancing.

          Here's an example to think about... you only have one user using your
          application but this user runs the more complex scenarios. Load Balancing
          would not at all help the performance of the system but parallel processing
          (if it were available) might help with the overall throughput.

          > or just provide fail over

          Clustering can provide fail over.

          > concentrate on finishing one running task as fast as possible

          I'll make an attempt at an analogy for this one...

          Adding more servers is like adding more lanes on the road.
          Using multi-processor machines is also like adding more lanes on the road.

          But in both cases, you are still constrained by the speed limit.
          Not only that, but the given road conditions may slow you down; like
          not enough memory, hard-drive to slow, etc.

          You can take an alternate route. One with more lanes, higher speed limit,
          and better road conditions. But this can get pricey.

          I know it sounds like I am suggesting that you throw more hardware at the
          problem. You should always be weary of such suggestions since most of
          the time the problem is with poorly written or inefficient code.

          So before you pay the toll, be sure you know where the potholes are. If you
          don't have a whole lot of users and you are already experiencing performance
          bottlenecks this may be an indication of code that can use more tunning.

          Or it may just be a configuration issue.

          Good luck!
          • 2. Re: Increasing performance with clustering
            If you can split the job into separate independent tasks, which you could run in parallel, you can run those on separate computers using CFX_HTTP5, like threads.