SlideShare a Scribd company logo
1 of 43
Download to read offline
老舊 Web 上雲端
qrtt1
#JCConf
老舊 Web 上雲端大綱
Cache
CDNActiveCache
針對這次問題所選擇的主要方法
Cache
CDNActiveCache
針對這次問題所選擇的主要方法
實驗性質的主動式快取

非常「惡搞」
重新思考快取的對象與策略
老舊 Web 上雲端大綱
Cache
CDNActiveCache
針對這次問題所選擇的主要方法
實驗性質的主動式快取

非常「惡搞」
重新思考快取的對象與策略
服務直到世界的盡頭
老舊 Web 上雲端大綱
老舊 Web 上雲端
是一種對於無法維護的 Web 專案的「尊稱」
老舊 Web 上雲端
bad smell 大集合
各式各樣的 duplicated code
各式各樣的 long method, class
各式各樣的 untestable code
老舊 Web 上雲端
由於 legacy code 太可怕了
「上雲端」計劃,有個大前提!!!
不改既有程式
老舊 Web + 老舊機器
IT人蔘的
困境
Linux www.iradiopop.com 2.6.26.8-57.fc8 

#1 SMP Thu Dec 18 18:59:49 EST 2008 x86_64 x86_64 x86_6
S1
S2
LB
典型的 Web 架構
1 台 Loading Balancer 

若干個後端 Server
困境
S1
S2
LB
當使用量滿出來時 …
困境
S1
S2
LB
無法服務、死機、連不上、重開
聰明的 LB 

會導向還能動的機器
S1
S2
LB
無法服務、死機、連不上、重開
聰明的 LB 

會導向還能動的機器
S1
S2
LB
困境
此乃 Crash 翹翹板
苦逼的 SysAdmin
S1
S2
LB
雲端
當使用量滿出來時 …
S1
S2
LB
雲端
S3
S4
就加更多機器唄(有錢真好)
S1
S2
LB
雲端
寫得再醜的 Web 都有辦法

Scale Out, Scale In
只是極限大輸良好設計的成品sticky session
如果你很有錢
貴、順、爽
貴、順、爽
LB
可以買很貴的機器
窮
窮
LB
可是瑞凡...
一般的小公司

多半先由便宜的機器開始測試
輕
檢討
當預算有限,
買不夠到足夠 Power 的機器時...
原本快的地方變慢了 CPU
慢的地方變快了 I/O
檢討
request
business logic
db query
檢討
request
business logic
cache
db query
檢討
request
business logic
cache
db query
舊機器的 I/O 比雲端還慢,
所以「原本慢的變快了」
檢討
request
business logic
cache
db query
舊機器的 CPU 比雲端還快,
所以「原本快的變慢了」
for(…) {
for(…) {
for(…) {
/* 很暴⼒力地過濾資料 */
}
}
}
檢討
request
cache
db query
business logic
看起來是個

