一种基于流拆分的服务功能链部署方法与流程

文档序号:17003439发布日期:2019-03-02 01:54阅读:278来源:国知局
一种基于流拆分的服务功能链部署方法与流程

本发明涉及虚拟网络技术领域,具体涉及一种基于流拆分的服务功能链部署方法。



背景技术:

网络功能虚拟化(nfv)是一种新的网络框架,由欧洲电信标准化协会(etsi)在2012首次提出。nfv技术主要思想是通过虚拟机上的软件提供网络功能,虚拟机可放置在通用硬件平台上,取代传统的专有网络设备,从而提高网络的灵活性。当网络功能被虚拟化,根据用户的服务策略,多个虚拟网络功能(vnf)按照一定顺序组成服务功能链(sfc)。

如今云服务提供商(csps)使用nfv技术,把虚拟网络功能部署于数据中心的虚拟机上,更加灵活地利用数据中心网络(dcn)的计算、存储资源。随着越来越多的用户享受云提供的各种网络服务,虚拟网络功能的部署(vnf实例化)成为云服务提供商重要、亟待解决的问题,越来越受到学术界和工业界的关注。该问题关注于在满足各种资源(包括服务器计算、存储,链路带宽等资源)约束下对一系列vnfs在物理拓扑中选择实例化的位置进行决策,实现目标优化,如最小化资源消耗,最大化接受服务请求个数等。

在云数据中心部署sfcs已经有很多研究了,其中部分研究从云服务提供商获取最大利润的角度出发,采取能够有效利用网络资源,最小化固定资产成本和运营成本(capex/opex)的部署方式。也有研究从用户体验的服务质量出发,例如有研究者在部署sfcs的同时考虑网络和服务器的负载均衡,使得sfcs的总时延最小化。特别地,在数据中心网络中的流量可以分为两类:一种为大象流(elephantflows),通常由数据备份、文件传输、虚拟机迁移等产生的传输数据传输率大持续时间长的流,另一种为老鼠流(miceflows),通常由网页浏览、搜索查询等产生的传输的数据传输率小持续时间短的流。相关文献表明elephantflows对带宽需求高对时延没有严格要求,约占数据中心网络流量条数的20%而占总流量字节数的80%;miceflows带宽需求低但对时延敏感直接影响到用户体验,约占总流量条数的80%而占总流量字节数的20%。

当大象流和老鼠流的sfcs部署经过同一路径时,在交换机出端口等待数据传输到链路上时容易出现老鼠流在大象流后面排队的情况,使得老鼠流排队时延特别是尾时延很大,影响老鼠流的服务功能链请求体验的总时延。

在目前,已有研究在数据中心网络环境下部署sfc实现网络和服务器的负载均衡,例如nf-lgt算法。该算法第一阶段使用贪心策略,当部署sfc的下一个vnf时,挑选离当前位置时延(包括服务器时延和链路时延)最小的vnf实例。在第二阶段用相同类型vnf的其它可选实例代替阶段一所选择的vnf实例以及交换服务链中vnfs的顺序的策略尝试寻找更佳的部署方式,使得sfcs的总时延最小。虽然上诉方法综合考虑了数据中心中网络和服务器的负载均衡,实现sfc的部署,但并未考虑总的花销成本,以及数据中心网络中sfcs流量特点及相应需求。

还有相关研究人员把在数据中心sfc的部署问题看作多层装箱问题使所使用的服务器数量最小化,同时尽量使得同一条sfc的虚拟网络功能部署在较低层箱子中,以降低网络成本。虽然上述方法能够实现sfcs在数据中心的部署,并综合考虑了服务器和网络的成本花费进行优化,但并未考虑服务请求的服务质量(如排队时延),未满足对时延敏感的老鼠流和对吞吐量敏感的大象流的不同需求。



技术实现要素:

针对现有技术中的上述不足,本发明提供的一种基于流拆分的服务功能链部署方法解决了大象流接受率不高和网络负载不均衡的问题。

为了达到上述发明目的,本发明采用的技术方案为:一种基于流拆分的服务功能链部署方法,包括以下步骤:

s1、通过dsc算法对服务功能链拆分后的子链进行部署,得到子链的部署方案、链路排队延时和部署成本;

