具体实施方式
为了更好地理解本发明的技术方案,下面结合附图对本申请的实施例进行详细描述。
应当明确,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例的罗列。基于本公开中描述的实施例,本领域普通技术人员在没有付出创造习惯劳动的情况下所获得的所有其他变化例都属于本申请的保护范围。
图1示出了根据本公开一示例性方面的平台100的全链路调用关系的示图。如所可见,该平台100可包括链路1、链路2、……链路N。这些链路分别调用相应的资源,例如各个***A到***M中的一个或多个***。尽管图中仅示出一层***调用,但是本公开并不被限定于此,而是可以包括任何一层或多层的***调用。各***可进一步分别调用数据库DB1、DB2……、DB K中的一个或多个数据库。
在平台100的链路A–N中,可能包括一个或多个关键链路。关键链路中断将可能对网络业务造成严重干扰,因此容灾/容量方案或***必须首先保证关键链路的正常工作。
根据一示例,在图1的示例中,链路1例如可以是关键链路。例如,在时间t,链路1可调用***A、B和M,而***A调用DB1、DB2和DB3,***B调用DB1和DB3,***M调用DB2、DB3和DBK,等等。
通过对不同业务资金安全、受众范围、舆情风险等的标定,可以区分出不同业务的重要程度。对***功能、资金风险和/或用户体验有较大影响的业务,需要进行更加重点的高可用性保障。
为了保障业务的高可用性,需要分析该业务链路所会调用的资源(例如,各个***和数据库)的容量是否达标,该业务链路的各个部分是否都具备了无损容灾/容量能力,该业务链路是否存在对某个(些)非高可用性保障***/数据库的直接依赖等。
现有技术中,针对业务影响的分析更多是基于经验的。例如,经验模式的业务高可用性分析大多是从某个已经定位的关键链路出发,通过分析链路调用关系,来确保链路中的每个***和数据库都已具备高可用性。
然而,基于经验的业务影响评估方法具有一定的局限性。例如,基于经验的推断,无法保障分析的完备性。所有的经验均是基于过去的。因此,对于某些可能出现的业务陡增或是业务周期性变化等,基于经验的推断是无法提供风险预测防控能力的。
为了达到完备分析、精准防控的目的,本公开创新地通过调用占比量化来评估不同***和数据库对关键链路的影响程度,然后通过时序预测算法预估业务在未来时间的变化趋势。
根据一示例性实施例,链路对***以及***对数据库的调用可被录入日志。例如,图2示出了根据本公开一示例性方面的***调用关系日志SYS_LOG 200的示图。
***调用关系日志SYS_LOG 200可包括各种字段,诸如日期201、时间202、日志级别203、代码位置204、日志内容205、错误码206等或其任何组合。例如,日志内容205可记录该***被链路或其他***调用的情况。
根据一示例,***调用关系日志SYS_LOG 200可记录***A的调用关系。例如,日期201为2019年3月1日、时间202为20点48分00秒的日志内容205可记录***A被链路1调用。又如,日期201为2019年3月1日、时间202为20点48分15秒的日志内容205可记录***A被链路2调用。如所可知,这仅是***A的调用关系的两个示例。
图3示出了根据本公开一示例性方面的DB调用关系日志DB_LOG300的示图。DB调用关系日志DB_LOG 300可包括各种字段,诸如日期301、时间302、日志级别303、代码位置304、日志内容305、错误码306等或其任何组合。例如,日志内容305可记录该DB被***调用的情况。
根据一示例,DB调用关系日志DB_LOG 300可记录DB1的调用关系。例如,根据一示例性而非限定性实施例,日期301为2019年3月1日、时间302为20点48分00秒的日志内容305可记录DB1被***A调用。又如,日期301为2019年3月1日、时间302为20点48分15秒的日志内容305可记录DB1被***A调用。如所可知,这仅是DB调用的两个示例。
根据一示例性而非限定性实施例,***调用关系日志SYS_LOG 200和DB调用关系日志DB_LOG 300可以是相同的格式,并且可被合并为一个日志。根据其他示例性而非限定性实施例,***调用关系日志SYS_LOG200和DB调用关系日志DB_LOG 300可以是不同的格式,例如可包括不同的字段。如所可知,***调用关系日志SYS_LOG 200和DB调用关系日志DB_LOG 300的字段并不限于以上所列举的字段,而是可以包括一个或多个其他字段或者移除其中一个或多个字段。
例如,根据一示例性而非限定性实施例,尽管在图2和图3中未示出,但***调用关系日志SYS_LOG 200和DB调用关系日志DB_LOG 300还可以包括全局唯一性链路业务标识以用于在全链路各个***和/或数据库之间区分业务。该全局唯一性链路业务标识可标识相应的***和/或DB调用属于哪个业务。
每个***的***调用关系日志SYS_LOG 200和每个数据库的DB调用关系日志DB_LOG 300可被分开保存或作为统一的日志保存。当作为统一的日志保存时,日志中分别还需要相应的全局唯一性***标识符和全局唯一性DB标识符等(图中未示出)。
如所可知,尽管本公开中以表的形式示出了***调用关系日志SYS_LOG 200和DB调用关系日志DB_LOG 300,但是本公开并不被限定于此。例如,***调用关系日志SYS_LOG200和/或DB调用关系日志DB_LOG 300也可以是其他形式/格式,例如链表、树结构等等。
根据一示例性而非限定性实施例,通过分析***调用关系日志(例如,图2的200)和DB调用关系日志(例如,图3的300),可以得到每个业务链路中***和数据库的调用关系。例如,通过分析***调用关系日志和DB调用关系日志,可以确定链路1的***和数据库调用关系。
图4示出了根据一示例性而非限定性实施例的***和数据库调用关系400的示图。例如,利用全局唯一性链路业务标识,可以检索到任何特定时间窗口(例如,1分钟、10分钟、30分钟、1小时、1日、7日、1月、1年等)中特定链路的***和数据库调用关系。
例如,图4中示出了例如2019年3月1日20点期间,特定链路(例如,链路1)的***和数据库调用关系400。如所可知,尽管本公开中以表的形式示出了特定链路的***和数据库调用关系,但是本公开并不被限定于此。例如,特定链路的***和数据库调用关系也可以是其他形式/格式,例如链表、树结构等等。
通过利用各关键链路的全局唯一性链路业务标识,可对***和数据库调用关系进行全局采样,得到过去某个时间点上,这些关键链路中的每一者对每一个***或数据库的调用占比。
例如,在一示例性情形中,对于与第一特定业务相关联的关键链路1,在特定时间,有60%的业务会经过***A,50%的业务会经过***B。由此,可以量化定义,对于该第一特定业务而言,***A的重要程度大于***B。例如,如果***A在该特定时间出现高可用性问题(例如,崩溃),则至多会影响到该链路1的60%。
类似地,在又一示例性情形中,对于与第一特定业务相关联的关键链路1,在特定时间,有40%的业务会经过DB1,70%的业务会经过DB2。由此,可以量化定义,对于该第一特定业务而言,DB2的重要程度大于DB1。例如,如果DB2在该特定时间出现高可用性问题(例如,崩溃),则至多会影响到该链路1的70%。
在另一示例性情形中,对于与第二特定业务相关联的关键链路2,在特定时间,有30%的业务会经过***A,30%的业务会经过***B,55%的业务会经过***C。由此,可以量化定义,对于该第二特定业务而言,***C的重要程度大于***A和***B。例如,如果***C在该特定时间出现高可用性问题(例如,崩溃),则至多会影响到该链路2的55%。
类似地,在又一示例性情形中,对于与第二特定业务相关联的关键链路2,在特定时间,有65%的业务会经过DB1,30%的业务会经过DB2,55%的业务会经过DB3。由此,可以量化定义,对于该第二特定业务而言,DB1的重要程度大于DB2和DB3。例如,如果DB1在该特定时间出现高可用性问题(例如,崩溃),则至多会影响到该链路2的65%。
通过对***和数据库调用关系进行的全局采样,得到过去某个时间,关键链路对每一个***或数据库的调用占比。图5示出了一个示例性情形中,特定关键链路在数个采样时间对各***和数据库的调用占比500的示例。
如所可见,在图5的示例中,在采样时间T,该关键链路对***A的调用占比为30%,对***B的调用占比为40%,……,对***M的调用占比为0%;另一方面,该关键链路对DB1的调用占比为50%,对DB2的调用占比为60%,……,对DB K的调用占比为0%。该示例中还依次示出了在采样时间T+t0、T+2t0、T+3t0、……时,该关键链路对各***A–M以及各数据库DB1–DB K的调用占比。
关键链路(或其他链路)对各***以及各数据库的调用占比、与该关键链路在某个时间段的业务总量以及该关键链路调用某个特定***或特定DB的业务量之间可以相互转换。例如,关键链路调用某个特定***或特定DB的业务量可以基于该关键链路在某个时间段的业务总量与其对该特定***或特定DB的调用占比来确定,反之亦然。
根据一示例性实施例,可对多个时间段的采样数据进行时序排列,即可得到该业务链路在与该多个时间段相对应的一段时间上对某个特定***或特定数据库的调用关系的时间序列。
图6示出了根据本公开一示例的业务链路在一段时间上对特定***/数据库的调用关系的时间序列600。例如,根据一示例,该时间序列600可反映某线上购票业务对一特定***的调用关系的历史变化曲线。
如所可见,该曲线的横轴表示时间,图上示出某年8月2日至8月6日之间的时间。该曲线的纵轴表示业务调用笔数。可以看到,随着用户作息及使用***缓。但是由于大量用户有周末出行的习惯,周五(例如,8月2日)购票量会达到每周的峰值,从而产生以星期为单位的周期性变化。
如所可见,该曲线体现出两个维度的周期性变化,一个维度以天为单位,另一个维度以周为单位。图6的曲线的纵轴表示业务调用笔数。业务调用笔数能够与占比进行相互转化,如前所述。
一般化地,业务变化通常可能呈现出以下特性中的零种、一种或两种:(i)趋势性;以及(ii)季节性。趋势性是指在一个业务产品或活动的生命周期内,通常会呈现出线性或指数型的业务增长或消亡趋势。另一方面,季节性是指受业务特点及用户支付行为影响,业务量级会随日、周、月、年等产生某些周期性变化。如所可见,本文中的“季节”一词不限于一年四季的范畴,而是可以指任何周期性变化,例如小时、天、周、月等等。当一个序列在每个固定的时间间隔中出现某种重复的模式,就可称之为具有季节性特征,而这样的一个时间间隔即可称为一个季节。一个季节的长度k可为它所包含的序列点的总数。
为了预测业务变化,可以采用各种指数平滑法。指数平滑法的思想是离预测点越近的点作用越大,而越久远的数据权重将越接近于0。换言之,即将权重按照指数级进行衰减。取决于该业务变化是否呈现出趋势性和季节性,可以采用几种不同的指数平滑法。一次指数平滑法一般针对既没有趋势性也没有季节性的序列,二次指数平滑法一般针对有趋势性但是没有季节性的序列,三次指数平滑法针对既有趋势性也有季节性的序列。
根据本公开一示例性实施例,可采用Holt-Winters三次指数平滑算法来预测包含季节性的时间序列。例如,可按照业务趋势,对时间周期k=1日/1周/1月/1年等周期进行分别预测。
Holt-Winters三次指数平滑算法的公式如下:
si=α*(xi-pi-k)+(1-α)*(si-1+ti-1)
ti=β*(si-si-k)+(1-β)*ti-1
pi=γ*(xi-si)+(1-γ)*pi-k
xi+h=si+h*ti+pi-k+h
其中,α、β和γ是平滑参数或称阻尼因子,其取值在[0,1],si是在时间i的经平滑程度或称截距,ti是在时间i的趋势变化,pi是在时间i的季节性平滑或称季节因子,k是季节长度即时间周期,xi是在时间i的预测值,其可包括业务量、业务占比等统计量。
根据一示例,α、β和γ的值可通过试验来达到最佳效果,也可通过各种寻优方法来确定,例如贝叶斯调参、网格调参等。
根据一示例,Holt-Winters算法中,si、ti和pi的初始值可如下计算:
根据另一示例,也可简单地取初始值为:
s0=x0,
t0=x1-x0,
p0=0。
如所可知,本公开的方案并不被限定于Holt-Winters三次指数平滑算法,而是可以采用其他各种预测算法,包括简易平均法,如几何平均法、算术平均法及加权平均法;移动平均法,如简单移动平均法和加权移动平均法;其他指数平滑法,如一次指数平滑法和二次指数平滑法;线性回归法,如一元线性回归和二元线性回归等等。
根据预测结果,即可得到某一个业务链路在未来时间对每一个***、DB的依赖百分比。图7示出了根据一示例性实施例的特定业务链路在一段时间上对特定***或DB的预测依赖百分比与实际依赖百分比的对比。图中横轴代表时间,而纵轴代表依赖百分比。如所可见,虚线代表预测依赖百分比,而实线代表实际依赖百分比。
通过对总体结果进行反查,即可评估若特定***或DB出现高可用性问题,会对哪些关键链路产生多大的影响。
例如,如从图7中所可见,水平线可代表不同级别的风险预警。例如,水平虚线可代表警戒水平,水平实线可代表高风险水平。在本例中,警戒水平可为例如50%,而高风险水平可为65%。当该业务链路对该特定***或DB的依赖百分比超过警戒水平时,若该特定***或DB出现高可用性问题,则该业务链路(例如,关键业务链路)可能会受到影响。当该业务链路对该特定***或DB的依赖百分比超过高风险水平时,若该特定***或DB出现高可用性问题,则该业务链路(例如,关键业务链路)可能会受到严重影响。如所可知,本例中的风险水平级别的具体数值仅为示例。在不同场景中,可根据具体需要、经验或其他因素来决定风险水平级别的具体阈值。
尽管在本例中仅示出了两级风险预警,但是本公开并不被限定于此,而是可以包括更多或更少的风险预警级别。
图8示出了根据一示例性实施例的基于时序预测的业务影响评估***架构800的数据流图。如所可见,该***架构可包括线上业务数据库802、采样数据库804、全局唯一性链路业务标识数据库806以及全局运行故障数据库808。采样数据库804中的数据可以通过对线上业务数据库802进行采样来获得。例如,根据一示例性而非限定性实施例,可对线上业务数据库802进行例如1:100的正则采样。采样数据库804中的数据可以例如包括但不限于以上结合图2和图3描述的***日志200和/或数据库日志300等的形式。例如,***日志和/或数据库日志可包括全局唯一性链路业务标识等。
***可从采样数据库804获取业务维度采样数据810。业务维度采样数据810可表示按业务维度来组织的采样数据。业务维度采样数据810可按时间排列,从而得到业务采样时间序列814。
另一方面,通过采用全局唯一性链路业务标识数据库806中的全局唯一性链路业务标识,可以进行业务数据聚簇。通过这种方式,可以得到某个时间段采样数据中特定关键链路的业务总量及在这些采样业务中调用到某个***或DB的业务总量。对多个时间段的采样数据进行时序排列,即得到了该业务链路对于某个***或DB在过去一段时间调用关系的时间序列,例如聚合粒度采样时间序列816。
业务采样时间序列814和聚合粒度采样时间序列816可被输入到机器学习模型818中。例如,机器学习模型818可包括深度学习网络等。根据一示例性而非限定性实施例,机器学习模型818可以预测链路在未来时间对***和/或数据库的依赖程度(例如,百分比)。
根据一示例,***从全局运行故障数据库808获取核心链路的信息。结合核心链路的信息并基于机器学习模型818的预测结果,***可以评估聚焦后的关键链路单库/单机宕机影响,进行业务趋势分析与预测,和/或链路稳定性与合理性分析等等。
聚焦后的关键链路单库/单机宕机影响涉及特定关键链路对单个数据库/***的依赖程度。根据示例,当特定关键链路对特定数据库/***的依赖程度超过例如警戒水平时,和/或当特定关键链路对特定数据库/***的依赖程度超过高风险水平时,***可以采取相应的容灾保障措施,例如实现实时备份、增加备份数量等等。
业务趋势分析与预测可涉及小时、日、周、月、季度、年等各种时间尺度以用于例如知识破障。在一场景中,可以预测未来一周的线上购票业务趋势。例如,可能预测到在即将到来的周五,线上购票业务对相应业务数据库的依赖可能会突破高风险水平。相应地,可以预先做好数据库扩容和/或备份等准备。
链路稳定性与合理性分析涉及基于机器学习模型818的预测结果对特定链路在高压力情况下的稳定性进行分析。例如,若有多个业务链路依赖于一特定***,则即便每个业务链路对该特定***的依赖程度不高,其集总效应也可能导致该特定***超负荷。此类分析可以用于进行架构引导,以便于构建更稳定安全抗压的***架构。
图9示出了根据本公开一示例性方面的基于时序预测的业务影响评估方法900的框图。在框902,方法900可以分析***和/或DB调用关系日志,以得到每个业务链路中***和/或数据库的调用关系。例如,***调用关系日志和数据库调用关系日志可以包括但不限于例如以上结合图2和图3描述的调用关系日志,其可包括全局唯一性链路业务标识以用于在全链路各个***和/或数据库之间区分业务。该全局唯一性链路业务标识可标识相应的***和/或DB调用属于哪个业务。
在框904,方法900可以对业务数据进行全局采样分析,以得到过去一段时间里的各个时间点上,每一条关键链路对每一个***和/或DB的调用占比。例如,可以通过利用各关键链路的全局唯一性链路业务标识,对***和数据库调用关系进行全局采样,得到过去各个时间点上,这些关键链路中的每一者对每一个***或数据库的调用占比。采样频率可以根据业务场景和具体需要等来决定。特定关键链路在数个采样时间对各***和数据库的调用占比可如例如图5所示。
在框906,方法900可对多个时间段的采样数据进行时序排列,以得到各个业务链路在过去一段时间上对于特定***或DB的调用关系时间序列。例如,特定业务链路在过去一段时间上对于特定***或DB的调用关系时间序列可以如图6中所示。
在框908,方法900可基于特定业务链路在过去一段时间上对于特定***或DB的调用关系时间序列,来预测该序列在未来一段时间上的变化。例如,特定业务链路在一段时间上对特定***或DB的预测依赖百分比与实际依赖百分比的对比可如图7中所示。特定业务链路在过去一段时间上对于特定***或DB的调用关系时间序列的预测可以基于各种算法,例如Holt-Winters三次指数平滑算法等。
在框910,方法900可以根据预测结果来确定特定业务链路在未来时间对特定***和/或数据库的依赖程度。例如,如图7中所示,可预先为特定业务链路对特定***和/或数据库的依赖程度设定一个或多个阈值,以判断在特定***和/或数据库在未来出现高可用性问题的情况下,特定业务链路在未来时间对该特定***和/或数据库的依赖程度对关键链路将导致多大的影响。相应地,可以采取各种容灾保障措施,还可实现知识破障、架构引导等来增强整个架构的稳定性。
图10示出了根据本公开一示例性方面的基于时序预测的业务影响评估装置1000的框图。装置1000可以包括用于分析***和/或DB调用关系日志,以得到每个业务链路中***和/或数据库的调用关系的模块1002。模块1002可以执行以上结合图9描述的方法900的框902等的功能。
装置1000可进一步包括用于进行全局采样分析,以得到过去各个时间点上,每一条关键链路对每一个***和/或DB的调用占比的模块1004。模块1004可以执行以上结合图9描述的方法900的框904等的功能。
装置1000可进一步包括用于对多个时间段的采样数据进行时序排列,以得到各个业务链路在过去一段时间上对于特定***或DB的调用关系时间序列的模块1006。模块1006可以执行以上结合图9描述的方法900的框906等的功能。
装置1000可进一步包括用于基于特定业务链路在过去一段时间上对于特定***或DB的调用关系时间序列,来预测该序列在未来一段时间上的变化的模块1008。模块1008可以执行以上结合图9描述的方法900的框908等的功能。
装置1000可进一步包括用于根据预测结果来确定特定业务链路在未来时间对特定***和/或数据库的依赖程度的模块1010。模块1010可以执行以上结合图9描述的方法900的框910等的功能。
装置1000的各个模块可以用各种方式来实现。例如,上述模块可以被配置成软件。根据一示例性而非限定性实施例,上述模块可以按处理器可读指令的形式被存储在存储器中,并在由处理器执行时实现相应的功能。根据另一示例性而非限定性实施例,上述模块可被实现在存储处理器可读指令的计算机可读介质上。
在其他方面,装置1000的各个模块也可被实现为硬件。例如,装置1000的各个模块可被实现为逻辑块、电路模块、通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑器件、门或晶体管逻辑、硬件组件等或其任何组合。
在进一步的方面,装置1000的各个模块也可被实现为硬件与软件的组合(诸如,固件)。本公开在此方面并不受限定。
本领域普通技术人员应理解,本发明的有益效果并非由任何单个实施例来全部实现。各种组合、修改和替换均为本领域普通技术人员在本发明的基础上所易于明了。
此外,除非特别指出,否则术语“或”旨在表示包含性“或”而非排他性“或”。即,除非另外指明或从上下文能清楚地看出,否则短语“X采用A或B”或类似短语旨在表示任何自然的可兼排列。即,短语“X采用A或B”藉由以下实例中的任何实例得到满足:X采用A;X采用B;X采用A和B两者。术语“连接”与“耦合”可表示相同含义,即两组件之间直接的或经由一个或多个居间组件的间接耦合。另外,本申请和所附权利要求书中所用的冠词“一”和“某”一般应当被理解为表示“一个或多个”,除非另外特别声明或从上下文中可以清楚地看出是指单数形式。
各个方面或特征以可包括数个设备、组件、模块及类似物等的***的形式来呈现。应理解的是,各种***可以包括附加的设备、组件、模块及类似物等,和/或可以并不包括所讨论的实施例中的设备、组件、模块及类似物的全体。
结合本文中所公开的实施例描述的各种说明性逻辑、逻辑块、模块和电路可以用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑器件、门或晶体管逻辑、硬件组件。但在替换方案中,处理器可以是任何常规的处理器、控制器、微控制器或状态机。以上结合方法描述的实施例可以通过处理器和与之耦合的存储器来实现,其中处理器可被配置成执行前述任何方法的任何步骤或其组合。
结合本文中的实施例描述的方法或算法的步骤和/或动作可直接在硬件中、在由处理器执行的软件模块中、或在这两者的组合中实施。例如,以上结合各个方法描述的实施例可以通过存储有计算机程序代码的计算机可读介质来实现,其中该计算机程序代码在由处理器/计算机执行时执行前述任何方法的任何步骤或其任何组合。
本公开中通篇描述的各种方面的要素为本领域普通技术人员当前或今后所知的所有结构上和功能上等效的方案均被本公开所覆盖。此外,本文中任何内容无论是否在权利要求书中被述及,均并非旨在贡献给公众。