LINE 開發社群計畫: TWJUG#[email protected]

前提

大家好我是 LINE 台灣的 Technical Evangelist - Evan Lin 。「開發社群計畫」是今年一個開發者關係與技術推廣部門一個重點,將在今年一整年中,在台灣舉辦對內的技術交流、教育訓練,對外的社群聚會、校園演講、開發者徵才日與開發者大會等各式各樣超過30場的活動。我們希望創造更多技術分享與跨國串連的機會,同時,持續招募優秀的人才加入LINE台灣的開發工程團隊。

四月第一場社群活動邀請到 TWJUG (Taiwan Javsa User Group) 社群到 LINE 來舉辦。也請到 LINE Pay 的 Webber Su 來分享,除了讓更多人能夠了解 LINE Pay 工作經常用到的工具外,也希望能夠引發一些討論甚至可以互相交流。

Where is the ghost in the ghost island? Explore by Java and Mongo/ LINE Pay - Webber Su

投影片

首先上場的是 LINE Pay 的同仁 Webber Su 所帶來的透過開放資料集的一個案例分享。在 LINE Pay 的開發經驗上其實會遇到大量資料的處理與分析,但是由於許多的客戶資料都是屬於機密資料無法公開,所以透過開放資料集的案例來分享 LINE Pay 團隊日常遇到的相關問題。

透過開發資料將全台灣的事故資料匯入資料庫中,並且透過 LINE Pay Merchant Map 的部分的相關技術可以幫我們找出比較容易發生事故的問題區段。

在開始處理資料的之前,講者也分享了他會用到的相關開發工具如下:

以下稍微介紹每個工具的功能與相關作用:

這些開發工具也是 LINE Pay 團隊在開發上經常使用。除了開源專案工具之外, LINE Pay 也首次分享了 LINE Pay Merchant Map 的功能:

LINE Pay Merchant Map 提供了地圖話資訊的條列與搜尋。包括了:

  • List: 條列式的列表。
  • Nearby: 透過地圖是覺化的列出。
  • Search: 甚至透過關鍵字的搜尋方式。

在文字資料的搜尋上,究竟要使用 Elasticsearch 或是 MongoDB 作為文字搜尋呢?這裡講者也分享了當初在內部開發系統上,是透過哪些的評量方式來決定的。 由於許多效能的測試與評量上最後決定是 Elasticsearch 。而在地點鄰近搜尋 (Nearby) 上最後則是決定使用 MongoDB

這個 Ghost Island 的架構其實也將 LINE Pay 開發團隊許多用到的工具分享給大家。裡面包括了資料該如何處理,該如何有效地處理與資料的讀取跟儲存? 這邊講者也分享了一些經驗談,就像是這個案例一樣,對於資料的處理上要有許多小地方要好好處理。如果是開放資料的時候,對於資料的處理要更加小心。資料可能有誤,資料可能有缺甚至資料可能是空的。所以可能將資料多儲存在其他地方也是一個可以變通的方式。這樣可以避免在資料清洗的時候造成程序的錯誤。後端針對文字搜尋與鄰近地圖搜尋則是透過兩個不同的儲存工具( Mongo 與 Elasticsearch )來處理資料。

而且講者也分享了在各個階段可能會踩到的雷(指的是遇到的問題)。不論是剛剛 Batch Spring process ,Spark 資料的處理上還是 Cargo 的部分。

整個主題雖然是使用開放資料的事故來做講解,但是不論是整個流程用到的相關開發工具還是可能會遇到的問題。講者也都分享出來 LINE Pay 團隊在每天在面對的問題可能是許多個面向。需要有深厚的技術背景與經驗才能夠快速的了解與推敲出問題的真正原因。

Containerize and Evolution of Deployment Type / xTeam Studio - Vincent Huang

