陳丹
摘要:隨著互聯網的普及,以及航空機票電子化的全面推行,人們更傾向于在網上預訂機票和選擇旅游產品。目前,能夠提供強大票價搜索引擎的公司基本上是外國的航空公司票價搜索提供商,他們不為航空公司提供本地票價搜索引擎,而是要求各航空公司,通過互聯網或專線,先把所有的票價發(fā)布到票價提供商的主機上,然后才能進行票價搜索,并且按查詢次數向航空公司收取費用,這種做法非常不利于各航空公司建立自己的本地票價庫,從而無法進行相應的數據分析。因此,國內各航空公司想要發(fā)展,提高銷售額,必須擁有自己的票價搜索系統?,F階段,開發(fā)一個適合國內航空公司的本地票價搜索引擎勢在必行,這樣才能幫助航空公司打造一流的網上銷售平臺,保障網上銷售渠道的暢通,提升競爭力。
關鍵詞:票價搜索;引擎;ATPCO規(guī)則
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)29-0260-03
1項目背景
隨著互聯網的普及、航空機票電子化的全面推行,人們出行不再需要親自到機票銷售點去預訂機票,而是選擇使用計算機或者手機通過互聯網,進入航空公司或者其他銷售機票的網站上預訂機票。
近年來,各航空公司除了提供網上訂票、出票及網上值機的服務外,還提供了諸如酒店住宿、租車等旅行產品服務,且這些產品的銷售量逐年增高。隨著航空公司網絡銷售業(yè)務的高速發(fā)展,其票價搜索的速度嚴重制約了機票及其相關旅游產品的銷售業(yè)績。因此,對于航空公司來講,擁有強大的票價搜索引擎,提供豐富多樣的旅行產品已經成為航空公司迫在眉睫的問題所在。
目前,能夠提供強大票價搜索引擎的公司有:ATPCO(Air-line Tariff Publishing Company)、SITA(Societe International DeTelecommun-ications)、TRAVELPORT等公司,國內除南航引進SITA第一代搜索引擎以外尚無其他航空公司擁有自己的搜索引擎,只有少數公司通過合作方式接入SITA AIRFARE進行運價計算和查詢。因此,擁有自己強大的票價搜索引擎是提高銷售業(yè)務,進而提高其核心競爭力的關鍵所在。
縱觀全球,許多國外航空公司票價搜索提供商并不為航空公司提供本地票價搜索引擎,所有的查詢都必須經過互聯網或專線,首先將所有票價發(fā)布到票價提供商的主機上,然后才能進行票價搜索,查詢按次數來收費,這樣不僅增加了航空公司銷售的成本,且非常不利于各航空公司建立自己的本地票價庫,從而無法對競爭對手和市場進行票價數據分析。
國內有航空公司引進的第一代票價搜索引擎,能夠進行單程、往返、缺口程以及中轉聯程和ADDON的基本票價搜索,但由于技術上的限制,該搜索引擎不是按照ATPCO(Airline Tariff Publishing Company)國際運價規(guī)則標準開發(fā)的,因此不能完全支持ATPC01-50項的規(guī)則,即不能進行完全意義上的票價搜索,同時也不能滿足各航空公司日益增長的網上銷售量和查詢量。
鑒于以上原因,開發(fā)一個適合國內航空公司的本地票價搜索引擎勢在必行。只有擁有自主知識產權的票價搜索引擎,建立航空公司自身完整的本地票價數據庫,才能幫助航空公司打造一流的網上銷售平臺,保障網上銷售渠道的暢通,提升競爭力,使之能躋身于世界一流的航空公司之列。
2系統總體結構
為了提供一個能支持ATPCO行業(yè)標準的搜索引擎算法,系統采用負荷平衡策略支持多個用戶同時在線搜索,并根據用戶所提供的搜索字段對數據庫中保存的所有票價信息進行搜索,并盡可能在短時間內將搜索結果返回給用戶。
此外,為了能夠適應ATPCO每年修訂的新標準,本系統還應具有良好的可擴展性。
本系統的結構如圖:
系統原理:終端用戶提交的搜索請求經由負載均衡調度機到達各個從數據庫服務器進行處理。在這些從數據庫服務器上部署搜索引擎的業(yè)務邏輯,通過Oracle TimesTen In-memoryDatabase所提供的備份、熱交換及數據恢復等功能,實現從數據服務器之間的相互冗余備份。另外,Oracle TimesTen In-memory Database還能提供數據復制功能,主數據庫可以實時地對各個從數據庫進行數據的更新,以保持數據的同步和一致性。
3系統主要功能及函數設置
本系統的功能包括:艙位信息的輸入和修改,客機信息的輸入、修改和查詢,航線信息的輸入、修改和查詢,訂票信息的輸入、查詢和修改等。
用戶登錄該系統后,可以通過查詢,選擇機票或其他旅游產品,下單并完成支付,系統根據支付記錄給用戶指定的手機號碼發(fā)送電子憑證,用戶可根據電子憑證到相應的服務點領取所定制的產品服務。
本系統設置的票價搜索引擎函數及函數的功能包括:
1)getMatching函數
功能:返回符合搜索條件的一系列票價。
輸入:起飛地、目的地、起飛日期、航程類型(S、R)、CUG、成人數、兒童數、嬰兒數
在這個getMatching函數中還需注意設置以下參數:
a.如果兒童數大于0,則票價必須含有兒童票價才會返回。嬰兒數同理。其它函數同樣適用。
b.如果成人數是0,返回的票價不按成人票價從小到大排序。如果成人數是0,兒童數是1,返回的票價按兒童票價從小到大排序。
c.如果
d.要使用某一票價,必須從返回結果匹配其使用條件。
2)getSelectedFare函數
功能:返回符合條件的唯一票價,適合用于做票價確認。
輸入:fare reference(一般由前一次查詢產生),與getinfo相同。
3)fares For Availability函數
功能:返回符合搜索條件的所有票價。
輸入:起飛地、目的地、起飛日期、航程類型(S、R)、CUG、成人數、兒童數、嬰兒數、艙位、航班號、缺口程需加上返程起飛地、返程目的地。
fares For Availability函數中需要特別留意的地方有以下三點:
a.查詢往返程、缺口程票價時,艙位必須前后一致。
b.當查詢往返程票價時,返回的是往返程的合計票價,而getFaresForItinerary函數分別返回每個航段的票價(單程、半往返程)。
c.請求時
4)getInfo函數
功能:返回額外的票價信息,如使用條件、提供的特殊服務等。
輸入:fare reference(一般由前一次查詢產生),與getSelect-edFare所得的結果相同。
5)getFaresForItinerary函數
功能:返回復雜航線的各個航段單程和(或)半往返程票價(同時存在out和in航段請求時才返回半往返程票價)。
輸入:與faresForAvailability類似。
使用getFaresForItinerary函數時,須特別留意以下幾點:
a.各航段可以是不同艙位的組合。
b.可組合一個Addon、Main fare、一個Onwards航段(加上返程)。
c.同一方向的Main fare可以是一個航段、有多個經停點的航段,但不允許是二個或以上獨立航段,否則會顯示沒有票價返回。
d.如果第一個請求航段不是Addon,且與第二個同向的航段沒有經停票價,將沒有票價返回。
e.經停點可以像faresForAvailability一樣用
4本系統采用的關鍵技術
衡量一個票價搜索引擎系統性能的標準是:能否提供豐富多彩的產品服務,能否在查詢訂單之后快速響應。為了達到這兩個目標,本系統采用了以下關鍵技術來保證系統性能。
1)Oracle TimesTen In-memory Database
通過采用高性能的內存數據庫,使系統在查詢票價時可以達到最快捷的響應速度,由于這些票價數據都是存放于數據庫服務器的內存中,而且業(yè)務邏輯也部署于同一臺服務器(引擎服務器)上,因此能夠最大限度地減少網絡帶寬所帶來的性能影響以及提供系統的穩(wěn)定性。另外,系統可同時部署若干引擎服務器,為保證數據的一致性,采用主從結構的形式,由主數據庫實時地將所有的數據變化同步到從內存數據庫中,這樣,即使其中某些節(jié)點出現問題,也不會影響整個系統的正常工作。
2)基于IP和基于內容請求分發(fā)的負載平衡調度
系統前端配置一個前置調度機,從網絡傳送過來的搜索請求數據會經由此前置機被分發(fā)到各個引擎服務器上。
系統將來自不同IP的請求采用如哈希算法計算出一組目標引擎服務器,然后將來自這些IP地址的請求轉發(fā)到該組服務器上。確定服務器的范圍以后,請求的內容也經過一定的算法分析,然后計算出某特定的目標服務器,最后將該請求發(fā)送到相應的服務器上。這樣做的目的是使某特定的引擎服務器可以專門負責某類型的搜索請求,從而可以極大地提高搜索速度。數據庫系統的特點決定了近似的搜索能得到更快的響應速度。
由于這些引擎服務器上都部署有相同的業(yè)務邏輯,所以理論上這些服務器能實現的搜索功能都是一致的。于是,如果某一時間某類型的請求過多,而處理該類請求的服務器負荷較重,則可以將其他較為空閑的服務器配置為可處理該類請求。
3)其他提高搜索速度的方法
一般情況下,從數據庫中搜索得到的票價信息并不是用戶所要求的信息,還需要對其作進一步的過濾。這部分的過濾功能可以通過自行實現相應的算法去查找和計算這些中間結果集,得到最終的結果并返回給用戶,或者根據這些計算結果再次對數據庫進行查找,從而得到更準確的結果集。這部分算法的實現應與業(yè)務需求緊密聯系。
4)使用Search Oriented Architecture面向搜索的架構
面向搜索引擎的架構設計主要在業(yè)務層和數據層之間添加一個搜索層,該層的作用在于將業(yè)務系統和數據庫系統的關聯性減到最小,從而大大提高系統的可擴展性。從工作流程的角度上看,業(yè)務層首先向搜索層提出搜索的請求,數據搜索的任務是在搜索層里完成。由于將搜索功能單獨提取出來作為一層,搜索的數據對象將不僅限于數據庫系統中存放的數據,還可以是網頁,文件系統中存放的文件等等。在本系統里面,可以先實現對數據庫的搜索功能。
5)使用Service Oriented Architecture面向服務的架構
面向服務的架構主要是對現有的代碼重用想法的改進。現有的代碼重用通?;卺槍δ程囟üδ軐崿F的函數或基于面向對象技術的類的重用。這些方法的缺點是功能過于分散和微小,即使重用代碼也需要花非常多時間實現新的業(yè)務應用和進行測試。面向服務的架構設計方法的原則是盡量將系統中的各個功能(一般為系統提供的各種服務)最大限度地分割開來,從而減少針對這部分功能所需設計的功能接口。每個服務或功能點間需要確定一組通信的協議,并且相互關聯程度盡量減到最低。最理想的情況下各服務之間只需要知道其他服務是否存在并正常運行。這種架構可以降低各個服務或功能點之間的耦合程度,提高代碼重用效率,也大大加快了擴展業(yè)務功能的速度,因為在許多情況下系統工程師只需要將系統現有的服務重新組合就可以實現新的業(yè)務功能。
對本系統來說,票價搜索是系統的核心功能,在將來可能的應用中,票價的搜索可能會被用于網上購票系統,機場信息部門查詢系統,業(yè)務分析系統,客戶關系管理系統等等,于是在設計的初步階段將票價搜索實現成一個面向服務的架構將會對以后的業(yè)務應用有非常大的幫助
5系統的重要性能分析
響應時間:對于票價搜索引擎來講,準確性和及時性是其所要具備的首要性能。票價搜索結果在日常處理中的響應速度為秒級,因此,在系統是設計和開發(fā)的過程中,充分考慮了諸如獲取數據庫連接的時間、執(zhí)行查詢語句的時間、將結果發(fā)回數據庫客戶端的時間等因素,細心挑選合適的算法,盡可能縮短搜索的響應時間。
系統的延展性:由于ATPCO行業(yè)標準在未來有可能會有所調整,因此,在本系統中,還考慮了系統的延展性,使其能根據行業(yè)標準的變化來適時調整。此外,本系統還考慮到隨著用戶和服務的增加,預留了性能擴充的位置。
主從數據庫:系統采用了主數據庫服務器和從數據庫服務器的結構,這種結構除了能提高搜索的響應速度外,還能提供更多的保障:在主數據庫服務器發(fā)生故障的情況下,系統會從其他從數據庫服務器中挑選一個出來暫時代替主數據庫服務器的位置,從而保證了系統的整體功能不受影響。
6總結
文章通過項目背景,闡述了開發(fā)一個適合國內各航空公司使用的票價搜索引擎的迫切性,從系統的總體結構、系統的主要功能和相應函數設置、系統采用的關鍵技術和系統的重要性能分析五個方面,詳細介紹了本票價搜索引擎系統的全貌。