Use a fast serialization library like FST for serialization of TbActorMsg instead of the default java serialization because java serialization is notoriously slow.
This should improve throughput when serialization/deserialization is the bottleneck.
This commit is contained in:
parent
64d3006cb9
commit
768886d0f3
@ -41,6 +41,10 @@
|
|||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>de.ruedigermoeller</groupId>
|
||||||
|
<artifactId>fst</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.netty</groupId>
|
<groupId>io.netty</groupId>
|
||||||
<artifactId>netty-transport-native-epoll</artifactId>
|
<artifactId>netty-transport-native-epoll</artifactId>
|
||||||
@ -180,6 +184,10 @@
|
|||||||
<groupId>org.apache.curator</groupId>
|
<groupId>org.apache.curator</groupId>
|
||||||
<artifactId>curator-recipes</artifactId>
|
<artifactId>curator-recipes</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.zookeeper</groupId>
|
||||||
|
<artifactId>zookeeper</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.protobuf</groupId>
|
<groupId>com.google.protobuf</groupId>
|
||||||
<artifactId>protobuf-java</artifactId>
|
<artifactId>protobuf-java</artifactId>
|
||||||
@ -528,6 +536,16 @@
|
|||||||
</configuration>
|
</configuration>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
|
<id>boot</id>
|
||||||
|
<goals>
|
||||||
|
<goal>repackage</goal>
|
||||||
|
</goals>
|
||||||
|
<!--<configuration>-->
|
||||||
|
<!--<classifier>axians-custom</classifier>-->
|
||||||
|
<!--</configuration>-->
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>custom</id>
|
||||||
<goals>
|
<goals>
|
||||||
<goal>repackage</goal>
|
<goal>repackage</goal>
|
||||||
</goals>
|
</goals>
|
||||||
|
|||||||
@ -17,8 +17,8 @@ package org.thingsboard.server.service.encoding;
|
|||||||
|
|
||||||
import com.google.protobuf.ByteString;
|
import com.google.protobuf.ByteString;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nustaq.serialization.FSTConfiguration;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.SerializationUtils;
|
|
||||||
import org.thingsboard.server.common.msg.TbActorMsg;
|
import org.thingsboard.server.common.msg.TbActorMsg;
|
||||||
import org.thingsboard.server.common.msg.cluster.ServerAddress;
|
import org.thingsboard.server.common.msg.cluster.ServerAddress;
|
||||||
import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
|
import org.thingsboard.server.gen.cluster.ClusterAPIProtos;
|
||||||
@ -30,13 +30,14 @@ import static org.thingsboard.server.gen.cluster.ClusterAPIProtos.MessageType.CL
|
|||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class ProtoWithJavaSerializationDecodingEncodingService implements DataDecodingEncodingService {
|
public class ProtoWithFSTService implements DataDecodingEncodingService {
|
||||||
|
|
||||||
|
|
||||||
|
private final FSTConfiguration config = FSTConfiguration.createDefaultConfiguration();
|
||||||
@Override
|
@Override
|
||||||
public Optional<TbActorMsg> decode(byte[] byteArray) {
|
public Optional<TbActorMsg> decode(byte[] byteArray) {
|
||||||
try {
|
try {
|
||||||
TbActorMsg msg = (TbActorMsg) SerializationUtils.deserialize(byteArray);
|
TbActorMsg msg = (TbActorMsg) config.asObject(byteArray);
|
||||||
return Optional.of(msg);
|
return Optional.of(msg);
|
||||||
|
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
@ -47,7 +48,7 @@ public class ProtoWithJavaSerializationDecodingEncodingService implements DataDe
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] encode(TbActorMsg msq) {
|
public byte[] encode(TbActorMsg msq) {
|
||||||
return SerializationUtils.serialize(msq);
|
return config.asByteArray(msq);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
6
pom.xml
6
pom.xml
@ -84,6 +84,7 @@
|
|||||||
<delight-nashorn-sandbox.version>0.1.14</delight-nashorn-sandbox.version>
|
<delight-nashorn-sandbox.version>0.1.14</delight-nashorn-sandbox.version>
|
||||||
<kafka.version>2.0.0</kafka.version>
|
<kafka.version>2.0.0</kafka.version>
|
||||||
<bucket4j.version>4.1.1</bucket4j.version>
|
<bucket4j.version>4.1.1</bucket4j.version>
|
||||||
|
<fst.version>2.57</fst.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
@ -795,6 +796,11 @@
|
|||||||
<artifactId>bucket4j-core</artifactId>
|
<artifactId>bucket4j-core</artifactId>
|
||||||
<version>${bucket4j.version}</version>
|
<version>${bucket4j.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>de.ruedigermoeller</groupId>
|
||||||
|
<artifactId>fst</artifactId>
|
||||||
|
<version>${fst.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.springfox.ui</groupId>
|
<groupId>io.springfox.ui</groupId>
|
||||||
<artifactId>springfox-swagger-ui-rfc6570</artifactId>
|
<artifactId>springfox-swagger-ui-rfc6570</artifactId>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user