121.What Is Load Balancing?
Load balancing is simple technique for distributing workloads across multiple
machines or clusters.
The most common and simple load balancing algorithm is Round Robin. In this type of
load balancing the request is divided in circular order ensuring all machines get equal
number of requests and no single machine is overloaded or underloaded.
The Purpose of load balancing is to
- Optimize resource usage (Avoid overload and under-load of any machines.)
- Achieve Maximum Throughput
- Minimize response time
Most common load balancing techniques in web based applications are
1. Round robin
2. Session affinity or sticky session
3. IP Address affinity
122.What Is Sticky Session (session Affinity) Load Balancing? What Do You Mean
By 'session Affinity'?
Sticky session or a session affinity technique another popular load balancing
technique that requires a user session to be always served by a allocated machine.
123.Why Sticky Session?
In a load balanced server application where user information is stored in session it
will be required to keep the session data available to all machines. This can be avoided
by always serving a particular user session request from one machine.
124.How It Is Done?
The machine is associated with a session as soon as the session is created. All the
requests in a particular session are always redirected to the associated machine. This
ensures the user data is only at one machine and load is also shared.
In Java world, this is typically done by using jsessionid cookie. The cookie is sent to the
client for the first request and every subsequent request by client must be containing
that same cookie to identify the session.
125.What Are The Issues With Sticky Session?
There are few issues that you may face with this approach
- The client browser may not support cookies, and your load balancer will not be
able to identify if a request belongs to a session. This may cause strange behavior for
the users who use no cookie based browsers.
- In case one of the machine fails or goes down, the user information (served by
that machine) will be lost and there will be no way to recover user session.
126.What Is IP Address Affinity Technique For Load Balancing?
IP address affinity is another popular way to do load balancing. In this approach, the
client IP address is associated with a server node. All requests from a client IP address
are served by one server node.
This approach can be really easy to implement since IP address is always available in a
HTTP request header and no additional settings need to be performed.
This type of load balancing can be useful if you clients are likely to have disabled
cookies.
However there is a down side of this approach. If many of your users are behind a
NATed IP address then all of them will end up using the same server node. This may
cause uneven load on your server nodes.
NATed IP address is really common, in fact anytime you are browsing from a office
network its likely that you and all your coworkers are using same NATed IP address.
127.What Is Fail Over?
Fail over means switching to another machine when one of the machine fails.
Fail over is a important technique in achieving high availability. Typically a load balancer
is configured to fail over to another machine when the main machie fails.
To achieve least down time, most load balancer support a feature of heart beat check.
This ensures that target machine is responding. As soon as a hear beat signal fails,
load balancer stops sending request to that machine and redirects to other machines or
cluster.
128.What Is Session Replication?
Session replication is used in application server clusters to achieve session failover.
A user session is replicated to other machines of a cluster, every time the session data
changes.
If a machine fails, the load balancer can simply send incoming requests to another
server in the cluster.
The user can be sent to any server in the cluster since all machines in a cluster have
copy of the session.
Session replication may allow your application to have session failover but it may
require you to have extra cost in terms of memory and network bandwidth.
129.What Does Distributable Tag Means In Web.xml ?
In Java world, JEE applications use the concept of distributable web applications to
provide session-failover and enable load balancing.
You can set a JEE application to support session replication by adding distributable tag
in web.xml file.
<distributable />
130.What Are The Requirements For Making A Java EE Application Session
Replication Enabled?
Setting distributable tag in web.xml just enables the application to support session
replication, however it does not guarantee that your application will work fine in a
session replicated environment.
JEE Application developer needs to make sure following things are taken care during
web application development.
- All attributes/objects that are saved in HTTP Session are serializable. This
means all your custom objects and child objects of that should be serializable.
- Making changes to any session attribute should be done using
session.setAttribute() method. If you have reference to a java object that was previously
set in session, you must call session.setAttribute() method every time you make any
change to the object.
131.What Are Different Mechanism Of Session Replication?
Session replication between multiple cluster nodes can be done in many ways. The
best approach may depend on the type of application. However there are few common
methods used by application server vendors.
- Using session persistence, and saving the session to a shared file system
(PersistenceManager + FileStore) . This will allow all machines in a cluster to be able to
access the persisted session from the shared file system.
- Using session persistence, and saving the session to a shared database
(PersistenceManager + JDBCStore) - This will allow all machines in a cluster to be able
to access the persisted session from the shared database system.
- Using in-memory-replication, This will create a in memory copy of session in
all the cluster nodes.
132.What Is CAP Theorem?
The CAP Theorem for distributed computing was published by Eric Brewer, This
states that it is not possible for a distributed computer system to simultaneously provide
all three of the following guarantees:
1. Consistency (all nodes see the same data even at the same time with
concurrent updates )
2. Availability (a guarantee that every request receives a response about
whether it was successful or failed)
3. Partition tolerance (the system continues to operate despite arbitrary message
loss or failure of part of the system)
The CAP acronym corresponds to these 3 guarantees. This theorem has created the
base for modern distributed computing approaches.
World’s most high volume traffic companies (e.g. Amazon, Google, Facebook) use this
as basis for deciding their application architecture.
Its important to understand that only two of these three conditions can be guaranteed to
be met by a system.
133.What Is Sharding?
Sharding is a architectural approach that distributes a single logical database system
into a cluster of machines.
Sharding is Horizontal partitioning design scheme. In this database design rows of a
database table are stored separately, instead of splitting into columns (like in
normalization and vertical partitioning). Each partition is called as a shard, which can be
independently located on a separate database server or physical location.
Sharding makes a database system highly scalable. The total number of rows in each
table in each database is reduced since the tables are divided and distributed into
multiple servers. This reduces the index size, which generally means improved search
performance.
The most common approach for creating shards is by the use of consistent hashing of a
unique id in application (e.g. user id).
The downsides of sharding are,
- It requires application to be aware of the data location.
- Any addition or deletion of nodes from system will require some rebalance to
be done in the system.
- If you require lot of cross node join queries then your performance will be
really bad. Therefore, knowing how the data will be used for querying becomes really
important.
- A wrong sharding logic may result in worse performance. Therefore make sure
you shard based on the application need.
134.What Is ACID Property Of A System?
ACID is a acronym which is commonly used to define the properties of a relational
database system, it stand for following terms
- Atomicity - This property guarantees that if one part of the transaction fails, the
entire transaction will fail, and the database state will be left unchanged.
- Consistency - This property ensures that any transaction will bring the
database from one valid state to another.
- Isolation - This property ensures that the concurrent execution of transactions
results in a system state that would be obtained if transactions were executed serially.
- Durable - means that once a transaction has been committed, it will remain so,
even in the event of power loss.
135.What Is BASE Property Of A System?
BASE properties are the common properties of recently evolved NOSQL databases.
According to CAP theorem, a BASE system does not guarantee consistency. This is a
contrived acronym that is mapped to following property of a system in terms of the CAP
theorem
- Basically available indicates that the system is guaranteed to be available
- Soft stateindicates that the state of the system may change over time, even
without input. This is mainly due to the eventually consistent model.
- Eventual consistency indicates that the system will become consistent over
time, given that the system doesn't receive input during that time.
136.What Do You Mean By Eventual Consistency? What Does Eventually
Consistent Mean?
Unlike relational database property of Strict consistency, eventual consistency
property of a system ensures that any transaction will eventually (not immediately) bring
the database from one valid state to another.
This means there can be intermediate states that are not consistent between multiple
nodes.
Eventually consistent systems are useful at scenarios where absolute consistency is not
critical. For example in case of Twitter status update, if some users of the system do not
see the latest status from a particular user its may not be very devastating for system.
Eventually consistent systems can not be used for use cases where absolute/strict
consistency is required. For example a banking transactions system can not be using
eventual consistency since it must consistently have the state of a transaction at any
point of time. Your account balance should not show different amount if accessed from
different ATM machines.
Some reference material for better understanding on eventual consistency
- Microsoft Research Whitepaper about Eventual Consistency
- Amazon CTO about Eventual Consistency
137.What Is Shared Nothing Architecture? How Does It Scale?
A shared nothing architecture (SN) is a distributed computing approach in which
each node is independent and self-sufficient, and there is no single point of contention
required across the system.
- This means no resources are shared between nodes (No shared memory, No
shared file storage)
- The nodes are able to work independently without depending on each other for
any work.
- Failure on one node affects only the users of that node, however other nodes
continue to work without any disruption.
This approach is highly scalable since it avoid the existence of single bottleneck in the
system. Shared nothing is recently become popular for web development due to its
linear scalability. Google has been using it for long time.
In theory, A shared nothing system can scale almost infinitely simply by adding nodes in
the form of inexpensive machines.
138.How Do You Update A Live Heavy Traffic Site With Minimum Or Zero Down
Time?
Deploying a newer version of a live website can be a challenging task specially when
a website has high traffic. Any downtime is going to affect the users. There are a few
best practices that we can follow
Before deploying on Production
- Thoroughly test the new changes and ensure it working in a test environment
which is almost identical to production system.
- If possible do automation of test cases as much as possible. We use selenium
for a lot of functional testing.
- Create a automated sanity testing script (also called as smoke test) that can
be run on production (without affecting real data). These are typically readonly type of
test cases. However depending on your application needs you can add more cases to
this. Make sure it can be run quickly by keeping it short.
- Create scripts for all manual tasks(if possible), avoiding any hand typing
mistakes during day of deployment.
- Test the script to make sure they work on a non-production environment.
- Keep the build artifacts ready. e.g application deployment files, database
scripts, config files etc.
- Create a checklist of things to do on day of deployment.
- Rehearse. Deploy in a non-prod environment is almost identical to production.
Try this with production data volumes(if possible). Make a note of time required for your
tasks so you can plan accordingly.
139.When doing deploying on a production environment.
- Keep backup of current site/data to be able to rollback.
- Use sanity test cases before doing a lot of in depth testing.
140.?
|