More Related Content Similar to SF ElasticSearch Meetup - How HipChat Scaled to 1B Messages (20) SF ElasticSearch Meetup - How HipChat Scaled to 1B Messages8. 5. Runs on everything
Wednesday, November 20, 13
9. 5. Runs on everything
Wednesday, November 20, 13
10. 5. Runs on everything
Wednesday, November 20, 13
13. What is a HipChat Message?
{
}
Wednesday, November 20, 13
"id": "b0952da8-faa1-48f7-b1df-a8b2fb24bdfe",
"from": {
"nick": "Zuhaib Siddique",
"group_id": 1,
"user_id": 1
},
"room": {
"group_id": 1,
"name": "testing",
"id": 1
},
"stanza_type": "muc_message",
"date": "2013-11-14T23:20:13Z 424967",
"stanza_data": {
"body": "ElasticSearch FTW"
}
19. But it still wasn’t big enough.
Wednesday, November 20, 13
24. Why ElasticSearch for HipChat
{
"query_string" : {
"default_field" : "content",
"query" : "this AND that OR thus"
}
}
Wednesday, November 20, 13
32. (allthethings) ElasticSearch
ElasticSearch
{
"_index": "muc-2013.11",
"_type": "document",
"_id": "b0952da8-faa1-48f7-b1df-a8b2fb24bdfe",
"_version": 1,
"exists": true,
"_source": {
"from": {
"nick": "Zuhaib Siddique",
"group_id": 1,
"user_id": 1
},
"room": {
"group_id": 1,
"name": "testing",
"id": 1
},
"stanza_type": "muc_message",
"date": "2013-11-14T23:20:13Z 424967",
"_id": "b0952da8-faa1-48f7-b1df-a8b2fb24bdfe",
"stanza_data": {
"body": "ElasticSearch FTW"
}
}
}
Wednesday, November 20, 13
CouchDB
{
"id": "b0952da8-faa1-48f7-b1df-a8b2fb24bdfe",
"from": {
"nick": "Zuhaib Siddique",
"group_id": 1,
"user_id": 1
},
"room": {
"group_id": 1,
"name": "testing",
"id": 1
},
"stanza_type": "muc_message",
"date": "2013-11-14T23:20:13Z 424967",
"stanza_data": {
"body": "ElasticSearch FTW"
}
}
33. (allthethings) ElasticSearch
ElasticSearch
{
"_index": "muc-2013.11",
"_type": "document",
"_id": "b0952da8-faa1-48f7-b1df-a8b2fb24bdfe",
"_version": 1,
"exists": true,
"_source": {
"from": {
"nick": "Zuhaib Siddique",
"group_id": 1,
"user_id": 1
},
"room": {
"group_id": 1,
"name": "testing",
"id": 1
},
"stanza_type": "muc_message",
"date": "2013-11-14T23:20:13Z 424967",
"_id": "b0952da8-faa1-48f7-b1df-a8b2fb24bdfe",
"stanza_data": {
"body": "ElasticSearch FTW"
}
}
}
Wednesday, November 20, 13
CouchDB
{
"id": "b0952da8-faa1-48f7-b1df-a8b2fb24bdfe",
"from": {
"nick": "Zuhaib Siddique",
"group_id": 1,
"user_id": 1
},
"room": {
"group_id": 1,
"name": "testing",
"id": 1
},
"stanza_type": "muc_message",
"date": "2013-11-14T23:20:13Z 424967",
"stanza_data": {
"body": "ElasticSearch FTW"
}
}
37. Behind the Scenes
• Spin up EC2 Instance
• Install Oracle Java 7
• Create Provision IOPs EBS
• Install and configure ElasticSearch
• ???
• Profit!
Wednesday, November 20, 13
38. # Elasticsearch
nodes = partial_search(:node, "role:elasticsearch_server AND
chef_environment:#{node.chef_environment}",
:keys => {
'hostname' => [ 'hostname' ]
})
if nodes.empty?
Chef::Log.error "site.json - No Elasticsearch servers found"
else
es_nodes = nodes.map {|n|
{
'host' => n['hostname'],
'port' => 9200
}
}
data["elasticsearch"] = {
"connections" => es_nodes.sort_by {|n| n['host'] }
}
end
Wednesday, November 20, 13