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
Tweet

More Decks by Gea-Suan Lin

Other Decks in Technology

Transcript

  1. System Operations for
    Startup - Second Part
    Gea-Suan Lin, KKBOX Inc.
    2012-07-23
    12年7月23日星期⼀一

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide