基于HDFSRBF路由层实现负载均衡方法、装置与流程

文档序号:27758236发布日期:2021-12-03 22:55阅读:1092来源:国知局
基于HDFSRBF路由层实现负载均衡方法、装置与流程
基于hdfs rbf路由层实现负载均衡方法、装置
技术领域
1.本发明涉及分布式文件系统负载均衡技术领域,具体涉及一种基于hdfs rbf路由层实现负载均衡方法、装置。


背景技术:

2.hdfs rbf:hdfs表示hadoop分布式文件系统,指一套能够部署在廉价机器上并且可提供高度容错性的大型分布式文件存储系统。hdfs rbf全称为hdfs router based federation,是hdfs一种基于路由联邦模式的多集群技术和部署架构,主要由router(路由服务)对多个集群进行路由转发。
3.hadoop是一个由apache基金会所开发的分布式系统基础架构,hadoop主要实现了一个分布式文件系统hdfs、分布式计算框架mapreduce和分布式资源调度管理框架yarn,其中hdfs有高容错性的特点,并且设计用来部署在低廉的硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。可以以流的形式访问文件系统中的数据。事实上该系统实现的hdfs已被公众认为是大数据存储的标准。
4.随着hdfs规模化应用的深入,社区人员对其架构的逐步完善,一种基于路由联邦的新型架构设计逐步实现,解决了单一集群无法满足所有应用的场景。通过router将多个集群通过联邦管理,同时对用户透明使用。现有技术中hdfs客户端可以设置router为多个节点,但是在选择哪个router作为服务路由没有较好的解决办法,当前在router选择上只有默认随机方式,但是在高并发时候会出现某些router节点负载较高,而某些router节点负载较低的情况。


技术实现要素:

