- December 18, 2017
- Justin Penchina
Last time I gave a quick rundown of Valiant’s three basic design principles. In this post, I want to dive deeper into Stability, Security, and Scalability.
A system that is unavailable is useless. Systems and workflows rely on each component operating in a reliable way. When something isn’t working properly, it can have negative effects on the rest of the workflow. This could be wasted productivity while employees watch progress bars, or it could be hours of lost work (not to mention lost revenue) when a server crashes.
When designing a system to be reliable, there are several things to consider. First, any critical component needs to be redundant. You don’t want a failed hard drive or a shorted power supply to bring down a server. The Valiant Standard for servers includes redundancies built in to these critical components.
For critical applications or systems, additional redundancy could mean an entire second server on standby in case the first server fails. A critical line-of-business application may need to run on a cluster of servers and storage arrays to ensure that if a single component fails nothing goes offline.
This philosophy is even extended into cloud server deployments in Microsoft Azure. Critical systems should be configured with multiple servers in an availability sets to ensure that the application is always running.
In addition to protecting against failures, a stable system also needs to accommodate high demand. When designing a system, it’s not enough to think about the “average” usage. The system must be able to absorb the “highest” usage it is likely to see. For example, if on average I am the only person driving my car, then it might be reasonable to get a two-seater. However, if four times a year I drive my friends and family to the beach then the two-seater won’t cut it and I will be stuck making extra trips or renting a car. Knowing that this is something I’ll need to do, I’ll have to skip the Miata and get a minivan.
For hardware servers this means buying more horsepower than you initially need – to make sure that there is capacity for higher demand. In cloud deployments, this means building “scale sets” and/or the ability to increase resources as necessary.
Information Security needs to be built into the initial design of a system. This can take many different forms depending on what is being deployed. For an email system, this may include things like advanced anti-spam filtering, data leak protection, and compliance archiving. For networks, this usually takes the form of next generation firewalls with SSL inspection and wireless access points capable of detecting rogue devices on the network.
The core of information security is usually a strong, centralized identity management system. Active Directory and Azure Active Directory are good candidates for this. With these two technologies together, you can create a single “source of truth” for user accounts. The same username and password that an employee uses to log into their computer is also used to access the server, email, financial software and web applications, and social media services. In the event of a breach, there is a single place to lock down credentials.
Security and usability are often inversely proportional. You can make something ultra-secure – but if it is too cumbersome, users will abandon the tool and find their own way to work. A good design takes security, ease of access, and usability into account, striking a balance between protecting the system and allowing people to use it.
A good system design can grow with the environment it is a part of. It can be wasteful to build a system now that can absorb 5 years’ worth of growth without modification. The better approach is to build in a plan to scale. This can be anything from planning to add extra storage disks or arrays in a few years, planning to add extra compute nodes to a cluster, or even staggering the purchase of a primary and secondary server by 2 years so that you can cascade workloads as systems age out. The important thing is that the current design answers the questions, “what will this look like in three years? In five years?”
Cloud hosted environments such as Microsoft Azure make this easier to plan out as they are scalable by nature. You can grow existing servers or add more in a matter of minutes through a control panel. Depending on the type of workload, the environment can even auto-scale; adding more nodes as they are needed when demand is high and turning nodes off when demand is low to minimize expenses.
The design philosophy of Stability, Security and Scalability creates systems and infrastructure that are resilient to fluctuations in usage and able to grow with your business. What sorts of technologies does your business use that also fit these criteria? Are you expecting growth, but don’t have a plan to address your needs properly? Get in touch, we can help.