SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Start
SIMPLY DIFFERENT
直 通 國 際
如何打造出百萬量級訊息的伺服器
Agenda
大綱
壓力測試架構
分散式架構
實際數據
分散式架構
http://www.esi-tech.net/
直通國際
LINE BC行為
5
BC HUB
http://www.esi-tech.net/
直通國際
LINE 海量資料的情況
6
2,000,0001,000,000 sec
11.5 days
0.5 sec
http://www.esi-tech.net/
直通國際
LINE 海量資料解決方案
7
2,000,000
http://www.esi-tech.net/
直通國際
BC HUB 接收海量資料的情況
8
BC HUB
http://www.esi-tech.net/
直通國際
BC HUB 接收海量資料解決方案
9
BC HUB
http://www.esi-tech.net/
直通國際
BC HUB 兩種行為
10
單向發送訊息 雙向互動行為
http://www.esi-tech.net/
直通國際
單向發送訊息
11
H
DBBC HUB
http://www.esi-tech.net/
直通國際
雙向互動行為解決方法
12
DB
BC HUB
ERROR !!
http://www.esi-tech.net/
直通國際
雙向互動行為解析
14
Server 1
Server 2
User 1
User 1 Dialog
http://www.esi-tech.net/
直通國際
雙向互動行為解決方法
15
記錄使用者Dialog狀態
DB
BC HUB
壓力測試架構
http://www.esi-tech.net/
直通國際
單向發送訊息壓力測試
18
壓力測試工具
H
DB
BC HUB
http://www.esi-tech.net/
直通國際
雙向互動行為情境 – 電子賀卡
19
User
BC HUB
1. 發送關鍵字觸發活動
2. 回傳電子賀卡範本清單
4. 回傳合成後的電子賀卡圖片
3. 選擇電子賀卡範本
http://www.esi-tech.net/
直通國際
雙向互動行為壓力測試
20
記錄使用者Dialog狀態
DB
壓力測試工具
BC HUB
ERROR !!
http://www.esi-tech.net/
直通國際
雙向互動行為壓測解析
22
BC HUB
壓力測試工具
1. 發送關鍵字觸發活動
2. 回傳電子賀卡範本清單
4. 回傳合成後的電子賀卡圖片
3. 選擇電子賀卡範本
http status code 200
http://www.esi-tech.net/
直通國際
兩步驟解決方案
23
1. 建立LINE Mock網站
2. 撰寫驗證程式碼
http://www.esi-tech.net/
直通國際
MOCK Site 架構
24
BC HUB壓力測試工具
1. 發送關鍵字觸發活動
2. 回傳電子賀卡範本清單
4. 回傳合成後的電子賀卡圖片
3. 選擇電子賀卡範本
http status code 200
http status code 200
MOCK Site
呼叫電子賀卡測試情境
http status code 200
http://www.esi-tech.net/
直通國際
MOCK Site 兩個端點
25
MOCK Site
測試端點 接收端點
http://www.esi-tech.net/
直通國際
MOCK Site 端點說明
26
BC HUB壓力測試工具
1. 發送關鍵字觸發活動
2. 回傳電子賀卡範本清單
4. 回傳合成後的電子賀卡圖片
3. 選擇電子賀卡範本
http status code 200
http status code 200
MOCK Site
呼叫電子賀卡測試情境
http status code 200
http://www.esi-tech.net/
直通國際
關鍵
27
SpinWait.SpinUntil(
…)
等待BC HUB回傳結果
BC HUB Push
API
將要發送給LINE的訊息,改發給Mock Site的接收端點
測試作業物件
Dictionary<uid, testTaskObject>
http://www.esi-tech.net/
直通國際
測試端點 Pseudo Code
28
TestTaskA ( string uid )
{
}
// task 1. 發送關鍵字觸發活動
// task 2. 回傳電子賀卡範本清單
// task 3. 選擇電子賀卡範本
// task 4. 回傳合成後的電子賀卡圖片
2. 建立 “發送關鍵字” LINE模擬文字訊息
3. 呼叫BC HUB的Webhook端點
4. 執行 SpinWait.SpinUntil ( 測試物件.完成數量==1 )
5. 建立 “選擇電子賀卡範本” LINE模擬動作訊息
6. 呼叫BC HUB的Webhook端點
7. 執行 SpinWait.SpinUntil ( 測試物件.完成數量==2 )
1. 建立測試作業物件,放到集合中,以uid當Key
8. 清除測試作業物件
9. 回傳結果(包含每次BC HUB呼叫Push API的內容)
http://www.esi-tech.net/
直通國際
接收端點 Pseudo Code
29
Receive ( )
{
}
1. 解析收到的訊息內容,取得uid
2. 根據uid從集合中取得測試作業物件
3. 將收到的訊息內容,記錄到測試作業物件中
4. 測試物件.完成數量++
實際數據
http://www.esi-tech.net/
直通國際
單向訊息發送
32
封訊息
分鐘
http://www.esi-tech.net/
直通國際
雙向互動行為
33
20,000
問卷
20,000
分享
11,500
電子賀卡
Requests / min Requests / min Requests / min
關於直通
http://www.esi-tech.net/
直通國際
Microsoft
台灣微軟金級合作夥伴
SharePoint
Dynamics 365
Power BI
Start up
Sitecore
亞洲第一原生金級
Partner
Dec
2006 May
2009
May 2016
Jan 2018
Adobe
Marketing
Cloud Partner
LINE
Technical Partner
90+
http://www.esi-tech.net/
直通國際
客戶經驗
http://www.esi-tech.net/
直通國際
Join US