5.现有技术中hdfs客户端可以设置router为多个节点,但是在选择哪个router作为服务路由没有较好的解决办法,当前在router选择上只有默认随机方式,但是在高并发时候会出现某些router节点负载较高,而某些router节点负载较低的情况,针对上述router接收到的请求不均衡的问题,本发明提供一种基于hdfs rbf路由层实现负载均衡方法、装置。
6.本发明的技术方案是:
7.一方面,本发明技术方案提供一种基于hdfs rbf路由层实现负载均衡方法,包括如下步骤:
8.通过设置客户端配置项的值设置客户端路由选择策略;
9.读取设置的路由选择策略的值;
10.根据读取的值调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端。
11.应用于hdfs rbf模式下的集群路由层服务,可通过配置不同客户端选择策略解决路由服务的负载均衡问题。
12.进一步的,所述的读取设置的路由选择策略的值的步骤包括:
13.根据设置的路由选择策略加载配置文件;
14.读取配置文件中选择策略对应的值。
15.进一步的,所述的根据读取的值调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端的步骤包括:
16.根据读取的值反射出路由选择策略对应的类,加载反射出的类中的初始化方法,初始化客户端路由对象;
17.客户端路由对象遍历本地配置项中所有已配置的路由服务地址,获取路由服务地址组成地址列表;
18.将客户端路由对象以及地址列表传递给路由服务;
19.根据客户端路由对象中的类调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端。
20.在java中根据读取的值反射出路由选择策略对应的类,加载反射出的类中的初始化方法执行选择的路由选择策略选择出一个路由服务地址。
21.进一步的,路由选择策略包括主机负载策略、连接数策略、轮询访问策略;
22.所述的主机负载策略,根据所有路由服务节点cpu利用率,选择cpu利用率值最小的路由服务节点的策略;
23.连接数策略,根据当前路由服务节点的客户端连接数,选择连接数最少的路由服务节点的策略;
24.轮询访问策略,客户端对所有路由服务节点排序并做序号标记,按照顺序轮询连接路由服务节点的策略。
25.配置不同客户端选择策略可解决路由服务的负载均衡问题。
26.进一步的,当步骤通过设置客户端配置项的值设置客户端路由选择策略中,设置的路由选择策略为主机负载策略时,所述的根据客户端路由对象中的类调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端的步骤包括:
27.获取所有路由服务节点的cpu利用率值;
28.对每个路由服务节点的cpu利用率值由小到大做排序处理;
29.取排序的索引最小值即cpu利用率值最小的路由服务地址返回给客户端。
30.进一步的,所述的获取所有路由服务节点的cpu利用率值的步骤包括:
31.获取每个路由服务节点的路由服务对象;
32.通过路由服务对象获取每个路由服务节点的监控信息;
33.在每个路由服务节点的监控信息中取cpu利用率值。
34.进一步的,当步骤通过设置客户端配置项的值设置客户端路由选择策略中,设置的路由选择策略为连接数策略时,所述的根据客户端路由对象中的类调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端的步骤包括:
35.获取每个路由服务节点的客户端连接数;
36.对路由服务节点的客户端连接数由小到大进行排序;
37.取排序的索引最小值即客户端连接数最小的路由服务地址返回给客户端。
38.进一步的,所述的获取每个路由服务节点的客户端连接数的步骤包括:
39.获取每个路由服务节点的路由服务对象;
40.通过路由服务对象获取每个路由服务节点的客户端连接数。
41.进一步的,当步骤通过设置客户端配置项的值设置客户端路由选择策略中,设置的路由选择策略为轮询访问策略时,所述的根据客户端路由对象中的类调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端的步骤包括:
42.缓存所有路由服务节点的索引信息列表;
43.查找上一次所连接的路由服务节点的索引信息;
44.判断所述索引信息是否存在;
45.若是,将该索引位置的下一个索引信息更新到客户端缓存中,同时将更新到客户端缓存的索引位置的路由服务地址返回给客户端;
46.若否,将索引信息列表中的第一个索引位置的路由服务地址返回给客户端。
47.进一步的,该方法还包括:
48.客户端接收到返回的路由服务地址后,连接到该路由服务地址。
49.hdfs rbf模式下多个子集群通过路由服务连接,路由服务实现了hdfs节点的客户端连接协议,每个子集群会有两个或多个路由服务,多个子集群通过一组路由服务通信联邦,对外形成一个基于路由服务的联邦集群。本方案中客户端连接集群通过随机方式访问服务路由然后通过服务路由代理连接集群。本发明中提出可配置的客户端选择服务路由的策略,实现了三种不同的选择策略,可解决路由服务的负载均衡问题。
50.另一方面,本发明技术方案还提供一种基于hdfs rbf路由层实现负载均衡装置,包括路由选择策略配置模块、策略读取模块、处理返回模块;
51.选择策略配置模块,用于通过设置客户端配置项的值设置客户端路由选择策略;
52.策略读取模块,用于读取设置的路由选择策略的值;
53.处理返回模块,用于根据读取的值调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端。
54.进一步的,策略读取模块包括加载单元、读取单元;
55.加载单元,用于根据设置的路由选择策略加载配置文件;
56.读取单元,用于读取配置文件中选择策略对应的值。
57.进一步的,该装置还包括路由对象生成模块、传递模块;
58.路由对象生成模块,用于根据读取的值反射出路由选择策略对应的类,加载反射出的类中的初始化方法,初始化客户端路由对象;客户端路由对象遍历本地配置项中所有已配置的路由服务地址,获取路由服务地址组成地址列表;
59.传递模块,用于将客户端路由对象以及地址列表传递给路由服务;
60.处理返回模块,具体用于根据客户端路由对象中的类调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端。
61.进一步的,路由选择策略包括主机负载策略、连接数策略、轮询访问策略;
62.所述的主机负载策略,根据所有路由服务节点cpu利用率,选择cpu利用率值最小的路由服务节点的策略;
63.连接数策略,根据当前路由服务节点的客户端连接数,选择连接数最少的路由服务节点的策略;
64.轮询访问策略,客户端对所有路由服务节点排序并做序号标记,按照顺序轮询连接路由服务节点的策略。
65.进一步的,当选择策略配置模块设置的路由选择策略为主机负载策略时,处理返回模块包括负载值获取单元、处理单元、返回单元;
66.负载值获取单元,用于获取所有路由服务节点的cpu利用率值;
67.处理单元,用于对每个路由服务节点的cpu利用率值由小到大做排序处理;
68.返回单元,用于取排序的索引最小值即cpu利用率值最小的路由服务地址返回给客户端。
69.进一步的,负载值获取单元,具体用于获取每个路由服务节点的路由服务对象;通过路由服务对象获取每个路由服务节点的监控信息,在每个路由服务节点的监控信息中取cpu利用率值。
70.进一步的,当选择策略配置模块设置的路由选择策略为连接数策略时,处理返回模块还包括连接数获取单元;
71.连接数获取单元,用于获取每个路由服务节点的客户端连接数;
72.处理单元,用于将获取到路由服务节点的客户端连接数由小到大进行排序;
73.返回单元,用于取排序的索引最小值即客户端连接数最小的路由服务地址返回给客户端。
74.进一步的,所述连接数获取单元,具体用于获取每个路由服务节点的路由服务对象,通过路由服务对象获取每个路由服务节点的客户端连接数。
75.进一步的,当选择策略配置模块设置的路由选择策略为轮询访问策略时,该装置还包括执行模块,用于将所有路由服务节点的索引信息列表缓存到客户端缓存中;
76.处理返回模块还包括查找判断单元和更新单元;
77.查找判断单元,用于查找上一次所连接的路由服务节点的索引信息,判断所述索引信息是否存在;
78.更新单元,用于若查找判断单元判断索引信息存在,将该索引信息所在索引位置的下一个索引信息更新到客户端缓存中,同时返回单元将更新到客户端缓存的索引位置的路由服务地址返回给客户端;
79.返回单元,还用于若查找判断单元判断索引信息不存在时,将索引信息列表中的第一个索引位置的路由服务地址返回给客户端。
80.从以上技术方案可以看出,本发明具有以下优点:本发明的负载均衡方法包括主机负载策略、router连接数策略和轮询访问策略。本发明中的方法主要应用于hdfs rbf模式下的集群路由层服务,可通过配置不同客户端选择策略解决router的负载均衡问题。
81.此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
82.由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
83.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而
言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
84.图1是本发明一个实施例的方法的示意性流程图。
85.图2是本发明另一个实施例的方法的示意性流程图。
86.图3是本发明一个实施例的选择策略的示意性流程图。
87.图4是本发明实施例提供的装置的示意性框图。
88.图中,11

