Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
System Operations for Startup - Second Part Gea-Suan Lin, KKBOX Inc. 2012-07-23 12年7月23日星期⼀一
Slide 2
Slide 2 text
Then we talk about software part 12年7月23日星期⼀一
Slide 3
Slide 3 text
• Programming • Web Server • Database • Cache 12年7月23日星期⼀一
Slide 4
Slide 4 text
Programming 12年7月23日星期⼀一
Slide 5
Slide 5 text
There are two things important 12年7月23日星期⼀一
Slide 6
Slide 6 text
First, 12年7月23日星期⼀一
Slide 7
Slide 7 text
Don’t fight with framework 12年7月23日星期⼀一
Slide 8
Slide 8 text
Think about why framework design it this way 12年7月23日星期⼀一
Slide 9
Slide 9 text
Second, 12年7月23日星期⼀一
Slide 10
Slide 10 text
Internet is dirty People are evil 12年7月23日星期⼀一
Slide 11
Slide 11 text
Input data are dirty 12年7月23日星期⼀一
Slide 12
Slide 12 text
Use whitelist to filter 12年7月23日星期⼀一
Slide 13
Slide 13 text
UTF-8 validation 12年7月23日星期⼀一
Slide 14
Slide 14 text
Uploaded data validation 12年7月23日星期⼀一
Slide 15
Slide 15 text
Format validation (Regular expression ?) 12年7月23日星期⼀一
Slide 16
Slide 16 text
Escape when necessary 12年7月23日星期⼀一
Slide 17
Slide 17 text
Don’t write plain SQL 12年7月23日星期⼀一
Slide 18
Slide 18 text
SELECT * FROM user WHERE username = “${username}”; 12年7月23日星期⼀一
Slide 19
Slide 19 text
Boom ! 12年7月23日星期⼀一
Slide 20
Slide 20 text
Escape when necessary 12年7月23日星期⼀一
Slide 21
Slide 21 text
XSS issue 12年7月23日星期⼀一
Slide 22
Slide 22 text
Remember, 12年7月23日星期⼀一
Slide 23
Slide 23 text
幹壞事是進步最大的 原動力 12年7月23日星期⼀一
Slide 24
Slide 24 text
People always try to hack your site 12年7月23日星期⼀一
Slide 25
Slide 25 text
Web Server 12年7月23日星期⼀一
Slide 26
Slide 26 text
• Apache • Lighttpd • nginx 12年7月23日星期⼀一
Slide 27
Slide 27 text
Apache 12年7月23日星期⼀一
Slide 28
Slide 28 text
Don’t use prefork MPM 12年7月23日星期⼀一
Slide 29
Slide 29 text
Thread MPM is fine 12年7月23日星期⼀一
Slide 30
Slide 30 text
Reasonable speed 12年7月23日星期⼀一
Slide 31
Slide 31 text
And everybody loves .htaccess 12年7月23日星期⼀一
Slide 32
Slide 32 text
Lighttpd 12年7月23日星期⼀一
Slide 33
Slide 33 text
No feature update for a long time 12年7月23日星期⼀一
Slide 34
Slide 34 text
Forget it 12年7月23日星期⼀一
Slide 35
Slide 35 text
nginx 12年7月23日星期⼀一
Slide 36
Slide 36 text
Extreme fast for static files (assets) 12年7月23日星期⼀一
Slide 37
Slide 37 text
Really fast 12年7月23日星期⼀一
Slide 38
Slide 38 text
Conclusion 12年7月23日星期⼀一
Slide 39
Slide 39 text
Split static files (assets) into another domain 12年7月23日星期⼀一
Slide 40
Slide 40 text
Use nginx to serve your static files (assets) 12年7月23日星期⼀一
Slide 41
Slide 41 text
Profiling your bottleneck 12年7月23日星期⼀一
Slide 42
Slide 42 text
If web server is bottleneck, use nginx 12年7月23日星期⼀一
Slide 43
Slide 43 text
Otherwise, use Apache 12年7月23日星期⼀一
Slide 44
Slide 44 text
Database 12年7月23日星期⼀一
Slide 45
Slide 45 text
• MySQL • NoSQL 12年7月23日星期⼀一
Slide 46
Slide 46 text
MySQL 12年7月23日星期⼀一
Slide 47
Slide 47 text
We won’t introduce MySQL 12年7月23日星期⼀一
Slide 48
Slide 48 text
Just remind serveral things important 12年7月23日星期⼀一
Slide 49
Slide 49 text
Use InnoDB 12年7月23日星期⼀一
Slide 50
Slide 50 text
Always InnoDB 12年7月23日星期⼀一
Slide 51
Slide 51 text
Yes, InnoDB 12年7月23日星期⼀一
Slide 52
Slide 52 text
And, 12年7月23日星期⼀一
Slide 53
Slide 53 text
Don’t use MyISAM 12年7月23日星期⼀一
Slide 54
Slide 54 text
You won’t like table lock 12年7月23日星期⼀一
Slide 55
Slide 55 text
You won’t like to repair tables 12年7月23日星期⼀一
Slide 56
Slide 56 text
Percona modified version is great 12年7月23日星期⼀一
Slide 57
Slide 57 text
Why InnoDB ? 12年7月23日星期⼀一
Slide 58
Slide 58 text
Transaction ACID 12年7月23日星期⼀一
Slide 59
Slide 59 text
Writes won’t block reads 12年7月23日星期⼀一
Slide 60
Slide 60 text
Fast recovery after server crash 12年7月23日星期⼀一
Slide 61
Slide 61 text
Consistent backup without downtime 12年7月23日星期⼀一
Slide 62
Slide 62 text
Compression 12年7月23日星期⼀一
Slide 63
Slide 63 text
It’s possible smaller than MyISAM tables 12年7月23日星期⼀一
Slide 64
Slide 64 text
High availability solutions requirement 12年7月23日星期⼀一
Slide 65
Slide 65 text
DRBD + Heartbeat 12年7月23日星期⼀一
Slide 66
Slide 66 text
Mature technology 12年7月23日星期⼀一
Slide 67
Slide 67 text
Quite stable 12年7月23日星期⼀一
Slide 68
Slide 68 text
Active-Standby Lower utilization rate 12年7月23日星期⼀一
Slide 69
Slide 69 text
Master-Master based on async replication 12年7月23日星期⼀一
Slide 70
Slide 70 text
Active-Active Higher utilization rate 12年7月23日星期⼀一
Slide 71
Slide 71 text
But notice data consistency issue 12年7月23日星期⼀一
Slide 72
Slide 72 text
Galera Cluster 12年7月23日星期⼀一
Slide 73
Slide 73 text
Young project 12年7月23日星期⼀一
Slide 74
Slide 74 text
Active-Active Higher utilization rate 12年7月23日星期⼀一
Slide 75
Slide 75 text
Sync replication without data consistent issue 12年7月23日星期⼀一
Slide 76
Slide 76 text
Conclusion 12年7月23日星期⼀一
Slide 77
Slide 77 text
MySQL works 12年7月23日星期⼀一
Slide 78
Slide 78 text
And there are lots of minefields 12年7月23日星期⼀一
Slide 79
Slide 79 text
But those minefields can be workaround 12年7月23日星期⼀一
Slide 80
Slide 80 text
RAM is cheap 12年7月23日星期⼀一
Slide 81
Slide 81 text
16GB RAM is quite large 12年7月23日星期⼀一
Slide 82
Slide 82 text
64GB RAM is quite large 12年7月23日星期⼀一
Slide 83
Slide 83 text
288GB RAM is quite large 12年7月23日星期⼀一
Slide 84
Slide 84 text
512GB RAM is quite large 12年7月23日星期⼀一
Slide 85
Slide 85 text
Data larger than 512GB ? 12年7月23日星期⼀一
Slide 86
Slide 86 text
... 12年7月23日星期⼀一
Slide 87
Slide 87 text
We can discuss privately ? 12年7月23日星期⼀一
Slide 88
Slide 88 text
NoSQL 12年7月23日星期⼀一
Slide 89
Slide 89 text
General concept 12年7月23日星期⼀一
Slide 90
Slide 90 text
NoSQL Need is (usually) Performance Need 12年7月23日星期⼀一
Slide 91
Slide 91 text
What kind of programming language will perform better ? 12年7月23日星期⼀一
Slide 92
Slide 92 text
C 12年7月23日星期⼀一
Slide 93
Slide 93 text
“Portable Assembly” 12年7月23日星期⼀一
Slide 94
Slide 94 text
Choose C-based written NoSQL first 12年7月23日星期⼀一
Slide 95
Slide 95 text
Another concept 12年7月23日星期⼀一
Slide 96
Slide 96 text
Story begin when data growing out of memory... 12年7月23日星期⼀一
Slide 97
Slide 97 text
Many stories about data out of memory 12年7月23日星期⼀一
Slide 98
Slide 98 text
Of course not happy stories 12年7月23日星期⼀一
Slide 99
Slide 99 text
So, list some good NoSQL 12年7月23日星期⼀一
Slide 100
Slide 100 text
Redis 12年7月23日星期⼀一
Slide 101
Slide 101 text
Key-Value Store 12年7月23日星期⼀一
Slide 102
Slide 102 text
Focus on key-value store 12年7月23日星期⼀一
Slide 103
Slide 103 text
Not claiming scalability 12年7月23日星期⼀一
Slide 104
Slide 104 text
Because they know hot data needs to fit memory 12年7月23日星期⼀一
Slide 105
Slide 105 text
Other NoSQL ? 12年7月23日星期⼀一
Slide 106
Slide 106 text
Sorry, no idea... 12年7月23日星期⼀一
Slide 107
Slide 107 text
There are so many PR-oriented NoSQL software 12年7月23日星期⼀一
Slide 108
Slide 108 text
Remember, 12年7月23日星期⼀一
Slide 109
Slide 109 text
Story begin when data growing out of memory... 12年7月23日星期⼀一
Slide 110
Slide 110 text
Cache 12年7月23日星期⼀一
Slide 111
Slide 111 text
Important note 12年7月23日星期⼀一
Slide 112
Slide 112 text
Cache only when you need to 12年7月23日星期⼀一
Slide 113
Slide 113 text
Because invalidation is not easy 12年7月23日星期⼀一
Slide 114
Slide 114 text
So, 12年7月23日星期⼀一
Slide 115
Slide 115 text
Always profiling 12年7月23日星期⼀一
Slide 116
Slide 116 text
• Frontend Cache • Backend Cache 12年7月23日星期⼀一
Slide 117
Slide 117 text
Frontend Cache 12年7月23日星期⼀一
Slide 118
Slide 118 text
HTTP Header 12年7月23日星期⼀一
Slide 119
Slide 119 text
Cache-Control 12年7月23日星期⼀一
Slide 120
Slide 120 text
Avoid ETags 12年7月23日星期⼀一
Slide 121
Slide 121 text
CDN 12年7月23日星期⼀一
Slide 122
Slide 122 text
Don’t use CDN before you do profile 12年7月23日星期⼀一
Slide 123
Slide 123 text
YSlow 12年7月23日星期⼀一
Slide 124
Slide 124 text
Google PageSpeed 12年7月23日星期⼀一
Slide 125
Slide 125 text
Backend Cache 12年7月23日星期⼀一
Slide 126
Slide 126 text
Memcached 12年7月23日星期⼀一
Slide 127
Slide 127 text
Remember Memcached is just a cache server 12年7月23日星期⼀一
Slide 128
Slide 128 text
Memcached may crash 12年7月23日星期⼀一
Slide 129
Slide 129 text
Use it as cache server 12年7月23日星期⼀一
Slide 130
Slide 130 text
Because it’s cache layer 12年7月23日星期⼀一
Slide 131
Slide 131 text
Cache Layer ! 12年7月23日星期⼀一
Slide 132
Slide 132 text
Your site should be able to work without cache 12年7月23日星期⼀一
Slide 133
Slide 133 text
Database Cache 12年7月23日星期⼀一
Slide 134
Slide 134 text
MySQL Query Cache 12年7月23日星期⼀一
Slide 135
Slide 135 text
Trun off it 12年7月23日星期⼀一
Slide 136
Slide 136 text
Because it’s not efficient on multi-CPU environment 12年7月23日星期⼀一
Slide 137
Slide 137 text
Instead, 12年7月23日星期⼀一
Slide 138
Slide 138 text
Use index correctly 12年7月23日星期⼀一
Slide 139
Slide 139 text
Make sure all time-sensitive queries use correct index 12年7月23日星期⼀一
Slide 140
Slide 140 text
Index optimization is engine dependent 12年7月23日星期⼀一
Slide 141
Slide 141 text
Understand B+tree will help you 12年7月23日星期⼀一
Slide 142
Slide 142 text
Remember one thing: 12年7月23日星期⼀一
Slide 143
Slide 143 text
MySQL is stupid 12年7月23日星期⼀一
Slide 144
Slide 144 text
If you cannot find an efficient way to query, 12年7月23日星期⼀一
Slide 145
Slide 145 text
Then MySQL can’t either 12年7月23日星期⼀一
Slide 146
Slide 146 text
Conclusion 12年7月23日星期⼀一
Slide 147
Slide 147 text
Profiling first, then decide what to cache 12年7月23日星期⼀一
Slide 148
Slide 148 text
Remember, 12年7月23日星期⼀一
Slide 149
Slide 149 text
Premature optimization is the root of all evil 12年7月23日星期⼀一
Slide 150
Slide 150 text
Summarize 12年7月23日星期⼀一
Slide 151
Slide 151 text
Find out problem Analyze problem Then solve problem 12年7月23日星期⼀一
Slide 152
Slide 152 text
Thanks ! 12年7月23日星期⼀一
Slide 153
Slide 153 text
Any questions ? 12年7月23日星期⼀一