Having alternative backends for Flight has been a goal from the start, hence why gRPC is wrapped and generally not exposed to the user. I would be interested in collaborating on an HTTP/1 backend that is accessible from the browser (or via an alternative transport meeting the same requirements, e.g. WebSockets).
In terms of tuning gRPC, taking a performance profile would be useful. I remember there are some TODOs on the C++ side about copies that sometimes occur due to gRPC that we don't quite understand yet. I spent quite a bit of time a while ago trying to tune gRPC, but like Antoine, couldn't find any easy wins. Best, David On 4/24/20, Antoine Pitrou <anto...@python.org> wrote: > > Hi Jiajia, > > I see. I think there are two possible avenues to try and improve this: > > * better use gRPC in the hope of achieving higher performance. This > doesn't seem to be easy, though. I've already tried to change some of > the parameters listed here, but didn't get any benefits: > https://grpc.github.io/grpc/cpp/group__grpc__arg__keys.html > > (perhaps there are other, lower-level APIs that we should use? I don't > know) > > * take the time to design and start implementing another I/O backend for > Flight. gRPC is just one possible backend, but the Flight remote API is > simple enough that we could envision other backends (for example a HTTP > REST-like API). If you opt for this, I would strongly suggest start the > discussion on the mailing-list in order to coordinate with other > developers. > > Best regards > > Antoine. > > > Le 24/04/2020 à 19:16, Li, Jiajia a écrit : >> Hi Antoine, >> >>> The question, though, is: do you *need* those higher speeds on localhost? >>> In which context are you considering Flight? >> >> We want to send large data(in cache) to the data analytic application(in >> local). >> >> Thanks, >> Jiajia >> >> -----Original Message----- >> From: Antoine Pitrou <anto...@python.org> >> Sent: Saturday, April 25, 2020 1:01 AM >> To: dev@arrow.apache.org >> Subject: Re: Question regarding Arrow Flight Throughput >> >> >> Hi Jiajia, >> >> It's true one should be able to reach higher speeds. For example, I can >> reach more than 7 GB/s on a simple TCP connection, in pure Python, using >> only two threads: >> https://gist.github.com/pitrou/6cdf7bf6ce7a35f4073a7820a891f78e >> >> The question, though, is: do you *need* those higher speeds on localhost? >> In which context are you considering Flight? >> >> Regards >> >> Antoine. >> >> >> Le 24/04/2020 à 18:52, Li, Jiajia a écrit : >>> Hi Antoine, >>> >>> I think here 5 GB/s is in localhost. As localhost does not depend on >>> network speed and I've checked the CPU is not the bottleneck when running >>> benchmark, I think flight can get a higher throughput. >>> >>> Thanks, >>> Jiajia >>> >>> -----Original Message----- >>> From: Antoine Pitrou <anto...@python.org> >>> Sent: Friday, April 24, 2020 5:47 PM >>> To: dev@arrow.apache.org >>> Subject: Re: Question regarding Arrow Flight Throughput >>> >>> >>> The problem with gRPC is that it was designed with relatively small >>> requests and payloads in mind. We're using it for a large data >>> application which it wasn't optimized for. Also, its threading model is >>> inscrutable (yielding those weird benchmark results). >>> >>> However, 5 GB/s is indeed very good if between different machines. >>> >>> Regards >>> >>> Antoine. >>> >>> >>> Le 24/04/2020 à 05:15, Wes McKinney a écrit : >>>> On Thu, Apr 23, 2020 at 10:02 PM Wes McKinney <wesmck...@gmail.com> >>>> wrote: >>>>> >>>>> hi Jiajia, >>>>> >>>>> See my TODO here >>>>> >>>>> https://github.com/apache/arrow/blob/master/cpp/src/arrow/flight/fli >>>>> g >>>>> ht_benchmark.cc#L182 >>>>> >>>>> My guess is that if you want to get faster throughput with multiple >>>>> cores, you need to run more than one server and serve on different >>>>> ports rather than having all threads go to the same server through >>>>> the same port. I don't think we've made any manycore scalability >>>>> claims, though. >>>>> >>>>> I tried to run this myself but I can't get the benchmark executable >>>>> to run on my machine right now -- this seems to be a regression. >>>>> >>>>> https://issues.apache.org/jira/browse/ARROW-8578 >>>> >>>> This turned out to be a false alarm and went away after a reboot. >>>> >>>> On my laptop a single thread is faster than multiple threads making >>>> requests to a sole server, so this supports the hypothesis that >>>> concurrent requests on the same port does not increase throughput. >>>> >>>> $ ./release/arrow-flight-benchmark -num_threads 1 >>>> Speed: 5131.73 MB/s >>>> >>>> $ ./release/arrow-flight-benchmark -num_threads 16 >>>> Speed: 4258.58 MB/s >>>> >>>> I'd suggest improving the benchmark executable to spawn multiple >>>> servers as the next step to study multicore throughput. That said >>>> with the above being ~40gbps already it's unclear how higher >>>> throughput can go realistically. >>>> >>>> >>>>> >>>>> - Wes >>>>> >>>>> On Thu, Apr 23, 2020 at 8:17 PM Li, Jiajia <jiajia...@intel.com> >>>>> wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> I have some doubts about arrow flight throughput. In this >>>>>> article(https://www.dremio.com/understanding-apache-arrow-flight/), >>>>>> it said "High efficiency. Flight is designed to work without any >>>>>> serialization or deserialization of records, and with zero memory >>>>>> copies, achieving over 20 Gbps per core." And in the other article >>>>>> (https://arrow.apache.org/blog/2019/10/13/introducing-arrow-flight/), >>>>>> it said "As far as absolute speed, in our C++ data throughput >>>>>> benchmarks, we are seeing end-to-end TCP throughput in excess of >>>>>> 2-3GB/s on localhost without TLS enabled. This benchmark shows a >>>>>> transfer of ~12 gigabytes of data in about 4 seconds:" >>>>>> >>>>>> Here 20 Gbps /8 = 2.5GB/s, does it mean if we test benchmark in a >>>>>> server with two cores, the throughput will be 5 GB/s? But I have run >>>>>> the arrow-flight-benchmark, my server with 40 cores, but the result is >>>>>> " Speed: 2420.82 MB/s" . >>>>>> >>>>>> So what should I do to increase the throughput? Please correct me if I >>>>>> am wrong. Thank you in advance! >>>>>> >>>>>> Thanks, >>>>>> Jiajia >>>>>> >>>>>> >>>>>> >