精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

搜索引擎怎么選?攜程酒店訂單Elasticsearch實戰

開發 架構 開發工具
隨著訂單量的日益增長,單個數據庫的讀寫能力開始捉襟見肘。這種情況下,對數據庫進行分片變得順理成章。

 隨著訂單量的日益增長,單個數據庫的讀寫能力開始捉襟見肘。這種情況下,對數據庫進行分片變得順理成章。

[[237273]]

分片之后的寫,只要根據分片的維度進行取模即可。可是多維度的查詢應該如何處理呢?

一片一片的查詢,然后在內存里面聚合是一種方式,可是缺點顯而易見。

對于那些無數據返回分片的查詢,不僅對應用服務器是一種額外的性能消耗,對寶貴的數據庫資源也是一種不必要的負擔。

至于查詢性能,雖然可以通過開線程并發查詢進行改善,但是多線程編程以及對數據庫返回結果的聚合,增加了編程的復雜性和易錯性。可以試想一下分片后的分頁查詢如何實現,便可有所體會。

所以我們選擇對分片后的數據庫建立實時索引,把查詢收口到一個獨立的 Web Service,在保證性能的前提下,提升業務應用查詢時的便捷性。那問題就來了,如何建立高效的分片索引呢?

索引技術的選型

實時索引的數據會包含常見查詢中所用到的列,例如用戶 ID,用戶電話,用戶地址等,實時復制分發一份到一個獨立的存儲介質上。

查詢時,會先查索引,如果索引中已經包含所需要的列,直接返回數據即可。

如果需要額外的數據,可以根據分片維度進行二次查詢。因為已經能確定具體的分片,所以查詢也會高效。

為什么沒有使用數據庫索引

數據庫索引是一張表的所選列的數據備份。

由于得益于包含了低級別的磁盤塊地址或者直接鏈接到原始數據的行,查詢效率非常高效。

優點是數據庫自帶的索引機制是比較穩定可靠且高效的;缺陷是隨著查詢場景的增多,索引的量會隨之上升。

訂單自身的屬性隨著業務的發展已經達到上千,高頻率查詢的維度可多達幾十種,組合之后的變形形態可達上百種。

而索引本身并不是沒有代價的,每次增刪改都會有額外的寫操作,同時占用額外的物理存儲空間。

索引越多,數據庫索引維護的成本越大。所以還有其他選擇么?

開源搜索引擎的選擇

當時閃現在我們腦中的是開源搜索引擎 Apache Solr 和 Elastic Search。

Solr 是一個建立在 Java 類庫 Lucene 之上的開源搜索平臺,以一種更友好的方式提供 Lucene 的搜索能力。

它已經存在十年之久,是一款非常成熟的產品,提供分布式索引、復制分發、負載均衡查詢,自動故障轉移和恢復功能。

Elastic Search 也是一個建立在 Lucene 之上的分布式 RESTful 搜索引擎。

通過 RESTful 接口和 Schema Fee JSON 文檔,提供分布式全文搜索引擎。每個索引可以被分成多個分片,每個分片可以有多個備份。

兩者對比各有優劣:

  • 在安裝和配置方面,得益于產品較新,Elastic Search 更輕量級以及易于安裝使用。
  • 在搜索方面,撇開大家都有的全文搜索功能,Elastic Search 在分析性查詢中有更好的性能。
  • 在分布式方面,Elastic Search 支持在一個服務器上存在多個分片,并且隨著服務器的增加,自動平衡分片到所有的機器。
  • 社區與文檔方面,Solr 得益于其資歷,有更多的積累。

根據 Google Trends 的統計,Elastic Search 比 Solr 有更廣泛的關注度。

最終我們選擇了 Elastic Search,看中的是它的輕量級、易用和對分布式更好的支持,整個安裝包也只有幾十兆。

復制分發的實現

為了避免重復造輪子,我們嘗試尋找現存組件。由于數據庫是 SQL Server 的,所以沒有找到合適的開源組件。

