Grid是Guardian新開發的image
management system,目前開放成Open
Source(https://github.com/guardian/grid)在GitHub上。
簡介
Guardian舊的image management system已運行超過15年過於老舊,對於一直提出的需求,若要新增功能或修改原系統將導致後續維護與修改成本的提高且系統會越來越複雜,最後他們想要打造一個新的image management system。Guardian在引進外面廠商的系統與自行開發中進行抉擇,提出了以下的需求。
- 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 anarchy與previous experiments in development processes的內容,團隊與所有使用者一起工作並了解他們的真正需求,並採用敏捷開發法,降低Project產製時程。
技術
Grid系統採用microservice
architecture設計,Server端為Scala/Play Framework開發,並利用Amazon SNS/SQS進行queue管理,搜尋部分交由Elasticsearch,儲存則由Amazon S3負責,image的metadata則存在Amazon DynamoDB。每個service皆實作 hypermedia APIs,格式為Guardian的argo-rest
project訂定的 argo media-type,media可以操作的動作由一個requet取得action的URL,URL皆以REST來設計。
在Client端引入AngularJS來開發,在與Server端 hypermedia APIs介接採用argo-rest project的theseus javascript library,至於javascript的library管理與載入則使用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
pattern的worker。
參考
0 意見:
張貼留言