Hi Darshana - Would you be open to publish your results and methodology,
perhaps as a simple README, so others can benefit from your investigation ?

On Tue, May 16, 2017 at 10:06 AM, Dharshana Ratnayake <[email protected]>
wrote:

> Thanks Ray..
>
> That was it.. Added the warm up and now gRPC is consistently faster...
>
> Thanks for your help!!
>
>
> On Tuesday, 16 May 2017 22:40:01 UTC+12, Ray Tsang wrote:
>>
>> I suspect it's the gRPC startup time. Would you be able to test in the
>> following way, such as making the warm up requests first, and then
>> benchmark the subsequent requests post-warmup.
>>
>> There is also a benchmark that you can run / replicate here:
>> https://github.com/david-cao/gRPCBenchmarks
>>
>> Cheers,
>>
>> On Tuesday, May 16, 2017 at 10:24:36 AM UTC+2, Dharshana Ratnayake wrote:
>>>
>>> hmm sure memory allocation could be different.. but i suspect it could
>>> be something todo with
>>> PoolingHttpClientConnectionManager
>>> that im using in the REST scenario..
>>>
>>> On Tuesday, 16 May 2017 06:57:11 UTC+12, Dharshana Ratnayake wrote:
>>>>
>>>>
>>>> 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("[googgle compute engine ip]", 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 to do 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 [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/48dfb1d2-4845-4d74-afd2-83a30d9e233e%40googlegroups.com
> <https://groups.google.com/d/msgid/grpc-io/48dfb1d2-4845-4d74-afd2-83a30d9e233e%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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/CALCUQvjU-y%3DGfrPN8FC-rfppWfqYBo2mjLmd%3Dtc9c-njv%3DaLig%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to