s2、通过onsc算法,根据子链的部署方案、链路排队延时和部署成本对服务功能链进行部署,得到服务功能链部署方案。

进一步地:所述步骤s1的具体步骤为:

s11、初始化变量currentserver=0,currentlocation=b,初始化子链部署方案ds’;

bs为服务功能链s的起始节点,b为节点bs的位置编号,ds′=(dsf,dse,p),其中,dsf为子链s′的虚拟网络功能的部署方案,s′为服务功能链s的子链,dsf={ds(f′1),ds(f′2),…,ds(f′|fs|)},ds(f′i)为托管子链s′的第i个虚拟网络功能f′i的服务器节点,|fs|为服务功能链部署请求s中虚拟网络功能的数量,dse为子链s′的虚拟链路部署方案,dse={ds(e′1),ds(e′2),…,ds(e′|es|)},ds(e′i)为托管子链s′的虚拟链路e′i的物理路径,|es|为服务功能链链路的数量,p为托管整条子链s′的完整路径;

s12、调用downoperation算法部署子链s’的第一个虚拟网络功能f′1,得到服务器节点nh和物理路径pdown,则ds(f′1)=nh,ds(e′1)=pdown,更新部署方案ds’、maxcapacityi,并令currentlocation=h,currentserver=h;

maxcapacityi为节点ni维护的一个变量,h为服务器节点nh的位置;

s13、遍历子链部署请求fs’中的每一个虚拟网络功能f′i,当fs’中的虚拟网络功能没有被遍历完,进入步骤s14,否则进入步骤s18;

s14、当服务器节点ncurrentserver不能满足虚拟网络功能f′i的资源需求,进入步骤s15,否则进入步骤s17;

s15、调用upoperation算法得到交换机nsw和物理路径pup,更新currentlocation=sw;

sw为交换机nsw的位置;

s16、调用downoperation算法得到服务器节点nh和物理路径pdown,则ds(f′i)=nh,ds(e′i)=pup+pdown,更新部署方案ds’、maxcapacityi,并令currentlocation=h,currentserver=h,返回步骤s13;

s17、令ds(f′i)=ncurrentserver,更新部署方案ds’,返回步骤s13;

s18、记子链s’最后一个虚拟功能f′|fs|部署在nh处,则ds(e′|es|)=p|es|,e′|es|为子链s’最后一条虚拟链路,p|es|为从服务器节点nh到子链的终止点ts的路径,更新部署方案ds’,并计算子链s′的流经过路径p体验的链路排队时延d′p和部署成本tcost(ds′)。

进一步地:所述步骤s15中upoperation算法的具体步骤为:

a1、初始化物理路径pup;

a2、当节点ncurrentlocation不属于核心交换机时,进入步骤a3,否则进入步骤a7;

a3、在节点ncurrentlocation相邻且位于拓扑更高层的物理节点集合adgnhigh(currentlocation)中寻找满足maxcapacity≥ε(f′i)的节点集合candidate;

ε(f′i)为虚拟网络功能f′i的节点资源需求;

a4、当节点集合candidate为空时,进入步骤a5,否则进入步骤sa6;

a5、遍历集合adgnhigh(currentlocation)寻找元素nj,其中元素nj与节点ncurrentlocation构成链路ljworstfit满足带宽需求且可用带宽最多,更新节点位置currentlocation=j,j为元素nj的下标,并令pup←pup+ljworstfit,并返回步骤a2;

a6、遍历集合candidate寻找元素ni,其中元素ni与节点ncurrentlocation构成链路liworstfit满足带宽需求且可用资源最多,更新节点位置currentlocation=i,i为元素ni的下标,并令pup←pup+liworstfit,进入步骤a7;

a7、输出位于currentlocation处的交换机nsw和物理路径pup。

进一步地:所述步骤s12和步骤s16中downoperation算法的具体步骤为:

b1、初始化物理路径pdown;

b2、当节点ncurrentlocation不属于数据中心网络的服务器集合hp时,进入步骤b3,否则进入步骤b5;

b3、在节点ncurrentlocation相邻且位于拓扑更低层的物理节点集合adgnlow(currentlocation)中寻找满足maxcapacityj≥ε(f′i)的节点集合candidate;