SQL Server 本身有實時監控增刪改的功能,把更新后的數據寫到單獨的一張表。

但是它并不能自動把數據寫到 Elastic Search,也沒有提供相關的 API 與指定的應用進行通訊,所以我們開始嘗試從應用層面去實現復制分發。

為什么沒有使用數據訪問層復制分發

首先進入我們視線的是數據訪問層,它可能是一個突破口。每當應用對數據庫進行增刪改時,實時寫一條數據到 Elastic Search。

但是考慮到以下情況后,我們決定另辟蹊徑:

有幾十個應用在訪問數據庫,有幾十個開發都在改動數據訪問層的代碼。如果要實現數據層的復制分發,必須對現有十幾年的代碼進行肉眼掃描,然后進行修改。開發的成本和易錯性都很高。

每次增刪改時都寫 Elastic Search,意味著業務處理邏輯與復制分發強耦合。

Elastic Search 或相關其他因素的不穩定,會直接導致業務處理的不穩定。

異步開線程寫 Elastic Search?那如何處理應用發布重啟的場景?加入大量異常處理和重試的邏輯?然后以 JAR 的形式引用到幾十個應用?一個小  Bug 引起所有相關應用的不穩定?

實時掃描數據庫

初看這是一種很低效的方案,但是在結合以下實際場景后,它卻是一種簡單、穩定、高效的方案:

  • 零耦合。相關應用無需做任何改動,不會影響業務處理效率和穩定性。
  • 批量寫 Elastic Search。由于掃描出來的都是成批的數據,可以批量寫入 Elastic Search,避免 Elastic Search 由于過多單個請求,頻繁刷新緩存。
  • 存在大量毫秒級并發的寫。掃描數據庫時無返回數據意味著額外的數據庫性能消耗,我們的場景寫的并發和量都非常大,所以這種額外消耗可以接受。
  • 不刪除數據。掃描數據庫無法掃描出刪除的記錄,但是訂單相關的記錄都需要保留,所以不存在刪除數據的場景。

提高 Elastic Search 寫的吞吐量

由于是對數據庫的實時復制分發,效率和并發量要求都會較高。以下是我們對 Elastic Search 的寫所采用的一些優化方案:

使用 upsert 替代 select + insert/update

類似于 MySQL 的 replace into,避免多次請求,成倍節省多次請求帶來的性能消耗。

使用 bulkrequest,把多個請求合并在一個請求里面

Elastic Search 的工作機制對批量請求有較好的性能,例如 translog 的持久化默認是 request 級別的,這樣寫硬盤的次數就會大大降低,提高寫的性能。

至于具體一個批次多少個請求,這個與服務器配置、索引結構、數據量都有關系。可以使用動態配置的方式,在生產上面調試。

對于實時性要求不高的索引

把 index.refresh_interval 設置為 30 秒(默認是 1 秒),這樣可以讓 Elastic Search 每 30 秒創建一個新的 segment,減輕后面的 flush 和 merge 壓力。

提前設置索引的 schema,去除不需要的功能

例如默認對 string 類型的映射會同時建立 keyword 和 text 索引,前者適合于完全匹配的短信息,例如郵寄地址、服務器名稱,標簽等。

而后者適合于一片文章中的某個部分的查詢,例如郵件內容、產品說明等。

根據具體查詢的場景,選擇其中一個即可,如下圖:

對于不關心查詢結果評分的字段,可以設置為 norms:false。

對于不會使用 phrase query 的字段,設置 index_options:freqs。

對于能接受數據丟失的索引或者有災備服務器的場景

把 index.translog.durability 設置成 async(默認是 request)。把對 lucene 的寫持久化到硬盤是一個相對昂貴的操作,所以會有 translog 先持久化到硬盤,然后批量寫入 lucene。

異步寫 translog 意味著無需每個請求都去寫硬盤,能提高寫的性能。在數據初始化的時候效果比較明顯,后期實時寫入使用 bulkrequest 能滿足大部分的場景。

提高 Elastic Search 讀的性能

