Planning for Reliability, Scalability and Cost Efficiency

Cloud Native DesignIncreasing Performance and Reducing Costs by Embracing Cloud Architecture Paradigms

While almost any server based application can be deployed to a cloud environment, provided its bandwidth and processing requirements are met, applications designed to embrace the environment's advantages and avoid its limitations yield far better performance and reliability at lower tiers of complexity and cost. Understanding the ramifications of data storage options and the tradeoffs of relying on managed cloud services versus managing your own infrastructure are key to designing reliable and cost effective cloud applications. We guide application architecture decisions based on an application's performance, reliability, portability and cost requirements and considerations for the applications anticipated scope and lifetime.

High level application platforms such as Azure App Service, Heroku and Google App Engine provide simplified development demands and little to no infrastructure maintenance burden at a cost of platform dependence. Applications with limited scopes or development budgets or rapid time-to-market requirements can be a good match for the kinds of infrastructure automation and services these platforms provide. A downside to this approach is that such an app will have specific dependencies to its host platform and any migration to other application platforms or different tiers of cloud services will incur redevelopment costs.

Generally we recommend adopting managed services that eliminate maintenance requirements and enable an economical scale of performance without encouraging vendor lock-in. For applications that do require lower level infrastructure, we apply architectures that allow any individual units of infrastructure to fail without consequence to the application's performance or data integrity. Embracing the inherent ephemerality of cloud infrastructure yields reliability and greatly simplifies scalability.

Monitoring and ManagementIdentifying Bottlenecks and Meeting Elastic Demand

Monitoring your cloud deployment over time for errors and performance bottlenecks is vital for maintaining reliability. Because cloud architecture favors abstractions from physical resources and the use of high level managed services, centralized monitoring and instrumentation is required for full visibility of an application's health. We use a variety of tools to deliver this service. These tools include cloud provider specific systems such as Amazon CloudWatch, platform specific systems such as MongoDB MMS, general purpose performance monitoring systems such as New Relic APM and log aggregators such as LogEntries.

We contract these services in bulk to keep costs down and use them internally for our application deployments. In some cases, if desired, we can give customers direct access to these monitoring facilities.