路由选择策略配置模块,22

策略读取模块,33

路由对象生成模块,44

传递模块,55

处理返回模块,501

负载值获取单元,502

连接数获取单元,503

查找判断单元,504

更新单元,505

处理单元,506

返回单元。
具体实施方式
89.为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
90.hdfs rbf:hdfs表示hadoop分布式文件系统,指一套能够部署在廉价机器上并且可提供高度容错性的大型分布式文件存储系统。hdfs rbf全称为hdfs router based federation,是hdfs一种基于路由联邦模式的多集群技术和部署架构,主要由router服务对多个集群进行路由转发。
91.router:即hdfs将多集群联邦的路由服务,在hdfs rbf架构中客户端(client)连接路由服务,然后router(路由服务)将客户端的请求转发到相应的子集群。router暴露一个简单、全局的与namenode相同的接口,基于state store存储的信息转发客户端请求到正确子集群上活跃的namenode。
92.router选择策略:在实际使用中,client连接多个router,但是最终必须选择其中一个router作为真正服务的router,本专利中的router选择策略即主要发明点,即通过设置一种负载均衡策略选择router,减轻router压力。
93.routerclient对象:在java中是一个类,该类用来读取配置文件和反射出路由选择策略对应的类,可以加载反射类中的初始化方法,还能初始化routerclient对象,形成客户端路由对象,该专利中routerclient对象同客户端路由对象。
94.如图1所示,本发明实施例提供一种基于hdfs rbf路由层实现负载均衡方法,包括如下步骤:
95.步骤11:通过设置客户端配置项的值设置客户端路由选择策略;
96.步骤12:读取设置的路由选择策略的值;
97.步骤13:根据读取的值调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端。
98.应用于hdfs rbf模式下的集群路由层服务,可通过配置不同客户端选择策略解决路由服务的负载均衡问题。
99.如图2所示,在有些实施例中,步骤12中,所述的读取设置的路由选择策略的值的步骤包括:
100.步骤121:根据设置的路由选择策略加载配置文件;
101.步骤122:读取配置文件中选择策略对应的值。
102.步骤13中,所述的根据读取的值调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端的步骤包括:
103.步骤131:根据读取的值反射出路由选择策略对应的类,加载反射出的类中的初始化方法,初始化客户端路由对象;
104.步骤132:客户端路由对象遍历本地配置项中所有已配置的路由服务地址,获取路由服务地址组成地址列表;
105.步骤133:将客户端路由对象以及地址列表传递给路由服务;
106.步骤134:根据客户端路由对象中的类调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端。
107.在java中根据读取的值反射出路由选择策略对应的类,加载反射出的类中的初始化方法执行选择的路由选择策略选择出一个路由服务地址。
108.需要说明的是,路由选择策略包括主机负载策略、连接数策略、轮询访问策略;
109.所述的主机负载策略,根据所有路由服务节点cpu利用率,选择cpu利用率值最小的路由服务节点的策略;
110.连接数策略,根据当前路由服务节点的客户端连接数,选择连接数最少的路由服务节点的策略;
111.轮询访问策略,客户端对所有路由服务节点排序并做序号标记,按照顺序轮询连接路由服务节点的策略。
112.配置不同客户端选择策略可解决路由服务的负载均衡问题。
113.如图3所示,在有些实施例中,当步骤通过设置客户端配置项的值设置客户端路由选择策略中,设置的路由选择策略为主机负载策略时,步骤134中,根据客户端路由对象中的类调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端的步骤包括:
114.步骤151:获取每个路由服务节点的路由服务对象;
115.步骤152:通过路由服务对象获取每个路由服务节点的监控信息;
116.步骤153:在每个路由服务节点的监控信息中取cpu利用率值;
117.步骤154:对每个路由服务节点的cpu利用率值由小到大做排序处理;
118.步骤155:取排序的索引最小值即cpu利用率值最小的路由服务地址返回给客户端。
119.在有些实施例中,当步骤通过设置客户端配置项的值设置客户端路由选择策略中,设置的路由选择策略为连接数策略时,步骤134中,根据客户端路由对象中的类调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端的步骤包括:
120.步骤251:获取每个路由服务节点的路由服务对象;
121.步骤252:通过路由服务对象获取每个路由服务节点的客户端连接数;
122.步骤253:对路由服务节点的客户端连接数由小到大进行排序;
123.步骤254:取排序的索引最小值即客户端连接数最小的路由服务地址返回给客户端。
124.在有些实施例中,当步骤通过设置客户端配置项的值设置客户端路由选择策略
中,设置的路由选择策略为轮询访问策略时,步骤134中,根据客户端路由对象中的类调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端的步骤包括:
125.步骤351:缓存所有路由服务节点的索引信息列表;
126.步骤352:查找上一次所连接的路由服务节点的索引信息;
127.步骤353:判断所述索引信息是否存在;若是,执行步骤354;否则,执行步骤355;
128.步骤354:将该索引位置的下一个索引信息更新到客户端缓存中,同时将更新到客户端缓存的索引位置的路由服务地址返回给客户端;
129.步骤355:将索引信息列表中的第一个索引位置的路由服务地址返回给客户端。
130.需要说明的是,该方法还包括:
131.步骤14:客户端接收到返回的路由服务地址后,连接到该路由服务地址。
132.hdfs rbf模式下多个子集群通过路由服务连接,路由服务实现了hdfs节点的客户端连接协议,每个子集群会有两个或多个路由服务,多个子集群通过一组路由服务通信联邦,对外形成一个基于路由服务的联邦集群。本方案中客户端连接集群通过随机方式访问服务路由然后通过服务路由代理连接集群。本发明中提出可配置的客户端选择服务路由的策略,实现了三种不同的选择策略,可解决路由服务的负载均衡问题。
133.本发明中的方法主要应用于hdfs rbf模式下的集群路由层服务,可通过配置不同client选择策略解决router的负载均衡问题,具体实施过程如下:
134.(1)首先用户根据集群情况设置client的路由选择策略,例如:client配置项为dfs.client.router.choose.order,该项可配置的value值可根据不同路由策略设置如下:
135.org.apache.hadoop.hdfs.server.router.routerhostcpuratio为主机负载策略;
136.rg.apache.hadoop.hdfs.server.router.routerclientconnectionnum为router连接数策略;
137.org.apache.hadoop.hdfs.server.router.routerpollingorder为轮询访问策略;
138.(2)根据步骤(1)确定的路由选择策略,在client配置文件hdfs