為了提高查詢的性能,我們做了以下優化:寫的時候指定查詢場景***的字段為 _routing 的值。

由于 Elastic Search 的分布式分區原則默認是對文檔 id 進行哈希和取模決定分片,所以如果把查詢場景***的字段設為 _routing 的值就能保證在對該字段查詢時,只要查一個分片即可返回結果。

寫:

查:

對于日期類型,在業務能夠接受的范圍內,盡可能降低精確度。能只包含年月日,就不要包含時分秒。

當數據量較大時,這個優化的效果會特別的明顯。因為精度越低意味著緩存的***率越高,查詢的速度就會越快。

同時內存的重復利用也會提升 Elastic Search 服務器的性能,降低 CPU 的使用率,減少 GC 的次數。

系統監控的實現

技術中心專門為業務部門開發了一套監控系統。它會周期性的調用所有服務器的 Elastic Search CAT API,把性能數據保存在單獨的 Elastic Search 服務器中,同時提供一個網頁給應用負責人進行數據的監控。

災備的實現

Elastic Search 本身是分布式的。在創建索引時,我們根據未來幾年的數據總量進行了分片,確保單片數據總量在一個健康的范圍內。

為了在寫入速度和災備之間找到一個平衡點,把備份節點設置為 2。

所以數據分布在不同的服務器上,如果集群中的一個服務器宕機,另外一個備份服務器會直接進行服務。

同時為了防止一個機房發生斷網或者斷電等突發情況,而導致整個集群不能正常工作,我們專門在不同地區的另一個機房部署了一套完全一樣的 Elastic Search 集群。

日常數據在復制分發的時候,會同時寫一份到災備機房以防不時之需。

總結

整個項目的開發是一個逐步演進的過程,實現過程中也遇到了大量問題。

項目上線后,應用服務器的 CPU 與內存都有大幅下降,同時查詢速度與沒有分片之前基本持平。在此分享遇到的問題和解決問題的思路,供大家參考。

參考:

  • Elastic Search官方文檔;
  • https://en.wikipedia.org/wiki/Database_index
  • https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%B4%A2%E5%BC%95
  • https://logz.io/blog/solr-vs-elasticsearch/

責任編輯:武曉燕 來源: 攜程技術中心
相關推薦

2022-04-14 17:53:50

攜程AWS上云

2018-12-28 09:48:11

SolrElasticSear搜索

2021-04-12 10:38:17

ElasticSearSolrJava

2017-08-17 16:42:38

Elastic 全文搜索服務器

2014-11-25 10:09:59

ElasticSear分布式搜索引擎Lucene

2011-06-20 18:23:06

SEO

2017-01-17 15:18:42

2017-08-07 08:15:31

搜索引擎倒排

2025-08-05 09:28:08

2020-03-20 10:14:49

搜索引擎倒排索引

2012-09-07 13:22:21

搜索搜狗

2022-10-08 09:13:18

搜索引擎?站

2010-04-20 11:43:46

2009-02-19 09:41:36

搜索引擎搜狐百度

2009-09-22 16:23:52

搜索引擎

2023-09-27 09:11:13

操作系統HTTP

2024-02-23 12:24:00

引擎數據

2022-07-08 09:38:27

攜程酒店Flutter技術跨平臺整合

2022-10-21 10:40:08

攜程酒店MySQL慢查詢

2009-07-30 10:40:56

搜索引擎優化網站
點贊
收藏

51CTO技術棧公眾號

