akka

来,带你鸟瞰 Java 中的并发框架!

北城以北 提交于 2020-04-28 20:13:15
作者:唐尤华 https://dzone.com/articles/a-birds-eye-view-on-java-concurrency-frameworks-1 1. 为什么要写这篇文章 几年前 NoSQL 开始流行的时候,像其他团队一样,我们的团队也热衷于令人兴奋的新东西,并且计划替换一个应用程序的数据库。 但是,当深入实现细节时,我们想起了一位智者曾经说过的话:“细节决定成败”。最终我们意识到 NoSQL 不是解决所有问题的银弹,而 NoSQL vs RDMS 的答案是:“视情况而定”。 类似地,去年RxJava 和 Spring Reactor 这样的并发库加入了让人充满激情的语句,如异步非阻塞方法等。为了避免再犯同样的错误,我们尝试评估诸如 ExecutorService、 RxJava、Disruptor 和 Akka 这些并发框架彼此之间的差异,以及如何确定各自框架的正确用法。 本文中用到的术语在这里有更详细的描述。 2. 分析并发框架的示例用例 3. 快速更新线程配置 在开始比较并发框架的之前,让我们快速复习一下如何配置最佳线程数以提高并行任务的性能。 这个理论适用于所有框架,并且在所有框架中使用相同的线程配置来度量性能。 对于内存任务,线程的数量大约等于具有最佳性能的内核的数量,尽管它可以根据各自处理器中的超线程特性进行一些更改。 例如,在8核机器中

来,带你鸟瞰 Java 中的并发框架!

[亡魂溺海] 提交于 2020-04-27 15:09:55
作者:唐尤华 https://dzone.com/articles/a-birds-eye-view-on-java-concurrency-frameworks-1 1. 为什么要写这篇文章 几年前 NoSQL 开始流行的时候,像其他团队一样,我们的团队也热衷于令人兴奋的新东西,并且计划替换一个应用程序的数据库。 但是,当深入实现细节时,我们想起了一位智者曾经说过的话:“细节决定成败”。最终我们意识到 NoSQL 不是解决所有问题的银弹,而 NoSQL vs RDMS 的答案是:“视情况而定”。 类似地,去年RxJava 和 Spring Reactor 这样的并发库加入了让人充满激情的语句,如异步非阻塞方法等。为了避免再犯同样的错误,我们尝试评估诸如 ExecutorService、 RxJava、Disruptor 和 Akka 这些并发框架彼此之间的差异,以及如何确定各自框架的正确用法。 本文中用到的术语在这里有更详细的描述。 2. 分析并发框架的示例用例 3. 快速更新线程配置 在开始比较并发框架的之前,让我们快速复习一下如何配置最佳线程数以提高并行任务的性能。 这个理论适用于所有框架,并且在所有框架中使用相同的线程配置来度量性能。 对于内存任务,线程的数量大约等于具有最佳性能的内核的数量,尽管它可以根据各自处理器中的超线程特性进行一些更改。 例如,在8核机器中

search(6)- elastic4s-CRUD

♀尐吖头ヾ 提交于 2020-04-23 07:18:02
如果我们把ES作为某种数据库来使用的话,必须熟练掌握ES的CRUD操作。在这之前先更正一下上篇中关于检查索引是否存在的方法:elastic4s的具体调用如下: // 删除索引 val rspExists = client.execute(indexExists( " company " )). await if (rspExists.result.exists) client.execute(deleteIndex( " company " )). await 在下面我们还会示范如何检查一条记录(document)是否存在的方法。 先示范新建一条记录。一般来讲数据库表都有个唯一字段,最好用ES里的id来代表,否则ES会自动产生一个唯一id,那么随机读取get时就会很不方便。如果新插入的记录id已经在表里存在,ES会替换新的内容,不会产生异常。可以在elastic4s里使用createOnly(true)来强制产生重复id异常: import com.sksamuel.elastic4s.{ElasticClient, ElasticProperties} import com.sksamuel.elastic4s.akka._ import akka.actor._ import scala.concurrent.ExecutionContext.Implicits. global

search(6)- elastic4s-CRUD