rbf

site.xml中配置:
139.dfs.client.router.choose.order=org.apache.hadoop.hdfs.server.router.routerhostcpuratio、dfs.client.router.choose.order=org.apache.hadoop.hdfs.server.router.routerclientconnectionnum或dfs.client.router.choose.order=org.apache.hadoop.hdfs.server.router.routerpollingorder。client端在连接router初始化过程会加载hdfs

rbf

site.xml文件;
140.(3)初始化前读取dfs.client.router.choose.order的配置策略所对应的值;
141.(4)读取值之后根据值反射出路由选择策略对应的类,加载反射类中的初始化方法,初始化routerclient对象;本步骤中是在java内部实现,通过设置的值反射出对应的策略方法。
142.(5)routerclient对象生成之后,该对象将本地配置中dfs.namenode.rpc

address.ns

fed下所有router地址遍历获取router地址组成java中地址列表;
143.(6)routerclient对象调用选择router方法,该方法通过步骤(4)生成的
routerclient对象,同时把步骤(5)获取到的java list对象(地址列表)传递给router;
144.(7)对应router选择策略中的router选择方法开始执行选择的选择策略,选择出一个router地址,给后续步骤使用;
145.(8)使用步骤(7)中的router地址,新创建client对象,供后续开源hadoop代码逻辑流程使用;
146.其中,主机负载策略:
147.首先client端能够连接所有router节点,连接到router节点之后能获取到每个router对象,通过router对象获取每个router节点的监控信息,在每个router节点监控信息中取cpu利用率值,然后对每个router所获取到的cpu利用率值由小到大做排序处理,取router排序的索引最小值即cpu利用率最小的router地址返回给client端,然后client端连接该地址。
148.连接数策略:
149.首先client端能够连接所有router节点,连接到router节点之后能获取到每个router对象,通过router对象获取每个router的client连接数,将获取到router的client连接数由小到大进行排序,取router排序的索引最小值即连接数值最小的router地址返回给client端,然后client端连接该地址。
150.轮询访问策略:
151.首先client端能够连接所有router节点,client缓存所有router索引信息列表,client查找上次所连接的router索引信息,判断上次所连接的索引信息是否存在,如果存在索引信息,则将该索引位置的下一个索引(next)更新到client缓存中,同时将该索引位置的router地址返回给client端,然后client端连接该地址。如果上次所连接的索引信息不存在,则将router索引信息列表中的第一个位置索引返回给client端,然后client端连接该地址。
152.如图4所示,本发明实施例还提供一种基于hdfs rbf路由层实现负载均衡装置,包括路由选择策略配置模块11、策略读取模块22、处理返回模块55;
153.选择策略配置模块11,用于通过设置客户端配置项的值设置客户端路由选择策略;
154.策略读取模块22,用于读取设置的路由选择策略的值;
155.处理返回模块55,用于根据读取的值调用路由选择策略对应的选择方法选择一个路由服务地址返回给客户端。
156.需要说明的是,策略读取模块22还包括加载单元、读取单元;
157.加载单元,用于根据设置的路由选择策略加载配置文件;
158.读取单元,用于读取配置文件中选择策略对应的值。
159.在有些实施例中,该装置还包括路由对象生成模块33、传递模块44;
160.路由对象生成模块33,用于根据读取的值反射出路由选择策略对应的类,加载反射出的类中的初始化方法,初始化客户端路由对象;客户端路由对象遍历本地配置项中所有已配置的路由服务地址,获取路由服务地址组成地址列表;
161.传递模块44,用于将客户端路由对象以及地址列表传递给路由服务;
162.处理返回模块55,具体用于根据客户端路由对象中的类调用路由选择策略对应的
选择方法选择一个路由服务地址返回给客户端。
163.需要说明的是,路由选择策略包括主机负载策略、连接数策略、轮询访问策略;
164.所述的主机负载策略,根据所有路由服务节点cpu利用率,选择cpu利用率值最小的路由服务节点的策略;
165.连接数策略,根据当前路由服务节点的客户端连接数,选择连接数最少的路由服务节点的策略;
166.轮询访问策略,客户端对所有路由服务节点排序并做序号标记,按照顺序轮询连接路由服务节点的策略。
167.在有些实施例中,当选择策略配置模块设置的路由选择策略为主机负载策略时,处理返回模块55包括负载值获取单元501、处理单元505、返回单元506;
168.负载值获取单元501,用于获取所有路由服务节点的cpu利用率值;具体用于获取每个路由服务节点的路由服务对象;通过路由服务对象获取每个路由服务节点的监控信息,在每个路由服务节点的监控信息中取cpu利用率值。
169.处理单元505,用于对每个路由服务节点的cpu利用率值由小到大做排序处理;
170.返回单元506,用于取排序的索引最小值即cpu利用率值最小的路由服务地址返回给客户端。
171.在有些实施例中,当选择策略配置模块设置的路由选择策略为连接数策略时,处理返回模块55还包括连接数获取单元502;
172.连接数获取单元502,用于获取每个路由服务节点的客户端连接数;具体用于获取每个路由服务节点的路由服务对象,通过路由服务对象获取每个路由服务节点的客户端连接数。
173.处理单元505,用于将获取到路由服务节点的客户端连接数由小到大进行排序;
174.返回单元506,用于取排序的索引最小值即客户端连接数最小的路由服务地址返回给客户端。
175.在有些实施例中,当选择策略配置模块设置的路由选择策略为轮询访问策略时,该装置还包括执行模块,用于将所有路由服务节点的索引信息列表缓存到客户端缓存中;
176.处理返回模块55还包括查找判断单元503和更新单元504;
177.查找判断单元503,用于查找上一次所连接的路由服务节点的索引信息,判断所述索引信息是否存在;
178.更新单元504,用于若查找判断单元判断索引信息存在,将该索引信息所在索引位置的下一个索引信息更新到客户端缓存中,同时返回单元将更新到客户端缓存的索引位置的路由服务地址返回给客户端;
179.返回单元506,还用于若查找判断单元判断索引信息不存在时,将索引信息列表中的第一个索引位置的路由服务地址返回给客户端。
180.尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1