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.
