Friday, January 15, 2010

Reliable Applications

Reliability and 24x7 accessibility are one of the most valued attributes of software, especially web-based applications that need to be available on demand without interruption. Charonite has gathered a lot of operational experience over the years that enables us to minimise downtime while increasing the overall reliability of our web-based applications.

Some practical tips on what we found to work in increasing the reliability of applications during development:
  • Process data in steps that can be handed over to another machine (see MapReduce for more information)
  • Research data structures and associated algorithms appropriately, keeping in mind that when dealing with large datasets, some non-obvious choices may be the most appropriate (for example, use Merge Sort rather than Quick Sort)
  • Have resume and rollback facilities for each data processing step
  • Split large data sources into manageable chunks, giving calling applications the chance to have pre-defined breakpoints and pause opportunities, while giving rise to a predictable processing pattern
  • Follow good software engineering practices to modularise code and reduce dependencies via the use of appropriate parameter structures
  • Use workflow automation tools to define processes accurately and with less error
  • Use ready-made platform components and solutions (such as those available on the Obulus Platform)
  • Utilise test automation extensively to reduce the risk of errors creeping in code
  • Use REST parameters as much as possible and spread out distributed applications over as many servers as practical to reduce load and increase overall protection from single points of failure
  • Favour APIs and repeatable design standards over ad-hoc one-off designs
  • Monitor resource usage intensively for signs of increasing memory usage or excessive CPU usage together with peak resource usage levels: it is very rare to have an application that needs to use 100% of CPU time for extended periods of time

We are also currently working on perfecting the Charonite Smart SaaS solution offers seamless integration of online and offline working modes, with automatic realtime data replication and graceful failover when a network connection fails. All Obulus applications in the future will automatically benefit from these features via the distributed data layer.

Our goal is to help developers create reliable and robust web-based applications that run without interruption, while enabling customers to have the confidence to switch over from more traditional desktop based applications to network hosted applications in full knowledge that their application and data will be available at critical times.