Hi @zhangjian <1361320...@qq.com> , the dev branch HDFS-17531 is ready now. FYI.
Best Regards, - He Xiaoqiao On Tue, Jun 4, 2024 at 10:08 PM zhangjian <1361320...@qq.com> wrote: > Hi, Xiaoqiao He: > Can you help create a dev branch? I don't have the permission to create > it. > > Thank you very much. > - 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 > >> > >> > > > >