hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dave Latham <lat...@davelink.net>
Subject Re: scaling a low latency service with HBase
Date Mon, 22 Oct 2012 23:37:42 GMT
On Fri, Oct 19, 2012 at 5:22 PM, Amandeep Khurana <amansk@gmail.com> wrote:
> Answers inline
> On Fri, Oct 19, 2012 at 4:31 PM, Dave Latham <latham@davelink.net> wrote:
>> I need to scale an internal service / datastore that is currently hosted on
>> an HBase cluster and wanted to ask for advice from anyone out there who may
>> have some to share.  The service does simple key value lookups on 20 byte
>> keys to 20-40 byte values.  It currently has about 5 billion entries
>> (200GB), and processes about 40k random reads per second, and about 2k
>> random writes per second.  It currently delivers a median response at 2ms,
>> 90% at 20ms, 99% at 200ms, 99.5% at 5000ms - but the mean is 58ms which is
>> no longer meeting our needs very well.  It is persistent and highly
>> available.  I need to measure its working set more closely, but I believe
>> that around 20-30% (randomly distributed) of the data is accessed each
>> day.  I want a system that can scale to at least 10x current levels (50
>> billion entries - 2TB, 400k requests per second) and achieve a mean < 5ms
>> (ideally 1-2ms) and 99.5% < 50ms response time for reads while maintaining
>> persistence and reasonably high availability (99.9%).  Writes would ideally
>> be in the same as range but we could probably tolerate a mean more in the
>> 20-30ms range.
>> Clearly for that latency, spinning disks won't cut it.  The current service
>> is running out of an hbase cluster that is shared with many other things
>> and when those other things hit the disk and network hard is when it
>> degrades.  The cluster has hundreds of nodes and this data is fits in a
>> small slice of block cache across most of them.  The concerns are that its
>> performance is impacted by other loads and that as it continues to grow
>> there may not be enough space in the current cluster's shared block cache.
>> So I'm looking for something that will serve out of memory (backed by disk
>> for persistence) or from SSDs.  A few questions that I would love to hear
>> answers for:
>>  - Does HBase sound like a good match as this grows?
> Yes. The key to get more predictable performance is to separate out
> workloads. What are the other things that are using the same physical
> hardware and impacting performance? Have you measure performance when
> nothing else is running on the cluster?

There are several other things sharing the cluster and using it more
heavily than this service - both online request handling as well as
some large batch map reduce jobs.  When the large jobs aren't running
the performance is acceptable and typically in the 1-2ms mean reads
range.  (Served out of block cache).

>>  - Does anyone have experience running HBase over SSDs?  What sort of
>> latency and requests per second have you been able to achieve?
> I don't believe many people are actually running this in production yet.
> Some folks have done some research on this topic and posted blogs (eg:
> http://hadoopblog.blogspot.com/2012/05/hadoop-and-solid-state-drives.html)
> but there's not a whole lot more than that to go by at this point.

Thanks, that's a really helpful reference.  It sounds like it could be
a big gain over disks already but that the bottleneck would move from
IO to CPU and that there would be significant work to be done.

>>  - Is anyone using a row cache on top of (or built into) HBase?  I think
>> there's been a bit of discussion on occasion but it hasn't gone very far.
>> There would be some overhead for each row.  It seems that if we were to
>> continue to rely on memory + disks this could reduce the memory required.
>>  - Does anyone have alternate suggestions for such a service?
> The biggest recommendation is to separate out the workloads and then start
> planning for more hardware or additional components to get better
> performance.

Right, that's why I'm looking to separate this service out.  However,
I'd like to go with a much smaller set of nodes for this particular
service rather than duplicating the large, expensive cluster.

View raw message