扶醉桌前 提交于 2020-04-23 05:05:08
如果我们把ES作为某种数据库来使用的话,必须熟练掌握ES的CRUD操作。在这之前先更正一下上篇中关于检查索引是否存在的方法:elastic4s的具体调用如下: // 删除索引 val rspExists = client.execute(indexExists( " company " )). await if (rspExists.result.exists) client.execute(deleteIndex( " company " )). await 在下面我们还会示范如何检查一条记录(document)是否存在的方法。 先示范新建一条记录。一般来讲数据库表都有个唯一字段,最好用ES里的id来代表,否则ES会自动产生一个唯一id,那么随机读取get时就会很不方便。如果新插入的记录id已经在表里存在,ES会替换新的内容,不会产生异常。可以在elastic4s里使用createOnly(true)来强制产生重复id异常: import com.sksamuel.elastic4s.{ElasticClient, ElasticProperties} import com.sksamuel.elastic4s.akka._ import akka.actor._ import scala.concurrent.ExecutionContext.Implicits. global

一个成功的程序员,自然要懂微服务,汇总微服务架构的15钟框架!

寵の児 提交于 2020-04-21 23:45:32
这几年来,微服务这个概念越来越火了,火到什么程度呢? 2019年有一个统计说,两千家企业里, 45%在使用微服务,16%在实验开发和测试微服务架构,24%在学习微服务准备转型,只有剩下的15%的企业没有使用微服务。 微服务到底有什么好呢? 微服务在2013年才被提出,短短几年就有这么快速的发展。 微服务架构能够实现由小型自主服务组成一个整体应用,各个组成部分之间是松耦合的,复杂性低,各个部分可以独立部署,修复bug或者引入新特性更容易,能够独立扩展,不同技术栈之间可以使用不同框架、不同版本库甚至不同的操作系统平台。 对于中大型架构系统来说,微服务更加便捷,微服务成为很多企业架构重构的方向,同时也对 架构师提出更高的挑战。 目前有很多常用于微服务构建的框架,对于构建微服务架构能够带来一些帮助。 Java语言相关微服务框架 1.Spring Boot Spring Boot的设计目的是简化新Spring应用初始搭建以及开发过程,2017年有64.4%的受访者决定使用Spring Boot,可以说是最受欢迎的微服务开发框架。 利用Spring Boot开发的便捷度简化分布式系统基础设施的开发,比如像配置中心、注册、负载均衡等方面都可以做到一键启动和一键部署。 2.Spring Cloud Spring Cloud是一个系列框架的合计,基于HTTP(s)的RETS服务构建服务体系

Nacos SDK for Scala 发布

点点圈 提交于 2020-04-20 17:13:22
脱胎于历经阿里巴巴 10 年生产验证的内部产品,支持具有数百万服务的大规模场景,Nacos 作为高性能的动态服务发现、配置管理和服务管理平台从 2018 年开源以来,版本迭代速度很快,已经发布到 1.2.1,已支持企业使用 Nacos 生产高可用。Nacos 社区一直持续投入多语言建设,目前支持主流微服务开发语言及主流服务框架和配置管理框架。 本文作者是 Nacos contributor 杨景,他在 2019 对公司产品进行微服务改造时选择了 Nacos,独立开发了 Nacos SDK for Scala。 欢迎各位感兴趣的开发者参与 Nacos 社区共建: GitHub: https://github.com/alibaba/nacos 官网: https://nacos.io 概述:Nacos SDK for Scala Nacos SDK for Scala 是基于 Nacos Java SDK 的封装,使得在 Scala 下更易使用。 支持使用 HOCON 做为配置文件,支持 Akka Discovery 和 Play-WS 。 Nacos SDK for Scala 既可以 将 Nacos 引入 Scala 生态环境 ,作为微服务应用里的配置管理和服务发现机制。同时, 也可以 将 Scala/Akka/Play 引入 Java 以及 Spring 微服务环境

search(5)- elastic4s-构建索引