欧美日韩国产欧| 俺来俺也去www色在线观看| 巨乳诱惑日韩免费av| 在线观看欧美成人| 少妇欧美激情一区二区三区| 999福利在线视频| 久久午夜色播影院免费高清| 国产在线观看一区二区三区 | 国产高清第一页| 99伊人成综合| 波霸ol色综合久久| 变态另类丨国产精品| 亚洲成人毛片| 欧美性xxxxxxxxx| 亚洲欧美日韩天堂| 国产淫片免费看| 午夜在线视频播放| av在线不卡观看免费观看| 国产精品自拍偷拍| aaa人片在线| 欧美成人激情| 亚洲免费av电影| ass极品水嫩小美女ass| 欧美亚洲大片| 亚洲国产精品一区二区www| 亚州欧美一区三区三区在线| 欧美一级免费片| 卡一卡二国产精品 | 在线视频不卡国产| 九一在线视频| 成人久久18免费网站麻豆| 国产日韩在线看片| 午夜精品国产精品大乳美女| 欧美xxxx综合视频| 一级特黄a大片免费| 日本国产亚洲| 91久久免费观看| 成人在线播放网址| 国产美女在线观看| 国产精品不卡在线观看| 日本免费一区二区三区| 五月天婷婷在线播放| 国产成人精品影院| 亚洲a中文字幕| 亚洲视频一区在线播放| 首页亚洲欧美制服丝腿| 51精品在线观看| 久久精品免费在线| 欧美区一区二| 美日韩在线视频| 女人裸体性做爰全过| 精品一区二区三| 亚洲区在线播放| 亚洲午夜福利在线观看| 麻豆精品99| 亚洲精品久久久久久久久久久| 国产调教打屁股xxxx网站| 一区二区三区日本视频| 欧美老女人在线| 狠狠干狠狠操视频| 国产日本亚洲| 日韩欧美精品三级| 国产女主播在线播放| 中文一区二区三区四区| 精品国产一区a| 国产在线不卡av| 乱亲女h秽乱长久久久| 亚洲精品国产拍免费91在线| 欧美一区二区三区成人精品| 一本色道久久综合亚洲精品酒店| 精品偷拍各种wc美女嘘嘘| 草草地址线路①屁屁影院成人| 亚洲色图美女| 国产亚洲精品日韩| 91香蕉视频污在线观看| 欧美伊人影院| 午夜精品久久久99热福利| 亚洲男人的天堂在线视频| 久久资源在线| 国产日韩在线亚洲字幕中文| 国产模特av私拍大尺度| 亚洲永久精品ww.7491进入| 精品少妇久久久| 欧美日韩第一区| 97精品一区二区视频在线观看| 久久精品视频久久| 亚洲一区久久| 国产精品免费久久久| 国产又黄又粗又硬| 不卡大黄网站免费看| 日本高清不卡三区| 免费网站成人| 婷婷开心激情综合| 性欧美极品xxxx欧美一区二区| 亚洲免费资源| 日韩大片免费观看视频播放| 五月天精品在线| 欧美精品一线| 国产精品爱久久久久久久| 国产熟女一区二区丰满| 2欧美一区二区三区在线观看视频| 日本一区视频在线观看| 黄色片免费在线观看| 欧美日韩一二三四五区| 久久精品亚洲天堂| 亚洲都市激情| 久久69精品久久久久久久电影好| av黄色在线播放| 国产又黄又大久久| 欧美日韩免费观看一区| 在线播放蜜桃麻豆| 欧美性欧美巨大黑白大战| 苍井空张开腿实干12次| 日韩欧美1区| 97不卡在线视频| 国产人妻精品一区二区三| 久久久久久久久伊人| 国产91沈先生在线播放| 激情久久一区二区| 亚洲欧美国产va在线影院| 欧美黄色一级网站| 久久69国产一区二区蜜臀| 欧美精品在线一区| 黄污视频在线观看| 欧美一区二区三区小说| 色欲狠狠躁天天躁无码中文字幕 | 国产精品专区免费| 日韩免费观看高清完整版| 人成免费在线视频| 久久亚洲影院| 久久影院理伦片| av免费不卡国产观看| 日韩亚洲欧美高清| 久久99久久99精品免费看小说| 日韩精品一级二级| 欧美一区二区三区四区在线观看地址| 国产蜜臀一区二区打屁股调教| 欧美日韩一区高清| 久久中文字幕精品| 日本亚洲欧美天堂免费| 欧洲精品码一区二区三区免费看| 波多野结衣中文在线| 日韩三区在线观看| 日本a级片视频| 国产一区欧美日韩| 黄频视频在线观看| 亚洲福利影视| 久久婷婷国产麻豆91天堂| 一本大道伊人av久久综合| 欧美激情一区二区三区全黄| 免费观看成人在线视频| 国产成人1区| 国产精品99蜜臀久久不卡二区| 日韩porn| 一本色道久久综合亚洲91| 一区二区三区免费在线观看视频 | 国产免费无遮挡| 亚洲色图欧美激情| 韩国三级在线播放| 欧美视频在线观看| 国产女人水真多18毛片18精品 | 日韩精品福利| 一本大道av伊人久久综合| 在线免费观看麻豆| 亚洲深夜影院| 欧美一区三区二区在线观看| 国产极品久久久久久久久波多结野| 在线看日韩欧美| 一级黄色免费看| 亚洲激情综合网| 中文字幕在线播放一区| 久久免费高清| 亚洲最大免费| 波多野结衣在线一区二区 | 一区二区三区免费看| www欧美在线观看| 久久久久久久久久久91| 天堂а√在线8种子蜜桃视频| 色狠狠桃花综合| 在线观看美女av| 高清不卡在线观看| 久久精品香蕉视频| 亚洲xxx拳头交| 加勒比在线一区二区三区观看| 国产v综合v| 另类专区欧美制服同性| 婷婷在线免费观看| 欧美性生活影院| 国产无码精品在线播放| 国产日韩一级二级三级| 26uuu国产| 日韩成人一级片| 欧美这里只有精品| 成人久久综合| 国产精品美女诱惑| 亚洲精品伊人| 26uuu久久噜噜噜噜| 在线a人片免费观看视频| 亚洲大胆人体av| 中文字幕在线网站| 婷婷综合在线观看| 外国一级黄色片| 国产欧美综合在线| 成人性生活免费看| 极品美女销魂一区二区三区免费| 免费av手机在线观看| 天天综合久久| 青青草成人网| 国产精品久久久网站| 成人中文字幕+乱码+中文字幕| 中文字幕在线免费观看视频| 久久久精品视频在线观看| 青青草在线视频免费观看| 日韩欧美亚洲国产另类| 91亚洲国产成人精品一区| 狠狠色香婷婷久久亚洲精品| 欧美成人免费看| 国产精品麻豆网站| av男人的天堂av| 99re免费视频精品全部| 深夜视频在线观看| 国内精品自线一区二区三区视频| wwwxxx黄色片| 精品二区久久| 妞干网在线播放| 欧美三级网页| 一二三在线视频| 在线一区电影| 免费看av软件| 999国产精品永久免费视频app| 欧美精品一区二区三区久久| 欧美日韩一区二区三区不卡视频| caoporn国产精品免费公开| 91成人福利社区| 国产精品视频在线播放| 成人国产精品一区二区免费麻豆 | 欧美一级做一级爱a做片性| 欧美做爰性生交视频| 国产美女精品写真福利视频| 欧美激情一区二区久久久| 国语对白在线刺激| 欧美极品美女电影一区| 特级毛片在线| 欧美黑人一级爽快片淫片高清| 日本在线免费网| 日韩最新免费不卡| 成人影欧美片| 色综合视频网站| 精精国产xxxx视频在线中文版 | 成人免费影院| 欧美亚洲午夜视频在线观看| 中文不卡1区2区3区| 欧美在线精品免播放器视频| 韩国美女久久| 国产精品久久视频| 国产亚洲精彩久久| 91免费观看网站| 中文字幕日韩在线| 久久er99热精品一区二区三区 | 一区二区在线观看网站| 99精品国产一区二区三区| 国产免费色视频| 伊人成综合网| 中文字幕无码精品亚洲资源网久久| 日韩午夜在线| 成人小视频在线看| 激情综合色播激情啊| 亚洲黄色小说在线观看| 99久久综合国产精品| 四虎永久免费在线观看| 国产精品欧美综合在线| 黄色在线观看免费| 偷窥国产亚洲免费视频| 一区二区视频网站| 日韩精品一区二区三区蜜臀 | 中日韩美女免费视频网站在线观看| www 日韩| 欧美日韩999| 另类专区亚洲| 97超级在线观看免费高清完整版电视剧| 国产精品久久久久av蜜臀| 日韩在线国产| 午夜电影亚洲| 国产精品无码专区av在线播放| 国模一区二区三区白浆| 亚洲高清无码久久| 国产目拍亚洲精品99久久精品| 亚洲国产成人精品综合99| 欧美日韩精品二区| 国产农村妇女毛片精品久久| 日韩国产高清视频在线| 日韩av中文| 91禁外国网站| 国产精品一站二站| 欧美极品色图| 欧美日韩岛国| 日本肉体xxxx裸体xxx免费| 成人美女在线观看| 老司机精品免费视频| 午夜伊人狠狠久久| 亚洲午夜精品久久久| 欧美精品一区视频| 黄色在线免费| 国产精品国产福利国产秒拍| 97精品久久| 一区二区在线观| 久久久天天操| 95视频在线观看| 中文字幕欧美一| 天天干天天色综合| 亚洲成人网在线| 18网站在线观看| 国产精品中文字幕久久久| 日韩激情网站| 高清无码视频直接看| 韩国成人精品a∨在线观看| 国产一级久久久久毛片精品| 亚洲18女电影在线观看| 精品毛片在线观看| 深夜福利一区二区| 日韩影片中文字幕| 精品国产乱码一区二区三区四区| 综合色一区二区| 亚洲天堂2018av| 国产色综合一区| 波多野结衣啪啪| 亚洲精品第一国产综合精品| 三级网站视频在在线播放| 91精品视频大全| 日韩欧美一区二区三区免费看| 无码人妻精品一区二区三区66| 99久久精品国产一区| 国产精品7777777| 欧美不卡一二三| 日韩精品卡一| 91久久国产自产拍夜夜嗨| 午夜免费一区| 亚洲图片 自拍偷拍| 亚洲欧洲色图综合| 中文字幕视频二区| 在线看日韩欧美| 天天综合91| 中国成人在线视频| 激情另类小说区图片区视频区| 国产成人免费在线观看视频| 欧美系列在线观看| 999国产在线视频| 国产精品天天狠天天看| 色999国产精品| 免费黄频在线观看| 玉米视频成人免费看| 成人av无码一区二区三区| 欧美极品少妇xxxxⅹ喷水| 老司机凹凸av亚洲导航| 黄在线观看网站| 亚洲国产成人午夜在线一区| 在线观看免费黄色小视频| 久久久精品视频成人| 亚洲天堂中文字幕在线观看| 国产日本在线播放| 99精品国产99久久久久久白柏| 久久久成人免费视频| 永久免费毛片在线播放不卡| 91精品网站在线观看| 黄网站色视频免费观看| 99久久777色| 波多野结衣日韩| 久久精品最新地址| 好吊妞视频这里有精品| 国产精品亚洲αv天堂无码| 国产精品丝袜91| 性欧美18一19性猛交| 17婷婷久久www| 大胆日韩av| 亚洲熟妇一区二区| 欧美性xxxx极品hd满灌| caoporn国产精品免费视频| 5566中文字幕一区二区| 国产一区二区三区久久| 99re6热在线精品视频| 精品国产第一区二区三区观看体验| 美女高潮在线观看| 亚洲一卡二卡三卡四卡无卡网站在线看| 国产一区二区不卡在线| 国产一级18片视频| www.xxxx精品| 极品国产人妖chinesets亚洲人妖| 十八禁视频网站在线观看| 亚洲精品少妇30p| 欧美色18zzzzxxxxx| 日本黄色大片视频| 中文字幕亚洲一区在线观看| 成人av在线播放| 色欲av无码一区二区人妻| 亚洲视频中文字幕| 亚洲 欧美 自拍偷拍| 成人福利网站在线观看11| 亚洲一区二区三区免费在线观看| 成人精品一二区| 999久久久精品一区二区|