b4、遍历集合candidate寻找元素nj,元素nj与节点ncurrentlocation构成链路lworstfit满足带宽需求且可用带宽最多,更新节点位置currentlocation=j,并令pdown←pdown+lworstfit,并返回步骤b2;

b5、输出currentlocation处的服务器节点nh和物理路径pdown。

进一步地:所述步骤s12中节点ni维护的一个变量maxcapacityi的计算公式为:

上式中,availablecapacityi为服务器剩余的节点资源,hp为数据中心网络的服务器集合,swp为数据中心网络的交换机集合,adgnlow(ni)为与节点ni相邻且位于拓扑更低层的物理节点集合。

进一步地:所述步骤s18中子链s′的流经过路径p体验的链路排队时延d′p的计算公式为:

上式中,c(l)为链路l的带宽容量,pa(l)为链路l当前的包到达率。

部署成本tcost(ds′)的计算公式为:

上式中,pathcost(es′→p)为子链s′的所有虚拟链路被映射到物理路径p的部署成本,costvnf(f′i→h)为虚拟网络功能f′i被部署到服务器节点h的部署成本,rhf′为在服务器h处,虚拟网络功能f′处理单位速率流量所需要的节点资源,λ为子链s’的流量需求,p(h)为服务器节点h的节点资源单位成本,p(li)为链路li的链路资源的单位成本。

进一步地:所述步骤s2的具体步骤为:

s21、初始化总的部署成本tcost=0,阻塞的服务功能链部署请求

s22、当服务功能链部署请求队列进入步骤s23,否则进入步骤s211;

s23、令过期的服务功能链请求集合finishedsfc释放过期的sfc请求占用的资源,并将集合finishedsfc中的第一个服务功能链s1进行拆分得子链集合subs;

s24、遍历集合subs中每一个子链s′i,当集合subs中的子链没有被遍历完,进入步骤s25,否则进入步骤s27;

s25、若子链的部署方案时,进入步骤s26,否则进入步骤s29;

s26、子链s’部署成功,将链路排队时延d′p加入服务链s的各条子链的链路排队时延集合dsub中,将子链的部署方案ds′加入服务链s的部署方案ds中;

dsub为服务链s的各条子链的链路排队时延集合,dsub={d′1,d′2,…,d′|λs|},|λs|为服务功能链s拆分后的子链个数,ds为服务链s的部署方案;

s27、计算子链体验的最大排队时延差t=max(dsub)-min(dsub),当t≤tr时,进入步骤s28,否则进入步骤s29;

tr为阈值;

s28、计算di并更新ds,更新物理网络,并令tcost←tcost+∑s′∈stcost(ds′),更新集合{ds},并进入步骤s210;

ds为服务请求功能链链路排队时延集合,ds={d1,d2,…,d|m|},i=1,2,…|m|,|m|为服务请求功能链链路排队时延的个数,{ds}为所有成功部署的服务功能链部署方案集合;

s29、将第一个服务功能链s1加入阻塞的服务功能链部署请求sfcblo中;

s210、将第一个服务功能链s1从服务功能链部署请求队列arrivalsfc中删除,返回步骤s22;

s211、输出成功部署的服务功能链部署方案集合{ds}。

进一步地:所述步骤s23中服务功能链s1的拆分公式为:

上式中,λi为拆分后的子链流量需求,ksub为服务请求功能链s划分后的子链流量需求最大值,hs为服务功能链部署请求s的流量需求,|λs|的计算公式为:

上式中,us为二进制变量。

本发明的有益效果为:

(1)满足数据中心网络中大象流与老鼠流的不同需求。在本发明中,部署大象流服务功能链请求时,将该服务功能链拆分成多个子链进行部署,这样在提高大象流接受率的同时可以缓解由于大象流占用带宽资源过多导致网络堵塞导致排在大象流后的老鼠流排队时延过大,提高数据中心网络的服务质量。

(2)实现网络的负载均衡。由于本发明提出的部署算法,基于worst-fit策略选择剩余带宽资源最多的链路进行部署,可以减少网络堵塞的发生。

(3)降低网络花费。由于本发明提出的算法在部署sfc时,对于同一条sfc的虚拟网络功能部署的服务器,尽量使它们在网络中相隔的跳数最少,从而减少网络带宽资源的消耗。

