首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >负载平衡akka

负载平衡akka
EN

Stack Overflow用户
提问于 2016-03-21 21:37:52
回答 1查看 1.9K关注 0票数 4

我使用的是akka-http,我的build.sbt配置是:

代码语言:javascript
复制
scalaVersion := "2.11.7"
libraryDependencies += "com.typesafe.akka" % "akka-actor_2.11" % "2.4.2"
libraryDependencies += "com.typesafe.akka" % "akka-http-experimental_2.11" % "2.4.2"
libraryDependencies += "com.typesafe.akka" % "akka-http-spray-json-experimental_2.11" % "2.4.2"
libraryDependencies += "com.typesafe.akka" % "akka-slf4j_2.11" % "2.4.2"

我正在公开一个简单的REST,只有一个GET url。

foo是一个返回未来的函数

代码语言:javascript
复制
implicit val actorSystem = ActorSystem("system", config)
implicit val actorMaterializer = ActorMaterializer()

val route: Route = {
  get {
    path("foo") {
      complete { foo }
    }
  }
}

web服务预期会有很多调用,我希望在发生故障时使服务冗余,因此我希望有两个实例同时运行,以处理所有请求。

1)使用外部负载均衡器或使用akka/akka-http ?内部的一些魔法(我不知道),让web服务同时处理请求的最佳方式是什么?

2)为了提高性能,我需要调整哪些主要参数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-22 14:38:23

这个问题的答案演示了如何在Route中调用Actor。

如果将这一技术与Akka中的聚类功能结合起来,您应该能够完成任务。

让您的路由向Router发送一条消息,该消息将发送给N 远程部署的行为者中的1(从您的问题中可以看出,圆知更鸟路由器就是您想要的)。

代码语言:javascript
复制
class HttpResponseActor extends Actor {

  def foo : HttpResponse = ??? // Not specified in question

  override def receive = {
    case _ : HttpRequest => foo 
  }
}

import akka.actor.{ Address, AddressFromURIString }
import akka.remote.routing.RemoteRouterConfig

val addresses = Seq(Address("akka.tcp", "remotesys", "otherhost", 1234),
                    AddressFromURIString("akka.tcp://othersys@anotherhost:1234"))

val routerRemote = 
  system.actorOf(RemoteRouterConfig(RoundRobinPool(5), addresses).props(Props[HttpResponseActor]))

远程执行器使用HttpResponse进行响应。这个响应可以是穿过路由器或直接返回路线

路由将答案放在complete指令中,返回给客户端。

代码语言:javascript
复制
val route = 
  get {
    path("foo") {
      onComplete((routerRemote ? request).mapTo[HttpResponse]) {
        case Success(response) => complete(response)
        case Failure(ex) => complete((InternalServerError, s"Actor not playing nice: ${ex.getMessage}"))
      }
    }
  }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36142104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档