This is a continuation of a series of articles on crowdsourcing application and including the most recent article. The original problem statement is included again for context.
Social engineering applications provide a wealth of
information to the end-user, but the questions and answers received on it are
always limited to just that – social circle. Advice solicited for personal
circumstances is never appropriate for forums which can remain in public view.
It is also difficult to find the right forums or audience where the responses
can be obtained in a short time. When we want more opinions in a discrete
manner without the knowledge of those who surround us, the options become fewer
and fewer. In addition, crowd-sourcing the opinions for a personal topic is not
easily available via applications. This document tries to envision an
application to meet this requirement.
The previous article continued the elaboration on the usage
of the public cloud services for provisioning queue, document store and
compute. It talked a bit about the messaging platform required to support this
social-engineering application. The problems encountered with social
engineering are well-defined and have precedence in various commercial
applications. They are primarily about the feed for each user and the
propagation of solicitations to the crowd. The previous article described
selective fan out. When the clients wake up, they can request their state to be
refreshed. This perfects the write update because the data does not need to be
sent out. If the queue sends messages back to the clients, it is a fan-out
process. The devices can choose to check-in at selective times and the server
can be selective about which clients to update. Both methods work well in
certain situations. The fan-out happens in both writing as well as loading. It
can be made selective as well. The fan-out can be limited during both pull and
push. Disabling the writes to all devices can significantly reduce the cost.
Other devices can load these updates only when reading. It is also helpful to
keep track of which clients are active over a period so that only those clients
get preference.
In this section, we talk about caching. A no-caching
antipattern occurs when the crowdsourced application handles many concurrent
requests, and they fetch the same data. Since there is contention for the data
access, it can reduce performance and scalability. When the data is not cached,
it leads to many manifestations of areas for improvement. Degradation in response times, increased
contention, and poor scalability are common examples.
Caching is sometimes out of scope of the architecture design
or listed as option for operations to include via standalone independent
products. Other times, the introduction of a cache might increase latency,
maintenance and ownership and decrease overall availability. It might also
interfere with existing caching strategies and expiration policies of the
underlying systems. Some might prefer to not add an external cache to a
database and only as a sidecar for the web services. It’s true that databases
can cache even materialized views for a connection, but the addition of a cache
lookup could be cheap in all cases where the compute in the deeper systems
could be costly and can be avoided.
There are two strategies to fix the problem. The first one
includes the on-demand network or cache-aside strategy. When the application
tries to read the data from the cache, and if it isn’t there, it retrieves and
puts it in the cache. When the application writes the change directly to the
data source, it removes the old value from the source but refilled the next time
it is required.
Another strategy might be to always keep static resources in
the cache with no expiration date. This is equivalent to CDN usage although
CDNs are for distribution. Applications
that cache dynamic data should be designed to support eventual
consistency.
No matter how the cache is implemented, it must support
fallback to the deep data access when the data is not available in the cache.
This Circuit-breaker pattern merely avoids overwhelming the data source.
No comments:
Post a Comment