投影片(https://hackmd.io/p/HJCteAazN)

這個講者的主題相當有趣(我相信在 Java 社群比較少看到),他分享了如何透過 Containerzie 的方式來部署你的應用。並且從 VM 到 Docker Container 到 Docker Compose 最後到了 Kubernetes 的相關部署方式。也介紹了自己在 GKE 上面部署服務的流程範例。

最後展望未來,有更多的工具還能讓你夠有效率的部屬你的服務,不論是透過 Halm , Terraform 都可以讓整體服務在 Kubernetes 上面變得更加的方便與迅速。

總結

很開心邀請到 TWJUG 社群來到 LINE 台灣辦公室舉辦 meetup , 也很開心第一次能夠請到 LINE Pay 的工程師來跟社群們分享開發上的經驗。透過這次的分享, LINE Pay 的開發團隊再也不是讓人覺得相當的神秘,也讓人了解到其實 LINE Pay 開發團隊其實會遇到相當多類型與多面向的問題,你也是喜好解決困難問題的人嗎? 其實 LINE Pay 還在徵求相關的工程師。對於相關開發工具熟悉的技術高手,快來挑戰一下吧?

LINE Pay 相關職缺:

關於「LINE開發社群計畫」

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

[研討會心得] 2019/03/29 LINE Developer Meetup 7

前提

嶄新一年的第一場開發者小聚,特地離開大台北地區,將在新竹的清華大學舉辦 ; 更請到 LINE台灣的許多開發團隊來跟開發者們分享在LINE的開發流程與經驗。 不僅僅有 Developer Relations 的本年度的活動規劃分享,更有來自日本的團隊來解釋什麼是 LINE Private Cloud 。當然不會少的有本地產品開發團隊來跟大家見面與分享,除了有 LINE NOW 與 LINE TODAY 的團隊之外,更有 iOS 與 Android 的開發團隊。機會實屬難得,也很開心能夠跟新竹的開發者一起來討論與交流。

2019 年開發者關係與技術推廣部年度計畫分享 / 資深開發技術推廣工程師 Evan Lin

投影片

首先登場要介紹的部分就是由我所分享的 2019 年度開發者關係與技術推廣部門( Developer Relations )的年度計畫,大家也可以參考這一篇文章的介紹。 這一段介紹主要先講解身為開發者對於 OA 2.0 需要知道的部份。自從 OA 2.0 方案公佈之後其實開發者們都很擔心,不知道會不會有任何變革的部分。在這裡首先分享兩個鏈結給各位。(OA 2.0 全面升級OA 2.0 FAQ ),這兩篇文章其實能解決大多數開發者的疑慮,如果還是有不清處的部分。可以看看投影片內的整理。

Developer Trial 會如何改變?

  • 會轉移到 “低用量”
  • 不限制好友數,發訊超過 500 則會無法發送 (不會收費)。
  • 這樣的改變對於只是想測試功能的開發者是相當貼心的,不用擔心不小心寫錯 Push Message 被收費之外。更可以使用到人數更多低用量方案。

再來就是要介紹 Developer Relations 本年度的一些計畫與每個月的行程給開發者們。其中最重要的計畫就是「LINE 開發社群計畫 」,詳情請看新聞稿。我們將在今年一整年中,在台灣舉辦對內的技術交流、教育訓練,對外的社群聚會、校園演講、開發者徵才日與開發者大會等各式各樣超過30場的活動。我們希望創造更多技術分享與跨國串連的機會,同時,持續招募優秀的人才加入LINE台灣的開發工程團隊。

「 LINE 開發社群計畫 」 裡面除了親近開發者社群之外, LINE 也積極在各個開發者盛會中參與,不論是各種大大小小的研討會或是一些社群的 meetup 。都是透過參與社群來使得開發者更能夠了解 LINE 開發的過程與製造更多技術交流的機會。其中也分享 LINE 內部的開發者活動,包括了「技術寫作訓練日」或是內部的其他訓練與 Workshop 。

這個 Session 的最後要跟大家分享就是 LINE 年度開發者招募大會 “LINE Developers Recruitment Day” 即日起也展開,歡迎各位開發高手來報名,一起打造 WoW 使用者體驗的產品。

Developer Relations 相關職缺:

How We build Kubernetes service by Rancher in LINE / LINE 東京 Verda Team, 李飛翔

投影片

來自東京 Verda Team 的李飛翔也跟大家分享 LINE 是如何透過 Rancher 來打造 LINE 自己的 KaaS (Kubernetes As A Service) 。本文一開始先介紹了 Rancher 的一些功能與 Rancher 2.0 的目前狀況,也會介紹我們如何使用 Rancher 來打造 KaaS 。

LINE 如何透過 Rancher 打造 KaaS

  • API Server:

    • 首先左方可以看到,有一個 API Server 負責收發使用者的指令。 除了作為 Proxy 之外,也可以限制使用者使用有限的 Rancher 功能之外也可以整合一次對於多個 Rancher 的操作。
  • Kubernetes Provider:

    • Provider 用來創建和管理用戶kubernetes集群,支持多個 Provider。目前使用的是 Rancher。
  • User Kubrernetes Cluster:

    • 每一個服務或是產品會使用一個或是多個 User Kubernetes Cluster 。裡面都是透過 OpenStack 來建立 VM ,並且透過 Rancher 來部署。

如果今天一個開發者需要一個新的集群來部署一個新的服務。他透過 API Server 下指令部署新集群,這時候會透過 Kubernetes Provider 來運行 Rancher 來開啟新的 VM 並且來部署 Kubernetes 設定到該集群。

如此的輕鬆容易嗎? 透過一個問題來講解整個 Kubernetes 的架構與容易出錯的地方

架構雖然清楚又明瞭,但是事實上要運行卻沒有那麼的容易。這邊講者也分享藉由 “Websocket 無法正常建立“的錯誤,來分享如何追蹤這個問題來解決真正的問題。

如同上圖提到 Kubernetes Provider 是透過 WebSocket 與 Kubernertes User Cluster 溝通。有一天忽然發現了 WebSocket 忽然斷線的狀態,回過頭來看 Kubernetes DNS 的設定, Container 網路的架構甚至也解釋了flannel 網路架構。透過這些架構的解析,聽眾會了解在實體機 (Baremetal) 上面架設 Kubernetes 其實遇到的網路問題其實更多更複雜,因為牽扯跨實體機器與跨網路節點。

找到問題之後,試著做出一個 patch 來修正問題。確定成功之後也將這個問題回饋到 Racher 的 OSS 來貢獻 LINE 研究的結果。

類似的問題就是 Verda team 的人每天所遭遇的問題,不斷睇偵測與測試問題的原因,透過不同層面的觀點來了解與解讀問題。如果最後發現問題可能是出在 Kubernetes 源碼部分, LINE 也不吝嗇貢獻出發現的問題與修正的方式。

這樣的流程需要更多的新血,我們也需要各位 Kubernetes 與網路高手的加入。

Verda Team 相關職缺:

從LINE刮刮卡淺談高流量負載的服務架構設計/ LINE台灣工程師, Julian Shen

投影片

這是一篇繼上一次”LINE NOW刮刮卡開發分享” 之後更深入的分享。上一次 Julian 提到 LONE NOW 團隊如何在一個月之內快速的開發出「刮刮卡」這個熱門的活動之後,其實在上線期間剛好就是中秋節的貼圖刮刮卡活動。造成有龐大流量的產生造成了系統的效能瓶頸。 這一次的就是要跟聽眾分享當服務遇到龐大與突然的流量湧入的時候,哪些部分應該要注意?哪些部分可能會造成系統瓶頸?該如何解決?

為什麼會突然有大量流量湧入?

舉凡像是促銷 (像是雙十一),Banner 推廣或是蓋版廣告。都會因為曝光量大增而造成大量流量的湧入。

會發生什麼事?

  • (左上角藍色 1)同時連線數增加, 如超過所能負荷的連線, 會導致前端呼叫API失敗。

  • (左下角紅色 2)

    對外部系統呼叫API次數增加。

    • 對外部系統連接的connection pool被用完。
    • 外部系統也可能被打趴。
  • (右側紅色 3)同時寫入資料庫次數增加, 大量的同時寫入可能導致資料庫效能低落, 進而影響每個API請求的處理時間。

加開機器是否能解決問題?

針對效能的問題,一開始大家都會簡單的思考透過 scale-out (也就是加開機器)的方式來試著解決問題。但是即便加開了機器,還是會受限於資料庫的存取瓶頸造就系統還是會卡住無法在期限內除理完大量的流量。

新的架構如何解決問題?

  • 使用反向代理, CDN可減輕連線壓力
    • 資料來自Redis, 相較於傳統資料庫來的快速
  • 抽卡資訊不直接寫入資料庫, 降低IO的影響
  • 大部分的資料寫入都是延後及非同步
    • API呼叫的處理時間不受資料庫寫入效能影響
    • 對外部系統的壓力可被控制
  • Kafka只要沒掛, 萬一其他系統出問題, 該寫入的資料都還會在
  • Redis, Kafka 可以處理大流量資訊

當然這也不是一次就能完全解決問題,還有其他問題跑出來。講者也分享了有趣的解法。有興趣想瞭解更多的讀者歡迎詳細查閱投影片。

LINE NOW 相關職缺:

What we do and what we use in LINE TW Android team / LINE 台灣工程師 Daniel Kao

投影片

接下來來自 LINE 台灣 Android 團隊的 Daniel 也跟各位分享了相關的開發專案與產品,目前相關的 Android 開發團隊都在三個產品與專案之中:

LINE Today App

這是在印尼上市的產品,是一個根據原本 LINE TODAY 內容索引的完全新的產品,當初如何透過快速迭代的方式產生新的產品的過程。可以觀賞去年在 TechPulse 2018 精彩的演講。 “LINE TODAY高效率的敏捷測試開發技巧” 。

LINE SDK

LINE SDK 是一個提供給 App (iOS, Android)開發者,透過 LINE 帳號登入的 SDK 套件。

相關 SDK 放在這裡: https://github.com/line/line-sdk-android

第三部份就是開發 LINE Android App 其中的元件

包含 LINE TODAY tab,LINE Keep,LINE Album 等功能,都是台灣工程師曾經開發和維護過的元件。

聽完了 LINE 台灣 Android 團隊的工作內容是不是很有興趣? 趕快在下列職缺寄出你的履歷申請。

LINE 台灣 Android 相關職缺:

LINE Taiwan iOS Projects and Practices. / LINE 台灣工程師 Ray Tsai

投影片

再來是 iOS 團隊的 Ray 來介紹 LINE 台灣的 iOS 團隊都負責哪些專案。首先大家會好奇的是,作為科技公司的 LINE iOS SDK 是使用 Objective-C 還是 Swift 來撰寫。答案是 Swift 請參考 https://github.com/line/line-sdk-ios-swift

台灣 iOS 開發團隊就跟 Android 開發團隊一樣。除了 LINE App 裡面的某些模組之外,就是開發 iOS App 的 SDK 。

這張圖列出了 iOS 開發團隊的相關開發工具,相信也會讓許多有興趣的人能夠了解。

LINE 台灣 Android 相關職缺:

LINE 相關產品與團隊介紹

最近接著上場就是各個產品團隊與開發團隊分別跟大家自我介紹,希望能夠讓參與者能夠更了解我們的產品團隊與開發團隊。

LINE 購物團隊 (投影片)

相關職缺

LINE 旅遊團隊 (投影片)

相關職缺

LINE Pay團隊 (投影片)

相關職缺:

LINE Today團隊 (投影片)

相關職缺:

LINE UIT 開發團隊 (投影片)

相關職缺:

活動小結

本場活動是第一次離開台北的開發者小聚,除了讓參與者能夠跟 LINE 內部開發團隊相見歡之外。就是希望讓許多人能夠更了解 LINE 台灣數百人的開發團隊主要在從事哪些專案,也分別具有哪些類型的開發團隊。此外,這樣的平台也需要許多有能力的開發夥伴,也歡迎各位去 LINE Developer Careers (網址) 查看相關職缺,一起來加入我們。

[Coursera] Decentralized Applications (Dapps) (一)

Blockchain Specialization 系列上課心得

Decentralized Applications (Dapps): 課程鏈結: 這裡

文章鏈結:

前言:

剛忙完本年度公司第一次的 Meetup ,其實每天都忙著在寫文章,感覺逐漸邁進量產化技術部落格作家邁進。不過還是得要花點自己的時間好好把該讀的課程讀完,畢竟也已經付錢了。所以回過頭來還是得每天努力地啃, Blockchain Specialization 系列的課程。第三期開始感覺更加多的作業與實作著部分,應該也會變得輕鬆一點吧(咦?)。

課程內容:

Week1:

Dapp 架構圖

Ethereum 相關環境安裝

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

參考: https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Ubuntu

GETH 相關初始化指令

  • geth --datadir ../eth_node account new

  • geth --datadir ../eth_node init genesis.json

    • genesis.json 範例如下:
    {
        "config": {
            "chainId": 88888,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
        },
        "coinbase" : "0x0000000000000000000000000000000000000000",
        "difficulty" : "0x1",
        "extraData" : "0x00",
        "gasLimit" : "0xfffffffffffffff",
        "nonce" : "0x0000000000000042",
        "timestamp" : "0x00",
        "alloc" :{
            "account-address": {"balance": "0xffffffffffffffffffffffff"}
        }
    }
    

參考: https://medium.com/infrageth/practical-steps-for-go-ethereum-setup-27b8d64903fc

名詞解釋:

enode:

用來給其他節點連接到 bootnode 之後,透過 P2P 方式來跑 blockchain operation。也可以當成是 ethereum 世界裡面的 URI 。

Definition of Dapp:

A Dapp, or decentralized application, solves a problem that requires blockchain services and blockchain infrastructure for realizing its purpose.

相關實用 CLI command:

  • eth.SendTransaction()
  • geth —rpc —rpcport8544

常使用到的 ethereum network ID

  • 1: Frontier, Homestead, Metropolis, the Ethereum public PoW main network
  • 4: Rinkeby, the public Geth-only PoA testnet

Refer https://ethereum.stackexchange.com/questions/17051/how-to-select-a-network-id-or-is-there-a-list-of-network-ids

相關 Ehteruem API

  • admin: 管理相關用途, admin.addPeer() admin.nodeInfo()
  • debug: 除錯用的 debug.dumpBlock(16)
  • miner: 挖礦(miner) 相關功能
  • personal: 用戶資訊相關
  • txpool: Transaction pool 相關用途 。 txpool.inspect() 列出所有還未執行的交易。

Dapp 透過 web3 來跟 ehtereum client 來溝通 (under RPC)

  • web3.eth.getBalance()
  • web3.eth.accounts.create()
  • web3.shh whisper protocol 相關的功能查詢

總結:

第一週主要都是關於 Dapp 概念上的分享,並且透過 geth 來做一些實際操作的部分。充分讓人了解 Dapp 與 Ethereum client 溝通與彼此扮演的角色。

Reference:

[TIL] 在 vscode 上面安裝並且使用 PlantUML

前提

寫作技術文章的時候,經常需要各種 UML (Unified Modeling Language) 所繪製出來的圖形。雖然學生時代都會學過這個,但是工作之後其實不容易透過良好的工具來繪製。

通常在 MacOSX 繪製經常使用 OmniGraffle(其實我有買)或是 Lucidchart ,但是要安裝這些軟體可能沒有那麼方便,或是拉來拉去本身也是很讓人困擾(美工苦手)。

使用文字敘述來繪圖的工具一直是我最愛 ( LaTex 愛好者),所以進了公司之後聽說過了 PlantUML 就一直很喜愛。 但是這兩天好奇因素之下研究了一下跟 vscode 整合,並且把可能遇到的問題分析給大家。

什麼是 PlantUML

可以快速看一下什麼是 PlantUML 介紹 ,或是去 PlantUML 官方網站了解。

PlantUML 透過簡單的語法可以繪製出 UML ,對於要做系統設計架構圖或是要做系統說明的人其實很方便。

比如說一個 use-case diagram 如下:

而且 PlantUML 支援相當多種 UML Diagram

相當的方便。

如何在 VSCODE 上面安裝

VSCode 的 PlantUML 具有相當多的特點:

  • Preview Diagram
  • Export Diagrams
  • Format PlantUML code (我很需要)
  • All type syntax highlight.
  • Auto Include.
  • MarkDown integrating support. View Demo (有點威)

安裝 PlantUML plugin

套件節點

想要試著跑但是會跑出錯誤。

No Java runtime present, requesting install.

請看以下方式解決。

解決在 OSX 10.11 之後無法順利更新 Java 的錯誤

  • 一開始試著在 vscode 裡面跑 java 相關指令會跑出
No Java runtime present, requesting install.

更新 PlantUML.jar

如果 vscode 套件裡面的版本太舊,可以考慮去下載

懶得安裝? 也是有線上版可以用

https://www.planttext.com/

提供了線上的版本,雖然沒有一些相關功能可以使用,但是臨時要用還是可以使用。

總結:

Reference

[Coursera] Smart Contract (三)最終作業

Blockchain Specialization 系列上課心得

Smart Contract 課程鏈結: 這裡

文章鏈結:

前言:

拖了兩個禮拜,總算把題目看完跟寫完了。今天很開心的將作業繳交上去的時候,卻發生錯誤。只好花了一兩個小時把整段程式碼整個看過,還是找不太到,最後到了論壇看了討論才把問題解決掉。

這個問題其實也讓我點出來,目前 Smart Contract 由於使用的 Solidity 的版本不同,其實功能的支援上也會有許多的差異。

不知道真正在 Smart Contract 的開發上是否會因為 Solidity 的版本變化造程碎片化 ? 請有實務經驗的朋友再好好分享。

這篇文章將 Smart Contract 作業裡面稍微整理一下幾個需要注意的地方跟可能會踩到的雷。

測驗內容:

透過 Smart Contract 來撰寫一個小型的拍賣決標,它具有以下的一些特性:

  • 固定只有四個競標者
  • 競標的商品只有三個 (0, 1, 2)
  • 每個競標者有五個 token 來競標他的商品

透過這些規矩底下,要完成這樣的 Smart Contract 需要了解以下的部分:

  • 要初始化所有的競標商品
  • 需要初始化所有的競標者資料
  • 完成最後結標的規則與算法
  • 透過 Modifier 來做一些檢查。

小訣竅:

  • Require()Revert() 會使用到要了解他的差異與使用方法
  • 一開始寫題沒有想到使用 revert()造成最後計算的測試一直無法順利完成。

總結:

雖然課程作業繳交花了一點時間,但是整體還是相當推薦這台課程。 下一次的課程也來到了 Decentralized Applications (Dapps) 的內容,希望會更有趣。

Reference:

[研討會心得] 2019/03/28 CNTUG#[email protected]

前提

三月第一場社群活動邀請到 CNTUG (Cloud Native Taiwan User Group) 社群到 LINE 來舉辦。也請到遠從東京的維運開發團隊 Verda Team 來台灣分享,除了讓更多人能夠了解這樣的架構之外,也希望能夠引發一些討論甚至可以互相交流。

How We build Kubernetes service by Rancher in LINE / LINE 東京 Verda Team, 李飛翔

投影片

來自東京 Verda Team 的李飛翔也跟大家分享 LINE 是如何透過 Rancher 來打造 LINE 自己的 KaaS (Kubernetes As A Service) 。本文一開始先介紹了 Rancher 的一些功能與 Rancher 2.0 的目前狀況,也會介紹我們如何使用 Rancher 來打造 KaaS 。

LINE 如何透過 Rancher 打造 KaaS

  • API Server:
    • 首先左方可以看到,有一個 API Server 負責收發使用者的指令。 除了作為 Proxy 之外,也可以限制使用者使用有限的 Rancher 功能之外也可以整合一次對於多個 Rancher 的操作。
  • Kubernetes Provider:
    • 透過 Kubernetes Provider 是一個 Kubernetes 集群來管理多個使用者的集群( User Kubernetes Cluster)
  • User Kubrernetes Cluster:
    • 每一個服務或是產品會使用一個或是多個 User Kubernetes Cluster 。裡面都是透過 OpenStack 來建立 VM ,並且透過 Rancher 來部署。

如果今天一個開發者需要一個新的集群來部署一個新的服務。他透過 API Server 下指令部署新集群,這時候會透過 Kubernetes Provider 來運行 Rancher 來開啟新的 VM 並且來部署 Kubernetes 設定到該集群。

如此的輕鬆容易嗎? 透過一個問題來講解整個 Kubernetes 的架構與容易出錯的地方

架構雖然清楚又明瞭,但是事實上要運行卻沒有那麼的容易。這邊講者也分享藉由 “Websocket 無法正常建立“的錯誤,來分享如何追蹤這個問題來解決真正的問題。

如同上圖提到 Kubernetes Provider 是透過 WebSocket 與 Kubernertes User Cluster 溝通。有一天忽然發現了 WebSocket 忽然斷線的狀態,回過頭來看 Kubernetes DNS 的設定, Container 網路的架構甚至也解釋了flannel 網路架構。透過這些架構的解析,聽眾會了解在實體機 (Baremetal) 上面架設 Kubernetes 其實遇到的網路問題其實更多更複雜,因為牽扯跨實體機器與跨網路節點。

找到問題之後,試著做出一個 patch 來修正問題。確定成功之後也將這個問題回饋到 Rancher 的 OSS 來貢獻 LINE 研究的結果。

類似的問題就是 Verda team 的人每天所遭遇的問題,不斷睇偵測與測試問題的原因,透過不同層面的觀點來了解與解讀問題。如果最後發現問題可能是出在 Kubernetes 源碼部分, LINE 也不吝嗇貢獻出發現的問題與修正的方式。

An operator deploys/manages/configures LINE bot atop Kubernetes / 白凱仁 (Cloud Native Taiwan User Group)

投影片

接下來由 CNTUG 的共同主辦人白凱仁所帶來的很有趣的主題,透過 Kuberbetes 來部署一個 LINE chatbot Operator。

原因是打魔物獵人需要查詢許多魔物的弱點跟容易攻略的弱點,但是要用電腦找太慢了,於是就想說寫一個 LINE chatbot 。但是考量到魔物其實會不斷的修改跟增加,如果好不容易把魔物”火龍“的弱點加入之後,隔天又想查詢”角龍”,那這樣不就得要不斷的修改跟更新你的代碼。

加上最近 Kubernetes Operator 其實是一個熱門的話題,但是一直沒有一個有趣的應用,於是講者就透過 Kubernetes Operator 將 LINE chatbot 部署起來。

(架構圖節錄來自投影片,獲得作者同意)

透過上圖可以了解 LINE Bot Operator 分成 Bot Controller 跟 Event Controller 兩個部分。Event Controller 透過 EventBinding 的方式可以將不同的 event 一一加入卻又不需要撰寫太多額外的代碼。 以下分享一個講者所提到的例子:

透過部署以上的 EventController 只要使用者在對話匡裡面打入”火龍” 或是 “Rathalos” 就顯示出以下那些文字,而要增加一個魔物也很簡單只要再增加另外一個相似的 YAML 設定然後將這個 EventController 部署上去即可。既可以讓會眾了解 Kubernetes Operator 的強大,也可以讓 LINE Chatbot 的開發上有了另外一種新的思路。

總結

很開心邀請到 CNTUG 社群來到 LINE 台灣辦公室舉辦 meetup ,也很榮幸邀請到 LINE 東京 Verda team 的成員來分享 LINE 私有雲打造的方式。並且透過分析問題的方來帶大家走過這個流程,並且能夠分享透過閱讀 Racher 源碼的方式來解決埋在深處的問題,並且貢獻回去。 Kubernetes As A Server (KaaS) 是一個具有龐大願景的系統,這樣的流程需要更多的新血,我們也需要各位 Kubernetes 與網路高手的加入。如果你也想要更深入了解並且參與開發這樣的系統,可以考慮投你我們 Verda team 的相關職缺。