akka

有状态的服务其实可以做更多的事情

谁都会走 提交于 2020-10-16 18:32:28
简介 对于初学者,心里对“有状态服务”的理解可能比较模糊,但是从面向对象编程思想的角度去理解也许会明朗很多。面向对象编程思想提倡的是用编程语言去描述世间万物,所以面向对象编程的语言都会提供描述对象的容器以及对象行为的表达方式。举一个很简单的栗子,在c#或者java中,表达对象的容器就是class,对象的行为通过一系列的接口或者函数来表达。更进一步,对象抽象出来之后,大多数对象都有自己的内部状态,体现到代码上也就是常见的类的属性。 面向对象编程的基本思想本质上是对现实世界的一种抽象,万物皆可抽象。 根据业务把对象抽象出来之后,每一个实例化的对象其实都可以有自己的状态,比如:在最常见的游戏场景中,每一个玩家都是“玩家"这类对象的一个实例,每一个玩家都有自己的名字,性别,等级,HP等属性,这些属性本质上就是玩家的状态,随着时间的推移,每个玩家的HP,等级等属性会随之变化,这些变化其实就是这个玩家状态的变化。对应到有状态的服务也是如此,之所以称之为有状态,是因为服务内部的对象状态会随着业务有着对应的变动,而这些变动只发生在这个服务内部,在外界看来,这个服务好像是有状态的。 有状态的服务本质上是一些有状态对象的集合,这些对象状态的变化只发生在当前服务进程中。 优势和劣势 有状态服务之所以被称为有状态,一个很大的原因是它可以追溯状态的变化过程,也就是说一个有状态的服务保存着状态变化的记录

kka-typed(5)

馋奶兔 提交于 2020-08-20 05:26:49
akka-cluster对每个节点的每种状态变化都会在系统消息队列里发布相关的事件。通过订阅有关节点状态变化的消息就可以获取每个节点的状态。这部分已经在之前关于akka-cluster的讨论里介绍过了。由于akka-typed里采用了新的消息交流协议,而系统消息的发布和订阅也算是消息交换,也受交流协议约束。所以想通过重写以前示范的ClusterMemberStatus来了解一下akka-typed环境下节点状态变化消息监听的一些机制。 我们需要一个actor来订阅系统发布的节点状态变化消息。这里涉及到系统、actor两端的信息交流。假设向系统订阅是一种消息的发送,那么得到的节点状态变化消息就是系统的response了。先看看actor里的消息定义: object MonitorActor { sealed trait ClusterEvent private case class MemberStatus( event : MemberEvent) extends ClusterEvent private case class ReachStatus( event : ReachabilityEvent) extends ClusterEvent def apply(): Behavior[ClusterEvent] = Behaviors.setup[ClusterEvent]

Java架构师鲁班二期

跟風遠走 提交于 2020-08-15 11:31:25
课程介绍〗:课程旨在帮助在职Java开发工程师晋升提高,由来自一线大型 互联网 公司架构师、技术总监全职授课,内容涵盖: 高并发、高可用、分布式、高性能、架构设计、源码分析。〖课程目录〗:openjdk编译调试、java线程模型【回放】openjdk编译调试、java线程模型(7月4日 20:00-22:00) 02Java 当中的"锁"事【回放】Java 当中的"锁"事(7月7日 20:00-22:00) 03synchronized和volatile关键字【回放】synchronized和volatile关键字(7月9日 20:00-22:00) 04并发编程之并发容器【回放】并发编程之并发容器(7月11日 20:00-22:00) 05并发中锁的原理:JOL查看对象布局、各种锁之间的性能对比【回放】并发中锁的原理(7月14日 20:00-22:00) 06JAVA锁膨胀的过程【回放】JAVA锁膨胀的过程(7月16日 20:00-22:00) 07锁的膨胀过程二【回放】锁的膨胀过程二(7月18日 20:00-22:00) 08并发编程之线程池【回放】并发编程之线程池(7月21日 20:00-22:00) 09CAS和AQS的应用和原理之CyclicBarrier-semaphore【回放】CAS和AQS的应用和原理(7月23日 20:00-22:00)

Actor 模型应用实例-Actor 间通讯

蓝咒 提交于 2020-08-15 05:37:18
两个 Actor 的通讯机制原理图 目录结构: 代码: AActor.scala package com.akka.actors import akka.actor.{Actor, ActorRef} class AActor(actorRef: ActorRef) extends Actor { val bActorRef: ActorRef = actorRef override def receive: Receive = { case "start" => { println("AActor 出招了 , start ok") self ! "我打" //发给自己 } case "我打" => { //给 BActor 发出消息 //这里需要持有 BActor 的引用(BActorRef) println("AActor(黄飞鸿) 厉害 看我佛山无影脚") Thread.sleep(1000) bActorRef ! "我打" //给 BActor 发出消息 } } } BActor.scala package com.akka.actors import akka.actor.Actor class BActor extends Actor { override def receive: Receive = { case "我打" => { println("BActor

让阿里P8都为之着迷的分布式核心原理解析到底讲了啥?看完我惊了

不打扰是莪最后的温柔 提交于 2020-08-15 01:45:46
领取本文资料直接扫码免费领取 这个人人都喊着“高并发”“高可用”的时代里,分布式系统的重要性不言而喻。从整个行业的招聘趋势就能看出来,大型互联网公司在招聘后端工程师的时候,都会要求候选人有分布式相关的工作经验。与其直接用些抽象、晦涩的技术名词去给分布式下一个定义,还不如从理解分布式的发展驱动因素开始,我们一起去探寻它的本质,自然而然地也就清楚它的定义了。 在今天这篇文章中,我将带你了解分布式的起源,是如何从单台计算机发展到分布式的,进而帮助你深入理解什么是分布式。为了方便你更好地理解这个演进过程,我将不考虑多核、多处理器的情况,假定每台计算机都是单核、单处理器的。 说明:完整的《分布式核心原理解析》学习文档篇幅较长,共有330页,这里限于篇幅,故只展示一部分的文档,有需要这份学习文档的朋友麻烦帮忙转发+转发+转发一下,然后再私信我【学习】即可免费获取这份《分布式核心原理解析》学习文档。 前言 一,分布式何而起 分布式起源 单兵模式:单机模式 游击队模式:数据并行或数据分布式 集团军模式:任务并行或任务分布式 分布式是什么? 总结 二,分布式系统的指标 分布式系统的指标 性能(Per formance) 资源占用(Resource Usage) 可用性( Availability) 可扩展性(Sealabi1ity) 不同场景下分布式系统的指标 总结与思考 三,分布式协调与同步