附图说明

图1为本发明总流程图;

图2为本发明步骤s1的流程图;

图3为本发明中upoperation算法的流程图;

图4为本发明中downoperation算法的流程图;

图5为本发明步骤s2的流程图。

具体实施方式

下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。

如图1所示,一种基于流拆分的服务功能链部署方法,包括以下步骤:

s1、通过dsc算法对服务功能链拆分后的子链进行部署,得到子链的部署方案、链路排队延时和部署成本,如图2所示,步骤s1的具体步骤为:

s11、初始化变量currentserver=0,currentlocation=b,初始化子链部署方案ds’;

bs为服务功能链s的起始节点,b为节点bs的位置编号,ds′=(dsf,dse,p),其中,dsf为子链s′的虚拟网络功能的部署方案,s′为服务功能链s的子链,dsf={ds(f′1),ds(f′2),…,ds(f′|fs|)},ds(f′i)为托管子链s′的第i个虚拟网络功能f′i的服务器节点,|fs|为服务功能链部署请求s中虚拟网络功能的数量,dse为子链s′的虚拟链路部署方案,dse={ds(e′1),ds(e′2),…,ds(e′|es|)},ds(e′i)为托管子链s′的虚拟链路ei′的物理路径,|es|为服务功能链链路的数量,p为托管整条子链s′的完整路径;

s12、调用downoperation算法部署子链s’的第一个虚拟网络功能f′1,得到服务器节点nh和物理路径pdown,则ds(f′1)=nh,ds(e′1)=pdown,更新部署方案ds’、maxcapacityi,并令currentlocation=h,currentserver=h;

maxcapacityi为节点ni维护的一个变量,h为服务器节点nh的位置;

节点ni维护的一个变量maxcapacityi的计算公式为:

上式中,availablecapacityi为服务器剩余的节点资源,hp为数据中心网络的服务器集合,swp为数据中心网络的交换机集合,adgnlow(ni)为与节点ni相邻且位于拓扑更低层的物理节点集合。

如图3所示,downoperation算法的具体步骤为:

b1、初始化物理路径pdown;

b2、当节点ncurrentlocation不属于数据中心网络的服务器集合hp时,进入步骤b3,否则进入步骤b5;

b3、在节点ncurrentlocation相邻且位于拓扑更高低的物理节点集合adgnlow(currentlocation)中寻找满足maxcapacityj≥ε(f′i)的节点集合candidate;

b4、遍历集合candidate寻找元素nj,元素nj与节点ncurrentlocation构成链路lworstfit满足带宽需求且可用带宽最多,更新节点位置currentlocation=j,并令pdown←pdown+lworstfit,并返回步骤b2;

b5、输出currentlocation处的服务器节点nh和物理路径pdown。

s13、遍历子链部署请求fs’中的每一个虚拟网络功能f′i,当fs’中的虚拟网络功能没有被遍历完,进入步骤s14,否则进入步骤s18;

s14、当服务器节点ncurrentserver不能满足虚拟网络功能f′i的资源需求,进入步骤s15,否则进入步骤s17;

s15、调用upoperation算法得到交换机nsw和物理路径pup,更新currentlocation=sw;

sw为交换机nsw的位置;

如图4所示,upoperation算法的具体步骤为:

a1、初始化物理路径pup;

a2、当节点ncurrentlocation不属于核心交换机时,进入步骤a3,否则进入步骤a7;

a3、在节点ncurrentlocation相邻且位于拓扑更高层的物理节点集合adgnhigh(currentlocation)中寻找满足maxcapacity≥ε(f′i)的节点集合candidate;ε(f′i)为虚拟网络功能f′i的节点资源需求;

a4、当节点集合candidate为空时,进入步骤a5,否则进入步骤sa6;

a5、遍历集合adgnhigh(currentlocation)寻找元素nj,其中元素nj与节点ncurrentlocation构成链路ljworstfit满足带宽需求且可用带宽最多,更新节点位置currentlocation=j,j为元素nj的下标,并令pup←pup+ljworstfit,并返回步骤a2;

a6、遍历集合candidate寻找元素ni,其中元素ni与节点ncurrentlocation构成链路liworstfit满足带宽需求且可用资源最多,更新节点位置currentlocation=i,i为元素ni的下标,并令pup←pup+liworstfit,进入步骤a7;

