本文來自網易雲社區
作者:李勇
背景
隨着互聯網的不斷發展,用戶所產生的行為數據被越來越多的網站重視,那么什么是用戶行為呢?所謂的用戶行為主要由五種元素組成:時間、地點、人物、行為、行為對應的內容。為什么要做用戶的行為分析?因為只有做了用戶行為分析才能知道用戶畫像、才能知道用戶在網站上的各種瀏覽、點擊、購買背后的商業真相,從而給企業帶來商業價值。
網易美學是一個供用戶發現和分享美妝及護膚的社區。既然是一個社區,其中的用戶行為分析扮演着舉足輕重的角色。對應網易美學來說,用戶行為主要有以下幾個應用場景:
推薦系統。目前的推薦是基於用戶的行為,然后運用不同的算法計算出用戶應該展現的推薦數據。
拉新。對於一個產品來說,不斷的獲取新用戶是其中一個目標,有更多的新用戶使用產品,就意味着該產品能夠得到更多人的認可。
轉化率。一個用戶從注冊到各個頁面的瀏覽等行為組成一個漏斗模型,漏斗的每個模型可以看到用戶的留存狀況。
留存率。一個產品不但能讓更多的新用戶使用,也要保證老的用戶不流失。
促活率。所謂的促活率,就是讓老用戶經常使用該產品,讓用戶喜歡上這個平台。
埋點技術
用戶的行為對於一個互聯網產品來說很重要,因此如何采集用戶的行為就變得非常至關重要了。對用戶的行為采集可以通過埋點的方式實現,埋點主要有以下幾種方式:
前端埋點。在某個控件操作發生時通過預先寫好的代碼來發數據的代碼埋點。
客戶端埋點。即app使用一些sdk對用戶的行為進行收集然后批量發送到一個收集平台。
服務端埋點。服務端埋點就是通過攔截用戶的請求接口,對用戶的一些行為信息進行采集。
服務端日志采集
下面我詳細介紹下網易美學的服務端日志采集系統使用的技術,總體架構,部署圖,運作流程以及配置相關信息。
1. 技術選型
服務端日志采集主要通過在Controller的接口中進行埋點,然后通過AOP技術、Kafka消息系統以及logback對用戶行為進行采集。
之所以使用AOP技術是因為AOP的以下重要特定:
代碼的侵入性小。對於業務代碼的侵入性小,只需要在Controller的接口上添加注解,然后在其他模塊對用戶行為進行采集。
重用性。對於相同作用的代碼可以進行重用。
擴展性。能夠很好的對系統進行擴展。
由於使用異步方式對用戶行為信息進行收集,因此需要使用消息中間件。目前消息中間件非常多,比較流行的有ActiveMQ、ZeroMQ、RabbitMQ、Kafka等。每個消息中間件都有各種的優勢劣勢,之所以使用Kafka消息中間件,是因為以下幾點因素:
高性能。每秒鍾可以處理數以千計生產者生成的消息。
高擴展性。可以通過簡單的增加服務器橫向擴展Kafka集群的容量。
分布式。消息來自數以千計的服務,使用分布式來解決單機處理海量數據的瓶頸。
持久性。Kafka中的消息可以持久化到硬盤上,這樣可以防止數據的丟失。
因為用戶的行為數據最終是以日志的形式持久化的,因此使用logback對日志持久化到日志服務器中。
2.總體架構
圖1 總體架構圖
服務端日志采集系統主要由兩個工程組成:beauty-bi-core和beauty-bi-service。由於網易美學的使用dubbo框架,因此有服務提供方和服務消費方。beauty-bi-core被web、wap和mainsite服務消費方依賴。此外,beauty-bi-service也依賴於beauty-bi-core,主要是依賴於其中的一些實體類及工具類。
beauty-bi-core工程為Kafka消息的生產者,主要封裝實現切面的具體邏輯,其主要職責如下:
解析用戶請求的Request信息:從Request中提取用戶的基本信息,如設備型號、用戶的供應商、ip、設備的分辨率、設備平台、設備的操作系統、設備id、app渠道等。
接口對應的參數:通過切面可以提取接口的參數值,從而知道用戶的業務信息。
應用層返回的結果信息:因為切面使用AfterReturning方式,因此可以獲取用層的返回結果,從返回結果中可以提取有用的信息。
用戶的基本信息:用戶的id信息。
信息格式化:將信息轉化成JSON字符串。
發送消息:將最終需要發送的消息放入本地阻塞隊列中,通過另一個線程異步從阻塞隊列中獲取消息並發送到Kafka Broker中。
beauty-bi-service工程為Kafka消息的消費者,其主要職責如下:
實時從Kafka中拉取最新的數據。
將JSON字符串轉化成,方便進一步對用信息進行加工。
對用戶的ip進行解析,獲取ip對應的地區以及經緯度信息。
將加工好的最終信息持久化到log文件中。
3.部署圖
圖2 部署圖
上圖為網易美學與日志系統系統相關的部署圖,App、Wap和Mainsite服務器集群分別對應不同終端的應用。Kafka集群使用杭研的集群,目前有10個Broker。日志服務器有兩台,通過Kafka的均衡策略對日志進行消費。
4.日志采集的流程
日志采集流程圖如下所示:
圖3 日志打點流程圖
上圖為消息生產者和消息消費者共同組成的流程圖。
消息生產者的具體步驟如下:
通過切面攔截用戶的請求。
從切面中提取請求頭的基本信息,如設備信息,cookie信息,ip信息等。
提取請求的接口參數信息。
從接口返回值中提取相關信息,如id,pvid等。
將提取的信息封裝成JSON字符串,放到阻塞隊列中,假如阻塞隊列溢出會有三次重試機制。
異步線程從本地阻塞隊列中獲取數據,並將信息組裝發送到Kafka的Broker中,此時消息生產者結束。
消息消費者的具體步驟如下:
實時從Kafka Broker中批量拉取消息。
將拉取的消息轉化成對象。
解析ip對應的國家、省份、城市、經緯度信息。
對不同業務場景的信息進一步解析。
將日志信息轉化成JSON字符串,持久化到log文件中。
5. 相關配置
application-XXX.properties:該配置放Kafka的相關屬性,包括topic、groupId、server等信息。
beauty-log-msg.xml:該配置放在app-web,mainsite-web,wap-web的src/main/resources目錄下,主要是初始化kafka生產者的信息。
beauty-bi-service.xml:該配置放在beauty-bi-service工程的src/main/resources目錄下,主要用於加載kafka消費者的配置信息,並且啟動kafka消費者服務。
logback.xml:該配置放在beauty-bi-service工程的src/main/resources目錄下,主要用於聲明日志文件存放的目錄,需要持久化的日志的package路徑,以及日志持久化的格式。
ip_conf.txt:該配置放在beauty-bi-service工程的src/main/resources目錄下,用於解析ip對應的地域、經緯度等信息。
網易雲大禮包:https://www.163yun.com/gift
本文來自網易雲社區,經作者勇授權發布。
相關文章:
【推薦】 行為式驗證碼的前景
【推薦】 知物由學 | AI網絡安全實戰:生成對抗網絡
【推薦】 AndroidApp的破解技術有哪些?如何防止反編譯?