Designing the distributed systems does not come for free. Some challenges need to be overcome in order to get the ideal systems. The challenges in distributed systems are:
- Resilience to failure
This term means the diversity of the distributed systems in terms of hardware, software, platform, etc. Modern distributed systems will likely span different:
- Hardware devices: computers, tablets, mobile phones, embedded devices, etc.
- Operating System: Ms Windows, Linux, Mac, Unix, etc.
- Network: Local network, the Internet, wireless network, satellite links, etc.
- Programming languages: Java, C/C++, Python, PHP, etc.
- Different roles of software developers, designers, system managers
Distributed systems designers must hide the complexity of the systems as much as they can. Adding abstraction layer is particularly useful in distributed systems. While users hit search in google.com, they never notice that their query goes through a complex process before google shows them a result. Some terms of transparency in distributed systems are:
|Access||Hide differences in data representation and how a resource is accessed|
|Location||Hide where a resource is located|
|Migration||Hide that a resource may move to another location|
|Relocation||Hide that a resource may be moved to another location while in use|
|Replication||Hide that a resource may be copied in several places|
|Concurrency||Hide that a resource may be shared by several competitive users|
|Failure||Hide the failure and recovery of a resource|
|Persistence||Hide whether a (software) resource is in memory or a disk|
If the well-defined interfaces for a system are published, it is easier for developers to add new features or replace sub-systems in the future. Example: Twitter and Facebook have API that allows developers to develop theirs own software interactively.
Distributed Systems usually is multi-users environment. In order to maximize concurrency, resource handling components should be anticipate as they will be accessed by competing users. Concurrency is a tricky challenges, then we must avoid the system’s state from becoming unstable when users compete to view or update data.
Every system must consider strong security measurement. Distributed Systems somehow deals with sensitive information; so secure mechanism must be in place.
Distributed systems must be scalable as the number of user increases.
B. Clifford Neuman
A system is said to be scalable if it can handle the addition of users and resources without suffering a noticeable loss of performance or increase in administrative complexity
Scalability has 3 dimensions:
- Number of users and resources to be processed. Problem associated is overloading
- Distance between users and resources. Problem associated is communication reliability
- As the size of distributed systems increases, many of the system needs to be controlled. Problem associated is administrative mess
Note: Scalability often conflicts with small system performance. Claim of scalability in such system is often abused.
Resilience to Failure
Distributed Systems involves a lot of collaborating components (hardware, software, communication). So there is a huge possibility of partial or total failure.