我需要一个高性能的消息总线为我的应用程序,所以我正在评估ZeroMQ,RabbitMQ和Apache Qpid.为了衡量性能,我正在运行一个测试程序,该程序使用其中一个消息队列实现发布说10,000条消息,并在同一台机器上运行另一个进程来使用这10,000条消息.然后我记录发布的第一条消息和收到的最后一条消息之间的时差.
以下是我用于比较的设置.
RabbitMQ:我使用了"扇出"类型交换和具有默认配置的队列.我使用了RabbitMQ C客户端库.ZeroMQ:我的发布者tcp://localhost:port1使用ZMQ_PUSH套接字发布,My broker侦听tcp://localhost:port1并将消息重新发送到tcp:// localhost:port2,我的消费者tcp://localhost:port2使用ZMQ_PULL套接字侦听.我正在使用代理而不是对等通信ZeroMQ来使性能比较公平到使用代理的其他消息队列实现.QpidC++消息代理:我使用了"扇出"类型交换和具有默认配置的队列.我使用了Qpid C++客户端库.以下是效果结果:
RabbitMQ:接收10,000条消息大约需要1秒钟.ZeroMQ:接收10,000条消息大约需要15毫秒.Qpid:接收10,000条消息大约需要4秒钟.问题:
RabbitMQ或Qpid使其性能更好?注意:
测试是在具有两个分配处理器的虚拟机上完成的.结果可能因硬件而异,但我主要对MQ产品的相对性能感兴趣.
我正在尝试将大型数据集(4100万条记录)导入新的Solr索引.我已经设置了核心,它工作,我插入了一些测试文档,他们工作.我已经设置了如下的data-config.xml,然后我开始全导入.大约12个小时后!导入失败.
文档大小可能会变得非常大,错误可能是因为大文档(或字段)还是因为数据量大量进入DataImportHandler?
我怎样才能让这个令人沮丧的导入任务正常工作!?!
我已经在下面添加了tomcat错误日志.
如果有任何我错过的信息,请告诉我!
日志:
Jun 1, 2011 5:47:55 PM org.apache.solr.handler.dataimport.JdbcDataSource$1 call
INFO: Creating a connection for entity results with URL: jdbc:sqlserver://myserver;databaseName=mydb;responseBuffering=adaptive;selectMethod=cursor
Jun 1, 2011 5:47:56 PM org.apache.solr.handler.dataimport.JdbcDataSource$1 call
INFO: Time taken for getConnection(): 1185
Jun 1, 2011 5:48:02 PM org.apache.solr.core.SolrCore execute
INFO: [results] webapp=/solr path=/dataimport params={command=full-import} status=0 QTime=0
...
Jun 2, 2011 5:16:32 AM org.apache.solr.common.SolrException log
SEVERE: Full Import failed:org.apache.solr.handler.dataimport.DataImportHandlerException: java.lang.OutOfMemoryError: Java heap space
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:664)
at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:267)
at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:186)
at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:353)
at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:411)
at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:392)
Caused by: …Run Code Online (Sandbox Code Playgroud) 我已经在 k8s 上部署了 Envoy 容器,作为 Istio 部署的一部分。每个 Envoy 代理容器都作为“sidecar”安装在 k8s pod 中的应用程序容器旁边。
我能够从应用程序内部启动 HTTP 流量,但是当尝试联系 Redis 服务器(另一个具有另一个特使代理的容器)时,我无法连接和接收 HTTP/1.1 400 Bad Request来自特使的消息。
在检查特使的日志时,每当此连接通过特使时,我都可以看到以下消息: HTTP/1.1" 0 - 0 0 0 "_"."_"."_"."_""
据我了解,Redis 命令使用纯 TCP 传输(无 HTTP)发送。Envoy 是否可能只希望看到 HTTP 流量并拒绝仅 TCP 流量?假设我的理解是正确的,有没有办法使用 Istio 改变这种行为并接受和处理通用 TCP 流量?
以下是我的相关部署yaml文件:
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: default
labels:
component: redis
role: client
spec:
selector:
app: redis
ports:
- name: http
port: 6379
targetPort: 6379
protocol: TCP
type: ClusterIP
apiVersion: extensions/v1beta1
kind: Deployment
metadata: …Run Code Online (Sandbox Code Playgroud)