Upgrade to Pro — share decks privately, control downloads, hide ads and more …

System Operations for Startup - Software

System Operations for Startup - Software


Gea-Suan Lin

July 23, 2012

More Decks by Gea-Suan Lin

Other Decks in Technology


  1. System Operations for Startup - Second Part Gea-Suan Lin, KKBOX

    Inc. 2012-07-23 12年7月23日星期⼀一
  2. Then we talk about software part 12年7月23日星期⼀一

  3. • Programming • Web Server • Database • Cache 12年7月23日星期⼀一

  4. Programming 12年7月23日星期⼀一

  5. There are two things important 12年7月23日星期⼀一

  6. First, 12年7月23日星期⼀一

  7. Don’t fight with framework 12年7月23日星期⼀一

  8. Think about why framework design it this way 12年7月23日星期⼀一

  9. Second, 12年7月23日星期⼀一

  10. Internet is dirty People are evil 12年7月23日星期⼀一

  11. Input data are dirty 12年7月23日星期⼀一

  12. Use whitelist to filter 12年7月23日星期⼀一

  13. UTF-8 validation 12年7月23日星期⼀一

  14. Uploaded data validation 12年7月23日星期⼀一

  15. Format validation (Regular expression ?) 12年7月23日星期⼀一

  16. Escape when necessary 12年7月23日星期⼀一

  17. Don’t write plain SQL 12年7月23日星期⼀一

  18. SELECT * FROM user WHERE username = “${username}”; 12年7月23日星期⼀一

  19. Boom ! 12年7月23日星期⼀一

  20. Escape when necessary 12年7月23日星期⼀一

  21. XSS issue 12年7月23日星期⼀一

  22. Remember, 12年7月23日星期⼀一

  23. 幹壞事是進步最大的 原動力 12年7月23日星期⼀一

  24. People always try to hack your site 12年7月23日星期⼀一

  25. Web Server 12年7月23日星期⼀一

  26. • Apache • Lighttpd • nginx 12年7月23日星期⼀一

  27. Apache 12年7月23日星期⼀一

  28. Don’t use prefork MPM 12年7月23日星期⼀一

  29. Thread MPM is fine 12年7月23日星期⼀一

  30. Reasonable speed 12年7月23日星期⼀一

  31. And everybody loves .htaccess 12年7月23日星期⼀一

  32. Lighttpd 12年7月23日星期⼀一

  33. No feature update for a long time 12年7月23日星期⼀一

  34. Forget it 12年7月23日星期⼀一

  35. nginx 12年7月23日星期⼀一

  36. Extreme fast for static files (assets) 12年7月23日星期⼀一

  37. Really fast 12年7月23日星期⼀一

  38. Conclusion 12年7月23日星期⼀一

  39. Split static files (assets) into another domain 12年7月23日星期⼀一

  40. Use nginx to serve your static files (assets) 12年7月23日星期⼀一

  41. Profiling your bottleneck 12年7月23日星期⼀一

  42. If web server is bottleneck, use nginx 12年7月23日星期⼀一

  43. Otherwise, use Apache 12年7月23日星期⼀一

  44. Database 12年7月23日星期⼀一

  45. • MySQL • NoSQL 12年7月23日星期⼀一

  46. MySQL 12年7月23日星期⼀一

  47. We won’t introduce MySQL 12年7月23日星期⼀一

  48. Just remind serveral things important 12年7月23日星期⼀一

  49. Use InnoDB 12年7月23日星期⼀一

  50. Always InnoDB 12年7月23日星期⼀一

  51. Yes, InnoDB 12年7月23日星期⼀一

  52. And, 12年7月23日星期⼀一

  53. Don’t use MyISAM 12年7月23日星期⼀一

  54. You won’t like table lock 12年7月23日星期⼀一

  55. You won’t like to repair tables 12年7月23日星期⼀一

  56. Percona modified version is great 12年7月23日星期⼀一

  57. Why InnoDB ? 12年7月23日星期⼀一

  58. Transaction ACID 12年7月23日星期⼀一

  59. Writes won’t block reads 12年7月23日星期⼀一

  60. Fast recovery after server crash 12年7月23日星期⼀一

  61. Consistent backup without downtime 12年7月23日星期⼀一

  62. Compression 12年7月23日星期⼀一

  63. It’s possible smaller than MyISAM tables 12年7月23日星期⼀一

  64. High availability solutions requirement 12年7月23日星期⼀一

  65. DRBD + Heartbeat 12年7月23日星期⼀一

  66. Mature technology 12年7月23日星期⼀一

  67. Quite stable 12年7月23日星期⼀一

  68. Active-Standby Lower utilization rate 12年7月23日星期⼀一

  69. Master-Master based on async replication 12年7月23日星期⼀一

  70. Active-Active Higher utilization rate 12年7月23日星期⼀一

  71. But notice data consistency issue 12年7月23日星期⼀一

  72. Galera Cluster 12年7月23日星期⼀一

  73. Young project 12年7月23日星期⼀一

  74. Active-Active Higher utilization rate 12年7月23日星期⼀一

  75. Sync replication without data consistent issue 12年7月23日星期⼀一

  76. Conclusion 12年7月23日星期⼀一

  77. MySQL works 12年7月23日星期⼀一

  78. And there are lots of minefields 12年7月23日星期⼀一

  79. But those minefields can be workaround 12年7月23日星期⼀一

  80. RAM is cheap 12年7月23日星期⼀一

  81. 16GB RAM is quite large 12年7月23日星期⼀一

  82. 64GB RAM is quite large 12年7月23日星期⼀一

  83. 288GB RAM is quite large 12年7月23日星期⼀一

  84. 512GB RAM is quite large 12年7月23日星期⼀一

  85. Data larger than 512GB ? 12年7月23日星期⼀一

  86. ... 12年7月23日星期⼀一

  87. We can discuss privately ? 12年7月23日星期⼀一

  88. NoSQL 12年7月23日星期⼀一

  89. General concept 12年7月23日星期⼀一

  90. NoSQL Need is (usually) Performance Need 12年7月23日星期⼀一

  91. What kind of programming language will perform better ? 12年7月23日星期⼀一

  92. C 12年7月23日星期⼀一

  93. “Portable Assembly” 12年7月23日星期⼀一

  94. Choose C-based written NoSQL first 12年7月23日星期⼀一

  95. Another concept 12年7月23日星期⼀一

  96. Story begin when data growing out of memory... 12年7月23日星期⼀一

  97. Many stories about data out of memory 12年7月23日星期⼀一

  98. Of course not happy stories 12年7月23日星期⼀一

  99. So, list some good NoSQL 12年7月23日星期⼀一

  100. Redis 12年7月23日星期⼀一

  101. Key-Value Store 12年7月23日星期⼀一

  102. Focus on key-value store 12年7月23日星期⼀一

  103. Not claiming scalability 12年7月23日星期⼀一

  104. Because they know hot data needs to fit memory 12年7月23日星期⼀一

  105. Other NoSQL ? 12年7月23日星期⼀一

  106. Sorry, no idea... 12年7月23日星期⼀一

  107. There are so many PR-oriented NoSQL software 12年7月23日星期⼀一

  108. Remember, 12年7月23日星期⼀一

  109. Story begin when data growing out of memory... 12年7月23日星期⼀一

  110. Cache 12年7月23日星期⼀一

  111. Important note 12年7月23日星期⼀一

  112. Cache only when you need to 12年7月23日星期⼀一

  113. Because invalidation is not easy 12年7月23日星期⼀一

  114. So, 12年7月23日星期⼀一

  115. Always profiling 12年7月23日星期⼀一

  116. • Frontend Cache • Backend Cache 12年7月23日星期⼀一

  117. Frontend Cache 12年7月23日星期⼀一

  118. HTTP Header 12年7月23日星期⼀一

  119. Cache-Control 12年7月23日星期⼀一

  120. Avoid ETags 12年7月23日星期⼀一

  121. CDN 12年7月23日星期⼀一

  122. Don’t use CDN before you do profile 12年7月23日星期⼀一

  123. YSlow 12年7月23日星期⼀一

  124. Google PageSpeed 12年7月23日星期⼀一

  125. Backend Cache 12年7月23日星期⼀一

  126. Memcached 12年7月23日星期⼀一

  127. Remember Memcached is just a cache server 12年7月23日星期⼀一

  128. Memcached may crash 12年7月23日星期⼀一

  129. Use it as cache server 12年7月23日星期⼀一

  130. Because it’s cache layer 12年7月23日星期⼀一

  131. Cache Layer ! 12年7月23日星期⼀一

  132. Your site should be able to work without cache 12年7月23日星期⼀一

  133. Database Cache 12年7月23日星期⼀一

  134. MySQL Query Cache 12年7月23日星期⼀一

  135. Trun off it 12年7月23日星期⼀一

  136. Because it’s not efficient on multi-CPU environment 12年7月23日星期⼀一

  137. Instead, 12年7月23日星期⼀一

  138. Use index correctly 12年7月23日星期⼀一

  139. Make sure all time-sensitive queries use correct index 12年7月23日星期⼀一

  140. Index optimization is engine dependent 12年7月23日星期⼀一

  141. Understand B+tree will help you 12年7月23日星期⼀一

  142. Remember one thing: 12年7月23日星期⼀一

  143. MySQL is stupid 12年7月23日星期⼀一

  144. If you cannot find an efficient way to query, 12年7月23日星期⼀一

  145. Then MySQL can’t either 12年7月23日星期⼀一

  146. Conclusion 12年7月23日星期⼀一

  147. Profiling first, then decide what to cache 12年7月23日星期⼀一

  148. Remember, 12年7月23日星期⼀一

  149. Premature optimization is the root of all evil 12年7月23日星期⼀一

  150. Summarize 12年7月23日星期⼀一

  151. Find out problem Analyze problem Then solve problem 12年7月23日星期⼀一

  152. Thanks ! 12年7月23日星期⼀一

  153. Any questions ? 12年7月23日星期⼀一