别来无恙 提交于 2020-04-19 14:14:14
按照计划,这篇开始尝试用elastic4s来做一系列索引管理和搜索操作示范。前面提过,elastic4s的主要功能之一是通过组合Dsl语句形成json请求。那么我们先试试组合一些Dsl语句,再想办法产生出json请求文本,然后在kibana控制台中验证它的正确性。 首先看看elastic4s提供的一个show函数: def show( implicit handler: Handler[T, _]): String = Show[ElasticRequest].show(handler.build(t)) 又见到了这个Handler[T, _],作为show的一个隐式参数。前面说过这个Handler[T, _]是个代表构建T类型json请求的typeclass。具体构建函数就是上面的这个build(t)函数。我们先看看CreateIndexRequest类型的show函数示范: val jsCreate = createIndex( " company " ) .shards( 1 ).replicas( 1 ).show println(jsCreate) 产生了json如下: PUT:/company? StringEntity({ " settings " :{ " index " :{ " number_of_shards " : 1 , " number_of

search(5)- elastic4s-构建索引

倾然丶 夕夏残阳落幕 提交于 2020-04-19 11:51:25
按照计划,这篇开始尝试用elastic4s来做一系列索引管理和搜索操作示范。前面提过,elastic4s的主要功能之一是通过组合Dsl语句形成json请求。那么我们先试试组合一些Dsl语句,再想办法产生出json请求文本,然后在kibana控制台中验证它的正确性。 首先看看elastic4s提供的一个show函数: def show( implicit handler: Handler[T, _]): String = Show[ElasticRequest].show(handler.build(t)) 又见到了这个Handler[T, _],作为show的一个隐式参数。前面说过这个Handler[T, _]是个代表构建T类型json请求的typeclass。具体构建函数就是上面的这个build(t)函数。我们先看看CreateIndexRequest类型的show函数示范: val jsCreate = createIndex( " company " ) .shards( 1 ).replicas( 1 ).show println(jsCreate) 产生了json如下: PUT:/company? StringEntity({ " settings " :{ " index " :{ " number_of_shards " : 1 , " number_of

【三 异步HTTP编程】 4. WebSockets

妖精的绣舞 提交于 2020-04-07 10:55:38
WebSockets 是浏览器上的全双工通信协议。在WebSockets通道存在期间,客户端和服务器之间可以自由通信。 现代 HTML5 兼容的浏览器可以通过 JavaScript API 原生地支持WebSockets。除了浏览器之外,还有许多WebSockets客户端库可用于服务器之间、原生的移动APP通信等场景。在这些环境使用WebSockets的好处是可以重用Play服务器现有的TCP端口。 提示 :到 这里 查看支持WebSockets的浏览器相关问题。 处理WebSockets 到目前为止,我们都是用 Action 来处理标准 HTTP 请求并返回标准 HTTP 响应。但是标准的 Action 并不能处理 WebSockets 这种完全不同的请求。 Play 的 WebSockets 功能建立在Akka stream的基础上,将收到的 WebSockets 消息变成流,然后从流中产生响应并发送到客户端。 从概念上来说,一个 “流” 指收到消息、处理消息、最后产生消息这样一种消息转换。这里的输入和输出可以完全解耦开来。Akka提供了 Flow.fromSinkAndSource 构造函数来处理这种场景,事实上处理WebSockets时,输入和输出并不直接相互连接。 Play在 WebSocket 类中提供了构造WebSockets的工厂方法。 使用 Akka

Akka HTTP 非官方中文翻译

|▌冷眼眸甩不掉的悲伤 提交于 2020-04-07 07:02:21
Akka HTTP 10.1.11 非官文中文翻译在线阅读地址: 中文文档: Akka HTTP Unofficial Chinese 码云镜像: Akka HTTP Unofficial Chinese 翻译难免有错误或表达不够清楚的地方。因此,Akka HTTP 中文版翻译采用了基于原始 Paradox 的 md 文件对照翻译的形式,英文原文将显示在中文译文的上方。翻译的源码内容可以在 https://github.com/yangbajing/akka-http 仓库的 docs-zh 子项目找到。 欢迎大家指出或改进不好的地方,一起完善并在未来跟进官方版本的更新。欢迎随时编辑并提交 Pull Request。 本次翻译完成了 Scala API 文档和大部分 Java API 文档的中文译文,但有关具体指令(Directives)使用说明的内容还未翻译。接下来除了继续完成剩余的 Java API 文档翻译以外,也将考虑优先挑选翻译常用及重要的指令,另外某些代码示例的注释也会考虑进行中文翻译。 Akka HTTP 模块组在 akka-actor 和 akka-stream 的基础上实现了全HTTP栈( 服务器-和客户端 )的功能。它并不是一个 web 框架,而是一个更通用的工具箱,以便生成提供或消费基于 HTTP 的网络服务。虽然与浏览器进行互动是其功能的组成部分