更值得快取的對象
Active Cache
思路 Active Cache
request cache
heavy
business logic
有快取,就是順
思路 Active Cache
request expired cache
heavy
business logic
沒快取,就得等
等待
思路 Active Cache
request
heavy
business logic
active cache
知道如何更新自己的快取
ActiveCache
不等待
惡搞 Active Cache
Active Cache
資料過期前(時),主動重抓資料
現有的 Library
guava CacheLoader
BUT legacy code 太難改,
決定以不改 code 為目標
惡搞 Active Cache
使用 AOP 插入 Advice
讓 business logic 支援 Active Cache
1. 將 method call 轉成 cache key
2. 註冊 method call 至 cache refresh scheduler
active cache
惡搞 Active Cache
request business logic
KEYCached Refresh Scheduler
business logic
method call to cache key
register key + method call to scheduler
active cache
惡搞 Active Cache
request business logic
Cached Refresh Scheduler
cache storage
auto refresh
business logic
使用者看到的
business logic
真正的
business logic
惡搞 Active Cache
ActiveCache 本來是為了「減少等待時間」設計
放在雲端上,恰巧減少了 Busy Job 搶資源的問題.
經由 cache refresh scheduler 限制 Loading
實作 Active Cache
整體的概念很簡單
使用 AOP Advice 攔截 method call
KEY = method + arguments
實作 Active Cache
methodA(userInfo, str, int, map, otherPojo)
key = signature_ + args[0] + args[1] + args[…]
=> methodA_User@a3a4a3a5_str_3_{a:3,b:3}_
=> methodA_user1_str_3_{a:3,b:3}_
有些物件 toString 後的結果不合用,換成其他特徵代替
實作 Active Cache
有些物件,沒有 getter 能取得特徵!
用 AOP 攔截建構子參數,製作識別資料
methodB(userList, comparator)
=> methodB_user1_user2_…_comparator@1a2b
=> methodB_user1_user2_…_cmp@SortByDate
實作 Active Cache
Active Cache 如何知道該更新了?
是 User 呼叫的就吐 Cache
是 Scheduler 呼叫的就 Refresh
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
stacktrace 看到 HttpServlet.service 就當他是 User 唄
遠方
進入雲端時代,
Web App 依舊是安裝在 Server 上的
要如何服務離機房較遠的客戶是個問題
遠方
客戶最大,但客戶的位置很尷尬!!!
阿拉伯、俄羅斯、印度、埃及、…
離 VM 機房很遠,
但離 CDN Edge Location 沒那麼遠。
遠方
利用 CDN 傳遞動態資料,適合簡單的 RESTFUL Service
request / response
好遠. 夭壽遠
遠方
好遠. 夭壽遠
filter
CDN
HTTP 304
原來我們這麼近
request / response
服務直到世界的盡頭
利用 CDN 傳遞動態資料,適合簡單的 RESTFUL Service
cached url
遠方服務直到世界的盡頭
如何使 Cache Expire ?
CDN invalidation 很慢,換路徑很快
http://cdn/time-window-token-r/cache-key
http://cdn/time-window-token-g/cache-key
http://cdn/time-window-token-b/cache-key
⼩小⼼心安全問題,不要放敏感資料
Cache
CDNActiveCache
針對這次問題所選擇的主要方法
實驗性質的主動式快取
非常「惡搞」
重新思考快取的對象與策略 服務直到世界的盡頭
Q&A
老舊 Web 上雲端

More Related Content

What's hot

淺談物聯網巨量資料挑戰 - Jazz 王耀聰 (2016/3/17 於鴻海內湖) 免費講座
淺談物聯網巨量資料挑戰 - Jazz 王耀聰 (2016/3/17 於鴻海內湖) 免費講座淺談物聯網巨量資料挑戰 - Jazz 王耀聰 (2016/3/17 於鴻海內湖) 免費講座
淺談物聯網巨量資料挑戰 - Jazz 王耀聰 (2016/3/17 於鴻海內湖) 免費講座NTC.im(Notch Training Center)
 
淘宝分布式数据处理实践
淘宝分布式数据处理实践淘宝分布式数据处理实践
淘宝分布式数据处理实践isnull
 
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構Etu Solution
 
SSDB 入门基础
SSDB 入门基础SSDB 入门基础
SSDB 入门基础ideawu
 
SSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs RedisSSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs Redisideawu
 
Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系Wei-Yu Chen
 
MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習孜羲 顏
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast sharerfyiamcool
 
Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)家雋 莊
 
大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術Wei-Yu Chen
 
Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來Wei-Yu Chen
 
Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)
Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)
Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)Jiang Jun
 
Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Wei-Yu Chen
 
Hadoop Deployment Model @ OSDC.TW
Hadoop Deployment Model @ OSDC.TWHadoop Deployment Model @ OSDC.TW
Hadoop Deployment Model @ OSDC.TWJazz Yao-Tsung Wang
 
2016-07-12 Introduction to Big Data Platform Security
2016-07-12 Introduction to Big Data Platform Security2016-07-12 Introduction to Big Data Platform Security
2016-07-12 Introduction to Big Data Platform SecurityJazz Yao-Tsung Wang
 

What's hot (20)

Hadoop hive
Hadoop hiveHadoop hive
Hadoop hive
 