Weitere ähnliche Inhalte

Ähnlich wie 2018 LINE Tech Pulse 直通國際分享

数据中心网络架构与全球化服务-Qcon2011
数据中心网络架构与全球化服务-Qcon2011数据中心网络架构与全球化服务-Qcon2011
数据中心网络架构与全球化服务-Qcon2011Yiwei Ma
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)vanadies10
 
中海集装箱天津有限公司塘沽片区虚拟化实施 报告
中海集装箱天津有限公司塘沽片区虚拟化实施 报告中海集装箱天津有限公司塘沽片区虚拟化实施 报告
中海集装箱天津有限公司塘沽片区虚拟化实施 报告Yunchao (Kevin) Wang
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
Selling sybase hds solution for banking
Selling sybase hds solution for bankingSelling sybase hds solution for banking
Selling sybase hds solution for bankingfocusbi
 
淘宝Java中间件之路
淘宝Java中间件之路淘宝Java中间件之路
淘宝Java中间件之路mysqlops
 
基于用户行为的数据分析
基于用户行为的数据分析基于用户行为的数据分析
基于用户行为的数据分析mysqlops
 
这两年工作总结
这两年工作总结这两年工作总结
这两年工作总结Lv Jian
 
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索liu sheng
 
优化It网络架构 加速云计算服务
优化It网络架构 加速云计算服务优化It网络架构 加速云计算服务
优化It网络架构 加速云计算服务ITband
 
Ceph Day Shanghai - Ceph in Chinau Unicom Labs
Ceph Day Shanghai - Ceph in Chinau Unicom LabsCeph Day Shanghai - Ceph in Chinau Unicom Labs
Ceph Day Shanghai - Ceph in Chinau Unicom LabsCeph Community
 
徐晓 Qq空间技术架构之峥嵘岁月
徐晓 Qq空间技术架构之峥嵘岁月徐晓 Qq空间技术架构之峥嵘岁月
徐晓 Qq空间技术架构之峥嵘岁月drewz lin
 
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验guiyingshenxia
 
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验colderboy17
 
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计mysqlops
 
Streaming architecture zx_dec2015
Streaming architecture zx_dec2015Streaming architecture zx_dec2015
Streaming architecture zx_dec2015Zhenzhong Xu
 
20100629 中山大学交流
20100629 中山大学交流20100629 中山大学交流
20100629 中山大学交流leonsandy888
 
章文嵩:使用Lvs集群架设高可扩展的网络服务
章文嵩:使用Lvs集群架设高可扩展的网络服务章文嵩:使用Lvs集群架设高可扩展的网络服务
章文嵩:使用Lvs集群架设高可扩展的网络服务drewz lin
 

