UCloud Elasticsearch再升級 全力支持LBS場景
眾所周知,Elasticsearch(ES)是日志分析ELK解決方案的重要一環,也是全文檢索的好幫手。實際上,ES在LBS(Location based service)場景也同樣好用,結合全文檢索、結構化檢索與分析,ES基本可以做到實時提供基于地理位置的多種信息。
UCloud Elasticsearch(UES)是基于Elasticsearch和Kibana打造的日志管理分析服務。為支持LBS場景,UCloud(優刻得)已于近日推出UES大內存機型,可支持配置16核64G,其性能可以滿足更頻繁的位置查詢。
UES功能進一步升級
UES通過創建集群的方式來創建服務,集群自動初始化優良配置和豐富插件為用戶提供快速創建、易于管理以及線性擴容。此外,UES還提供豐富的性能指標監控和可視化管理平臺,高性能SSD磁盤有效提升海量日志數據存儲、檢索、分析的處理效率。通過本次功能升級,現已全力支持LBS場景。
LBS的應用場景有很多,生活中隨處可見,比如社交應用中“附近的人”,或是本地服務應用中“附近的餐廳”等。還有一種不太引人注意的場景是零售行業廣告營銷中的位置營銷(LBA)。LBA與前兩種稍有不同,技術實現稍顯復雜。下面以查看“附近的餐廳”場景為例,概述ES如何建立地理位置索引,以及如何用ES提供的REST API做位置查詢。
簡單來說,ES在其中的作用分為兩步。***步是建立位置索引,存儲餐廳經緯度坐標,在客戶端用戶開始查詢時,用ES提供的geo_distance查詢出一定距離內所有的餐廳。
本次示例選用UES服務作為基礎服務支持,選擇內存優化型實例配置,當數據量較大或地理位置查詢較頻繁時,集群類型可以選擇UES提供的“主節點分離”型。
創建mapping
ES支持geo_point和geo_shape兩種地理位置數據結構類型。如果想用經緯度坐標表示位置,可以用geo_point字段;如果想存儲和查詢復雜的地形,可以用geo_shape字段。本次查詢“附近的餐廳”應用場景使用geo_point更合適,代碼示例如下:
- PUT /index_name
- {
- "mappings": {
- "TYPE_NAME": {
- "properties": {
- "location": {
- "type": "geo_point"
- }
- }
- }
- }
- }
建立索引
location字段被聲明為geo_point后,就可以索引包含了經緯度信息的文檔了。經緯度信息的形式可以是字符串、數組或者對象。例如,將(經度121.457,緯度31.215)的餐廳坐標點存入索引中,代碼示例如下:
- PUT index_name/index_type/1
- {
- "location": {
- "lat": 31.215,
- "lon": 121.457
- }
- }
距離查詢
當一個用戶在(經度121.453,緯度31.216)的位置查詢附近2000米內所有的餐廳時,內部服務可以向ES服務發起geo_distance查詢,查詢參數包括距離2000米和用戶經緯度[121.453, 31.216]。ES服務會返回符合條件的餐廳,本例中會包括上一步中經緯度[121.457, 31.215]的餐廳。
至此就完成了利用UES查詢客戶端用戶附近一定范圍內的餐廳需求。在查詢期間不需要部署服務,也無需了解地理位置上兩點距離的算法,只需向UES發請求即可。本文中討論的場景也僅是ES服務在地理位置應用(LBS)場景的一個小示例,在實際應用中還有更多地形對比、結合地圖SDK的位置聚合等功能,值得繼續挖掘。
發現數據更多價值
經過近一年的產品迭代優化,UES在性能表現和功能上更為出色,主要升級點包括:
- 可以做故障自動恢復,無需擔心服務不可用;
- 提供了節點升級功能,讓用戶有多種擴容選擇;
- 增加Elasticsearch的6.2.1版本,并全量發布x-pack插件,用戶可在控制臺一鍵安裝,使用Kibana時更安全,安裝后即可在Kibana中看到Elasticsearch服務本身更多監控指標,使用方便;
- 上線海外可用區,為用戶業務的出海需求提供更多支持。
目前,UES也接入了UCloud(優刻得)其它數據分析產品,例如用戶可以將UES數據備份到UHadoop,保證了數據安全。未來,UES將會接入UKafka等更多UCloud(優刻得)數據分析產品,為用戶提供整套數據挖掘、數據分析以及可視化方案。UES可以省去企業部署和維護的成本,從而發現數據的更多價值。