Hi, thank you all for supporting this proposal!
Recently, I will split this huge PR to small PRs.

Thank you again!
- zhangjian

> 2024年5月30日 11:57,Xiaoqiao He <hexiaoq...@apache.org> 写道:
> 
> Great! It looks like there are no other nothing blockers.
> 
> @zhangjian <1361320...@qq.com> If no other furthermore comments, we should
> go to the next step:
> a. Create a dev branch for this proposal.
> b. Split this huge PR to some small JIRA and PRs.
> c. Involve some folks to review PR.
> 
> Please ping here if you need any help. Thanks again.
> Good Luck!
> 
> Best Regards,
> - He Xiaoqiao
> 
> On Wed, May 29, 2024 at 11:46 AM Ayush Saxena <ayush...@gmail.com> wrote:
> 
>> Thanx for the details, sounds cool, good luck with the feature!!!
>> 
>> -Ayush
>> 
>>> On 29 May 2024, at 8:56 AM, zhangjian <1361320...@qq.com> wrote:
>>> 
>>> Thank you for taking the time to review this proposal.
>>> Your opinion does point out the key issues to designing an asynchronous
>> router, but my proposal can address these issues:
>>> 1. My design does not affect the functionality of existing synchronous
>> routers in throwing stanby or retry exceptions and other aspects, the async
>> router still inherits these implementations.
>>> 2. Currently, both asynchronous router and sync router support
>> backpressure on client requests when they exceed a certain limit (
>>>  asynchronous router : cannot obtain semaphores through the handler,
>>>  sync router : block through handler synchronization, unable to obtain
>> available handler
>>>  )
>>> and return standby exception to allow the client to retry other routers
>> (RouterRpcFairnessPolicyController mechanism).
>>> 
>>> Thank you again!
>>> zhangjian
>>> 
>>>> 2024年5月29日 07:05,Ayush Saxena <ayush...@gmail.com> 写道:
>>>> Thanx folks, I had a very quick pass on the PDF and it looks good.
>>>> Maybe some doubts around the fact where it was mentioned that if a
>>>> Namenode returns a StandbyException or something on similar lines, the
>>>> Router will retry, I think we have some logic in RouterRpcClient
>>>> checking for such case, if it is StandByException it does try the
>>>> other Namenode, but for all other Retryable Exceptions, we return them
>>>> back to the client & let the client operate according to its Retry
>>>> Policy, I think we should preserve that behaviour, if the intentions
>>>> were to change it.
>>>> Regarding controlling the concurrency to prevent OOM at the router,
>>>> maybe we should consider rejecting the client requests beyond a
>>>> certain limit/backlog & return back a relevant Retriable Exception to
>>>> the client, so that it can retry on another Router rather than
>>>> overloading one Router when there are other available, most of the
>>>> deployments I believe would be running considerable number of Routers
>>>> Rest I scratched my head for possible scenario where things can go
>>>> south, but I think mostly the scenarios that came into my mind are
>>>> covered
>>>> Nothing blocker from my side, Good Luck!!!
>>>> -Ayush
>>>>> On Tue, 28 May 2024 at 21:52, Sangjin Lee <sj...@apache.org> wrote:
>>>>> Sounds good. Thanks for sharing your findings.
>>>>> On Sat, May 25, 2024 at 2:24 AM zhangjian <1361320...@qq.com> wrote:
>>>>>> Hello everyone, I conducted a performance comparison test between
>> sync and asynchronous router, and the test results showed that in single ns
>> or multi ns scenarios, Asynchronous router in terms of throughput The
>> utilization of CPU and thread, as well as the average processing time of
>> client requests, are better than those of sync router, especially when
>> downstream ns have performance bottlenecks, The performance of the async
>> router is far greater than that of the sync router; And in terms of
>> isolation, Asynchronous router is also better than sync router.
>>>>>> Detailed testing PDF:
>> https://issues.apache.org/jira/browse/HDFS-17531  Comparison of Async
>> router & sync router performance.pdf
>>>>>> 2024年5月24日 14:13,Yuanbo Liu <liuyuanb...@gmail.com> 写道:
>>>>>> good job!
>>>>>> On Fri, May 24, 2024 at 1:57 AM zhangjian <1361320...@qq.com> wrote:
>>>>>>> Hello everyone, currently, I have tested the performance of async
>> and sync router for a downstream ns:
>>>>>>> 1. The throughput, CPU, and thread performance of the async router
>> are better than those of the sync router, and its memory performance is
>> within an acceptable range compared to the synchronous router.
>>>>>>> 2. Asynchronous router can apply pressure downstream to better
>> utilize the performance of downstream ns, and can almost fill the call
>> queue of downstream ns.
>>>>>>> Due to the large size of the test result pdf, it cannot be sent via
>> email,
>>>>>>> please see: https://issues.apache.org/jira/browse/HDFS-17531
>>>>>>>> 2024年5月23日 17:03,Xiaoqiao He <hexiaoq...@apache.org> 写道:
>>>>>>>> Great. Thanks for your addendum information.
>>>>>>>> cc @Ayush Saxena <ayush...@gmail.com> @inigo...@apache.org
>>>>>>>> <inigo...@apache.org> Any more feedback for this proposal?
>>>>>>>> IMO The feature of asynchronous router RPC is a helpful
>> improvement. For my
>>>>>>>> internal practice, it will improve the throughput of requests
>> forward
>>>>>>>> significantly
>>>>>>>> and is very valuable to push it forward.
>>>>>>>> Thanks again and good luck!
>>>>>>>> Best Regards,
>>>>>>>> - He Xiaoqiao
>>>>>>>> On Wed, May 22, 2024 at 9:59 AM zhangjian <1361320...@qq.com>
>> wrote:
>>>>>>>>> Hi, Sangjin Lee, thank you for your attention. I will use my free
>> time to
>>>>>>>>> do a performance comparison recently.
>>>>>>>>>> 2024年5月22日 03:42,Sangjin Lee <sj...@apache.org> 写道:
>>>>>>>>>> Thanks for the great proposal, Zhangjian. On point #3, I suspect
>> it
>>>>>>>>> should
>>>>>>>>>> be fairly straightforward to create a small isolated synthetic
>> test to
>>>>>>>>>> prove (or disprove) the benefits of this approach. By driving a
>>>>>>>>> controlled
>>>>>>>>>> amount of requests per second, you could see latency, memory,
>> CPU, etc.
>>>>>>>>>> Ideally, it should show meaningful improvements without much
>> degradation
>>>>>>>>> in
>>>>>>>>>> other metrics. Would you be able to spend some time doing that?
>>>>>>>>>> Thanks,
>>>>>>>>>> Sangjin
>>>>>>>>>> On Tue, May 21, 2024 at 5:13 AM zhangjian
>> <1361320...@qq.com.invalid>
>>>>>>>>> wrote:
>>>>>>>>>>> Hi, xiaoqiao he, thank you for your reply.
>>>>>>>>>>> 1.Currently, the server and client protocols within router can be
>>>>>>>>>>> implemented by extends existing protocols and adding asynchronous
>>>>>>>>>>> functionality, so it will not affect existing synchronization
>> protocols.
>>>>>>>>>>> RouterClientNamenodeProtocolServerSideTranslatorPB
>>>>>>>>>>> RouterClientProtocolTranslatorPB
>>>>>>>>>>> RouterGetUserMappingsProtocolServerSideTranslatorPB
>>>>>>>>>>> RouterGetUserMappingsProtocolTranslatorPB
>>>>>>>>>>> RouterNamenodeProtocolServerSideTranslatorPB
>>>>>>>>>>> RouterNamenodeProtocolTranslatorPB
>>>>>>>>>>> RouterRefreshUserMappingsProtocolServerSideTranslatorPB
>>>>>>>>>>> RouterRefreshUserMappingsProtocolTranslatorPB
>>>>>>>>>>> The following issues have implemented asynchronous callbacks for
>>>>>>>>>>> Rpc.server, but I have not found any other modules to use related
>>>>>>>>> functions
>>>>>>>>>>> Server HADOOP-11552 HADOOP-17046
>>>>>>>>>>> In the implementation of asynchronous Rpc.client, this issue is
>> directly
>>>>>>>>>>> used
>>>>>>>>>>> Client HADOOP-13226
>>>>>>>>>>> Therefore, I believe that asynchronous routers are safe for
>> modifying
>>>>>>>>> the
>>>>>>>>>>> RPC protocol, RPC server, and client
>>>>>>>>>>> 2. Forwarding requests to multiple downstream ns, the
>> synchronous router
>>>>>>>>>>> handler adds requests from multiple downstream ns to the thread
>> pool
>>>>>>>>>>> (RouterRpcClient.executorService), and then waits for responses
>> from all
>>>>>>>>>>> downstream ns before returning. Since threads in the thread pool
>> also
>>>>>>>>>>> process rpc requests synchronously, similar to a handler, the
>> number of
>>>>>>>>>>> threads in the thread pool directly affects the performance of
>>>>>>>>>>> invoiceConcurrent, which in turn affects the performance of the
>> handler.
>>>>>>>>>>> In asynchronous router implementation, the handler calls
>>>>>>>>> invoiceConcurrent
>>>>>>>>>>> to simply convert a request into multiple requests and add them
>> to the
>>>>>>>>> asyn
>>>>>>>>>>> handler thread pool, which can then process the next request in
>> the call
>>>>>>>>>>> queue; When a connection thread of a downstream ns receives a
>> response,
>>>>>>>>> it
>>>>>>>>>>> will hand it over to the async response for processing. The async
>>>>>>>>> response
>>>>>>>>>>> thread will determine whether it has received all responses from
>> the
>>>>>>>>>>> downstream ns. If it does, it will continue to process the
>> response.
>>>>>>>>>>> Otherwise, the async response thread will process the next
>> response. The
>>>>>>>>>>> asynchronous router uses CompletableFuture.allOf() to implement
>>>>>>>>>>> asynchronous invoiceConcurrent, and the handler, async handler,
>> async
>>>>>>>>>>> response, and connection thread still does not need to wait
>>>>>>>>> synchronously.
>>>>>>>>>>> In addition, synchronous routers not only have drawbacks in
>> multi ns
>>>>>>>>>>> environments, but also in single downstream ns situations, it is
>> often
>>>>>>>>>>> difficult to decide how many handlers to set for the router,
>> setting it
>>>>>>>>> too
>>>>>>>>>>> much will waste thread resources, and setting it too small will
>> not be
>>>>>>>>> able
>>>>>>>>>>> to give pressure to downstream ns; Asynchronous routers can push
>>>>>>>>> requests
>>>>>>>>>>> to downstream ns without considering how to set handlers.
>> Asynchronous
>>>>>>>>>>> routers can also better connect to more downstream storage
>> services that
>>>>>>>>>>> support the HDFS protocol, with better scalability.
>>>>>>>>>>> 3.Since I have not yet deployed asynchronous routers to our own
>> cluster,
>>>>>>>>>>> there is no performance comparison. However, theoretically, I
>> believe
>>>>>>>>> that
>>>>>>>>>>> asynchronous routers will occupy more memory than synchronous
>> routers.
>>>>>>>>>>> However, I do not believe that it will occupy a lot, especially
>> since we
>>>>>>>>>>> can control the maximum number of requests entering the router,
>> as
>>>>>>>>>>> CompletableFuture is stable and widely used; In other aspects, it
>>>>>>>>> should be
>>>>>>>>>>> far superior to synchronous routers, especially in downstream
>> scenarios
>>>>>>>>>>> with more ns.If anyone is interested, you can also help to make a
>>>>>>>>>>> performance comparison
>>>>>>>>>>>> 2024年5月21日 11:39,Xiaoqiao He <hexiaoq...@apache.org> 写道:
>>>>>>>>>>>> Thanks for this great proposal!
>>>>>>>>>>>> Some questions after reviewing the design doc (sorry didn't
>> review PR
>>>>>>>>>>>> carefully which is too large.)
>>>>>>>>>>>> 1. This solution will involve RPC framework update, will it
>> affect
>>>>>>>>> other
>>>>>>>>>>>> modules and how to
>>>>>>>>>>>> keep other modules off these changes.
>>>>>>>>>>>> 2. Some RPC requests should be forward concurrently to all
>> downstream
>>>>>>>>> NS,
>>>>>>>>>>>> will it cover
>>>>>>>>>>>> this case in this solution.
>>>>>>>>>>>> 3. Considering there is one init-version implementation, did you
>>>>>>>>> collect
>>>>>>>>>>>> some benchmark vs
>>>>>>>>>>>> the current synchronous model of DFSRouter?
>>>>>>>>>>>> Thanks again.
>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>> - He Xiaoqiao
>>>>>>>>>>>> On Tue, May 21, 2024 at 11:21 AM zhangjian
>> <1361320...@qq.com.invalid>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> Thank you for your positive attitude towards this feature. You
>> can
>>>>>>>>> debug
>>>>>>>>>>>>> the UTs provided in PR to better understand the current
>> asynchronous
>>>>>>>>>>>>> calling function.
>>>>>>>>>>>>>> 2024年5月21日 02:04,Simbarashe Dzinamarira <
>> simbadz...@apache.org> 写道:
>>>>>>>>>>>>>> Excited to see this feature as well. I'll spend more time
>>>>>>>>> understanding
>>>>>>>>>>>>> the
>>>>>>>>>>>>>> proposal and implementation.
>>>>>>>>>>>>>> On Mon, May 20, 2024 at 7:55 AM zhangjian
>> <1361320...@qq.com.invalid
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> Hi, Yuanbo liu,  thank you for your interest in this
>> feature, I
>>>>>>>>> think
>>>>>>>>>>>>> the
>>>>>>>>>>>>>>> difficulty of an asynchronous router is not only to implement
>>>>>>>>>>>>> asynchronous
>>>>>>>>>>>>>>> functions, but also to consider the readability and
>> reusability of
>>>>>>>>> the
>>>>>>>>>>>>>>> code, so as to facilitate the development of the community.
>> I also
>>>>>>>>>>>>> planned
>>>>>>>>>>>>>>> to do the virtual thread you mentioned at the beginning,
>> virtual
>>>>>>>>>>> Threads
>>>>>>>>>>>>>>> can achieve asynchronousization elegantly at the code level,
>> but the
>>>>>>>>>>>>>>> biggest problem is that it is not easy to upgrade the jdk
>> version,
>>>>>>>>> no
>>>>>>>>>>>>>>> matter in the community or in the actual production
>> environment.
>>>>>>>>>>>>> Therefore,
>>>>>>>>>>>>>>> I later used CompletableFuture, which is currently supported
>> by jdk
>>>>>>>>> 8,
>>>>>>>>>>>>> to
>>>>>>>>>>>>>>> achieve asynchronousization. The router is stateless, and
>> the router
>>>>>>>>>>> rpc
>>>>>>>>>>>>>>> process is very clear. Therefore, even if CompletableFuture
>> itself
>>>>>>>>> is
>>>>>>>>>>>>> not
>>>>>>>>>>>>>>> as readable as the virtual thread, if we design it well, we
>> can make
>>>>>>>>>>> the
>>>>>>>>>>>>>>> asynchronous process look very clear.
>>>>>>>>>>>>>>>> 2024年5月20日 10:56,Yuanbo Liu <liuyuanb...@gmail.com> 写道:
>>>>>>>>>>>>>>>> Nice to see this feature brought up. I tried to implement
>> this
>>>>>>>>>>> feature
>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>> our internal clusters, and know that it's a very complicated
>>>>>>>>> feature,
>>>>>>>>>>>>> CC
>>>>>>>>>>>>>>>> hdfs-dev to bring more discussion.
>>>>>>>>>>>>>>>> By the way, I'm not sure whether virtual thread of higher
>> jdk will
>>>>>>>>>>> help
>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>> this case.
>>>>>>>>>>>>>>>> On Mon, May 20, 2024 at 10:10 AM zhangjian
>>>>>>>>> <1361320...@qq.com.invalid
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>> Hello everyone, currently there are some shortcomings in
>> the RPC
>>>>>>>>> of
>>>>>>>>>>>>> HDFS
>>>>>>>>>>>>>>>>> router:
>>>>>>>>>>>>>>>>> Currently the router's handler thread is synchronized,
>> when the
>>>>>>>>>>>>>>> *handler* thread
>>>>>>>>>>>>>>>>> adds the call to connection.calls, it needs to wait until
>> the
>>>>>>>>>>>>>>> *connection* notifies
>>>>>>>>>>>>>>>>> the call to complete, and then Only after the response is
>> put into
>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> response queue can a new call be obtained from the call
>> queue and
>>>>>>>>>>>>>>>>> processed. Therefore, the concurrency performance of the
>> router is
>>>>>>>>>>>>>>> limited
>>>>>>>>>>>>>>>>> by the number of handlers; a simple example is as follows:
>> If the
>>>>>>>>>>>>>>> number of
>>>>>>>>>>>>>>>>> handlers is 1 and the maximum number of calls in the
>> connection
>>>>>>>>>>> thread
>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>> 10, then even if the connection thread can send 10
>> requests to the
>>>>>>>>>>>>>>>>> downstream ns, since the number of handlers is 1, the
>> router can
>>>>>>>>>>> only
>>>>>>>>>>>>>>>>> process one request after another.
>>>>>>>>>>>>>>>>> Since the performance of router rpc is mainly limited by
>> the
>>>>>>>>> number
>>>>>>>>>>> of
>>>>>>>>>>>>>>>>> handlers, the most effective way to improve rpc performance
>>>>>>>>>>> currently
>>>>>>>>>>>>>>> is to
>>>>>>>>>>>>>>>>> increase the number of handlers. Letting the router create
>> a large
>>>>>>>>>>>>>>> number
>>>>>>>>>>>>>>>>> of handler threads will also increase the number of thread
>>>>>>>>> switches
>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>> cannot maximize the use of machine performance.
>>>>>>>>>>>>>>>>> There are usually multiple ns downstream of the router. If
>> the
>>>>>>>>>>> handler
>>>>>>>>>>>>>>>>> forwards the request to an ns with poor performance, it
>> will cause
>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> handler to wait for a long time. Due to the reduction of
>> available
>>>>>>>>>>>>>>>>> handlers, the router's ability to handle ns requests with
>> normal
>>>>>>>>>>>>>>>>> performance will be reduced. From the perspective of the
>> client,
>>>>>>>>> the
>>>>>>>>>>>>>>>>> performance of the downstream ns of the router has
>> deteriorated at
>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>> time. We often find that the call queue of the downstream
>> ns is
>>>>>>>>> not
>>>>>>>>>>>>>>> high,
>>>>>>>>>>>>>>>>> but the call queue of the router is very high.
>>>>>>>>>>>>>>>>> Therefore, although the main function of the router is to
>> federate
>>>>>>>>>>> and
>>>>>>>>>>>>>>>>> handle requests from multiple NSs, the current synchronous
>> RPC
>>>>>>>>>>>>>>> performance
>>>>>>>>>>>>>>>>> cannot satisfy the scenario where there are many NSs
>> downstream of
>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> router. Even if the concurrent performance of the router
>> can be
>>>>>>>>>>>>>>> improved by
>>>>>>>>>>>>>>>>> increasing the number of handlers, it is still relatively
>> slow.
>>>>>>>>> More
>>>>>>>>>>>>>>>>> threads will increase the CPU context switching time, and
>> in fact
>>>>>>>>>>> many
>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>> the handler threads are in a blocked state, which is
>> undoubtedly a
>>>>>>>>>>>>>>> waste of
>>>>>>>>>>>>>>>>> thread resources. When a request enters the router, there
>> is no
>>>>>>>>>>>>>>> guarantee
>>>>>>>>>>>>>>>>> that there will be a running handler at this time.
>>>>>>>>>>>>>>>>> Therefore, I consider asynchronous router rpc. Please view
>> the
>>>>>>>>>>> issues:
>>>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/HDFS-17531  for the
>>>>>>>>> complete
>>>>>>>>>>>>>>>>> solution.
>>>>>>>>>>>>>>>>> And you can also view this PR:
>>>>>>>>>>>>>>> https://github.com/apache/hadoop/pull/6838,
>>>>>>>>>>>>>>>>> which is just a demo, but it completes the core
>> asynchronous RPC
>>>>>>>>>>>>>>> function.
>>>>>>>>>>>>>>>>> If you think asynchronous routing is feasible, we can
>> consider
>>>>>>>>>>>>> splitting
>>>>>>>>>>>>>>>>> this PR for easy review in the future.
>>>>>>>>>>>>>>>>> The PDF is attached and can also be viewed through issues.
>>>>>>>>>>>>>>>>> Welcome everyone to exchange and discuss!
>>>>>>>>> 
>> ---------------------------------------------------------------------
>>>>>>>>>>>>>>> To unsubscribe, e-mail:
>> common-dev-unsubscr...@hadoop.apache.org
>>>>>>>>>>>>>>> For additional commands, e-mail:
>> common-dev-h...@hadoop.apache.org
>>>>>>>>>>>>> 
>> ---------------------------------------------------------------------
>>>>>>>>>>>>> To unsubscribe, e-mail: hdfs-dev-unsubscr...@hadoop.apache.org
>>>>>>>>>>>>> For additional commands, e-mail:
>> hdfs-dev-h...@hadoop.apache.org
>>>>>>>>>>> 
>> ---------------------------------------------------------------------
>>>>>>>>>>> To unsubscribe, e-mail: common-dev-unsubscr...@hadoop.apache.org
>>>>>>>>>>> For additional commands, e-mail:
>> common-dev-h...@hadoop.apache.org
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: hdfs-dev-unsubscr...@hadoop.apache.org
>>>> For additional commands, e-mail: hdfs-dev-h...@hadoop.apache.org
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: common-dev-unsubscr...@hadoop.apache.org
>> For additional commands, e-mail: common-dev-h...@hadoop.apache.org
>> 
>> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: common-dev-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-dev-h...@hadoop.apache.org

Reply via email to