whitepaper CLOUD DEVELOPMENT BEST PRACTICES & SUPPORT APPLICATIONS
- Cloud Development Best Practices and Support Applications CLOUD DEVELOPMENT BEST PRACTICES 1 Cloud-based solutions are increasingly present on the IT market and adopted by a growing number of companies from all industries. Cloud is a new concept in the IT software development area, increasingly used in research and implementations due to clear advantages, such as: Scalability Configurability Flexibility Reduced time to market CLOUD DEVELOPMENT BEST PRACTICES Universal competition due to globalization and a high request for offers make it difficult for companies to establish a working solution that immediately serves their target customers. The classic software development approach calls for infrastructure architecture, infrastructure building and maintenance, code deployment, software monitoring for optimum uptime and a running application. All of these are supported by consistent investment of time and money and require specialized IT professionals. Countless businesses fall short of these requirements because they don't have access to the professionals they need, or the necessary time to market is too limited for them to compete. By applying the following best practices, your cloud solution will become the clear choice for reaching new markets, increasing your customer base and growing your business geographically. Solution Cloud solutions have emerged as the remedy for these shortcomings. But in order to succeed, it is important to develop and deploy a software application with best practices that apply from the beginning of software development. A web application hosted in the cloud needs to be scalable. In order to achieve this, it is important to decide from the very beginning of the development phase, namely from system design and architecture design, how your application will expand over time. In this context, there are two options:
CLOUD DEVELOPMENT BEST PRACTICES - Cloud Development Best Practices and Support Applications 2 VERTICAL GROWTH The application is designed to work (compute) on a single machine. HORIZONTAL GROWTH The application is designed to compute on multiple machines, through a modular architecture. Hosting this kind of application in the cloud has some limits in terms of growth: you have the opportunity to supplement the resources that serve the application (like CPUs), but this can be applied only as much as the hardware allows it. In other words, your growth is limited by hardware, and it is not recommended to be applied in the design of cloud applications. Vertical growth is a traditional approach in a single-server kind of configuration. Its usefulness in a cloud environment is only due to the fact that the user needn't be concerned about hardware details; he only needs to request a virtual machine (VM), and increase the resources of that VM as his needs grow. Resources can be supplemented by increasing the number of virtual CPUs, increasing available memory or disk space, installing additional network interfaces if needed essentially, by increasing virtual hardware power. This is a major advantage in the cloud because it allows you to add as many resources as you need. It is important that the app design allows the sync between the running machines so that there are no discrepancies. For web applications, this kind of architecture is translated into a single common session used by all enabled machines. Since essentially all of the machines are sharing the same common session, the user will not experience any crash, even if his requests are now served by another machine. It is recommended that the common session be stored on a separate server in the cloud or in the application database (Amazon recommends Dynamo DB to store the common session). Both horizontal and vertical growth are suitable for cloud, but horizontal growth is preferred as the new paradigm in cloud development. Vertical has some limitations imposed by hardware, while horizontal is limited only by the application architecture.
CLOUD DEVELOPMENT BEST PRACTICES - Cloud Development Best Practices and Support Applications 3 What? Why? How? BEST PRACTICE THE REASON BEHIND IT OSF TECHNICAL TIP Constantly collect data and centralize it. ❶ Intervene when needed. ❷ Take the best path for future software development. ❸ Decide if the cloud infrastructure needs to be adjusted in accordance with the current system behavior. log4net is a useful library that helps in statistics collection and enables the creation of a log output to a variety of targets in.net applications. It is suitable not only for cloud applications, but for any other kind of system as well. Implement a message-queuing service. Split the service so that two distinct machines do not process the same set of data and, if one of them crashes, no unprocessed data will remain. Amazon SQS for applications hosted in Amazon Cloud. Utilize job distribution solutions. ❶ Do work in parallel. ❷ Load balance processing. ❸ Call functions between languages. It can be used in a variety of applications, from high-availability websites to the transport of database replication events. It is the nervous system for how distributed processing communicates. Gearman is a job distribution solution that suits all cloud applications. It provides a generic application framework that farms out work to better-suited machines or processes. Have in place an alert system. Notify the development team in real time about the status of machines and applications. Major cloud providers have a basic alert system in place that can be supplemented by the Nagios alert system. Select a trusted deploy system. Ensure that the same code runs on all cloud machines. Team City supports the project deploy effort, with tested results.
CLOUD DEVELOPMENT BEST PRACTICES - Cloud Development Best Practices and Support Applications 4 What? Why? How? BEST PRACTICE THE REASON BEHIND IT OSF TECHNICAL TIP Make use of persistence layers. Perform the migration from a SQL database to an Amazon database with minimal effort. Your application should be able to be linked to any kind of database. Work with integration servers. Jenkins and Team City Upgrade to the latest services available in the cloud provider portfolio. This should be a permanent concern when dealing with cloud-hosted applications. Use dedicated storage services. Avoid storing data on machines that run or process in the cloud. OSF Global Services has seen positive results with Amazon S3. Implement a distribution system to the application nodes. ❶ Have a tag on the Source Control Tool from which the code is pushed to a new cloud machine. ❷ Assist with disaster recovery and scaling while reducing the deploy effort and downtime. There are more advanced solutions for distribution systems like Capistrano or Puppet, embedded in system node images, which retrieve the application packages and code from a centralized store through SVN and Chron Jobs.
CLOUD DEVELOPMENT SUPPORT APPLICATIONS - Cloud Development Best Practices and Support Applications 5 CLOUD DEVELOPMENT SUPPORT APPLICATIONS Modern Software development methodologies are focused on Agile development principles, which enable you to have a usable software application with a shorter production time. The Agile methodology principles especially fit with the cloud concept when we consider time to market. Agility and cloud fit with any software application whether you have an ecommerce store, a financial application or a human resources management tool. They promise to support your efforts in penetrating new markets, in increasing your number of users or customers, or to operate in different geographical regions. Nowadays, Agility and cloud concepts are supported by various tools and applications, or by complete services provided by companies that allow you to reach your business objectives. Solution As a supporter of Agility and cloud-based solution development, GIT has a set of advantages that contribute to achieving usable and functional software: GIT is decentralized compared to SVN, which runs on a server and depends on an internet connection. Using GIT, you can work offline, and when an internet connection is available, a push is performed and the committed code is synced with the rest of the application. If you are using SVN, offline development is not possible. BitBucket has an optimum uptime. BitBucket has code review implemented, code compare functionalities and the feedback is provided per line of code. So, the code review process is facilitated by the BitBucket application. The back-up of the code is performed by the provider, in the cloud. No maintenance is needed. GIT was designed to be fully distributed from the start, allowing each developer to have full local control and to develop as close as possible to production. This leads to fewer system integration bugs and issues. Due to distribution, you inherently do not have to give commit access to other people in order for them to use the versioning features; instead, you decide when to merge what from whom. GIT provides auditing of branch and merge events, allowing you to follow-up your application changes.
CONCLUSION - Cloud Development Best Practices and Support Applications 6 CONCLUSION The development of cloud-based solutions is a challenge, but also an opportunity to grow faster than your competitors, obviate downtime of your application, support an increasing number of users and compete on all geographical markets. Start with a competitive and professional cloud technology services provider that knows how to architect, design, develop, test and run your application using the appropriate tools that create a real advantage from Agile development and get the most out of your cloud-based solution. Thank You for Reading! For more information on OSF Global Services digital commerce and optimization services, please check out our website: www.osf-commerce.com For more valuable insights, access our entire library. Share with friends and colleagues: End-to-end ecommerce services, cutting edge solutions and best-practice methodologies to help you: Enable your Website Increase Conversion Rates Expand Globally