Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
C:\Documents And Settings\User\桌面\Sciece Talk投影片\Science Talk 100111 陸行
Next
Download to read offline and view in fullscreen.

18

Share

排隊應用開發

Download to read offline

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

排隊應用開發

  1. 1. 排隊應用開發 王建興 qing.chwang@gmail.com
  2. 2. 排隊在生活中無所不在
  3. 3. 講者簡介 • 現職 – 聖藍科技技術長 • 興趣 – 網路應用系統開發 • 譯作 – Thinking in Java 4th Edition, 正體中文版 – Thinking in Java 2nd Edition, 正體中文版 – Essential C++, 正體中文版 • 專欄 – iTHome 電腦報程式人專欄 • 連絡方式 – qing at gmail.com – qing_wang at twitter
  4. 4. 綱要 • 何謂佇列 • 為什麼需要佇列 • 排隊理論 • 佇列的應用 • 案例探討 • 高效工作佇列beanstalk • 結論
  5. 5. 何謂佇列(Queue)? • 佇列(Queue)是一種能依序存取其中元素 的抽象資料結構 – FIFO Queue – Priority Queue • 在佇列上的典型操作 – Enqueue(塞進佇列中) – Dequeue(自佇列中取出) – *Peek(窺看佇列中的第一個元素)
  6. 6. Java內建的Queue • java.util.Queue – 典型先進先出的FIFO Queue – 尾進頭出 • java.util.PriorityQueue – 非FIFO存取原則 – 依照物件的 “natural ordering” 或自定排序方式 決定優先序的佇列 – 自定排序透過Java的Comparator介面指定
  7. 7. Java中Queue的變形 • Blocking – BlockingQueue – PriorityBlockingQueue • Double Ended Queue – Deque • Delay – DelayQueue – 儲存java.util.concurrent.Delayed • Synchronous – SynchronousQueue
  8. 8. In-Process Queue • Queue 和 Queue 的客戶端程式位在同一個 行程中 • 客戶端程式毋需透過任何通訊協定或IPC的 方式來對Queue做操作 • 儲存於Queue中的資料,通常不需要做 serialization和deserialization • 像Java collection API中的Queue族系都是屬 於In-Process 的 Queue
  9. 9. In-Process Queue的應用優缺 • 優 – 低額外負擔:不需要額外的傳輸、不需要跨行 程的資料處理負擔 – 單純:沒有獨立的伺服器需要管理 • 缺 – 較難擴展規模 – 受限在單一機器的資源(CPU, RAM, Network, …)
  10. 10. Network-based Queue • Queue 和 Queue 的客戶端程式不位在同一 個行程中 • 客戶端程式需透過特定的通訊協定或IPC的 方式來對Queue做操作 • 儲存於Queue中的資料,需要做serialization 和deserialization
  11. 11. Network-based Queue的應用優缺 • 優 – 有機會透過增加 Queue 的數量來擴展規模(增 加 CPU, RAM, Network, …) – 多個 Queue 之間可相互備援,以容忍系統異常 及錯誤 • 缺 – 額外負擔較大 – 系統複雜度較高
  12. 12. 為什麼需要佇列? • 演算法中需要儲存資料的資料結構 • 資源的最佳化配置 • 跨行程的通訊
  13. 13. 做為演算資料結構的Queue • Queue是演算法中十分常用的資料結構 • Graph Traversal – BFS (Breadth First Search) – FIFO Queue • Prim’s Algorithm for Minimal Spanning Tree – Priority Queue
  14. 14. 用於資源最佳化的Queue • Queue 是一種在提供服務的成本以及使用擁 塞的代價之間取捨達成平衡的機制 • 例:Job Queue – 工作在Queue中排隊等待可用資源 • Queue提供緩衝的作用 • 因為資源的使用有高有低,透過Queue可緩 衝對資源的使用,使資源運用最佳化 • Queue提供排程的機制,可依重要性運用資 源
  15. 15. Producer-Consumer *http://vichargrave.com/multithreaded-work-queue-in-c/producer-consumer-model/ • Producer 可以是 client request,而 Consumer 就成了可以處理 request 的 server 了
  16. 16. Producer-Consumer • 用FIFO Queue來解決生產及消費速率不匹配 的問題 *http://blog.eyasranjous.info/2013/04/14/using-the-producer-consumer-java/
  17. 17. 用於跨行程通訊的Queue • 位在不同行程、甚至是不同機器上的程式 ,可以透過Queue來交換訊息
  18. 18. 用於跨行程通訊的Queue • 即使主要目的是跨行程的通訊,但是這還 是個 Producer-Consumer 的模型
  19. 19. 排隊理論(Queuing Theory) • 排隊理論是用數學的方式研究等候線或佇 列的排隊 • 排隊理論透過建構模型的方式來預測佇列 的長度、排隊所需的等候時間、以及排隊 的公平性
  20. 20. 排隊模型的參數 • 服務請求到達的規則 – 像是請求到達的機率分布方式 – 簡單的例子,像是平均多久一個請求到達 • 完成請求之服務時間的規則 – 像是完成請求之服務時間的機率分佈方式 – 簡單的例子,像是平均多久完成一個請求 • 總共有幾個伺服器 • 總共有幾個佇列 • 決定服務請求的方式 – 先到先服務、後到先服務、隨機服務、高優先權者先 服務…
  21. 21. 排隊模型示意 *http://www.cmg.org/measureit/issues/mit58/m_58_15.html
  22. 22. 資源配置及服務品質 • 前言:Queue 是一種在提供服務的成本以及 使用擁塞的代價之間取捨達成平衡的機制 • 想要提升服務品質,即降低擁塞的代價 – 增加 Server 的個數 • 想要降低提供服務的成本 – 減少 Server 的個數 • 相衝突的目標之下,只能取捨一個平衡點
  23. 23. 佇列在系統上的應用 • 當資源有限時,利用佇列來更妥善的運用 資源,平衡資源配置量及服務品質 – Job Queue • 透過佇列的機制,來簡化跨行程之系統組 成的溝通 – Message Queue
  24. 24. Job Queue • 在軟體系統中,所謂的 Job Queue (工作佇 列)是一個由工作排程器(Job Scheduler) 所維護的資料結構,其中內含待執行的工 作 *http://zeroproductionincidents.wordpress.com/category/web-architecture/process-model/page/3/
  25. 25. Message Queue • 所謂的Message Queue(訊息佇列)是一種 用於以下用途的軟體元件 – 跨行程通訊 – 同行程中跨執行緒的通訊 • Message Queue 中所儲存的就是用來通訊的 訊息內容 • Message Queue 的通訊本質是非同步,所以 訊息的發送者和接收者毋需在同時間連線 方能進行互動
  26. 26. Message Queue *http://docs.wso2.org/wiki/display/MB201/Queues
  27. 27. Queue 的本質 • 非同步 – Producer/Consumer 或 Sender/Receiver 不需要 同步互動 • 緩衝 – 提供一個緩衝空間來暫存 • 標準化的溝通界面
  28. 28. Decupling System Components • Message Queue/Job Queue 衍生出來的好處 • 透過Message Queue/Job Queue 溝通系統中 的不同組成 • 各組成可跨行程、跨主機 • 各組成可跨語言 • 容易擴展規模
  29. 29. 案例探討 Event Log 的收集及分析系統
  30. 30. Event Log 的收集及分析 • 有一些系統,有大量的客戶端需要向系統 回報數量龐大的log資訊 • 例-:行車記錄系統 – 不斷的向系統回報車速GPS座標甚至是即時上 傳車上攝影機所拍下的照片 • 例二:廣告使用者行為追蹤系統 – 收集使用者在頁面上的行為,以便分析使用者 的偏好,進而做廣告投放呈現的參考
  31. 31. 可能的系統架構 httpd EvetLogServlet Log Datastore LogAnalyzer
  32. 32. 可能會有的效能問題 • 同時太多並行的請求時,會有大量的執行 緒被產生出來以執行 Servlet 的處理程式 • 對資料庫的寫入動作會是重要的瓶頸 – 每秒一萬筆的資料更新? • 太多執行緒在等待資料庫可寫入 – 執行緒存在時間拉長,資源佔用時間拉長,佔 用更多的資料(CPU, Memory, Socket, …) – 客戶端的請求等待回應的時間也變長
  33. 33. 嘗試擴展規模? httpd EvetLogServlet Log Datastore LogAnalyzer … … Load Balancer
  34. 34. 導入Job Queue … … EvetLogServlet DatastoreJob Queue Worker
  35. 35. 多層的緩衝 … Raw DatastoreJob Queue Worker Worker Report Datastore
  36. 36. 多層緩衝的實作 … Cassandrabeanstalkd Java Worker Java Worker MySQL
  37. 37. 同事的惡搞 • 同事:這比較像這兩年流行的架構
  38. 38. beanstalk • Beanstalk 是個簡單、快速的工作佇列 • 許多需要執行耗時、緩慢工作的 Web 應用 程式都利用它來在背景執行這些工作 • 使用libevent,而在server-client之間師法 memcached的通訊協定,藉以得到很高的 性能 • 將任務儲存在主記憶體中
  39. 39. beanstalk的效能 *http://adam.heroku.com/past/2010/4/24/beanstalk_a_simple_and_fast_queueing_backend/
  40. 40. beanstalk 的特性 • 輕量化、高效 – 輕量化的通訊協定 – 將工作資訊儲存在記憶體中 • 工作具有優先序 – 支援 32 bits 的優先序表示 • 可將工作永續化 • 分散式容錯能力 • 逾時工作的控制 – 若consumer逾時無法完成工作,則工作會被從 RERSEVED狀態移回READY,供其他consumer繼續處理
  41. 41. beanstalk 中工作的狀態
  42. 42. beanstalk 的 Java Client • beanstalk 有支援多種語言的客戶端 • Java 版客戶端TrendrrBeanstalk – https://github.com/dustismo/TrendrrBeanstalk
  43. 43. 選擇 Queue 實作的考量因素 • 傳輸的額外負擔 • 儲存的媒介 – 是否具備永續性 • 安全性 – 傳輸的安全性 – 儲存的安全性 • 容錯能力 • 擴展規模的能力
  44. 44. 設計就是在做取捨 • 使用beanstalk就是求快 • 選擇犧牲 – 安全性 – 容錯能力 – 永續性 • 對於一個處理關鍵交易工作的工作佇列, 你或許不會考慮使用beanstalk
  45. 45. 結論 • Queue 是系統設計時不可或缺的要素 • 透過 Queue 可以得到若干好處,尤其是改 善資源的利用效率
  46. 46. Thanks
  • ethanlin7587

    Jul. 5, 2016
  • franksmile0310

    Apr. 29, 2016
  • ssuser1a9c9c

    Apr. 12, 2016
  • HsuanChenLin

    Sep. 30, 2015
  • 99741105

    Sep. 9, 2015
  • denverliu1

    Oct. 8, 2014
  • myertw

    Jun. 26, 2014
  • ssuserc87714

    Jun. 14, 2014
  • EricWeiC63AMG

    Apr. 24, 2014
  • ppooccoo0123

    Dec. 20, 2013
  • deva.lin

    Aug. 8, 2013
  • MarsHuang

    Aug. 6, 2013
  • racklin1002

    Aug. 5, 2013
  • hyl22

    Aug. 5, 2013
  • williamyeh

    Aug. 5, 2013
  • TimLee4

    Aug. 4, 2013
  • lincyu1975

    Aug. 4, 2013
  • ctyeh

    Aug. 4, 2013

Views

Total views

4,382

On Slideshare

0

From embeds

0

Number of embeds

664

Actions

Downloads

80

Shares

0

Comments

0

Likes

18

×