标签:images 导入导出 building asi 导入 授权 build 负载均衡 gen
本文翻译自Building Analytics Engine Using Akka, Kafka & ElasticSearch,已获得原作者Satendra Kumar和网站授权。
在这篇文章里,我将和大家分享一下我用Scala、Akka、Play、Kafka和ElasticSearch等构建大型分布式、容错、可扩展的分析引擎的经验。
我的分析引擎主要是用于文本分析的。输入有结构化的、非结构化的和半结构化的数据,我们会用分析引擎对数据进行大量处理。如下图所示为第一代架构,分析引擎可以用REST客户端或Web客户端(引擎内置)访问。
简单描述一下用到的技术:
我们从Akka 2.2.x版开始用起,也碰到了一些严重问题,主要表现为:
为了解决这些问题我们设计了第二代架构,主要变化有:
新架构是这样的:
太棒了,这样的系统工作得非常好。生活又变得非常美好,团队也得到了很多表扬。
三个月后,来了个要增加Datasift做为数据源的新需求,提供流数据和历史数据。这个需求好满足,只要增加一个新服务,从Datasift中拉取数据并发送到分析集群上即可。
增加新服务很简单,但却导致了新问题:
当我们在努力为这个问题找解决方案时,又收到需求要再增加一种数据源!
在经过很多次头脑风暴之后,我们明白了现有架构的问题,于是做出了一个简单、可扩展和容错的第三代架构:
在这个新架构里,我们去掉了Akka集群,重写了分析引擎。它完全是基于Akka Actor的,REST服务也是运行在相同的JVM上。REST服务只是简单的从客户端接收请求,做认证和鉴权,然后创建一条待处理消息发送到Kafka队列中去。分析引擎的每个节点都会从Kafka队列中拉取数据,处理完毕再拉取下一批。这样它就永远不会忙不过来。
受益于Kafka的内部机制,不管哪个节点死掉了,Kafka都会自动的把要处理的消息发送到另一个正常节点上,所以不会有任何消息丢失。
在这个架构下我们就不必继续租用以前的Amazon EC2 4X large服务器了,只要用Amazon EC2 2X large就可以支持任何负载,节省了很多钱。(此处应有掌声。:) )
这完全是个基于拉取模式的架构。所有的请求和浪涌 都通过Kafka集群处理。它永远不会忙不过来,因为所有操作都是基于拉取模式的。整个系统部署在26台EC2节点上,已经快两年了,生产系统一次故障都没出过。
我们也用Kafka保存了各种服务日志来分析性能、安全和用户行为。Kafka生产者会把日志发送到Kafka服务器中。因为我们已经有了ElasticSearch的导入导出服务,我们可以仍然用它们来推送ElasticSearch的日志。我们也可以轻松地用Kibana将用户行为可视化。
请耐心等待我改进第四版架构之后再更新这篇文章吧……快乐编程,不断创新!
http://www.infoq.com/cn/articles/use-akka-kafka--build-analysis-engine?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=articles_link&utm_content=link_text
使用Akka、Kafka和ElasticSearch等构建分析引擎 -- good
标签:images 导入导出 building asi 导入 授权 build 负载均衡 gen
原文地址:http://www.cnblogs.com/softidea/p/6155204.html