Ähnlich wie 2018 LINE Tech Pulse 直通國際分享 (20)

数据中心网络架构与全球化服务-Qcon2011
数据中心网络架构与全球化服务-Qcon2011数据中心网络架构与全球化服务-Qcon2011
数据中心网络架构与全球化服务-Qcon2011
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)
 
中海集装箱天津有限公司塘沽片区虚拟化实施 报告
中海集装箱天津有限公司塘沽片区虚拟化实施 报告中海集装箱天津有限公司塘沽片区虚拟化实施 报告
中海集装箱天津有限公司塘沽片区虚拟化实施 报告
 
Java@taobao
Java@taobaoJava@taobao
Java@taobao
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
Selling sybase hds solution for banking
Selling sybase hds solution for bankingSelling sybase hds solution for banking
Selling sybase hds solution for banking
 
Data 2
Data 2Data 2
Data 2
 
淘宝Java中间件之路
淘宝Java中间件之路淘宝Java中间件之路
淘宝Java中间件之路
 
基于用户行为的数据分析
基于用户行为的数据分析基于用户行为的数据分析
基于用户行为的数据分析
 
这两年工作总结
这两年工作总结这两年工作总结
这两年工作总结
 
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
 
优化It网络架构 加速云计算服务
优化It网络架构 加速云计算服务优化It网络架构 加速云计算服务
优化It网络架构 加速云计算服务
 
Ceph Day Shanghai - Ceph in Chinau Unicom Labs
Ceph Day Shanghai - Ceph in Chinau Unicom LabsCeph Day Shanghai - Ceph in Chinau Unicom Labs
Ceph Day Shanghai - Ceph in Chinau Unicom Labs
 
徐晓 Qq空间技术架构之峥嵘岁月
徐晓 Qq空间技术架构之峥嵘岁月徐晓 Qq空间技术架构之峥嵘岁月
徐晓 Qq空间技术架构之峥嵘岁月
 
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
 
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
腾讯 马志强 虚拟化环境下 网络 朋务器 平台的协作经验
 
从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计从运维系统的开发谈安全架构设计
从运维系统的开发谈安全架构设计
 
Streaming architecture zx_dec2015
Streaming architecture zx_dec2015Streaming architecture zx_dec2015
Streaming architecture zx_dec2015
 
20100629 中山大学交流
20100629 中山大学交流20100629 中山大学交流
20100629 中山大学交流
 
章文嵩:使用Lvs集群架设高可扩展的网络服务
章文嵩:使用Lvs集群架设高可扩展的网络服务章文嵩:使用Lvs集群架设高可扩展的网络服务
章文嵩:使用Lvs集群架设高可扩展的网络服务
 

2018 LINE Tech Pulse 直通國際分享

