问题标签 [finagle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1389 浏览

scala - 如何在 Finagle 中使用带有 RoutingService 的过滤服务

公平的警告,我是 Scala 的新手,所以我可能会在这里遗漏一些简单的东西。

我有这个代码,效果很好

但我想将该授权过滤器添加到我的服务中。如果我添加这个:

我得到一个编译错误:

如果我将服务更改为 Service[HttpRequest, HttpResponse] 类型,我将无法使用它作为 routingService。

由于这些类型错误,我很难让路由服务与过滤器一起使用。

谢谢!

编辑:

我只是想在下面添加一个使用@Septem 答案的代码示例,将其用于过滤器:

我对 finagle 和 scala 还有些模糊-但我想这里发生的事情是我使用的 SimpleFilter 已经假设了某种类型的服务,

0 投票
3 回答
3572 浏览

finagle - Set HTTP GET Parameters in Finagle

In Finagle, how do I create a request an HTTP GET request with parameters in a safe, clean way?

0 投票
1 回答
1205 浏览

scala - 如何在 finagle 中托管静态资源

我正在尝试在 finagle 中托管静态资源,例如 javascript 和 css 文件。

我已经设法让它工作,但我必须专门配置每条路由到我的路由服务中的资源文件夹。例如:

现在我可以在publicand中获取任何资源,但如果没有更多配置public/bootstrap/css,我将无法获取。public/bootstrap/js

0 投票
1 回答
889 浏览

java - JVM 消耗 100% 的 CPU

我们有一个在 Ubuntu Server 12.04 和 java 上运行的应用程序。

java -版本返回:

java版本“1.7.0_40”

Java(TM) SE 运行时环境 (build 1.7.0_40-b43)

Java HotSpot(TM) 64 位服务器 VM(内部版本 24.0-b56,混合模式

我们还有其他具有相同技术但没有问题的应用程序。

服务器信息:内存:2G 操作系统:Ubuntu Server 12.04 Nb CPU:2

应用程序语言是 scala。

运行一段时间后,JVM 似乎进入休眠状态。一个 CPU 继续以 100% 的速度旋转。

JVM 选项:

-Xms1g -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:-DisableExplicitGC -XX:CMSFullGCsBeforeCompaction=1 -XX:+CMSClassUnloadingEnabled -XX:+CMSIncrementalMode -XX:MaxGCPauseMillis=1500 -XX:GCTimeRatio=9 -XX:CMSInitiatingOccupancyFraction=50 -XX:-UseGCOverheadLimit -XX:MaxHeapFreeRatio=60

使用 jstat -gcutil [PID],我看到 FGC 增长很快。

你有这个问题的想法吗?

谢谢

0 投票
1 回答
716 浏览

scala - 生成 thrift 文件时出错包含使用 scrooge 的 Union

我用 twitter 的scrooge生成了一个 thrift 服务器,一切运行良好,但是如果我在 thrift 文件中包含联合类型,生成过程将失败:

以下是我在项目中选择的版本(您可以在此处查看我的项目):

sbt 版本:0.11.2
scala 版本:2.9.2
scrooge 插件:addSbtPlugin("com.twitter" %% "sbt11-scrooge" % "3.0.0")
scrooge 运行时:"com.twitter" %% "scrooge-runtime " % "3.1.0"

经过几次尝试,似乎上面是我可以选择的最新 scrooge 版本。

有什么建议吗?谢谢

0 投票
1 回答
141 浏览

multithreading - 硬件对异步 JVM 服务器性能的重要性

我正在运行一个 Finatra 服务器(https://github.com/capotej/finatra),它是一个基于 Sinatra 的基于 Finagle(一个异步 RPC 系统)的 scala Web 框架。应用程序应设计为同时接收 10 到 50 个请求。每个请求都非常占用 CPU,主要是由于解析和序列化大型 JSON 以及对数组的操作,如排序、分组等......

现在我想知道以下参数对性能的影响以及如何组合它们:

  • 服务器内存
  • 服务器核心数
  • JVM 堆大小
  • 在我的未来池中并行运行的线程数

作为部分回应,我会说:

  • 我应该根据 RAM 调整 JVM 堆大小
  • 拥有多个内核可以提高并发工作负载下的性能,但并不能真正加快单个请求的处理速度。
  • 相反,拥有大 RAM 可以显着加快单个请求的执行速度
  • 我的未来池中的线程数必须根据我的核心数进行调整。

编辑

无论代码如何,我都想比较性能,只关注硬件/线程模型。假设代码已经优化。附加信息 :

  • 我正在构建一个数据报告 API。请求的处理时间很大程度上取决于我正在处理的数据集。对于大数据集,它最多可以达到 10 秒。
  • 我从第三方 API 检索大部分数据,但我也在使用 c3po 连接池机制访问 MySQL 数据库。请求的执行另外委托给未来池以防止阻塞。
  • 除 MySQL 外无磁盘 IO
  • 我不想在服务器端缓存任何东西,因为我需要处理新数据。

谢谢 !!!

0 投票
1 回答
207 浏览

python - gevent:串联组合greenlets

在 Twitter 的Finagle,mapflatMap可用于链接多个异步操作。例如,一个简单的网络爬虫可能会做类似的事情,

我想gevent在 Python 中做一些非常相似的事情,但我不知道该怎么做。Greenlet.link似乎是一个开始,但它不能让我访问Greenlet包含最终结果的内容(据我所知)。

我如何模仿Finagle和操作?mapflatMapgevent.Greenlet

0 投票
1 回答
858 浏览

http - Scala/Java HTTP 解析 POST 数据形式编码的数组

我使用 Finatra。application/x-www-form-urlencoded; charset=UTF-8如果我发送数据类型的 POST 数据

在服务器上获取 a 的好方法是什么List(name, value)

0 投票
1 回答
6217 浏览

scala - Finagle 和 Akka,为什么不一起使用呢?

我在实践中没有使用过 Finagle 或 Akka,但我已经阅读了很多关于它们的内容。

Finagle 是一个 RPC 系统,而 Akka 是一个用于高并发应用程序的工具包,为什么所有人都将它们作为两种可能的解决方案进行比较,不能一起使用?我所做的所有搜索都建议使用其中一种,没有人建议将它们一起使用。

例如,Finagle 有一种非常有趣的方式来通过 thrift 及其 IDL 定义端点。使用这个 IDL,我们可以定义一个自定义端点,并通过 scooge 或任何代码生成工具,可以毫不费力地获得服务。此外,还创建了一个连接到此服务的客户端,并自动解决了许多常见的客户端问题(重新连接、超时、重试、负载平衡、连接池……)。

相反,Akka 解决了很多并发问题,并且它的扩展性非常好,没有手动控制线程的所有复杂性。

总而言之,为什么不一起使用它们呢?:

  • Finagle + Thrift(及其 IDL):它促进了服务设计和开发以及部署(包括易于横向扩展)。
  • Akka:它通过其 Actor 系统使用所有服务器功能,并且如果我更改服务器属性(例如,如果它部署在 EC2 上并且我将我的节点从 m1.small 转换为 m1.large),它的扩展性非常好。

你怎么看?

注意:假设映射 Futures 和 Promises 的问题已经解决,以及 FuturePools 和 ExecutionContexts 之间的不匹配问题。该模式是将 Finagle 转换为使用 Futures 的 scala 方式。

0 投票
1 回答
1192 浏览

scala - 如何将 Twitter Future[Map[A, Future[C]]] 转换为 Future[Map[A, C]]

我正在尝试解决以下问题:

我有一个 Future[Map[A, B]]。对于所有 B,我需要应用一种将 B 转换为 Future[C] 的方法,并且我想返回一个 Future[Map[A, C]]

这是我到目前为止的代码:

此代码错误,因为它返回 Iterable[Future[(Int, ClientData)]]

对于信息getClients是一个节俭的方法,它返回Future[Map[A, B]]其中 Map 是可变的,所以我需要先用 toMap 将它转换为不可变的地图。

预先感谢您的帮助!