LINE Developer Meetup #9 開發者小聚活動後分享

大家好,我是 LINE Taiwan Technical Writer – Claire Wang。LINE Developer Meetup 開發者小聚系列活動,精心安排 LINE 台灣工程師和開發平台管理者分享內部開發技術,並透過實際案例說明開發經驗,持續推動 LINE 技術平台的開發與交流,歡迎對於 LINE 開發技術有興趣的朋友們報名參加! 

KKTIX 活動網頁: 活動網址

本次 LINE Developer Meetup 開發者小聚選在 TAV Cafe 藝術村餐坊舉辦,邀請 LINE 開發團隊分享開發經驗與維運小技巧,共包含三個講座:由 Shawn Yuan 分享 LINE TODAY 如何解決網站流量瓶頸、Julian Shen 解釋 LINE SPOT 如何進行資料串流處理,以及 Kevin Luo 帶來 LINE 訊息查證開發經驗分享,熱門主題創造 96% 的超高活動報到率,現場擠滿熱情的與會者開心地互動、交流。另一大亮點則是印有 LINE DevRel (Developer Relations) 酒標的啤酒首度登場! 工作人員一拿出啤酒立即引起全場驚呼,與會者紛紛表示要帶回家珍藏,將現場氣氛帶上另一個高點! 

本次活動除了重量級講師技術含金量超高的分享,以及 DevRel 啤酒帶來的驚喜,與會者更是積極提問,直到散場都還有人陪講者去搭車同時追問,讓我們直擊 LINE developers 對於開發技術的熱忱! 究竟是什麼樣的內容,讓開發者的熱情炸開了鍋? 現在,就讓我們來一探究竟!

Find Bottlenecks of Web Sites / LINE TODAY – Shawn Yuan

投影片

本活動的第一個講座,是由 LINE TODAY team lead – Shawn Yuan 透過 case study 分享解決網站流量瓶頸的經驗。Shawn 首先介紹 LINE TODAY 的重要特色,包括多元化的新聞內容、針對台灣、泰國、印尼等不同國家的用戶提供客製化的新聞格式,以及結合 OA (Official Account) 創造更即時的使用者體驗等,月活躍用戶人數超過一億。而如此龐大的資料流量與商業應用背後,是由縝密的 architecture 及 server deployment 維持系統順利運作,並實現新聞推薦 (News Recommendation) 等功能,為用戶提供個人化的內容服務。

在介紹完 LINE TODAY 的基本特點與運作後,講者開始分享過去發生的實務挑戰,以及如何一步步找出 root cause 與解決方案。LINE TODAY 提供豐富即時的新聞,許多用戶會多次開啟並查看 LINE TODAY 的內容,同時帶來超出預期的資料流量,導致 LINE TODAY 的文章被點開後,頁面卻顯示錯誤,然而,在系統端並未呈現異常狀況。開發團隊於是開始檢查各種紀錄,包含 application error log、monitoring report、application access log 等,並在 server monitoring report 發現 Web 與 API 在特定時段的 connection 數量同時暴增,使用者數據也出現高峰,比對各種報告後發現 article composition timed-out 和相關問題,便決定採用 Http/1.1 加以因應,TIME_WAIT 也得以大幅降低,但是 error 儘管變少卻無法根除。開發團隊繼續尋找原因,透過 program profiling 並進行分析,發現 Redis data receiving 的速度緩慢,便透過 refine usage、增加 local cache、將 Redis 移至 10G 網路環境、延長 template expiration time 等方法,最終讓相關數據回到正常範圍、系統運作恢復正常。

藉由這次的經驗,Shawn 點出系統監控與 log 的重要性,以及 local cache 所扮演的重要角色,提醒與會者在進行開發或解決問題的過程中,針對這些方向進行建置與考量。而 Shawn 的分享也吸引與會者提問,希望了解 LINE TODAY 新聞推薦功能如何在 machine learning 所需的時間與負載之間取得平衡。Shawn 也大方透露 LINE TODAY 介面最上方的頭條新聞每小時更新一次,下方的新聞內容則是即時更新,透過這樣的分配為系統運作找到平衡點,介面設計也有助於吸引用戶。

當問題發生時,找出根本原因往往需要一連串的過程,並透過不斷的發掘與嘗試,徹底解決問題。Shawn 以 LINE TODAY 開發的實際案例,具體分享團隊採用哪些方法,逐步為網站流量的瓶頸找出原因,而在找出不同的原因後,又是如何擬出對應的解決方案,為用戶提供更完善的體驗,也希望本次分享能為類似的應用或偵錯,提供更多元的思考角度。

Stream processing in LINE SPOT / LINE SPOT – Julian Shen

投影片

今晚的第二個講座,由 LINE SPOT team lead – Julian Shen 說明近期即將上線的 LINE SPOT 如何進行資料串流處理,從 microservices architecture、event sourcing,以及 CQRS (Command Query Responsibility Segregation) 等面向切入,最終帶出 LINE SPOT 資料處理架構的特點。一開始,Julian 為與會者介紹 LINE SPOT 是以地圖為基礎的服務,結合預訂、宣傳、使用者創作內容 (User-Generated Content, UGC)、地標 (Point of Interest, POI)、追蹤、評論等多項功能,而用戶可透過  LINE SPOT 查詢店家資訊或留下評論,店家也能回覆留言。除了讓商家免費登錄圖文訊息,LINE SPOT 進一步整合官方帳號、LINE Pay 付款、透過 LINE 發行優惠券等,深化線上/線下生態圈的連結。

