• 👽
    2022-03-15
    因为异步,无阻塞。我觉得其实最主要解决的是io访问和网络请求。其基本原理是,CPU的运算速度远远高于IO访问(比如磁盘访问,外设访问),更远高于网络请求(局域网内的数据库,或者微服务下的服务间通信) 传统串行化,就好像,我要组装一台电脑,我拿到图纸以后,图纸第一步是组装机箱,我订购了一个机箱3天到货,然后机箱里要放主板,我又定了一个主板2天到货,主板上要放cpu,我又定了一个CPU半个月到货。。。最终一台电脑组装好,两个月过去了。组装时间取决于所有产品订购到货的总时间。 我理解的响应式就是,我收到图纸,发现图纸要CPU,主板,内存,硬盘,机箱。。。我全部发起订购。然后都开始送货,等货全到齐了之后,开始组装。这个时候,组装时间取决于最长到货的那个配件。所以大幅提升了性能。 反过来说,如果你本身不需要io访问,网络调用之类的操作。响应式对于性能的提升其实是很有限的。 应用场景的话,我觉得可以有金融领域的风控。因为风控其实是一整串校验,而且这一串校验服务很可能是独立的。甚至部分服务是由不同的供应商提供的。如果这种业务场景,走串行化之行,执行效率肯定是不可接受的。使用响应式,可以很大程度缓解这个问题。只需要保证,我的每一个风控校验的服务,或者提供商,响应时间控制在一个范围内,就能保证整个请求的执行时间不会太离谱。
    展开

    作者回复: 很赞,确实,Akka的很多应用案例都出自金融行业。

    共 2 条评论
    10
  • ABC
    2022-03-30
    老师有推荐的反应式框架吗?最近想学习一下。

    作者回复: Akka

    
    3
  • peter
    2022-03-11
    请教老师几个问题啊: Q1:服务器创建几百个线程与线程公式的矛盾问题。 记得有一个公式,线程数等于CPU核数的2倍。假设CPU有二十个核,则线程数是40。服务器创建几百个线程,有什么用?与这个公式不矛盾吗? Q2:akka是什么意思? Q3:目前的主流JAVA开发中有响应式开发框架吗? A JDK中有响应式开发的东西吗? B 目前微服务一般用SpringBoot/SpringCloud,这两个部分有响应式开发的东西吗? C 后端架构,常见的组件:Nginx、Redis、MQ(e.g,RocketMQ)、ES,这几个组件有响应式开发的东西吗? Q4:Flower的消息部分是怎么实现的?队列吗? Q5:RxJava也是封装Actor、消息驱动吗? Q6:这个框架开发难度大吗?老师一个人多长时间能完成开发?

    作者回复: 1 其一,最佳线程数不止和CPU数目有关,还有IO等待时间有关,这正是Flower关注的,线程公式如下: 最佳线程数=[任务执行时间/(任务执行时间 - IO 等待时间)] * CPU 内核数 其二,应用程序开启多少线程,和以上指标都没关系,想开多少开多少。 2 https://akka.io/ 3 文中提到两种反应式编程框架,都是Java框架 A Java Streaming B Flutter,另外,Flower也是一个反应式微服务框架,更彻底的反应式微服务,具体可以看github文档 C 没有,反应式编程和这些没关系 4 利用Akka Actor传递消息 5不是 6 第一个版本,一个人一个月,具体可以看git log

    
    2
  • javaadu
    2022-03-26
    我是做风控策略引擎的,在策略引擎中,同一个事件过来,需要并行跑很多模型、特征,然后统一决策。这些模型和特征都是外部的系统,对于io并发的要求很高,使用响应式编程有助于减少阻塞环节。 其他的场景,暂时没想到,看看其他同学的回答

    作者回复: 赞,学习了~

    
    1
  • 雪碧心拔凉
    2022-05-19
    妙啊,一直没明白响应式怎么响应信息给客户端的,看到这里终于有点眉目了。类似httpsevice,每次都将web请求传递下去,这样就能达到在最后一个service调用web请求并写响应信息回客户端。 也就是用户->入口->service1->service2->.....->serviceN->入口->用户。 不知道这样理解有问题不

    作者回复: Flower不需要通过入口 返回响应结果给用户,可以在任何一个或多个Service返回。

    
    
  • 学而不思则惘
    2022-03-31
    看下来我理解是一个countdownLatch的作用?

    作者回复: 并不是,flower可以做到用一个线程执行(看起来)并发执行数百个方法,并发处理数百个请求

    共 2 条评论
    
  • HappyHasson
    2022-03-21
    首先,对java不熟悉,所以这里面的有些概念不清楚,导致理解困难。 作者能不能画一张示例图,说明各个service怎么并行处理,然后综合结果给到请求端的。 我是看着看着被绕晕了,文中的概念名词很像

    作者回复: 可以参考github里的文档哈,https://github.com/zhihuili/flower。

    
    
  • 易企秀-郭彦超
    2022-03-11
    非http异步调用 怎么获取执行service的返回值,感觉flow原理和netty框架比较像

    作者回复: HttpService接口提供web参数,调用web.print()返回响应结果。

    共 3 条评论
    
  • 易企秀-郭彦超
    2022-03-11
    文中提到执行service方法有异步和同步 同步有返回值 是阻塞的,异步没有返回值 ,但是大多数情况下是需要返回值的 否则搞成生产者消费者不更简单吗

    作者回复: 方法的返回值和请求的返回值不是一回事,Service可以在方法内部调用web.print(), 直接返回请求的响应结果。 计算请求的响应结果,需要多个Service异步计算得到的,这些Service之间异步无阻塞,通常在流程的最后一个Service调用web.print(),返回请求处理结果。

    
    
  • test
    2022-05-07
    最佳线程数=[任务执行时间/(任务执行时间 - IO 等待时间)] * CPU 内核数
    
    1