webconf2013-非典型貧窮網站維運經驗分享
DESCRIPTION
http://www.webconf.tw/program.htmlTRANSCRIPT
在家也能架出⼤大網站-⾮非典型精實貧窮網站維運經驗
分享
慕凡(@ryudoawaru)於WebConf20132013/01/13
1
113年1月13⽇日星期⽇日
About Me
2
213年1月13⽇日星期⽇日
慕凡(ryudo)
@ryudoawaru
3
313年1月13⽇日星期⽇日
遊戲業10年
4
413年1月13⽇日星期⽇日
2006
http://hbo.x-legend.com.tw
6
613年1月13⽇日星期⽇日
roles• Game System Designer
• Executive Producer
• Release Manager
• DB Tool Programmer
7
713年1月13⽇日星期⽇日
2007轉職
8
813年1月13⽇日星期⽇日
網站創業者
9
913年1月13⽇日星期⽇日
Tomlan軟體⼯工作室• http://www.tomlan.tw
• Founded on 2007.03
• 專⻑⾧長為以論壇(Discuz!)為主體的社群系統
10
1013年1月13⽇日星期⽇日
旗下網站
11
1113年1月13⽇日星期⽇日
freebbs.com.tw和我們無關
14
1413年1月13⽇日星期⽇日
6 years
15
1513年1月13⽇日星期⽇日
Organize
with
16
1613年1月13⽇日星期⽇日
順帶⼀一提
17
1713年1月13⽇日星期⽇日
謙虛的⼈人也可以學Rails
18
1813年1月13⽇日星期⽇日
Agendas• 為何要在家架網站• 在家架網站的細節• 頻寬• 硬體• 軟體• 其它好⽤用的服務
19
1913年1月13⽇日星期⽇日
Why Self-Hosting?
20
2013年1月13⽇日星期⽇日
成本控制
21
2113年1月13⽇日星期⽇日
雲端 V.S. 在家架站成本⽐比較
22
2213年1月13⽇日星期⽇日
⺫⽬目標網站• 網站類型:論壇社群• 訪客:Unique Visitor 40,000+/day
• 月流量:• 主站:800GB
• 圖庫:1.4TB
23
2313年1月13⽇日星期⽇日
如果在AWS(JP)• 1 EC2 Large Instance
• 月流量約800GB
• 1 S3 Storage
• 月流量約1.4TB
• 1 RDS(Large) for MySQL
24
2413年1月13⽇日星期⽇日
28,000NTD/月
25
2513年1月13⽇日星期⽇日
轉職游⺠民確定
26
2613年1月13⽇日星期⽇日
同樣的條件⾃自⼰己架站
27
2713年1月13⽇日星期⽇日
價格 折舊期間/月 ⼀一年費⽤用伺服器42U機櫃HUBIPKVM2U機架UPS網路費 20M/月電費/月⼩小計
NT$27,000 36 NT$9,000NT$12,000 60 NT$2,400NT$5,500 36 NT$1,833
NT$23,000 36 NT$7,667NT$23,000 36 NT$7,667NT$2,000n/a NT$24,000NT$300n/a NT$3,600
NT$56,167
⼀一個月不到5,000
28
2813年1月13⽇日星期⽇日
成本結構1.經常性開銷
1.網路費2.電費3.房租(如果有)
2.⼀一次性費⽤用1.硬體設備
29
2913年1月13⽇日星期⽇日
頻寬費⽤用
30
3013年1月13⽇日星期⽇日
便宜的頻寬就像折凳的奧妙之處⼀一樣
31
3113年1月13⽇日星期⽇日
光世代固定制• 20M上傳(含)以下幾乎所有⼈人都可以裝
• 40M以上需要有FTTH(光化箱)到府
http://fttb.hinet.net/3ip/fttx_rates.html32
3213年1月13⽇日星期⽇日
硬體•必要的•伺服器•HUB•UPS
•不⼀一定要的• IP-KVM•機櫃•遠端電源管理•NAS
33
3313年1月13⽇日星期⽇日
Server
34
3413年1月13⽇日星期⽇日
安靜 V.S.效能
35
3513年1月13⽇日星期⽇日
Home Server要點• 省空間• 安靜/低溫• 放在家不能太吵或太熱• 不要外接顯卡
• 平均的效能• 主流4核⼼心以上CPU
• ⾼高速I/O
36
3613年1月13⽇日星期⽇日
候選清單• XPC
• Mac Mini
• ⼩小型塔式品牌Server
• ⾃自組
37
3713年1月13⽇日星期⽇日
不考慮機架Server(因為太吵)
38
3813年1月13⽇日星期⽇日
XPC
39
3913年1月13⽇日星期⽇日
XPC-成本• 準系統:內含主機板/電源/機殼
• 需要購買:• CPU
• RAM
• 硬碟
40
4013年1月13⽇日星期⽇日
XPC-優點• ⾮非常耐⽤用(個⼈人經驗)• 擴充性/效能與成本的平衡選擇
• 意外安靜的POWER與熱導管系統
• 最⼩小Size可以插四條RAM的選擇
• 幾乎所有機型都有內顯
41
4113年1月13⽇日星期⽇日
XPC-缺點• BIOS寫的不太好
• 維修服務品質低落
42
4213年1月13⽇日星期⽇日
Mac Mini
43
4313年1月13⽇日星期⽇日
Mac Mini-優點• 最⼩小體積• Apple品質保證
• 終極的靜⾳音
44
4413年1月13⽇日星期⽇日
Mac Mini-缺點• 低(⾼高貴)擴充性,RAM只有兩條
• 總體持有成本⽐比XPC貴約5~7,000
• 改裝SSD需⼿手⼯工或找店家
• CPU頻率較低(2.3 v.s. 3.4)
• 改裝Linux系OS需調整(http://goo.gl/cEDw2)
45
4513年1月13⽇日星期⽇日
⼩小型塔式品牌Server
46
4613年1月13⽇日星期⽇日
Mini Tower Server-優點• Micro-ATX機殼(約2台XPC)
• 伺服器規格,穩定性可期待
• 考量靜⾳音與持續運作的散熱之設計• 內建雙網卡/硬碟熱抽換模組/獨⽴立顯⽰示
• 價格平⺠民化,可插⼀一般RAM
47
4713年1月13⽇日星期⽇日
Mini Tower Server-缺點• 相對佔空間• 零組件相容性問題
48
4813年1月13⽇日星期⽇日
DIY主機
49
4913年1月13⽇日星期⽇日
DIY-優點• 對成本完全控制• 100%的⾃自訂性
• 享受(?)HomeBrew的快感
• 便宜組件的穩定性也不賴
50
5013年1月13⽇日星期⽇日
DIY-缺點• 組合複雜• 相容性問題不少• 散熱與降噪不易處理• 要⾃自⼰己抓問題
51
5113年1月13⽇日星期⽇日
⽐比較表XPC
Macmini
直⽴立Server
$ 便宜 最貴 有點貴靜⾳音 安靜 超安靜 普通散熱 普通 普通 最好佔空間 ⼩小 最⼩小 ⼤大效能 ⾼高 最低 ⾼高擴充性 中 無 ⾼高穩定性 OK OK 最⾼高
52
5213年1月13⽇日星期⽇日
其它硬體注意事項
53
5313年1月13⽇日星期⽇日
絕對不要裝家⽤用級硬碟在你的Server上
(備份碟除外)
54
5413年1月13⽇日星期⽇日
企業級硬碟• WD:暴⻯⿓龍/RE系列
• Seagate:ConstellationCS/ES
• Hitachi/Toshiba:就叫企業級
• 所有SAS硬碟
55
5513年1月13⽇日星期⽇日
便宜安全⾼高效⽅方案:拆機SAS硬碟+低價
SAS Raid卡
56
5613年1月13⽇日星期⽇日
永遠不要⽤用主機板上的fakeRaid
57
5713年1月13⽇日星期⽇日
其它硬體
58
5813年1月13⽇日星期⽇日
IP-KVM
59
5913年1月13⽇日星期⽇日
IP-POWER
60
6013年1月13⽇日星期⽇日
機櫃
61
6113年1月13⽇日星期⽇日
NAS
62
6213年1月13⽇日星期⽇日
SOFTWARE
63
6313年1月13⽇日星期⽇日
沒有要講的• 程式語⾔言• Framework
• OS / Distribution 的選擇
64
6413年1月13⽇日星期⽇日
要講的• Web Server
• DB(RDBMS)
• 檔案系統與備份策略• 網路攻擊的應對
65
6513年1月13⽇日星期⽇日
WEB Server
66
6613年1月13⽇日星期⽇日
個⼈人經驗• 3年Apache(2.2 Worker MPM)
• Rails⽤用Mongrel + mod_proxy(前期) / Passenger
• 2年Nginx
• PHP 5.3 FPM + FastCGI
• Rails⽤用Passenger/Thin
67
6713年1月13⽇日星期⽇日
APACHE
68
6813年1月13⽇日星期⽇日
易上⼿手(套件管理增加功能便利)
69
6913年1月13⽇日星期⽇日
模組多(裝模組不⽤用重編全部)
70
7013年1月13⽇日星期⽇日
⼤大家都愛.htaccess(修改不⽤用重開)
71
7113年1月13⽇日星期⽇日
功能包⼭山包海(幾乎不⽤用開別的Daemon)
72
7213年1月13⽇日星期⽇日
靜態檔案效能低落(和Nginx⽐比)
73
7313年1月13⽇日星期⽇日
Proxy效能低落(和Nginx⽐比)
74
7413年1月13⽇日星期⽇日
重啟時間⻑⾧長(連線數很多時)
75
7513年1月13⽇日星期⽇日
重點:⼀一定不要⽤用Prefork
76
7613年1月13⽇日星期⽇日
Nginx
77
7713年1月13⽇日星期⽇日
靜態檔案速度爆快
78
7813年1月13⽇日星期⽇日
需要調整的選項不多(和Apache⽐比)
79
7913年1月13⽇日星期⽇日
添加功能需要重編譯
80
8013年1月13⽇日星期⽇日
例:增加Passenger
#!/bin/bashcd $PASSENGER_ROOTrake nginxmake clean./configure --prefix='/usr/local/nginx' --with-http_ssl_module --add-module='$PASSENGER_ROOT/ext/nginx'
81
8113年1月13⽇日星期⽇日
改設定需要重開或reload
82
8213年1月13⽇日星期⽇日
php需要另外設定apache或fpm
(framework需特定rewrite rule)
83
8313年1月13⽇日星期⽇日
RewriteRule和Apache不太⼀一樣(不難學習)
84
8413年1月13⽇日星期⽇日
⼀一些⼩小技巧
85
8513年1月13⽇日星期⽇日
將靜態檔案拆到不同VirtualHost
(針對單⾴頁⾼高request數)
86
8613年1月13⽇日星期⽇日
⽤用X-Sendfile或SecureLink做權限控管
(避免無謂消耗後端程式資源)
87
8713年1月13⽇日星期⽇日
Secure LinkNginx:HttpSecureLinkModule
Apache:mod_auth_token
88
8813年1月13⽇日星期⽇日
URL加料做驗證/uri-prefix/$token/$timestamp-in-hex/rel-path
md5(密鑰+時間撮記+檔名+IP)
/downloads/dee0ed6174a894113d5e8f6c98f0e92b/43eaf9c5/file_to_protect.txt
$token為預先設定的AuthTokenSecret加上檔名與時間撮記後md5加密⽽而成, 具有時效性
89
8913年1月13⽇日星期⽇日
案例-線上影視串流服務• 配合H.264模組, 無需外部Media Server
• 無需⽤用後端程式輸出• User在看到連結後該連結極短時間內即失效, 故user無法下載檔案.
90
9013年1月13⽇日星期⽇日
SQL-RDBMS• MySQL
• PostgreSQL
91
9113年1月13⽇日星期⽇日
MySQL
92
9213年1月13⽇日星期⽇日
⼀一般Storage Engine• MyISAM
• Innodb
93
9313年1月13⽇日星期⽇日
MyISAM的問題• 資料稍⼤大時效能低落• 沒有ACID(Transaction)
• 常常需要Repair table(data may lose)
• 備份時會卡住全DB
94
9413年1月13⽇日星期⽇日
MyISAM的便利性• DB較⼩小時效能⾼高
• ⺫⽬目錄即DB,可攜性⾼高
• 需要調整的選項較少
95
9513年1月13⽇日星期⽇日
InnoDB
96
9613年1月13⽇日星期⽇日
參數調整很重要
97
9713年1月13⽇日星期⽇日
Always setinnodb_buffer_pool_size >= DB size
(RAM is very cheap now)
98
9813年1月13⽇日星期⽇日
PostgreSQL(別名:Oracle開源版)
99
9913年1月13⽇日星期⽇日
Much Stabler
100
10013年1月13⽇日星期⽇日
某線上遊戲(2006)• 使⽤用版本:7.2(10 years+ )
• 同時上線⼈人數:20k+
• 程式的杯具:射⼀一⽀支箭寫⼀一次DB
• 程式掛了,但DB還活著
101
10113年1月13⽇日星期⽇日
友善的授權條款(MIT)
102
10213年1月13⽇日星期⽇日
完整的現代化RDBMS功能(View/Trigger/Stored Procedure)
103
10313年1月13⽇日星期⽇日
Transactional DDL(ALTER TABLE等可rollback,MySQL不可)
104
10413年1月13⽇日星期⽇日
完整字串/加密function(base64/md5...etc)
105
10513年1月13⽇日星期⽇日
內建完整全⽂文檢索功能(中⽂文斷詞可能)
106
10613年1月13⽇日星期⽇日
Schema Namespace(適⽤用於Multi-Tenancy架構應⽤用)
107
10713年1月13⽇日星期⽇日
知名使⽤用機構• NASA
• NTT
• Skype
• IMDB
108
10813年1月13⽇日星期⽇日
File System(Linux)
110
11013年1月13⽇日星期⽇日
EXT家族• 通⽤用性⼯工具⽀支援• 多數套件預設使⽤用• 平衡的效能• 可容納檔案數⼩小於xfs
111
11113年1月13⽇日星期⽇日
XFS• ⾃自成⼀一體的⼯工具體系• ⾼高檔案承載數• 需花時間學習⼯工具⽤用法• 中⽂文資源較少
112
11213年1月13⽇日星期⽇日
LVM
113
11313年1月13⽇日星期⽇日
What is LVM?(from⿃鳥哥)
LVM 的全名是 Logical Volume Manager,中⽂文可以翻譯作邏輯捲軸管理員。之所以稱為『捲軸』可能是因為可以將 filesystem 像捲軸⼀一樣伸⻑⾧長或縮短之故吧!LVM 的作法是將幾個實體的 partitions (或 disk) 透過軟體組合成為⼀一塊看起來是獨⽴立的⼤大磁碟 (VG) ,然後將這塊⼤大磁碟再經過分割成為可使⽤用分割槽 (LV), 最終就
能夠掛載使⽤用了。
114
11413年1月13⽇日星期⽇日
Everyone should use LVM.
115
11513年1月13⽇日星期⽇日
分享:Snapshot備份法(from: 我是ricky⼤大⼤大)
116
11613年1月13⽇日星期⽇日
流程1.停⽌止所有服務2. make & mount LVM snapshot
3.啟動所有服務4.⽤用snapshot partition的資料進⾏行備份5. umount & delete snapshot partition
6.收⼯工
117
11713年1月13⽇日星期⽇日
Example code#!/bin/bash####STOP services#####################/etc/init.d/nginx stop/etc/init.d/php-‐fpm stop/etc/init.d/mongod stop/etc/init.d/mysqld stop####Make & mount snapshot partition###/sbin/lvcreate -‐l 350 -‐s -‐n DATASNAP /dev/VG1/DATA/bin/mount /dev/VG1/DATASNAP /mnt/DATASNAP####Start services####################/etc/init.d/mongod start/etc/init.d/mysqld start/etc/init.d/php-‐fpm start/etc/init.d/nginx start####Backup Process####################.....####umount & remove partition#########/bin/umount /mnt/DATASNAP/sbin/lvremove -‐f /dev/VG1/DATASNAP
118
11813年1月13⽇日星期⽇日
優點• 可適⽤用所有組合• 停機時間⼩小於10秒
• 可獲得完整分割區備份
119
11913年1月13⽇日星期⽇日
網路攻擊防範(別名:⼈人體防⽕火牆訓練養成中⼼心)
120
12013年1月13⽇日星期⽇日
⾃自建主機最⼤大挑戰
121
12113年1月13⽇日星期⽇日
攻擊者的⺫⽬目的• $$$$$
• 爽• 純研究• 攻擊和網站有關的特定對象
122
12213年1月13⽇日星期⽇日
概念:資源對資源的戰爭
123
12313年1月13⽇日星期⽇日
不會有真正有效的辦法除⾮非
124
12413年1月13⽇日星期⽇日
唯⼀一可以確定的是
125
12513年1月13⽇日星期⽇日
讓攻擊⼿手知道你不好惹, 要花很多成本攻擊
你, 知難⽽而退
126
12613年1月13⽇日星期⽇日
攻擊⽅方式分類• 癱瘓服務• 針對程式弱點• 讓系統負載暴衝
• 塞爆頻寬• SYN_FLOOD
• DDOS
127
12713年1月13⽇日星期⽇日
針對程式弱點的攻擊• 好發於:• Multi-Tenancy式系統(BSP/FSP...)
• 廣泛被⼤大眾使⽤用的系統• 具有歷史共業的系統
• 完全⾃自製系統通常不會有此問題• 通常只能⽤用改程式處理• 短期的防堵也是⼀一種⽅方法
128
12813年1月13⽇日星期⽇日
塞爆頻寬的攻擊• 後備頻寬⾮非常重要• 問題在找出該封堵的IP
129
12913年1月13⽇日星期⽇日
處理流程1.搜尋log檔2.建⽴立scan log流程3.執⾏行scan log流程,產⽣生問題IP清單4.將問題IP加到iptables的封堵清單5. restart iptables
6.將3-5變成⾃自動執⾏行
130
13013年1月13⽇日星期⽇日
scan log⽅方式• ⽤用tail看log找出怪異之處
• 異常快速增⻑⾧長的request
• hostname異常的request
• 純ip request
• 無agent或奇怪agent的request
131
13113年1月13⽇日星期⽇日
重導virtualhost(nginx)
server{ server_name _; root /var/www/html; access_log logs/DDOS-‐access.log main; error_log /dev/error.log; return 400; }
132
13213年1月13⽇日星期⽇日
終極絕招-阻擋國家IPxt_geoip
133
13313年1月13⽇日星期⽇日
xt_geoip• part of xtables-addons
• iptables addon
• need kernel 2.6+
• http://goo.gl/NoqRh
134
13413年1月13⽇日星期⽇日
Why xt_geoip• 攻擊IP(⾁肉雞)幾乎全部來⾃自外國
• 中國佔90%
• 東歐國家• 中東國家
• 簡單⽽而粗暴(但是有效)的⽅方法
• ⼀一⾏行iptables設定封堵⼀一整國
135
13513年1月13⽇日星期⽇日
好⽤用省錢的服務
136
13613年1月13⽇日星期⽇日
KDDI CloudCore VPS
137
13713年1月13⽇日星期⽇日
純iaas,無其它功能
138
13813年1月13⽇日星期⽇日
難以置信的超低價
139
13913年1月13⽇日星期⽇日
不⽤用流量計費, 單⼀一規格(擴充不可)
140
14013年1月13⽇日星期⽇日
缺乏管理功能與圖表
141
14113年1月13⽇日星期⽇日
令⼈人安⼼心的ping值(50出頭)
142
14213年1月13⽇日星期⽇日
不保證Uptime(其實很可靠)
143
14313年1月13⽇日星期⽇日
開發者⽀支援制度(淚)
144
14413年1月13⽇日星期⽇日
imgur
145
14513年1月13⽇日星期⽇日
imgur• 經實驗證明真正不限流量圖庫• 限制⽅方式為每⼩小時上傳量• 具後端上傳的API
• 商業使⽤用需付費(條款限制)
• 不可思議的低價
146
14613年1月13⽇日星期⽇日
End(Any qustion?)
147
14713年1月13⽇日星期⽇日
題外話
148
14813年1月13⽇日星期⽇日
公會網正在尋求合作經營的夥伴
149
14913年1月13⽇日星期⽇日
番外篇世⼈人對雲端的誤解
150
15013年1月13⽇日星期⽇日
以下觀點可能會包含部份或全部的偏⾒見
(歡迎提出指正或疑問)
151
15113年1月13⽇日星期⽇日
⼀一般對雲端的認知1.雲端⽐比較省錢2.雲端⽐比較省⼒力3.雲端⽐比較穩定
152
15213年1月13⽇日星期⽇日
認知⼆二:雲端省⼒力論由於雲端(尤其是Paas類服務如Heroku/EngineYard)已經幫你設定好, 你所做的就是去開機器或是設定dyno數.
153
15313年1月13⽇日星期⽇日
等價交換原則
154
15413年1月13⽇日星期⽇日
等價交換原則• iaas服務:只是給你⼀一台灌好OS的虛擬機
• Paas服務:給你的越多, 限制的也越多
• 第三⽅方服務:⽤用的越多, 花的$$越多
• ⽣生態圈綁定問題
155
15513年1月13⽇日星期⽇日
認知三:雲端穩定論雲端是別⼈人設定好的, 硬體不會壞掉所以⽐比較穩定.
156
15613年1月13⽇日星期⽇日
關鍵因素:第三⽅方服務
157
15713年1月13⽇日星期⽇日