而為了提供如此完整的功能,開發團隊又需要處理哪些資料呢? 答案是包含來自 LINE 內部、合作夥伴、店家、用戶的資料,以及搜尋關鍵字、地點、評價等資料。這時 Julian 引導與會者思考後端設計的架構,從使用者行為出發,思考頁面須包含的元素,進而推論應選擇何種資料庫管理系統 (Database Management System, DBMS)、如何結合 data、如何 cache data,以及用戶追蹤人數等情境。此處 Julian 帶出 microservice-oriented 後端設計,根據 timeline、user、article、comment 等 microservices 設置 database,比傳統的 write/read database 分類更有效率。如果需要預處理資料,或希望可用單一 query 取得所有資料,結合 publish 與 consume 概念的 database 則可在一定程度滿足這些需求。

在 LINE SPOT 開發實務上,則整合了 APACHE kafka,運用 kafka stream 建構分散式架構,高效率處理串流資料,不需要複雜的 query 便可將資料準備好,且可透過 history 將資料復原,移轉至不同的 database 也變得更加容易。不過 Julian 也提醒,這樣的 database design thinking 並非 data-oriented,需要開發者適應不同的思維,且此架構中的 data 儘管最終能保持一致性,仍可能產生與即時資料不同步的情形,也因此需要搭配良好的監控機制,並維護多個不同的系統,如果考慮採用這樣的架構,務必將這些重點列入評估。

在分享的過程中,Julian 深入淺出的介紹、對技術展現的自信與熱忱吸引與會者踴躍發問,甚至在活動結束後繼續留下來討論! 資料串流處理是改善使用者體驗的核心,LINE 開發團隊運用新的思維,將資料串流處理架構提升至另一層次,讓 LINE SPOT 的功能與系統變得強大而穩定,也令人期待 LINE SPOT 所提供的全面化服務,使我們的線上線下生活變得更加便利、精彩!

Boost Dev and App Performance using Spring Framework  / LINE 訊息查證 – Kevin Luo

投影片

第三個講座,是由 LINE 訊息查證資深開發人員 Kevin Luo 介紹如何在時間與資源極其有限的情況下,運用正確的工具與方法,開發出「LINE 訊息查證」平台服務。「LINE 訊息查證」平台在今年七月份正式上線,不僅有官方網站,更串聯 LINE 官方帳號,用戶只需把在聊天室中收到的訊息「轉傳」至「LINE 訊息查證」官方帳號。如過去已有查核報導在資料庫中,查證小幫手會自動判斷其真偽,系統將即時提供查證結果;如訊息尚未查核,將提報給專業查核單位,待釐清後再盡快回傳正確資訊給予用戶,提供最即時的訊息辨別服務,協助用戶辨識可疑訊息真偽,降低假訊息再次散播的機會。

LINE 訊息查證是一項全新服務,令人難以想像的是,當初被給予開發時程只有兩個月,開發團隊的人力也非常精簡,但開發目標卻涵蓋用戶網站、合作夥伴網站、Chatbot 和內容管理系統 (Content Management System, CMS) 等。而由於 LINE 訊息查證的長期目標是將服務拓展至其他國家,因此在 service architecture 上包含台灣、日本等許多國家的官方帳號 (Official Account, OA) 皆與系統連結,考量到未來對於其他語言的處理,以及以 microservice architecture 為基礎進行設計,導致開發的複雜度進一步提高,各種條件都足以讓開發人員感到苦手,不過 LINE 訊息查證開發團隊卻有聰明解法。Kevin 接著向與會者說明如何運用 Spring Boot、Spring Data、Spring Security、LINE Messaging SDK 等開發工具組合,加上使用 Hibernate ORM 框架減少重複性程式碼的開發,讓平台建置與 database 的運作更有效率。此外,Kevin 也透過一連串的 code sample,解釋如何預防 controller、service、repository、entity 在設計上的錯誤,並強調以 Hamcrest 與 Rest assured 建立 integration test case 的重要性。

另外,Kevin 也提到實際開發的注意事項,例如 lazy loading issue 導致無法取得資料或效能降低,以及刪除的操作可能會依據 cascade type 的設定,刪除不該刪的資料,提醒大家在實作時多加留意。最後則分享一些開發上的小技巧,包括為了提升效能,最好在開發初期即確認要採用的策略、cache 的使用上需注意是在單一或多個伺服器上運作,以避免資料不同步的現象、API cache 的設計可依據服務特性調整 cache 的時間長度,有利於 client 端快速取得資料等。

活動小結

今晚的 LINE Developer Meetup 由三位重量級講師不藏私分享 LINE TODAY、LINE SPOT、LINE 訊息查證的開發經驗、分散式系統架構建置、串流資料處理的概念,以及發掘和解決問題的 thinking,幫助與會者進行開發時能更加順利。初次登場的 LINE DevRel (Developer Relations) 啤酒也陪伴與會者用愉悅的心情,認識 LINE 服務的開發過程與價值,而與會者熱情的提問更為活動劃下完美句點,見證 LINE Developer 社群積極投入的精神!

立即加入「LINE 開發者官方社群」官方帳號,就能收到第一手 Meetup 活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE 開發者官方社群」官方帳號ID:@line_tw_dev

關於「LINE 開發社群計畫」

LINE 今年年初在台灣啟動「LINE 開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,預計全年將舉辦 30 場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看 2019 年 LINE 開發社群計畫活動時程表 (持續更新) https://engineering.linecorp.com/zh-hant/blog/line-taiwan-developer-relations-2019-plan/)

徵才訊息

《LINE 強力徵才中!》與我們一起 Close the Distance 串聯智慧新世界! 歡迎查看相關職缺,並投遞您的履歷 >> Server-Side DeveloperData Engineer

Related Post