淺談物聯網巨量資料挑戰 - Jazz 王耀聰 (2016/3/17 於鴻海內湖) 免費講座
淺談物聯網巨量資料挑戰 - Jazz 王耀聰 (2016/3/17 於鴻海內湖) 免費講座淺談物聯網巨量資料挑戰 - Jazz 王耀聰 (2016/3/17 於鴻海內湖) 免費講座
淺談物聯網巨量資料挑戰 - Jazz 王耀聰 (2016/3/17 於鴻海內湖) 免費講座
 
淘宝分布式数据处理实践
淘宝分布式数据处理实践淘宝分布式数据处理实践
淘宝分布式数据处理实践
 
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
Track A-3 Enterprise Data Lake in Action - 搭建「活」的企業 Big Data 生態架構
 
SSDB 入门基础
SSDB 入门基础SSDB 入门基础
SSDB 入门基础
 
SSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs RedisSSDB(LevelDB server) vs Redis
SSDB(LevelDB server) vs Redis
 
Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系Hadoop ecosystem - hadoop 生態系
Hadoop ecosystem - hadoop 生態系
 
MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast share
 
Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)Bigdata 大資料分析實務 (進階上機課程)
Bigdata 大資料分析實務 (進階上機課程)
 
Hadoop 介紹 20141024
Hadoop 介紹 20141024Hadoop 介紹 20141024
Hadoop 介紹 20141024
 
大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術大資料趨勢介紹與相關使用技術
大資料趨勢介紹與相關使用技術
 
Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來Hadoop 2.0 之古往今來
Hadoop 2.0 之古往今來
 
Sun jdk 1.6 gc
Sun jdk 1.6 gcSun jdk 1.6 gc
Sun jdk 1.6 gc
 
Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)
Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)
Where We Are Today with Deep Learning and Kubernetes - KEUC2017(Shanghai)
 
Hadoop 0.20 程式設計
Hadoop 0.20 程式設計Hadoop 0.20 程式設計
Hadoop 0.20 程式設計
 
Hadoop Deployment Model @ OSDC.TW
Hadoop Deployment Model @ OSDC.TWHadoop Deployment Model @ OSDC.TW
Hadoop Deployment Model @ OSDC.TW
 
SMACK Dev Experience
SMACK Dev ExperienceSMACK Dev Experience
SMACK Dev Experience
 
2016-07-12 Introduction to Big Data Platform Security
2016-07-12 Introduction to Big Data Platform Security2016-07-12 Introduction to Big Data Platform Security
2016-07-12 Introduction to Big Data Platform Security
 
Life of Big Data Technologies
Life of Big Data TechnologiesLife of Big Data Technologies
Life of Big Data Technologies
 

Viewers also liked

HdInsight essentials Hadoop on Microsoft Platform
HdInsight essentials Hadoop on Microsoft PlatformHdInsight essentials Hadoop on Microsoft Platform
HdInsight essentials Hadoop on Microsoft Platformnvvrajesh
 
Html5移动网站开发实践
Html5移动网站开发实践Html5移动网站开发实践
Html5移动网站开发实践Web Zhao
 
Frontend django, Django Web 前端探索
Frontend django, Django Web 前端探索Frontend django, Django Web 前端探索
Frontend django, Django Web 前端探索Tim (文昌)
 
Big data architectures and the data lake
Big data architectures and the data lakeBig data architectures and the data lake
Big data architectures and the data lakeJames Serra
 

Viewers also liked (6)

Introduction to Azure HDInsight
Introduction to Azure HDInsightIntroduction to Azure HDInsight
Introduction to Azure HDInsight
 
HdInsight essentials Hadoop on Microsoft Platform
HdInsight essentials Hadoop on Microsoft PlatformHdInsight essentials Hadoop on Microsoft Platform
HdInsight essentials Hadoop on Microsoft Platform
 
Html5移动网站开发实践
Html5移动网站开发实践Html5移动网站开发实践
Html5移动网站开发实践
 
Frontend django, Django Web 前端探索
Frontend django, Django Web 前端探索Frontend django, Django Web 前端探索
Frontend django, Django Web 前端探索
 
Big Data in Azure
Big Data in AzureBig Data in Azure
Big Data in Azure
 
Big data architectures and the data lake
Big data architectures and the data lakeBig data architectures and the data lake
Big data architectures and the data lake
 

