Hi guys..

Ive very recently discovered the world of gRPC and im super enthusiastic 
about how i can use it.. Just so i can understand the potential benefits. i 
set up the following benchmark test..

track 1: JSON over http1 using a spring boot app running on a google 
compute engine.

public static void main(String[] args){
    HttpClient httpClient = HttpClientBuilder.create().build();

    ObjectMapper mapper = new ObjectMapper();

    try {
        long startTime = System.currentTimeMillis();
        for(int i=0;i<1000;i++) {
            MessageRequest value = new MessageRequest(new 
CharacterMessage(UUID.randomUUID(), new Vector(10, 20, 30)));

            HttpPost request = new HttpPost("http://[google compute engine 
ip]:8080/character");
            StringEntity params = new 
StringEntity(mapper.writeValueAsString(value));
            request.addHeader("content-type", "application/json");
            request.addHeader("Accept", "application/json");

            request.setEntity(params);
            HttpResponse response = httpClient.execute(request);
            BufferedReader br = new BufferedReader(new 
InputStreamReader((response.getEntity().getContent())));

            String output;
            StringBuilder sb = new StringBuilder();
            while ((output = br.readLine()) != null) {
                sb.append(output);
            }
            MessageResponse mr = mapper.readValue(sb.toString(), 
MessageResponse.class);
            System.out.println("Output from Server .... \n");
            System.out.println(mr.getCharacterMessage().getPossition());
        }

        System.out.println("all 
done!!:"+(System.currentTimeMillis()-startTime));
    }catch (Exception ex) {
        ex.printStackTrace();
    }


  track 2: proto buffer over http2 using grpc server running on google 
compute engine

public static void main(String[] args){
    ManagedChannel channel = ManagedChannelBuilder
            .forAddress("35.185.244.15", 8080)
            .usePlaintext(true)
            .build();

    CharacterServiceGrpc.CharacterServiceBlockingStub stub = 
CharacterServiceGrpc.newBlockingStub(channel);
    long startTime = System.currentTimeMillis();

    for(int i=0;i<1000;i++) {
        MessageResponse response = stub.updateCharacter(
                MessageRequest.newBuilder()
                        .setCharacterMessage(
                                CharacterMessage.newBuilder()
                                        
.setId(ByteString.copyFrom(asBytes(UUID.randomUUID())))
                                        .setPosstion(Vector.newBuilder()
                                                
.setX(10).setY(20).setZ(30).build())
                                        .build())
                        .build());

        System.out.println("response:" + 
response.getCharacterMessage().getPosstion());
    }

    System.out.println("finished message 
transfer:"+(System.currentTimeMillis()-startTime));
}

public static byte[] asBytes(UUID uuid) {
    ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
    bb.putLong(uuid.getMostSignificantBits());
    bb.putLong(uuid.getLeastSignificantBits());
    return bb.array();
}


So i ran both cases (each does a 1000) request from my place in New Zealand 
to us-west. I was obviously expecting the gRPC ro better.. But to my 
surprise (and disappointment) it didn't.. The JSON/HTTP1 completed in 
349270 milliseconds but the gRPC scenario took 364541 milliseconds to 
finish..
Can anyone explain what might be going on here?
I would have thought because http being binary more easy to parse and being 
more compact that it would do better than REST.. Maybe spring-boot is doing 
something clever? I do know that on a case like this you would use a stream 
and that finishes in 1974 milliseconds.. But i would have through that just 
call to call gRPC would do faster as well.

-- 
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 grpc-io+unsubscr...@googlegroups.com.
To post to this group, send email to grpc-io@googlegroups.com.
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/4575c546-9f0d-4735-8330-1b6be09aff7f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to