Shaamini Shaam
Shaamini Shaam

Reputation: 39

How to avoid bottleneck performance?

A distributed system is described as scalable if it remains effective when there is a significant increase the number of resources and the number of users. However, these systems sometimes face performance bottlenecks. How can these be avoided?

Upvotes: 1

Views: 3321

Answers (2)

Andy H
Andy H

Reputation: 132

Just to build on a point discussed in the abover post, I would like to add that what you need for your distributed system is a distributed cache, so that when you intend on scaling your application the distributed cache acts like a "elastic" data-fabric meaning that you can increase storage capacity of the cache without compromising on performance and at the same time giving you a relaible platform that is accessible to multiple applications.

One such distributed caching solution is NCache. Do take a look!

Upvotes: 1

Michael Deardeuff
Michael Deardeuff

Reputation: 10707

The question is pretty broad, and depends entirely on what the system is doing.

Here are some things I've seen in systems to reduce bottlenecks.

  • Use caches, reducing network and disk bottlenecks. But remember that knowing when to evict from a cache eviction can a hard problem in some situations.
  • Use message queues to decouple components in the system. This way you can add more hardware to specific parts of the system that need it.
  • Delay computation when possible (often by using message queues). This takes the heat off the system during high-processing times.
  • Of course, design the system for parallel processing wherever possible. One host doing processing is NOT scalable. Note: most relational databases fall into the one-host bucket, this is why NoSQL has become suddenly popular; but not always appropriate (theoretically).
  • Use eventual consistency if possible. Strong consistency is much harder to scale.

Some are proponents for CQRS and DDD. Though I have never seen or designed a "CQRS system" nor a "DDD system," those have definitely affected the way I design systems.

There is a lot of overlap in the points above; some the techniques may use some of the others.

But, experience (your own and others) eventually teaches you about scalable systems. I keep up-to-date by reading about designs from google, amazon, twitter, facebook, and the like. Another good starting point is the high-scalability blog.

Upvotes: 2

Related Questions