Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Работа с Akka Cluster - Александр Алексеев

566 views

Published on

Работа с Akka Cluster

Published in: Software
  • Be the first to comment

  • Be the first to like this

Работа с Akka Cluster - Александр Алексеев

  1. 1. Работа с Akka Cluster Александр a.k.a @afiskon
  2. 2. Что такое акторы? ● Легковесные процессы ● Обмениваются сообщениями ● Имеют очереди сообщений ● Реализации: Erlang, Akka, Cloud Haskell
  3. 3. Что такое Akka Cluster? ● Как просто Akka, только акторы находятся не на одной машине ● И немного больше...
  4. 4. build.sbt libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-actor" % akkaVersion, "com.typesafe.akka" %% "akka-cluster" % akkaVersion ) resolvers += "Akka Snapshots" at "http://repo.akka.io/snapshots/"
  5. 5. application.conf akka { actor.provider = "akka.cluster.ClusterActorRefProvider" remote.netty.tcp { hostname = "127.0.0.1" port = 2551 } cluster.seed-nodes = [ "akka.tcp://system@127.0.0.1:2551", "akka.tcp://system@127.0.0.1:2552" ] }
  6. 6. Cluster Listener val cluster = Cluster(context.system) override def preStart() { cluster.subscribe(self, InitialStateAsEvents, classOf[MemberEvent], classOf[UnreachableMember]) } def receive = LoggingReceive { case MemberUp(member) => case UnreachableMember(member) => case MemberRemoved(member, prevStatus) => case _: MemberEvent => }
  7. 7. Ручное управление нодами http://downloads.typesafe.com/akka/akka_2.11-2.3.9.zip java -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false … akka-cluster 127.0.0.1 9999 cluster-status akka-cluster 127.0.0.1 9999 down akka.tcp://system@127.0.0.1:49603
  8. 8. Автоматическое управление нодами min-nr-of-members = 2 auto-down-unreachable-after = 10s Но кластер может развалиться на два при нетсплитах. minClusterSize = floor(totalNodesNum / 2) + 1
  9. 9. Акторы-синглтоны ● ClusterSingletonProxy ● ClusterSingletonManager ● http://doc.akka. io/docs/akka/snapshot/contrib/cluster- singleton.html Координация действий, выполнение по расписанию, миграции БД, и так далее
  10. 10. Распределенные кэши (1 из 3) deployment { /sessionManager/router { router = consistent-hashing-group nr-of-instances = 16 routees.paths = ["/user/sessionManager"] cluster { enabled = on allow-local-routees = on } } }
  11. 11. Распределенные кэши (2 из 3) import akka.routing.ConsistentHashingRouter.ConsistentHashable trait RoutedMsgWithId { val id: Long } case class RoutedMsg[T](key: T, msg: Any) extends ConsistentHashable { val consistentHashKey = key }
  12. 12. Распределенные кэши (3 из 3) class SessionManager extends Actor with ActorLogging { val managerRouter = context.actorOf(Props.empty.withRouter(FromConfig), "router") override def receive = LoggingReceive { case msg: RoutedMsgWithId => managerRouter forward RoutedMsg(msg.id, msg) case r@RoutedMsg(sid: Long, msg: Any) => val actorName = s"session-$sid" context.child(actorName) getOrElse { context.actorOf(SessionActor.props(sid), actorName) } forward msg } }
  13. 13. Метрики и мониторинг ● http://kamon.io/ ● https://www.datadoghq.com/
  14. 14. Агрегация логов ● https://logentries.com/ ● https://logentries.com/insights/autoscaling/
  15. 15. Поиск узких мест ● Метрики ● Флаг writeTrace: Boolean ● Пробрасываение контекста Kamon’ом ● Класс-наследник Actor ● Смотрим в логи через Logentries ● Немного хитрой логики, когда писать ● + https://www.yourkit.com/
  16. 16. Полезные ссылки ● http://doc.akka.io/docs/akka/snapshot/scala.html ● http://doc.akka.io/docs/akka-stream-and-http- experimental/1.0-M4/scala.html ● https://groups.google.com/forum/#!forum/akka-user ● https://groups.google.com/forum/#!forum/kamon-user ● https://groups.google.com/forum/#!forum/scala-russian ● https://github.com/mr-mig/ru-it-chats
  17. 17. Вопросы? Александр http://eax.me/ http://devzen.ru/

×