a7、输出位于currentlocation处的交换机nsw和物理路径pup。

s16、调用downoperation算法(该算法与步骤s12中的downoperation算法一致)得到服务器节点nh和物理路径pdown,则ds(f′i)=nh,ds(e′i)=pup+pdown,更新部署方案ds’、maxcapacityi,并令currentlocation=h,currentserver=h,返回步骤s13;

s17、令ds(f′i)=ncurrentserver,更新部署方案ds’,返回步骤s13;

s18、记子链s’最后一个虚拟功能f′|s|部署在nh处(或表述为记ds(f′|fs|)=nh),则ds(e′|es|)=p|es|,e′|es|为子链s’最后一条虚拟链路,p|es|为从服务器节点nh到子链的终止点ts的路径,更新部署方案ds’,并计算子链s′的流经过路径p体验的链路排队时延d′p和部署成本tcost(ds′)。

子链s′的流经过路径p体验的链路排队时延d′p的计算公式为:

上式中,c(l)为链路l的带宽容量,pa(l)为链路l当前的包到达率。

部署成本tcost(ds′)的计算公式为:

上式中,pathcost(es′→p)为子链s′的所有虚拟链路被映射到物理路径p的部署成本,costvnf(f′i→h)为虚拟网络功能f′i被部署到服务器节点h的部署成本,rhf′为在服务器h处,虚拟网络功能f′处理单位速率流量所需要的节点资源,λ为子链s’的流量需求,p(h)为服务器节点h的节点资源单位成本,p(li)为链路li的链路资源的单位成本。

s2、通过onsc算法根据子链的部署方案、链路排队延时和部署成本对服务功能链进行部署,得到服务功能链部署方案,如图5所示,步骤s2的具体步骤为:

s21、初始化总的部署成本tcost=0,阻塞的服务功能链部署请求

s22、当服务功能链部署请求队列进入步骤s23,否则进入步骤s211;

s23、令过期的服务功能链请求集合finishedsfc释放过期的sfc请求占用的资源,并将集合finishedsfc中的第一个服务功能链s1进行拆分得子链集合subs;服务功能链s1的拆分公式为:

上式中,λi为拆分后的子链流量需求,ksub为服务请求功能链s划分后的子链流量需求最大值,hs为服务功能链部署请求s的流量需求,|λs|的计算公式为:

上式中,us为二进制变量。

s24、遍历集合subs中每一个子链s′i,当集合subs中的子链没有被遍历完,进入步骤s25,否则进入步骤s27;

s25、若子链的部署方案时,进入步骤s26,否则进入步骤s29;

s26、子链s’部署成功,将链路排队时延d′p加入服务链s的各条子链的链路排队时延集合dsub中,将子链的部署方案ds′加入服务链s的部署方案ds中;

dsub为服务链s的各条子链的链路排队时延集合,dsub={d′1,d′2,…,d′|λs|},|λs|为服务功能链s拆分后的子链个数,ds为服务链s的部署方案;

s27、计算子链体验的最大排队时延差t=max(dsub)-min(dsub),当t≤tr时,进入步骤s28,否则进入步骤s29;

tr为阈值;

s28、计算di并更新ds,更新物理网络,并令tcost←tcost+∑s′∈stcost(ds′),更新集合{ds},并进入步骤s210;

ds为服务请求功能链链路排队时延集合,ds={d1,d2,…,d|m|},i=1,2,…|m|,|m|为服务请求功能链链路排队时延的个数,{ds}为所有成功部署的服务功能链部署方案集合;

s29、将第一个服务功能链s1加入阻塞的服务功能链部署请求sfcblo中;

s210、将第一个服务功能链s1从服务功能链部署请求队列arrivalsfc中删除,返回步骤s22;

s211、输出成功部署的服务功能链部署方案集合{ds}。

