gpt4 book ai didi

scala - 负载均衡 akka-http

转载 作者:行者123 更新时间:2023-12-05 00:56:31 24 4
gpt4 key购买 nike

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

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"

我公开了一个只有一个 GET url 的简单 REST api
foo 是一个返回 Future 的函数
implicit val actorSystem = ActorSystem("system", config)
implicit val actorMaterializer = ActorMaterializer()

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

web-service 预计会有很多调用 ,并且我希望在出现故障时使服务变得冗余,因此我希望同时运行两个实例来处理所有请求。

1) 使用外部负载均衡器或在 akka/akka-http 中使用一些魔法(我不知道),让 Web 服务的两个实例同时处理请求的最佳方法是什么?
2) 我必须调整哪些主要参数以提高性能?

最佳答案

this question的答案演示如何从 Route 中进行 Actor 调用.

如果您将该技术与 clustering 结合使用Akka 中的功能,您应该能够完成工作。

让您的路由向 Router 发送消息这会将消息发送到 N 个 remotely deployed Actors 中的 1 个(从您的问题看来,您想要的是 round robin 路由器)。

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]))

远程 Actor 使用 HttpResponse 进行响应。此回复可以 go through the Router or directly back to the Route .

The Route 在 complete 中给出了答案返回给客户的指令。
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}"))
}
}
}

关于scala - 负载均衡 akka-http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36142104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com