Similar to 老舊web上雲端

Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践mysqlops
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计fuchaoqun
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails serverMichael Chen
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案Ady Liu
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计锐 张
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renrend0nn9n
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践zhliji2
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践guestf5121c
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践xcq
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版Jackson Tian
 
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想Alan Tsai
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 zhen chen
 
前端性能优化和自动化
前端性能优化和自动化前端性能优化和自动化
前端性能优化和自动化kaven yan
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and DesignHo Kim
 
使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocitykumawu
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践Jackson Tian
 
高性能Lamp程序设计 付超群
高性能Lamp程序设计   付超群高性能Lamp程序设计   付超群
高性能Lamp程序设计 付超群Shaoning Pan
 

Similar to 老舊web上雲端 (20)

Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计
 
Beyond rails server
Beyond rails serverBeyond rails server
Beyond rails server
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案
 
Lamp高性能设计
Lamp高性能设计Lamp高性能设计
Lamp高性能设计
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renren
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践
 
手机之家的数据访问层实践
手机之家的数据访问层实践手机之家的数据访问层实践
手机之家的数据访问层实践
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
初探 Data API Builder:在幾分鐘內將資料庫轉換成 REST 和 GraphQL 不再是夢想
 
Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储 Ria的强力后盾:rest+海量存储
Ria的强力后盾:rest+海量存储
 
前端性能优化和自动化
前端性能优化和自动化前端性能优化和自动化
前端性能优化和自动化
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and Design
 
使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity使用Big pipe提升浏览速度 wk_velocity
使用Big pipe提升浏览速度 wk_velocity
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
 
高性能Lamp程序设计 付超群
高性能Lamp程序设计   付超群高性能Lamp程序设计   付超群
高性能Lamp程序设计 付超群
 
Hadoop ecosystem
Hadoop ecosystemHadoop ecosystem
Hadoop ecosystem
 

More from Ching Yi Chan

JCConf2016 Jenkins Pipeline
JCConf2016 Jenkins PipelineJCConf2016 Jenkins Pipeline
JCConf2016 Jenkins PipelineChing Yi Chan
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradleChing Yi Chan
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011Ching Yi Chan
 
using Queue Server for batch processing
using Queue Server for batch processingusing Queue Server for batch processing
using Queue Server for batch processingChing Yi Chan
 
idea: talk about the Active Cache
idea: talk about the Active Cacheidea: talk about the Active Cache
idea: talk about the Active CacheChing Yi Chan
 
Java web programming
Java web programmingJava web programming
Java web programmingChing Yi Chan
 
Android NDK (JUG@TW 2011, Oct.)
Android NDK (JUG@TW 2011, Oct.)Android NDK (JUG@TW 2011, Oct.)
Android NDK (JUG@TW 2011, Oct.)Ching Yi Chan
 

More from Ching Yi Chan (12)

JCConf2016 Jenkins Pipeline
JCConf2016 Jenkins PipelineJCConf2016 Jenkins Pipeline
JCConf2016 Jenkins Pipeline
 
JCConf2015: groovy to gradle
 JCConf2015: groovy to gradle JCConf2015: groovy to gradle
JCConf2015: groovy to gradle
 
Linking error
Linking errorLinking error
Linking error
 
Java Build Tool course in 2011
Java Build Tool course in 2011Java Build Tool course in 2011
Java Build Tool course in 2011
 
using Queue Server for batch processing
using Queue Server for batch processingusing Queue Server for batch processing
using Queue Server for batch processing
 
idea: talk about the Active Cache
idea: talk about the Active Cacheidea: talk about the Active Cache
idea: talk about the Active Cache
 
Talk about fabric
Talk about fabricTalk about fabric
Talk about fabric
 
Java web programming
Java web programmingJava web programming
Java web programming
 
Android NDK (JUG@TW 2011, Oct.)
Android NDK (JUG@TW 2011, Oct.)Android NDK (JUG@TW 2011, Oct.)
Android NDK (JUG@TW 2011, Oct.)
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
OSGi Small Lab
OSGi Small LabOSGi Small Lab
OSGi Small Lab
 
Osgi Intro
Osgi IntroOsgi Intro
Osgi Intro
 

老舊web上雲端