本发明中服务功能链部署请求集合表示为s={s1,s2,…,s|m|},|m|表示服务功能链请求个数,对于一个服务链部署请求建模为一个向量s=(bs,ts,hs,fs,es),s∈s。bs表示服务功能链请求s的起始节点,ts表示服务功能链请求s的终止节点,hs表示服务功能链部署请求s的流量需求,fs={f1,f2,…,f|fs|}表示服务功能链部署请求s的虚拟网络功能集合,|fs|表示服务功能链部署请求s中虚拟网络功能的数量。es={e1,e2,…,e|es|}表示服务功能链部署请求s的虚拟链路集合,|es|表示服务功能链链路的数量。

部署约束:dc=(cnf,cef)表示服务功能链部署请求的部署约束集合。

虚拟网络功能的资源约束:cnf={ε(f1),ε(f2),…,ε(f|fs|)}表示这个服务功能链部署请求的所有虚拟网络功能的节点资源需求集合。

本发明中假设分配给虚拟网络功能的节点资源与所需处理的流量成正比,记rh,f表示在服务器h处,虚拟网络功能f处理单位速率流量所需要的节点资源。

服务功能链链路资源约束:cef={ε(e1),ε(e2),…,ε(e|es|)}表示这个服务功能链部署请求的所有链路的带宽资源需求集合。本发明中假设各条虚拟链路所需带宽资源不变即ε(e1)=ε(e2)=…=ε(e|es|)=hs。

记me为一个常数来判定老鼠流与大象流,变量us∈(0,1),服务功能链s的流量需求为hs,则即当服务功能链s的流量请求为大象流时us取值为1。

本发明考虑对大象流服务请求功能链进行拆分,得到多个子链,用λs={λ1,λ2,…,λ|λs|}表示服务功能链s拆分后的子链流量需求集合,|λs|表示服务功能链s拆分后的子链个数。subs={s′1,s′2,…,s′|λs|}表示服务功能链s拆分后的子链集合,子链s′可建模为s′=(bs,ts,λ,fs′,es′),s′∈subs。

物理网络为在数据中心常见的fat-tree拓扑结构,其中服务器位于拓扑第一层,往上层数递增的物理节点分别属于边缘交换机,聚合交换机和核心交换机。在本发明中,这个物理网络能被建模为无向图gp=(np,ep)。np={n1,n2,…,n|np|}表示物理拓扑中的所有物理节点。np={swp∪hp},其中swp={sw1,sw2,…,sw|swp|}表示数据中心网络的交换机集合,hp={h1,h2,…,h|hp|}表示数据中心网络的服务器集合,ep={l1,l2,…,l|ep|}表示物理链路集合。|swp|,|hp|和|ep|分别表示交换机数量、服务器数量和物理链路数量。p={p1,p2,…,p|p|}表示物理网络中的所有路径,|p|表示物理网络中路径的总条数。ph={h1,h2,…,h|ph|}表示路径p上的服务器集合,|ph|表示路径p上服务器集合的个数。

物理网络资源约束:在本发明中定义rc=(cnp,cep)为物理网络资源约束。

物理网络节点资源属性:cnp表示物理网络节点属性的集合,物理网络节点的典型属性包括节点资源容量c(hi)和节点资源的单位成本p(si)。

物理网络链路资源属性:cep表示物理网络链路属性的集合,物理网络链路的典型属性包括链路的带宽容量c(li)和链路资源的单位成本p(li)。

本发明技术可以部署在基于sdn的云数据中心网络中,以实现服务功能链的部署。sdn是一种新兴的网络架构,将网络控制与流量转发功能分离,使其可编程化,从网络基础架构中抽象出来,将其移入逻辑上独立的控制环境——网络控制系统之中,并且sdn网络基于openflow协议传输报文。该系统可在通用的服务器上运行,使得控制功能不再局限于路由器中,也不再局限于只有设备的生成厂商才能够编程和定义。

云服务提供商可以将本专利所提出的在基于sdn的云数据中心网络中部署服务功能链的方法部署在sdn的控制路由器中的控制层上,sdn控制路由器可以获取全网信息包括各个服务器节点的节点资源以及链路的剩余带宽等信息。

当服务请求到来时,首先判断请求流为大象流还是老鼠流,再根据本发明提供的服务功能链拆分方法对大象流进行拆分,之后sdn控制路由器根据其获取的全网信息,调用部署在其控制层上的服务功能链部署方法,并计算部署总成本、服务接受率和排队时延等性能指标,并返回给服务提供商。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1