如何扩展定制分析引擎?

时间:2017-05-23 03:01:49

标签: mongodb hadoop elasticsearch logstash bigdata

我们有一个基于弹性搜索群集构建的中型分析引擎。

我们以json的形式将发送数据存储到我们的服务器,这与Google Analytics可能正在做的非常相似。我们将整个数据推送到ES集群中。截至目前,每天约为60GB(每月约2TB)。

我们有几个月的数据保留政策,比如6个月(根据定价计划)。

我们提供像......这样的动态报告。

  1. 所有来自美国且正在使用Chrome浏览器并在iPhone上使用浏览器的用户。
  2. 来自引荐来源匹配正则表达式“http://www.google.com”的所有用户的特定按钮的点击总和,并且基于印度并使用桌面。
  3. 问题

    到目前为止,它对我们起了很大作用,但我们面临着扩大规模的问题。因为我们已经部署了100台服务器来处理这些数据量。显示近实时分析。

    我在这里寻找的是如何优化数据存储并仍然显示近乎实时的数据切片和切割。想象一下谷歌分析或混音面板如何实时存储和显示数据。

    我开放任何技术转变。建议请。 (与GA或Mix Panel类似的东西就是我们在功能方面的含义)

    你们这些将大量数据存储在像mongodb这样的NO-SQL中的东西会在这些数据上运行MAP-Reduce吗?但这可能不是实时的(我们可以预期在显示数据时会延迟5-10分钟)

    使用的技术堆栈(截至目前)

    1. Apache / Nginx as webserver + application code
    2. 编程语言(Ruby / PHP等)
    3. 通过logstash进行日志收集/解析
    4. 用于存储和查询数据的Elasticsearch集群
    5. 用Javascript编写的SDK将事件推送到我们的服务器(如GA)
    6. 我们存储看起来像这样的事件有效载荷。

      {
          "query_params":[
      
          ],
          "device_type":"Desktop",
          "browser_string":"Chrome 47.0.2526",
          "ip":"62.82.34.0",
          "screen_colors":"24",
          "os":"Mac OS X",
          "browser_version":"47.0.2526",
          "session":1,
          "country_code":"ES",
          "document_encoding":"UTF-8",
          "city":"Palma De Mallorca",
          "tz":"Europe/Madrid",
          "uuid":"A37F2D3A4B99FF003132D662EFEEAFCA",
          "combination_goals_facet_term":"c2_g1",
          "ts":1452015428,
          "hour_of_day":17,
          "os_version":"10.11.2",
          "experiment":465,
          "user_time":"2016-01-05T17:37:10.675000",
          "direct_traffic":false,
          "combination":"2",
          "search_traffic":false,
          "returning_visitor":false,
          "hit_time":"2016-01-05T17:37:08",
          "user_language":"es",
          "device":"Other",
          "active_goals":[
              1
          ],
          "account":196,
          "url":"http://someurl.com",
          "action":"click",
          "country":"Spain",
          "region":"Islas Baleares",
          "day_of_week":"Tuesday",
          "converted_goals":[
      
          ],
          "social_traffic":false,
          "converted_goals_info":[
      
          ],
          "referrer":"http://www.google.com",
          "browser":"Chrome",
          "ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36",
          "email_traffic":false
      }
      

      修改

      “优化数据存储”意味着我们在json有效负载中接收70%数据的每个事件。但是,我们继续在ES中为事件创建新文档。我希望我们不知何故停止存储json的重复键并仅存储后续事件有效负载中更改的内容。从而优化存储空间。

      我们在所有服务器上都使用SSD。我担心的是,我们谈论GA的规模和类似的数据量会发生什么。我怀疑上面提到的架构或技术将存活下来。寻找那种分类的建议。

1 个答案:

答案 0 :(得分:0)

我认为您已经在使用最适合的堆栈用于此类用例。我建议如果尚未完成微调弹性搜索优化的工作。

一些建议可能是

  1. 考虑使用SSD代替HDD来进行弹性搜索群集。
  2. 考虑使用“refresh_intervals”等精细调整参数
  3. 通过云自动扩展一些负载均衡器以处理正确的请求。
  4. 希望这会有所帮助。