CN101540780A - 基于数据/视频服务系统的数据请求消息处理方法 - Google Patents

基于数据/视频服务系统的数据请求消息处理方法 Download PDF

Info

Publication number
CN101540780A
CN101540780A CN200810179043A CN200810179043A CN101540780A CN 101540780 A CN101540780 A CN 101540780A CN 200810179043 A CN200810179043 A CN 200810179043A CN 200810179043 A CN200810179043 A CN 200810179043A CN 101540780 A CN101540780 A CN 101540780A
Authority
CN
China
Prior art keywords
data
request information
server
export
data request
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN200810179043A
Other languages
English (en)
Other versions
CN101540780B (zh
Inventor
崔竞飞
胡毓明
欧阳峰
李培琳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Academy of Broadcasting Science of SAPPRFT
Original Assignee
Academy of Broadcasting Science of SAPPRFT
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Academy of Broadcasting Science of SAPPRFT filed Critical Academy of Broadcasting Science of SAPPRFT
Priority to CN2008101790435A priority Critical patent/CN101540780B/zh
Publication of CN101540780A publication Critical patent/CN101540780A/zh
Application granted granted Critical
Publication of CN101540780B publication Critical patent/CN101540780B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于数据/视频服务系统的数据请求消息处理方法,所述数据请求消息处理方法通过多级队列将数据请求消息请求的数据文件发送给数据申请方;本发明通过多级消息队列的方式处理对数据文件的请求消息,根据数据文件的存储结构,分解成多个输出子队列,控制多个输出服务器,以负载均衡的方式输出用户请求数据,使数据输出系统始终在最大效率的情况下工作实现了对大量数据申请的高效处理和对大流量数据高效输出。

Description

基于数据/视频服务系统的数据请求消息处理方法
本申请是《一种数据文件的存储方法和消息处理方法》的分案申请
申请日:2004年12月29日
申请号:200410102654.1
技术领域
本发明涉及一种基于数据/视频服务系统的数据请求消息处理方法,尤其是一种基于均衡数据/视频系统,用于均衡负载流量数据文件的消息处理方法。
背景技术
随着网络技术的发展,用户对视频/数据点播的需求日益增加,针对这种需求,出现了点(视频/数据发送方)对多点(多个用户)的数据传输方案。目前,大多数提供视频/数据服务的系统,在处理大量的数据申请时,一般因为硬盘瓶颈,总线瓶颈和网络瓶颈导致输出能力不足,不能支持很大的同时点播率。一般提供视频/数据服务的系统包括存储控制服务器和输出服务器等,所述的存储控制服务器负责分配、管理业务内容的存储与输出,相关业务流程的消息同步;所述的输出服务器负责输出队列的平衡,提供可堆叠的宽带文件交换接口,在其内部存储有相关的业务内容,并提供可靠的数据文件管理和保护。
一般,视频/数据服务的系统的数据请求数量可能会比较大,由于现有机制是在输出服务器上以多机之间存储相同的文件来保证流量,或者固定节目在输出服务器上的存储位置,这样导致不能够很好地平衡输出服务器的负载,造成部分输出服务器负载量过大,甚至满负荷工作,而部分输出服务器资源未被充分利用,甚至未工作。并且,由于现有机制中的文件内容是分别存储在不同的服务器上,如果其中某台服务器异常不能正常工作,可能会导致请求该服务器上的数据文件丢失,无法被正常被传输出去。
发明内容
本发明的目的在于针对现有技术的不足,提出一种基于数据/视频服务系统的数据请求消息处理方法,对大流量数据实现数据输出的负载均衡与高效率响应。
为实现上述目的,本发明提供了一种基于数据/视频服务系统的数据请求消息处理方法,所述系统包括存储控制服务器和与其连接的一个或一个以上的输出服务器,所述输出服务器存储有数据文件,该方法包括以下步骤:
步骤1、所述存储控制服务器根据接收到的数据请求消息确定输出服务器并将该输出服务器信息封装到数据请求消息中;
步骤2、所述存储控制服务器将封装后的数据请求消息添加到数据请求总队列和与所述输出服务器相对应的子队列中;
步骤3、所述存储控制服务器通过数据请求发送线程从所述子队列中提取数据请求消息,并发送到对应的输出服务器;
步骤4、所述输出服务器接收该数据请求消息,将该数据请求消息中请求的数据文件发送给数据申请方,并向存储控制服务器返回数据回应消息;
步骤5、所述存储控制服务器响应所述输出服务器的数据回应消息,将数据请求总队列和对应的子队列中的对应该数据文件的请求消息删除。
其中,所述步骤1中所述存储控制服务器根据接收到的数据请求消息确定输出服务器的过程包括以下步骤:
步骤1a、所述存储控制服务器查询与接收到的数据请求消息对应的数据文件名和存储该数据文件的所有输出服务器;
步骤1b、查询输出服务器的负载情况,并将负载小的一个或一个以上的输出服务器确定为输出该数据请求消息请求的数据文件的输出服务器,其中,所述输出服务器的负载情况通过查询输出服务器对应子队列的数据文件请求消息的个数获得。
步骤4中输出服务器接收该数据请求消息,将该数据请求消息中请求的数据文件发送给数据申请方的过程包括以下步骤:
步骤4a、所述输出服务器接收该数据请求消息后查询其一个以上的输出接口的输出压力,将输出压力最轻的输出接口确定为输出该数据文件的输出接口;
步骤4b、所述输出服务器控制该输出接口将该数据请求消息中请求的数据文件发送给数据申请方。
所述步骤5还包括:所述存储控制服务器响应所述输出服务器的数据回应消息,修改该数据文件的使用状态。
本发明建立了一套数据/视频服务中对于大流量数据申请的高效响应机制。通过多级消息队列的方式来处理对数据文件的请求消息,可以根据数据文件的存储结构,分解成多个输出子队列,控制多个输出服务器,以负载均衡的方式输出用户请求数据,使数据输出系统始终在最大效率的情况下工作实现了对大量数据申请的高效处理和对大流量数据高效输出。
以下结合附图和实施例对本发明做进一步的详细说明。
附图说明
图1为本发明所述系统的结构示意图;
图2为数据文件的存储分配示意图;
图3为本发明所述请求消息的处理方法的流程图;
图4为本发明中的总队列与子队列的关系示意图。
具体实施方式
参见图1,为本发明所述系统的结构示意图,一种用于均衡数据/视频服务负载流量的系统包括一个存储控制服务器(CSC)1和一个或一个以上的输出服务器(CSO)21、22……2n,所述的CSC1分别与CSO21、CSO22……CSO2n连接,CSC1将接收的数据请求消息发送到存储有对应数据文件的CSO,CSO接收到该消息后输出对应的数据文件。所述的CSC1用于对节目请求进行整合分发;所述的CSO存储有与所述存储空间分配表中的存储位置相同的数据文件,响应节目请求将请求的数据文件发送给数据申请方。
为了实现负载均衡的目的,采取了以下技术手段:首先,通过存储方法将数据文件存储在不同的CSO上(即交织存储策略),通过这样的数据存储结构,使数据文件在存储时达到一定平衡,然后,在响应数据文件的请求消息时,在输出时可以根据CSO的负载情况,选择相应的负载较轻的CSO输出。
所以,本发明提供了一种数据文件的存储方法,首先,CSC根据CSO的个数n和需要存储的次数k,计算每一存储空间对应的存储位置;然后再将数据库中的数据文件依次存储到计算得到的存储位置中。
具体的,为管理方便,CSC在根据CSO的个数n和需要存储的次数k,计算每一存储空间对应的存储位置时,生成一个存储空间分配表(SAT),表的内容包括存储空间编号(StorageSpaceID)、存储位置(StoragePosition)和空间状态(Status),每个存储的数据文件对应一个StorageSpaceID,每个StorageSpaceID对应一个的StoragePosition,所述的存储位置为存储数据文件的各个CSO编号,该CSO编号的个数即为存储的次数,Status表示该空间位置是否被占用。具体实施例如下:(其中,CSO的个数n=4,存储的次数k=2),此时所述的SAT表的结构如表1所示。
表1
  StorageSpaceID   StoragePosition   Status
  1   CSO1,CSO2   已经使用
  2   CSO2,CSO3   已经使用
  3   CSO3,CSO4   已经使用
  4   CSO4,CSO1   正在使用
  5   CSO1,CSO2   正在使用
  6   CSO2,CSO3   没有使用
  ……   ……   ……
其中,每一存储空间对应的存储位置即CSO编号通过如下的算法获得:(其中n为CSO个数,k为存储次数)
for(int i=0;i<=空间分配最大值;i++)
{临时存储编号=0
  起始存储编号=i%n  (符号”%”为取模运算)
  for(int j=1;j<k;j++)
  {  当前存储编号=起始存储编号+j;
     if(当前存储编号>n)
     {当前存储编号=当前存储编号-n}
     临时存储编号=临时存储编号+当前存储编号
}
记录临时存储编号为空间编号为i时的最终存储编号,即输出服务器编号
}。
根据上述算法,以n=4,k=2为例,
当StorageSpace ID=1时,对应该存储空间的CSO编号为1、2…k;
当StorageSpace ID=2时,对应该存储空间的CSO编号为2、3、…k+1;
依次类推,
当StorageSpaceID=n-k+1时,对应该存储空间的CSO编号为(n-k+1)、(n-k+2)…n;
当StorageSpaceID=n-k+2时,对应该存储空间的CSO编号为(n-k+2)、(n-k+3)…n、1;
当StorageSpaceID=n-k+3时,对应应该存储空间的CSO编号为(n-k+3)、(n-k+4)…n、1、2;
如上表所示,
当StorageSpace ID=1时,对应该存储空间的CSO的编号为1、2;
当StorageSpace ID=2时,对应该存储空间的CSO的编号为2、3;
当StorageSpace ID=3时,对应该存储空间的CSO的编号为3、4;
当StorageSpace ID=4时,对应该存储空间的CSO的编号为4、1;
依次类推。
根据上述的存储策略,特点有:保证k-1(k为存储次数)台CSO出现异常,无法正常运行时,整个系统的运行流程不会受到影响;最大程度的平滑CSO的负载,避免出现单台CSO超负荷运行,而其他CSO却是无负荷运行;方便系统的扩容,即新增加CSO的个数或改变节目存储次数时,不需要修改原程序,只需要重新配置系统运行参数,初始化节目即可。
在存储文件即生成SAT表的同时,还记录已存储的数据文件名及其存储位置,此时生成另外一存储位置表(SPT),在根据上述存储策略进行存储数据文件时,CSO存储后向CSC返回存储完成响应消息,CSC响应CSO的存储回应消息,根据存储回应消息的内容生成存储位置表(SPT),来记录数据文件的存储位置(即存储该数据文件的CSO编号)以及其他存储状况,SPT表和SAT表通过相同的StorageSpaceID项相互关联。与表1相对应,所述的SPT表如图2所示,由于交织存储的次数为2,每一文件存储2次,其存储的CSO如图2所示。
当根据上述的存储方法存储数据文件的均衡数据/视频服务系统接收到一个或一个以上数据请求消息后,将该请求消息请求的数据文件发送出去的方法,如图3所示,包括以下步骤:
步骤1、所述存储控制服务器根据接收到的数据请求消息确定输出服务器并将该输出服务器信息封装到数据请求消息中;
步骤2、所述存储控制服务器将封装后的数据请求消息添加入数据请求总队列和与所述输出服务器相对应的子队列中;
步骤3、所述存储控制服务器通过数据请求发送线程从所述子队列中提取数据请求消息,并发送到对应的输出服务器;
步骤4、所述输出服务器接收该数据请求消息,将该数据请求消息中请求的数据文件发送到数据申请方,并向存储控制服务器返回数据回应消息;
步骤5、所述存储控制服务器响应所述输出服务器的数据回应消息,修改数据请求总队列和对应的子队列。
具体地,以CSO的个数为4,存储次数为2时的存储策略存储数据文件的系统为例,为响应每个点播请求消息,CSC都会建立对应的消息队列,对这些消息进行管理,消息转发至CSO都由相应的线程操作完成,只有在CSO返回响应消息后,才对队列进行修改,即把相应的请求消息从队列中删除,这样的操作能够保证消息的可靠性,避免消息在CSC系统中丢失。
可能单位时间请求消息的数量非常多,对CSO的压力大,CSC对该类请求消息采用分级建队列的方法,即一个总队列和多个子队列,总队列保存了所有的请求消息,每个子队列对应一个响应的CSO。分级队列的特点是:把数据请求消息根据各CSO的负载情况分配到对应的子队列,能够保证数据分发的均衡,避免单个CSO负载过大;多个队列并行分发能够提高消息分发的效率;子队列可以根据对应CSO的负载,控制分发至该CSO的消息个数,降低CSO的负载压力;总队列包含了所有子队列的请求消息,这样即使某台CSO系统无法正常工作,也能保证该CSO对应子队列消息不丢失。本发明中的总队列与子队列的关系示意图如图4所示,在图4中,以CSC收到12个请求消息,共有4个CSO为例,其中,子队列A1对应CSO21,子队列A2对应CSO22,子队列A3对应CSO23,子队列A4对应CSO24。每一个子队列里有3个数据请求消息。
当CSC1收到数据文件的请求消息后,根据接收到的数据请求消息确定输出服务器的过程,具体为:
首先,所述CSC1查询SPT表,得到与接收到的数据请求消息对应的数据文件名和存储该数据文件的所有CSO的编号;例如,参见图2,如该数据文件为文件1,可知,存储该数据文件的所有CSO的编号为CSO21、CSO22,
然后,所述CSC1查询并比较所述输出服务器CSO21、CSO22相对应子队列1、2的数据文件请求消息的个数,如果子队列1目前的请求消息个数少,则将CSO21确定为输出该数据请求消息请求的数据文件的输出服务器。
当得到该数据文件1的文件名和输出该数据文件的输出服务器编号后,CSC将这两个信息整合为新的请求消息,将该请求消息添加进总队列和子队列1中;
所述CSC1通过数据请求发送线程从所述子队列1中提取数据请求消息,并发送到对应的输出服务器CSO21;
所述CSO21接收该数据请求消息,将该数据请求消息中请求的数据文件发送到数据申请方,并向CSC1返回数据回应消息;
所述CSC1响应所述CSO21的数据回应消息,修改数据请求总队列和对应的子队列1,将该处理完的请求消息删除。
另外,当对一个数据文件的请求较多时,为了满足数据申请方的需求,可以多台输出服务器输出,这时,CSC在比较CSO的负载个数,即其对就的子队列的排队情况时,选择负载较轻的一个或一个以上的输出服务器输出。
当CSO的输出接口一个以上时,CSO在输出数据文件的同时,还需要选择合适的输出接口,例如,当CSO21有3个输出接口时,所述CSO21接收该数据请求消息后,检索其内部存储的输出接口需要输出的数据文件个数,根据该输出接口需要输出的数据文件个数确定其输出压力,将需要输出的数据文件个数少即输出压力轻的一个或多个输出接口确定为输出该数据请求消息指定的数据文件的输出接口。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

Claims (6)

1、一种基于数据/视频服务系统的数据请求消息处理方法,所述系统包括存储控制服务器和与其连接的一个或一个以上的输出服务器,所述输出服务器存储有数据文件,其特征在于,该方法包括以下步骤:
步骤1、所述存储控制服务器根据接收到的数据请求消息确定输出服务器并将该输出服务器信息封装到数据请求消息中;
步骤2、所述存储控制服务器将封装后的数据请求消息添加到数据请求总队列和与所述输出服务器相对应的子队列中;
步骤3、所述存储控制服务器通过数据请求发送线程从所述子队列中提取数据请求消息,并发送到对应的输出服务器;
步骤4、所述输出服务器接收该数据请求消息,将该数据请求消息中请求的数据文件发送给数据申请方,并向存储控制服务器返回数据回应消息;
步骤5、所述存储控制服务器响应所述输出服务器的数据回应消息,将数据请求总队列和对应的子队列中的对应该数据文件的请求消息删除。
2、根据权利要求1所述的基于数据/视频服务系统的数据请求消息处理方法,其特征在于,所述步骤1中存储控制服务器根据接收到的数据请求消息确定输出服务器的过程包括以下步骤:
步骤1a、所述存储控制服务器查询与接收到的数据请求消息对应的数据文件名和存储该数据文件的所有输出服务器;
步骤1b、查询输出服务器的负载情况,并将负载小的输出服务器确定为输出该数据请求消息请求的数据文件的输出服务器。
3、根据权利要求2所述的基于数据/视频服务系统的数据请求消息处理方法,其特征在于,所述步骤1b中输出服务器的负载情况通过查询输出服务器对应子队列的数据请求消息的个数获得。
4、根据权利要求1所述的基于数据/视频服务系统的数据请求消息处理方法,其特征在于,所述步骤4中输出服务器接收该数据请求消息,将该数据请求消息中请求的数据文件发送给数据申请方的过程包括以下步骤:
步骤4a、所述输出服务器接收该数据请求消息后查询其一个以上的输出接口的输出压力,将输出压力轻的输出接口确定为输出该数据文件的输出接口;
步骤4b、所述输出服务器控制该输出接口将该数据请求消息中请求的数据文件发送给数据申请方。
5、根据权利要求4所述的基于数据/视频服务系统的数据请求消息处理方法,其特征在于,所述步骤4a中输出接口的输出压力由该输出接口需要输出的数据文件个数确定。
6、根据权利要求1所述的基于数据/视频服务系统的数据请求消息处理方法,其特征在于,所述步骤5中所述存储控制服务器响应所述输出服务器的数据回应消息后,还包括修改其内部存储的该数据文件的使用状态。
CN2008101790435A 2004-12-29 2004-12-29 基于数据/视频服务系统的数据请求消息处理方法 Expired - Fee Related CN101540780B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008101790435A CN101540780B (zh) 2004-12-29 2004-12-29 基于数据/视频服务系统的数据请求消息处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008101790435A CN101540780B (zh) 2004-12-29 2004-12-29 基于数据/视频服务系统的数据请求消息处理方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CNB2004101026541A Division CN100525435C (zh) 2004-12-29 2004-12-29 一种数据文件的存储方法

Publications (2)

Publication Number Publication Date
CN101540780A true CN101540780A (zh) 2009-09-23
CN101540780B CN101540780B (zh) 2010-09-29

Family

ID=41123766

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008101790435A Expired - Fee Related CN101540780B (zh) 2004-12-29 2004-12-29 基于数据/视频服务系统的数据请求消息处理方法

Country Status (1)

Country Link
CN (1) CN101540780B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102053800A (zh) * 2010-11-26 2011-05-11 华为技术有限公司 数据存取的方法、消息接收解析器及系统
CN104679596A (zh) * 2013-12-02 2015-06-03 航天信息股份有限公司 一种提高服务器端并发性能的消息处理方法及其系统
CN107291957A (zh) * 2017-07-31 2017-10-24 袁佳宁 一种基于数据信息互通的微型服务系统及其实现方法
CN108090114A (zh) * 2017-11-02 2018-05-29 珠海许继芝电网自动化有限公司 一种基于实时数据库的单链路请求应答的判定方法
CN108206752A (zh) * 2016-12-19 2018-06-26 北京视联动力国际信息技术有限公司 一种视联网设备的管理方法和装置
CN110855627A (zh) * 2019-01-16 2020-02-28 星环信息科技(上海)有限公司 应用部署方法、装置、设备及介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2305747A (en) * 1995-09-30 1997-04-16 Ibm Load balancing of connections to parallel servers
US7143128B1 (en) * 2000-06-08 2006-11-28 International Business Machines Corporation Interactive data processor controlled display interface for tracking of allocated messages in a dynamic workload balancing communication system
CN1367439A (zh) * 2002-02-10 2002-09-04 苏州市蜗牛电子有限公司 多客户端互动的负载均衡方法及系统
JP4019880B2 (ja) * 2002-09-26 2007-12-12 株式会社日立製作所 サーバ装置

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102053800A (zh) * 2010-11-26 2011-05-11 华为技术有限公司 数据存取的方法、消息接收解析器及系统
CN104679596A (zh) * 2013-12-02 2015-06-03 航天信息股份有限公司 一种提高服务器端并发性能的消息处理方法及其系统
CN108206752A (zh) * 2016-12-19 2018-06-26 北京视联动力国际信息技术有限公司 一种视联网设备的管理方法和装置
CN107291957A (zh) * 2017-07-31 2017-10-24 袁佳宁 一种基于数据信息互通的微型服务系统及其实现方法
CN108090114A (zh) * 2017-11-02 2018-05-29 珠海许继芝电网自动化有限公司 一种基于实时数据库的单链路请求应答的判定方法
CN110855627A (zh) * 2019-01-16 2020-02-28 星环信息科技(上海)有限公司 应用部署方法、装置、设备及介质
CN110855627B (zh) * 2019-01-16 2021-04-09 星环信息科技(上海)股份有限公司 应用部署方法、装置、设备及介质

Also Published As

Publication number Publication date
CN101540780B (zh) 2010-09-29

Similar Documents

Publication Publication Date Title
US7895231B2 (en) Queuing model for a plurality of servers
JP3818655B2 (ja) タスク・スケジューリングの方法、システム、およびプログラム製品
US9246780B2 (en) System and method for supporting port multiplexing in a server environment
CN109451072A (zh) 一种基于Kafka的消息缓存系统和方法
CN1134934C (zh) 用于根据客户特殊请求分发连续媒体内容的系统及方法
US7680848B2 (en) Reliable and scalable multi-tenant asynchronous processing
US20050138162A1 (en) System and method for managing usage quotas
JP2008537816A (ja) サービス要求を満足するためのリソース・マネージャを選択するための方法、システム、およびプログラム(サービス要求を満足するためのリソース・マネージャの選択)
WO2007088081A1 (en) Efficient data management in a cluster file system
CN102326161A (zh) 拓扑敏感的缓存协作
US20060069778A1 (en) Content distribution system
CN104023058B (zh) 一种存储资源的管理和分配方法和系统
CN103188161A (zh) 分布式数据加载调度方法与系统
US20040221011A1 (en) High volume electronic mail processing systems and methods having remote transmission capability
CN104580381B (zh) 一种在多节点网络中执行作业任务的方法
CN101540780B (zh) 基于数据/视频服务系统的数据请求消息处理方法
CN105959346A (zh) 基于服务器集群的数据处理系统及方法
CN101674320A (zh) 一种集群环境下的服务寻址方法及装置
US20230412529A1 (en) Store and forward logging in a content delivery network
CN108255610A (zh) 一种消息中介传输系统
CN107220184A (zh) 一种lun存储单元的管理方法及装置
JP5475702B2 (ja) メール保存バックアップシステムおよびバックアップ方法
CN100525435C (zh) 一种数据文件的存储方法
CN105354312A (zh) 一种文件存储方法、下载方法及系统
CN100536441C (zh) 一种大容量电子邮件的存储管理方法及其系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100929

Termination date: 20171229