Hello All,
I am trying to see if I can use this framework in my project. I need to
know what should be my GRPC Server configuration to achieve low latency and
high throughput.
This is how I am starting a GRPC which is embedded in another Java Process.
I am not doing anything on the server side, and when I call this method for
1000000 times. I am getting
*Took 167 Seconds 167085714844 NanoSeconds*
This is certainly high, but I am sure I am doing something wrong in
configuring gRPC Server, Please help.
private void startGRPCService(GemFireCacheImpl cache) {
int port = system.getConfig().getRpcPort();
if ( this.isServerNode() && port != 0) {
try {
gRPCServer = NettyServerBuilder.forPort(port)
.addService(new MTableServiceImpl())
.channelType(NioServerSocketChannel.class)
.build()
.start();
} catch (IOException e) {
e.printStackTrace();
}
logger.info("GRPC Server started, listening on " + port);
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
// Use stderr here since the logger may have been reset by its JVM
shutdown hook.
System.err.println("*** shutting down gRPC server since JVM is shutting
down");
this.stopGRPCServer();
System.err.println("*** server shut down");
}
});
}
}
Service is implemented as follows, It does nothing but just returns a a
status.
public class MyServiceImpl extends MyServiceGrpc.MyServiceImplBase {
private static final Logger logger = LogService.getLogger();
@Override
public void tablePut(PutMessage request, StreamObserver<PutMessageReply>
responseObserver) {
PutMessageReply reply =
PutMessageReply.newBuilder().setStatus(PutMessageReply.OpStatus.SUCCESS).build();
responseObserver.onNext(reply);
responseObserver.onCompleted();
}
Client is implemented as follows
public class TableServiceClient {
private static final Logger logger = LogService.getLogger();
public static TableServiceClient INSTANCE = new TableServiceClient();
private Map<ServerLocation, TableServiceGrpc.TableServiceBlockingStub>
grpcConnectionMap = new HashMap<>();
private Random r = new Random();
private List<TableServiceGrpc.TableServiceBlockingStub> valuesList;
private int numberOfServers = 0;
private PutMessage.Builder putMessageBuilder = MPutMessage.newBuilder();
public TableServiceClient() {
this.valuesList = new ArrayList<>(grpcConnectionMap.values());
this.numberOfServers = valuesList.size();
}
private TableServiceGrpc.TableServiceBlockingStub getApplicableChannel() {
return this.valuesList.get(r.nextInt(this.numberOfServers));
}
public void put(final String tableName, MPut put, List<Integer>
columnPositions, byte[] value,)
{
TableServiceGrpc.TableServiceBlockingStub channel = getApplicableChannel();
this.putMessageBuilder.setKey(ByteString.copyFrom(put.getRowKey()))
.setValue(ByteString.copyFrom(value))
.setTableName(tableName);
for (Integer position : columnPositions) {
this.putMessageBuilder.addColumnPositions(position);
}
MPutMessage putMessage = this.putMessageBuilder.build();
MPutMessageReply response;
try {
response = channel.tablePut(putMessage);
} catch (StatusRuntimeException e) {
logger.warn("RPC failed: {0}", e.getStatus());
return;
}
this.putMessageBuilder.clear();
PutMessageReply.OpStatus status = response.getStatus();
}
}
Thanks
Avinash
--
You received this message because you are subscribed to the Google Groups
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit
https://groups.google.com/d/msgid/grpc-io/82bc46dd-1510-42e3-b333-224ebf12d728%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.