Hinweis der Redaktion

  1. 大家好,我是直通國際Jeremy,今天來跟大家分享如何打造百萬量級訊息的伺服器。
  2. 等等會分三個部分說明,先說明分散式架構,接著會說明壓力測試架構,透過壓力測試來驗證架構是否可行,最後會分享實際的數據。
  3. 在說明分散式架構前,我們先來說明一下LINE BC的運作機制。
  4. LINE BC跟我們的伺服器,也就是畫面上看到的BC HUB。雙方的行為很像是傳接球。# 彼此互丟訊息。#
  5. #假設今天傳送一則訊息需要0.5秒,#有兩百萬則訊息需要發送,#如果我們只有一名投手,#會需要花11天半,才能把球全部投完。
  6. 所以在面對這麼大量的訊息需要發送時,一個人不夠用,#就是多叫點人出來幫忙。就像是火影忍者裡面的影分身一樣,大家一起丟。如果大家有追蹤LINE API封包的話,不難發現LINE是透過Akamia的服務,來達成橫向擴充機制,這也是一般主流大型網站會採用的架構。  
  7. 好的,當今天LINE BC已經用影分身之術,叫了一堆分身來發送訊息,如果我們還是只有一個人在接球的話,#肯定是會被K得滿頭包。
  8. 因此,當對方都已經影分身烙一推兄弟出來,#我們這邊當然也要影分身烙一堆人出來接球。 2 mins
  9. 在BC HUB與LINE BC中,有兩種行為,一種是單向發送訊息,由BC HUB透過LINE BC將訊息發送給頻道中的好友。另外一種則是雙向互動行為,透過一系列訊息互傳來達成,像是我們常見的會員註冊、填問卷或是抽獎。
  10. 這是單向發送訊息架構圖,使用者在BC HUB上建立要發送的訊息內容與發送名單,接著#我們會透過Hangfire來將發送工作分派給分身們發送訊息給LINE BC。
  11. 當然,雙向互動行為,我們也可以如法炮製。當我們今天收到一堆訊息的時候,#也是可以產生一堆分身來處理。  
  12. 但是,如果我們這樣做的話,就會遇到問題。  
  13. 如同我們剛剛說的,雙向互動行為,通常都是一系列的對話,會需要一來一往的訊息處理,我們一般會稱為對話,也就是圖上的Dialog。舉例來說,當今天會員要執行註冊時,由Server 1 發送訊息給使用者 #,請使用者填寫Email,同時系統會註記使用者目前正在進行註冊對話。#當今天使用者填寫Email發送後,這時候該訊息會被Server2接收到,#這時候因為Server2不知道使用者正在進行註冊對話,這時候就會發生問題。 這其實就是Load Balance常見的問題。
  14. 為了要解決這個問題,需要採用redis的方式來處理,透過redis將使用者的狀態記錄下來。把使用者狀態記錄在牆壁上,今天不管是那個分身出來處理,對方的狀態都可以一目了然。 4 mins
  15. 再好的架構,如果沒有實際的測試,都是紙上談兵。為了維護我們服務的完整性,需要對我們的Server執行壓力測試。在LINE BC的環境中,我相信壓力測試是大家最苦惱的地方。我到底要去哪邊生出200萬則的模擬訊息,所以我們今天來分享要如何建構壓力測試環境。
  16. 針對單向發送訊息,因為我們是單方向的把訊息往LINE丟,壓力測試相對來說比較簡單,我們可以直接讓壓力測試工具,對我們BC HUB執行,
  17. 在雙向互動行為上,我們先以電子賀卡互動行為為例。#首先好友會先發送一個關鍵字觸發活動(像是: 參加活動),#BC HUB收到後,會回傳電子賀卡範本清單讓好友選擇,#好友選擇某一個電子賀卡範本,#接著BC HUB會回傳合成後的電子賀卡圖片,#然後,我們會希望可以測量從第一步到第四步所需要的時間。
  18. 一樣,我們讓壓力測試工具,模擬LINE BC,對BC HUB發送好友的文字訊息,來觸發關鍵字活動,啟動電子賀卡活動。
  19.  很熟悉的畫面,是的,如果我們直接用壓力測試工具對BC HUB執行,我們又會遇到問題。
  20.   這是我們剛剛看到的情境,當我們用壓力測試工具模擬LINE BC發送關鍵字時,#這時候BC HUB會馬上回傳結果,為什麼? 因為這是LINE API的規範,當我們收到Webhook的訊息時,需要回傳 200,告知LINE,該則訊息我們已經正確接收。 但是這樣的行為,#卻會讓我們實際量測的時間變得非常漂亮,讓我們誤以架構沒有問題,但是實際上卻是沒有測量到實際的情況。
  21. 因此,針對雙向互動,我們需要架設壓力測試環境,透過兩個步驟來建立。第一步是建立LINE MOCK網站,這是一個Web API的網站,用來負責雙向互動的情境測試。第二步是針對每個雙向互動情境,撰寫所需的驗證程式碼。
  22. 先來說明Mock 網站的架構。首先,壓力測試工具會呼叫Mock 網站所提供的API,這個API會負責執行電子賀卡測試情境。#接著,Mock網站會開始執行電子賀卡測試情境,直到測試情境結束後,#才會回傳結果,這時候壓力測試工具才回收到回傳結果。#這段時間,才是我們希望要測量的時間。
  23. 在Mock網站,我們會需要提供兩種端點,一個是測試端點,這是讓壓力測試工具可以呼叫的端點,測試端點的數量,會根據要執行壓力測試情境的數量決定。 假設我們今天有三個情境需要壓力測試,這時候測試端點應該就會有三個。 另外一個則是接收端點,這個端點是用來接收BC HUB 要傳送給LINE的訊息,一般來說,只會有一個接收端點。
  24. 套回剛剛的架構圖來看,#,首先壓力測試工具會先呼叫測試端點,開始執行測試。在過程中的第二與第四階段,#BCHUB原本要傳送給LINE的訊息,會改傳送給Mock 網站,呼叫Mock網站的接收端點,讓Mock網站的測試步驟可以繼續往下進行。
  25. 在撰寫驗證程式碼時,有三個關鍵。#第一,我們需要在Mock建立測試作業物件,這是一個字典集合,以uid為key值,每一個uid會有一個測試作業物件,用來記錄每個好友目前測試作業的狀態。#第二,需要透過空轉的方式,讓Mock網站可以等待BC HUB回傳訊息,#第三,需要調整BC HUB Push API,把原先呼叫LINE Push API的位置,改呼叫Mock網站的接收端點。
  26. 我們來看一下測試端點的pseudo code,首先,建立測試物件,以uid為key值,放到集合中。#接著開始處理測試情境的四個步驟。#在第一步驟中,先建立發送關鍵字的LINE模擬文字訊息,接著呼叫BC HUB的Webhook端點,傳送剛剛建立的文字模擬訊息。用來模擬好友傳送關鍵字訊息。#接著第二步驟,執行空轉,等待BC HUB回應訊息,等到測試物件的完成數量為1時,才繼續往下執行。#第三步驟,跟剛剛發送關鍵字一樣,我們建立選擇電子賀卡的LINE模擬動作訊息,並且呼叫BC HUB的Webhook。#第四步驟,一樣是執行空轉,等到完成數量為2時,才繼續往下執行。#最後,當測試情境的步驟都完成時,我們把剛剛建立的測試作業物件清除,同時回傳結果。
  27. 而接收端點的pseudo code,相對來說就比較單純。第一步先解析收到的訊息內容,從內容中取得uid。第二步,根據uid從集合中取得測試作業物件。第三步是將從BC HUB收到的訊息內容記錄到測試作業物件中。最後第四步,把測試作業物件中的完成數量屬性內容+1。#這個接收端點,會再第二步驟的時候,被BC HUB呼叫一次。#然後會在第四步驟的時候,又再被BC HUB呼叫一次。
  28. 接著我們來看一些實際數據。  
  29. 透過分散式架構,讓我們BC HUB,針對200萬封訊息,#可以在25分鐘內處理完畢。  
  30. 再雙向互動行為上,問卷、分享與電子賀卡活動,每分鐘分別可以處理2萬筆訊息。電子賀卡因為有圖片合成的關係,所以每分鐘處理1萬多筆左右。 以上就是我們今天的分享。 因為時間有限,若各位有任何問題,都歡迎會後找我討論。 9 mins
  31. 很快介紹一下我們自己,我們是直通國際,是微軟的金級合作伙伴,在2006年成立,在2016年取得sitecore亞洲第一原生金級合作伙伴,在2018年取得Adobe 與 LINE的伙伴資格。身為LINE 第一批技術合作夥伴,除了讓我們有機會參與BCHUB開發外,也有更多機會收到LINE介紹來的客戶。
  32. 很快介紹一下我們自己,我們是直通國際,是微軟的金級合作伙伴,在2006年成立,在2016年取得sitecore亞洲第一原生金級合作伙伴,在2018年取得Adobe 與 LINE的伙伴資格。身為LINE 第一批技術合作夥伴,除了讓我們有機會參與BCHUB開發外,也有更多機會收到LINE介紹來的客戶。
  33. 這是我們客戶經驗,針對中大型企業,提供數位行銷、EIP、KM的解決方案,在系統整合上有10多年的經驗。同時我們針對中小企業,在數位行銷上也提供整合性雲端產品,協助企業數位轉型。
  34. 最後,如果你對我們公司有興趣,歡迎加入我們 :)