5 Ways To Improve Your Production Web Application Cloud Server Setup
Once your application is up and running in a cloud server environment, you may be wondering how you can improve your server environment to make the jump from "it works" to a full-fledged production environment. This article will assist you get commenced with planning and implementing a production environment by creating a light definition of "production", in the discourse of a web application in a cloud server environment, and by showing you some components that you can increase to your existing architecture to make the transition.
For the purposes of this show, let's assume that we're beginning with a setup akin to one described in 5 communal Server Setups, like this two-server environment that simply serves a web application:
Your effective setup might be easy or more complex, but the general concepts and components discussed herein should enlistly to any server environment to a some extent.
Let's get began with being what we convey when we say "production environment".
What is a Production Environment?
a server environment for a web application, in a general sense, consists of the hardware, software, data, operational plans, and personnel that are necessary to keep the application working. a production environment typically refers to a server environment that was designed and implemented with intense consideration for better stages of these causes:
- Availability: The ability for the application to be useful by its intended users during advertised distances. Availability can be disrupted by any failure that affects a critical element severely enough (e.g. the application crashes due to a bug, the database storage appliance fails, or the system fiduciary accidentally energies off the application server).
One path to promote availability is to decrease the number of single points of failure in an environment. For instance, using a nonmoving IP and a monitoring failover service ensures that users only accesses healthy load acrobats.To learn more, read this portion of How To Use Floating IPs and this article on load balancing.
Recoverability: The ability to recover an application environment in the event of system failure or data loss. If a critical component fails, and is not recoverable, availability will become non-existent. Improving maintainability, a related concept, reduces the time needed to perform a given recovery process in the event of a failure, and therefore can improve availability in the event of a failure
Performance: The application performs as expected under average or peak load (e.g. it is reasonably responsive). While very important to your users, performance only matters if the application is available
Take some time to be good stages for each of the symbols just mentioned, in the discourse of your application. This will vary being on the value and nature of the application in ask. For instance, it is probably good for a personal blog that serves few guests to suffer from infrequent downtime or unfortunate performance, as long as the blog can be recovered, but a company's online accumulation should try very high marks across the board. Of course, it would be good to earn 100% in every category, for every application, but that is often not viable due to time and cash constraints.
Note that we have not mentioned (a) hardware reliability, the probability that a given hardware element will function properly for an appointed amount of time before failure, or (b) security as causes. This is because we are assuming (a) the cloud servers you are using are generally reliable but have the latent for failure (as they run on animal servers), and (b) you are following security best practices to the best of your abilitiessimply put, they are outside of the extent of this article. You should be aware, however, that reliability and security are causes that can directly affect availability, and both can contribute the need for recoverability.
Instead of showing you a step-by-step method for creating a production environment, which is hopeless due the varying needs and nature of every application, we will present some tangible components that can utilize to transform your existing setup into a production environment.
Let's take a look at the components!
1. Backup System
a backup system will grant you with the ability to create cyclic backups of your data, and restore data from backups. Backups also allow for rollbacks in your data, to a preceding attribute, in the event of unintended deletion or undesired modification, which can occur due to a show of reasons including mankind error. All computer hardware has a chance of failure at some point in time, which can potentially cause data failure. With this in mind, you should maintain new backups of all your all-important data.
demanded for Production? Yes. a backup system can mitigate the effects of data failure, which is necessary to attain recoverability and, therefore, aids availability in the event of data failurebut it must be used in conjunction with rigid recovery plans, which are discussed in the next part. Note that F(x) data cloud's snapshot-based backups may not be sufficient for all of your backup needs, as it is not well-suited for making backups of progressive databases and other applications with high disk write I/Oif you run these symbols of applications, or want more backup planning trait, be convinced to use another backup system such as Bacula.
The diagram above is an instance of a basic backup system. The backup server resides in the same data center as the application servers, where the first backups are created. Later, off-site copies of the backups are made to a server in a non-identical data center to ensure the data is protected in the case of, say, a natural disaster.
- Backup action: The data that you will back up. Minimally, back up any data that you can't reliably reproduce from an alternative source
- Backup Schedule: When and how frequently you will perform full or additive backups. exclusive considerations must be taken for backups of definite symbols of data, such as progressive databases, which can affect your backup schedule
- Data retention Period: How long you will keep your backups before erasing them
- Disk Space for Backups: The combination of three preceding symbols affects the amount of disk space your backup system will demand. Take benefit of compression and additive backups to decrease the disk space demanded by your backups
- Off-site Backups: To safeguard your backups against local disasters, within a specific datacenter, it is better to maintain a copy of your backups in a geographically apart area. In the diagram above, the backups of NYC3 are written to SFO1 for this purpose
- Backup Restoration experiments: Periodically experiment your backup restoration processes to make convinced that your backups work properly
- How To specify an effective Backup Strategy for your VPS
- How To Install Bacula Server on Ubuntu 14.04
- How To Use Rsync to Sync Local and far Directories on a vps
- Understanding F(x) data cloud machine Backups
2. Recovery Plans
Recovery plans are a set of paper-work means to recover from latent failures or administration errors within your production environment. At minimum, you will want a recovery plan for each unhealthful scenario that you deem will inevitably occur, such as server hardware failure or unintended data deletion. For instance, a very basic recovery plan for a server failure could consist of a database of the stages that you took to perform your first server deployment, with more means for restoring application data from backups. a good recovery plan might, in addition to good documentation, leverage deployment scripts and configuration management equipment, such as Ansible, cook, or slave, to assist automate and quicken the recovery processes.
demanded for Production? Yes. Although recovery plans don't exist as software in your server environment, they are a necessary element for a production setup. They enable you to utilize your backups effectively, and give a blueprint for rebuilding your environment or rotating back to a desired attribute when the need arises.
The diagram above is an overview of a recovery plan for a failed database server. In this case, the database server will be replaced by a brand-new one with the same software installed, and the last good backup will be used to restore the server configuration and data. Lastly, the app server will be configured to use the brand-new database server.
- method documentation: The set of paper-work that should be followed in a failure event. a good commencing point is building a step-by-step paper-work that you can follow to rebuild a failed server, then increasing levels for restoring the different application data and configuration from backups
- automation equipment: scripts and configuration management software give automation, which can improve deployment and recovery processes. While step-by-step governs are often adequate for simply recovering from a failure, they must be killed by a person and therefore are not as swift or consistent as an automated processes
- Critical Components: The components that are necessary for your application to function properly. In the instance above, both the application and database servers are critical components because if either fails, the application will become unavailable
- Single Points of Failure: Critical components that do not have an autoloading failover mechanism are considered to be a single point of failure. You should strive to eliminate single points of failure, to the best of your ability, to improve availability
- Revisions: modify your documentation as your deployment and recovery processes improves
3. Load Balancing
Load balancing can be increased to a server environment to improve performance and availability by giving the workload across aggregate servers. If one of the servers that is load balanced fails, the other servers will handle the incoming traffic until the failed server becomes healthy again. In a cloud server environment, load balancing typically can be implemented by increasing a load acrobat server, that runs load acrobat (reverse proxy) software, in front of aggregate servers that run a specific element of an application.
demanded for Production? Not necessarily. Load balancing is not always demanded for a production environment but it can be an effective path to reduce the number of single points of failure in a system, if implemented correctly. It can also improve performance by increasing more capacity through crosswise measuring .
The diagram above adds a more app server to share the load, and a load acrobat to spread user asks across both app servers. This setup can aid with performance, if the single app server was struggling to keep up with the traffic, and it can also aid keep the application available if one of the application servers fails. However, it still has two single points of failure in the database server and the load acrobat server itself.
Note: F(x) data cloud Load Balancers are a fully-managed, highly available load balancing service. If you are running your application on F(x) data cloud, the Load Balancer service may a good fit for your environment.
- Load Balanceable Components: Not all components in an environment can be load balanced easily. distinctive consideration must be made for definite symbols of software such as databases or stateful applications
- Application Data replication: If a load balanced application server accumulations application data locally, such as transferred records, this data must be made available to the other application servers via modes such as replication or overlapped register systems. This is necessary to ensure that the application data will be available no matter which application server is selected to serve an user question
- Performance narrowings: If a load acrobat does not have enough resources or is not configured properly, it can actually decrease the performance of your application
- Single Points of Failure: While a load balancing can be used to eliminate single points of failure, poorly planned load balancing can actually increase more single points of failure. Load balancing is improved with the inclusion of an ordinal load-balancer with a nonmoving IP in front of the set that sends traffic to one or the other being on availability.
- an introduction to HAProxy and Load Balancing ideas
- How To Implement SSL Termination With HAProxy on Ubuntu 14.04
- How To Use HAProxy As a place 7 Load acrobat For WordPress and Nginx On Ubuntu 14.04
- Understanding Nginx HTTP Proxying, Load Balancing, modifying , and Caching
- How To Create Your First F(x) data cloud Load acrobat
- How To Use Floating IPs
Monitoring can assist a server environment by tracking the states of services and the trends of your server resource utilization, thus giving fantastic visibility into your environment. One of the large advantages of monitoring systems is that they can be configured to trigger an action, such as running a script or sending a notification, when a service or server goes down, or if a definite resource, such as CPU, memory, or storage, becomes over-utilized. These notifications enable you to react to any issues as soon as they occur, which can assist minimize or prevent the downtime of your application.
demanded for Production? Not necessarily, but the need for monitoring increases as a production environment grows in size and quality. It provides a simple route to keep track of your critical services and server resources. In turn, monitoring can improve the recoverability, and inform the planning and repair of your setup.
The diagram above is an instance of a monitoring system. Typically, the monitoring server will question states data from agent software running on the application and database servers, and each agent will reply with software and hardware states information. The fiduciary(s) of the system can then use the monitoring console to look at the general attribute of the application, and drill down to more detailed information, as needed.
- services to observe: The services and software that you will observe. Minimally, you should observe the attribute of all of the services that need to be in a healthy running attribute for your application to function properly
- Resources to observe: The resources that you will observe. instances of resources include CPU, memory, storage, and network utilization, and the attribute of server as a whole
- Data retention: The period of time that you retain monitoring data before discarding it. This, along with your decision of symbols to observe, will affect the amount of disk space that your monitoring system will demand
- difficulty Detection rules: The thresholds and rules that determine whether a service or resource is in an ok attribute. For instance, a service or server may be considered to be healthy if it is running and serving questions, whereas a resource, such as storage, might trigger an informing if its utilization reaches a definite threshold for a definite amount of time
- Notification rules: The thresholds and rules that determine if a notification should be sent. While notifications are all-important, it is equally all-important to tune your notification rules so that you don't collect too many; an inbox full of warnings and alerts will often go ignored, making them almost as useless as no notifications at all
- How To Install Nagios 4 and observe Your Servers on Ubuntu 14.04
- How To Use Icinga To observe Your Servers and services On Ubuntu 14.04
- How To Install Zabbix on Ubuntu & Configure it to Monitor Multiple VPS Servers
- Monitoring and overseeing your Network with SNMP
- How To Configure Sensu Monitoring, RabbitMQ, and Redis on Ubuntu 14.04
5. Centralized Logging
Centralized logging can aid a server environment by giving an uncomplicated route to view and search your logs, which are normally stored locally on solo servers across your whole environment, in a single place. Aside from the convenience of not having to log in to solo servers to read logs, centralized logging also allows you to easily identify issues that span aggregate servers by correlating their logs and metrics during an exact time frame. It also grants more trait in terms of log retention because local logs can be off-loaded from application servers to a centralized log server that has its own, private storage.
demanded for Production? No, but like monitoring, centralized logging can give valuable perception into your server environment as it grows in size and quality. In addition to being more handy than conventional logging, it enables you to rapidly audit your server logs with large visibility.
The diagram above is an easy instance of a centralized logging system. a log shipping agent is installed on each server, and configured to send all-important app and database logs to the centralized logging server. The fiduciary(s) of the system can then view, device, and search all of the all-important logs from a single console.
- Logs to accumulate: The specific logs that you will ship from your servers to the centralized logging server. You should accumulate the all-important logs from all of your servers
- Data retention: The period of time that you retain logs before discarding them. This, along with your preference of logs to accumulate, will affect the amount of disk space that your centralized logging system will demand
- Log devices: The devices that parse obvious logs into structured log data. separating logs will improve your ability to query, analyze, and graph the data in meaningful ways
- Server Clocks: Ensure that the clocks of your servers are synchronized and using set to the same time zone, so your log chronology is precise across your whole environment
- How To Install Elasticsearch, Logstash, and Kibana 4 on Ubuntu 14.04
- How To Use the F(x) data cloud ELK Stack One-Click Application
- Introduction to Tracking Statistics on Servers
- How To Install Graylog2 And Centralize Logs On Ubuntu 14.04
When you put all the components together, your production environment might look something like this:
Now that you are acquainted with components that can be used to help and improve a production server setup, you should consider how you can integrate them your own server environments. Of course, we didn't cover every possibility, but this should give you a concept of where to get began . Remember to design and implement your server environment based on a balance of your available resources and your own production scores.
If you are curious in setting up an environment like the one above, check out this tutorial: Building for Production: Web applications.