2015年11月3日 星期二

筆記Guardian Grid研究 - Grid介紹


GridGuardian新開發的image  management system,目前開放成Open Sourcehttps://github.com/guardian/grid)在GitHub上。


簡介
Guardian舊的image  management system已運行超過15年過於老舊,對於一直提出的需求,若要新增功能或修改原系統將導致後續維護與修改成本的提高且系統會越來越複雜,最後他們想要打造一個新的image  management systemGuardian在引進外面廠商的系統與自行開發中進行抉擇,提出了以下的需求。
  • Ingest and index all our images past, present and future
  • Very fast and powerful search
  • User upload, metadata editing, cropping, publishing of optimised assets
  • Rights management, historical usage records
  • Collaboration workflows
  • In-browser experience from anywhere
  • Integration with all our internal tools (Composer CMS, fronts editing tool, InDesign for print, etc)
  • Deployable to the AWS cloud
引進外廠系統固然方便快速,但若要符合內部的作業程序、整體需求、使用者操作習慣與介接其他系統,成本不小,光買進外廠系統就是一大筆開銷,故決定自行開發。約莫2014年初,Project開始起步時,先由一位研究人員採用proof-of-concept的方式花了4個星期開發出了雛型系統,在Project正式通過審核後,系統開發人員成長到四位,並加上了一位group product manager和一位UX architect。

啟用後約莫8個月,Grid管理了約45%已在媒體或紙媒中使用的圖片,擁有超過3百萬張的image,平均一天新增約2萬張新圖片。由他們的KPI Dashboard可看出圖片使用率一直在成長。
在開發時團隊參考了developer anarchyprevious experiments in development processes的內容,團隊與所有使用者一起工作並了解他們的真正需求,並採用敏捷開發法,降低Project產製時程。

技術

Grid系統採用microservice architecture設計,Server端為Scala/Play Framework開發,並利用Amazon SNS/SQS進行queue管理,搜尋部分交由Elasticsearch,儲存則由Amazon S3負責,imagemetadata則存在Amazon DynamoDB。每個service皆實作 hypermedia APIs,格式為Guardianargo-rest project訂定的 argo media-typemedia可以操作的動作由一個requet取得actionURLURL皆以REST來設計。
Client端引入AngularJS來開發,在與Server hypermedia APIs介接採用argo-rest projecttheseus javascript library,至於javascriptlibrary管理與載入則使用JSPM/SystemJS

測試建構
因一些app啟動時的驗證問題,無法順利執行,尚與Guardian工程師討論中。以下為看source code猜測每個compoment負責的工作。

Kahuna
使用者介面。

Media API
介接各service與提供action URL給前端。

Reaper
Media API配合,整理、分類image列表供輸出。 Ex. 是否為過去20天的image

Cropper
儲存、讀取image原檔。

Metadata
metadata的新修改動作。

ImgOps
GD Library的執行component,製作縮圖。

Loader
讀寫S3縮圖的儲存空間。

FTP watcher
FTP空間與Grid的介接程式。

Thrall
讀取SNS/SQS寫入Elastic search,類似worker patternworker


參考


2015年10月2日 星期五

筆記Apache NiFi(二) - 範例自動Twitter Streaming API與存檔


基本兩個Processor範例Twitter Streaming API接到資料後將json儲存在本機硬碟裡。


1. 至Application Management申請Twitter APP
a. Application Management
https://apps.twitter.com
b. Create New APP
c. 鍵入資料

d. 至App頁面的Keys and Access Tokens分頁

e. Create my access token
f. 取得所需之Consumer KeyConsumer SecretAccess TokenAccess Token Secret


2. 開啟NiFi Web UI
http://localhost:8080/nifi/

3. 建立資料輸入Processor
a. 拉出一個Processor

b. 選擇GetTwitter

c. 右鍵點選Configure

d. 設定資料
i. 輸入tokenkey
ii. 選擇twitter filter的參數,範例為選擇Filter,其他Streaming API用法請參考 https://dev.twitter.com/streaming/overview
iii. Terms to Filter On 空格代表AND ,』代表OR ex. he was, boy』則為『(he AND was) OR boy
iv. Scheduling分頁可選擇TimerCRON方式,如不選擇預設為TimerRun schedule0代表一個task完成後不等待直接下一個taskRun duration為執行完成後會延遲的時間,0代表只會執行一次且不延遲。



4. 建立資料輸出Processor
a. 拉出一個Processor
b. 選擇PutFile

c. 右鍵點選Configure

d. 設定資料
i. Directory範例設為/data/tweets/

e. 選擇為失敗或成功都接收


5. 建立輸入與輸出連結

6. 啟動Processor

7. 檢查資料