狠狠撸

狠狠撸Share a Scribd company logo
黑夜路人
            2011.07.02
http://blog.csdn.net/heiyeshuwu
?   网站架构的迭代

?   开源软件选型

?   网站基础优化

?   Q&A
?   没有通用的架构,只有适合自己网站特点的架构

?   没有一成不变不用升级的架构,架构一定是迭代、
    迭代、再迭代

?   实践,实践,再实践
?   最简单的单台奥别产+顿叠架构
?   多Web服务器
?   缓存服务器
?   DB服务器 (主从)
构建基于尝补尘辫的网站架构
?   CDN/代理服务器:缓存静态资源,比如Squid
?   负载均衡服务器:解决服务器定位和服务器存活
    检查,比如LVS、HAProxy
?   Web服务器:提供主要的Web业务服务器,比如
    Apache、Nginx
?   资源服务器:持久存储静态资源的服务器,比如
    存储JS、CSS、图片等数据,一般构建也是Web
    系统
?   缓存服务器:减少数据库查询,缓存查多改少的
    数据,比如Memcached
?   DB连接池:解决数据库并发连接数(长连接)、数
    据库读写分离,比如 MySQL Proxy
?   数据库:采用双主,多从的架构模式,保证冗余
    和高可用性(标配MySQL)
?   内容检索服务器:为减轻数据库的压力,解决中
    型站点经常的排序和关键字检索需求 ,比如
    Shpinx,Xapian
?   其他:按照网站需要的服务,比如 消息队列系
    统、可持久化缓存系统、分布式文件系统等
构建基于尝补尘辫的网站架构
?   防攻击系统:
    ?   慢连接
    ?   DDOS、洪水
?   浏览数据、提交数据分离
?   安全相关
    ?   验证码
    ?   频率控制
    ?   反垃圾/内容过滤
?   中间件服务
    ?   资源选择:负载均衡、策略算法
    ?   健康检查:服务存活/心跳、性能
    ?   数据代理:兼容访问不同后端数据类型
?   消息队列:
    ?   异步提交数据:不同模块做不同的事
    ?   串行化数据、时序性、高性能不冲突
    ?   分发不同服务,减少提交系统压力
?   不同数据模块
    ?   缓存服务
    ?   标准数据库:关系数据库/NoSQL
    ?   高性能独立模块
    ?   站内搜索引擎:存储、NLP、高性能
?   审核数据系统
    ?   内容审核
    ?   内容发布
    ?   配置管理
?   达到高可用性(High Availability)是架构的重
    点之一

    ?   资源定位、健康检查、负载均衡

    ?   关键服务的主备冗余:Web、DB

    ?   及时有效的监控和报警
?   达到高可扩展性 (High Scalability)是架构的
    重点之二

    ?   数据库的切片(Sharding):水平切分、垂直切分

    ?   减少模块耦合度,基础模块独立服务:比如用户系统
        (Passport)

    ?   访问压力增加可以通过扩容服务器或者节点解决
?   达到高可维护性(High Maintainability)是架
    构的重点之三

    ?   架构模块和服务可以容易替换

    ?   架构可升级

    ?   实在不行,那就重构!
?   负载均衡
?   Web服务
?   PHP
?   缓存服务
?   DB连接池
?   关系数据库
?   NoSQL
?   其他
?   LVS
    ?   工作在四层,内核态,性能极高,有VIP功能,配合
        keepalived 做有效的 心跳检查和负载均衡安装配置麻
        烦,
?   HAProxy
    ?   工作在四层到七层,功能强大,有VIP功能,配置简
        单,CPU占用高
?   Nginx
    ?   工作在七层,应用层功能多,配置简单,无法支持
        VIP功能
?   负载均衡器测试数据
    软件        每秒并发量   CPU占用          结论
LVS (DR模式)   1.6W     25%     性能综合比最好,配置复杂
HAProxy      2.3W     95%     转发快,CPU占用高,配置
                              简单
Nginx        2W       80%     转发没有haproxy快,CPU
                              比haproxy占用低


?   机器足够并且应用重要建议独立使用LVS或
    HAProxy,机器不足使用 Nginx
?   Apache
    ?   2.2版本非常稳定强大
    ?   Preworker模式取消了进程创建开销,性能很高
?   Nginx
    ?   基于异步IO模型,性能强悍,能够支持数万并发
    ?   对小文件支持很好,性能很高
    ?   代码优美,扩展库必须编译进主程序
?   Lighttpd
    ?   基于异步IO模型,性能Nginx没有差别
    ?   扩展库是SO模式,比Nginx要灵活
    ?   全球使用率比以前低,安全性没有上面两个好
?   Web服务器静态内容测试数据
    ?     处理静态文件Apache 性能比 nginx和lighttpd要差
    ?     Nginx在处理小文件优势明显

                                     主流Web服务器性能对比 (静态)
                 25000


                 20000
        每秒查询量




                 15000


                 10000


                  5000


                     0
                             1K          10K       100K      1M        10M
                Apache     12241.6      11749.7   6524.32   1501.13   166.933
                Lighttpd   18020.5      17947.3   12888.2   12879.9   232.398
                Nginx      18377.9      19593.9   13140.9   2040.06   224.433
?   Web服务器动态内容测试数据
    ?       处理动态内容三者相差不大(测试环境差异),主要是取决于PHP
            和数据库的处理性能

                                    主流Web服务器性能对比 (动态)
                  7000

                  6000

                  5000
        每秒查询量




                  4000

                  3000

                  2000

                  1000

                     0
                            echo         1K       10K       100K      1M
                Apache     5044.32     4811.3    4460.61   2331.9    296.912
                Lighttpd   5714.1      5815.93   4110.23   816.524   191.933
                Nginx      4060.73     3748.6    3264.3    1631.8    227.167
?   版本选择
    ?   PHP 4:马上抛弃它吧,低下的性能,不完整的面向对象支持
    ?   PHP 5.2.x:成熟稳定,各种扩展都支持,性能卓越,建议使用
    ?   PHP 5.3.x:有一些包括Unicode、命名空间之类的新功能,看个
        人喜好
?   工作模式选择
    ? Mod_php5.so:如果使用Apache的话,简单配置,可以使用本模式,挺稳定,
      性能不错
    ? FastCGI模式:推荐结合 php-fpm 的 fastcgi模式,性能很高,工作稳定,而且可
      以跟 Apache、Nginx、Lighttpd 完美结合

?   其他
    ? 注意安全配置,注意 safe_mode、open_base_dir 等选项
    ? 停掉不需要使用的PHP扩展
?   毋庸置疑,选择 Memcached 吧
?   Memcached注意点
    ? 32位机上开辟内存不要超过2G,建议可以多开几个进
      程
    ? 如果没有富余的机器可以跟Web一起部署
    ? 它单个数据值长度不能超过1M
    ? 数据存储最长有效期是30天
?   MySQL Proxy
    ? 性能不是太好,目前功能不完善
    ? 无法进行读写分离,需要自己写Lua脚本实现

?   SQL Relay
    ?   业内普遍反映不好用


?   您有推荐的吗?
?   毋庸置疑,选择MySQL
?   MySQL特点
    ? 开放式存储引擎,可以编制自己的引擎
    ? 安装部署简单,运维对比其他数据库简洁
    ? 标配MyISAM 和 InnoDB引擎,各有所长
?   MySQL缺点
    ? 没有好的热备工具(收费)
    ? 目前Cluster支持不太完善
    ? Orache收购后,MySQL 5.5 性能更高
?   替代品
    ?   MariaDB:创始人Monty构建,Maria引擎、XtraDB引擎
    ?   Percona Server:MySQL衍生版,性能更高
?   MongoDB
    ?   文档数据库,介于 Key->Value 数据库和关系数据库之间
    ?   无存储引擎,高写入性能,内存越大,性能越好
    ?   AutoSharding、主从复制
    ?   操作简单,会JavaScript就会操作MongoDB
    ?   发展中,业内有应用,百度(商业产物)、淘宝(监控中心)、视觉中国
    ?   缺点:
        ?   最大单记录 16M
        ?   比较浪费磁盘:4亿 数据 500G磁盘
?   Redis
    ? 可持久化的缓存服务
    ? 纯粹Key ->Value结构,存储数据类型丰富:String/List/Set
    ? 可以持久化,可以主从同步
    ? 缺点:
        ? 主从同步拷贝整个镜像文件
        ? 内存大小限制了能存储最大持久化文件大小
?   其他
    ?   Hadoop Hbase
    ?   Apache CouchDB
    ?   MySQL HandlerSocket
    ?   更多
?   反向代理服务器
    ? Squid
    ? Varnish

?   数据检索服务
    ? Sphinx
    ? Xapian

?   消息队列
    ? MemcacheQ
    ? Q4M (queue for mysql)
?   MySQL优化

?   前端优化
?   服务优化
    ? 选择合适的版本:MySQL 5.x
    ? 选择合适的存储引擎:MyISAM、InnoDB
      ? MyISAM:表级锁、查询快(500W),可以count
      ? Innodb:行级锁、事务支持(隔离级别),不要count,要设置
        主键
    ? 重要的配置:
      ? Max_connections、Query_cache、key_buffer、sort_buffer
      ? Innodb_buffer_pool_size、 innodb_flush_log_at_trx_commit
?   硬件
    ? SSD > SAS > SCSI,随机存取
    ? 内存越大越好,多核CPU
?   应用优化
    ?   对数据进行Sharding:分表,分库
        ? 垂直切分:按照业务或产物切分
        ? 水平切分:按照数据拆分,比如mod或div
    ?   尽量减少查询
        ? 可以缓存的就不要查数据库
        ? 部分数据可以借助比如 Shpinx解决,检索需求
    ?   要注意的查询
        ? 给需要的字段加上索引,比如需要 WHERE 或者 ORDER BY 的字段
        ? 不要LIKE ‘%key%’,不使用索引,可以 LIKE ‘key%’
        ? 如果可以,少使用 SELECT * FROM XX,尽量查询自己需要的字段
        ? 避免使用 JOIN/GROUP BY/DISTINCK
        ? INNODB表不要count
?   雅虎十四条前端优化规则
?   减少HTTP请求
    ? 把JS文件 和CSS文件合并压缩
    ? 把页面图标类大图做成一个,使用CSS进行调用雅虎
      十四条前端优化规则
?   对静态资源进行处理
    ? 静态资源修改过期时间为未来
    ? 给静态资源独立的域名,比如 img.abc.com

?   其他
?   http://www.keephelp.com/qianduan/yahoo-
    14/
?   http://zh.linuxvirtualserver.org/node/1394
?   谷歌搜索
?   黑夜路人

?   博客:http://blog.csdn.net/heiyeshuwu

?   邮箱:heiyeluren@gmail.com

?   其他
构建基于尝补尘辫的网站架构
构建基于尝补尘辫的网站架构

More Related Content

构建基于尝补尘辫的网站架构

  • 1. 黑夜路人 2011.07.02 http://blog.csdn.net/heiyeshuwu
  • 2. ? 网站架构的迭代 ? 开源软件选型 ? 网站基础优化 ? Q&A
  • 3. ? 没有通用的架构,只有适合自己网站特点的架构 ? 没有一成不变不用升级的架构,架构一定是迭代、 迭代、再迭代 ? 实践,实践,再实践
  • 4. ? 最简单的单台奥别产+顿叠架构
  • 5. ? 多Web服务器 ? 缓存服务器 ? DB服务器 (主从)
  • 7. ? CDN/代理服务器:缓存静态资源,比如Squid ? 负载均衡服务器:解决服务器定位和服务器存活 检查,比如LVS、HAProxy ? Web服务器:提供主要的Web业务服务器,比如 Apache、Nginx ? 资源服务器:持久存储静态资源的服务器,比如 存储JS、CSS、图片等数据,一般构建也是Web 系统 ? 缓存服务器:减少数据库查询,缓存查多改少的 数据,比如Memcached
  • 8. ? DB连接池:解决数据库并发连接数(长连接)、数 据库读写分离,比如 MySQL Proxy ? 数据库:采用双主,多从的架构模式,保证冗余 和高可用性(标配MySQL) ? 内容检索服务器:为减轻数据库的压力,解决中 型站点经常的排序和关键字检索需求 ,比如 Shpinx,Xapian ? 其他:按照网站需要的服务,比如 消息队列系 统、可持久化缓存系统、分布式文件系统等
  • 10. ? 防攻击系统: ? 慢连接 ? DDOS、洪水 ? 浏览数据、提交数据分离 ? 安全相关 ? 验证码 ? 频率控制 ? 反垃圾/内容过滤 ? 中间件服务 ? 资源选择:负载均衡、策略算法 ? 健康检查:服务存活/心跳、性能 ? 数据代理:兼容访问不同后端数据类型
  • 11. ? 消息队列: ? 异步提交数据:不同模块做不同的事 ? 串行化数据、时序性、高性能不冲突 ? 分发不同服务,减少提交系统压力 ? 不同数据模块 ? 缓存服务 ? 标准数据库:关系数据库/NoSQL ? 高性能独立模块 ? 站内搜索引擎:存储、NLP、高性能 ? 审核数据系统 ? 内容审核 ? 内容发布 ? 配置管理
  • 12. ? 达到高可用性(High Availability)是架构的重 点之一 ? 资源定位、健康检查、负载均衡 ? 关键服务的主备冗余:Web、DB ? 及时有效的监控和报警
  • 13. ? 达到高可扩展性 (High Scalability)是架构的 重点之二 ? 数据库的切片(Sharding):水平切分、垂直切分 ? 减少模块耦合度,基础模块独立服务:比如用户系统 (Passport) ? 访问压力增加可以通过扩容服务器或者节点解决
  • 14. ? 达到高可维护性(High Maintainability)是架 构的重点之三 ? 架构模块和服务可以容易替换 ? 架构可升级 ? 实在不行,那就重构!
  • 15. ? 负载均衡 ? Web服务 ? PHP ? 缓存服务 ? DB连接池 ? 关系数据库 ? NoSQL ? 其他
  • 16. ? LVS ? 工作在四层,内核态,性能极高,有VIP功能,配合 keepalived 做有效的 心跳检查和负载均衡安装配置麻 烦, ? HAProxy ? 工作在四层到七层,功能强大,有VIP功能,配置简 单,CPU占用高 ? Nginx ? 工作在七层,应用层功能多,配置简单,无法支持 VIP功能
  • 17. ? 负载均衡器测试数据 软件 每秒并发量 CPU占用 结论 LVS (DR模式) 1.6W 25% 性能综合比最好,配置复杂 HAProxy 2.3W 95% 转发快,CPU占用高,配置 简单 Nginx 2W 80% 转发没有haproxy快,CPU 比haproxy占用低 ? 机器足够并且应用重要建议独立使用LVS或 HAProxy,机器不足使用 Nginx
  • 18. ? Apache ? 2.2版本非常稳定强大 ? Preworker模式取消了进程创建开销,性能很高 ? Nginx ? 基于异步IO模型,性能强悍,能够支持数万并发 ? 对小文件支持很好,性能很高 ? 代码优美,扩展库必须编译进主程序 ? Lighttpd ? 基于异步IO模型,性能Nginx没有差别 ? 扩展库是SO模式,比Nginx要灵活 ? 全球使用率比以前低,安全性没有上面两个好
  • 19. ? Web服务器静态内容测试数据 ? 处理静态文件Apache 性能比 nginx和lighttpd要差 ? Nginx在处理小文件优势明显 主流Web服务器性能对比 (静态) 25000 20000 每秒查询量 15000 10000 5000 0 1K 10K 100K 1M 10M Apache 12241.6 11749.7 6524.32 1501.13 166.933 Lighttpd 18020.5 17947.3 12888.2 12879.9 232.398 Nginx 18377.9 19593.9 13140.9 2040.06 224.433
  • 20. ? Web服务器动态内容测试数据 ? 处理动态内容三者相差不大(测试环境差异),主要是取决于PHP 和数据库的处理性能 主流Web服务器性能对比 (动态) 7000 6000 5000 每秒查询量 4000 3000 2000 1000 0 echo 1K 10K 100K 1M Apache 5044.32 4811.3 4460.61 2331.9 296.912 Lighttpd 5714.1 5815.93 4110.23 816.524 191.933 Nginx 4060.73 3748.6 3264.3 1631.8 227.167
  • 21. ? 版本选择 ? PHP 4:马上抛弃它吧,低下的性能,不完整的面向对象支持 ? PHP 5.2.x:成熟稳定,各种扩展都支持,性能卓越,建议使用 ? PHP 5.3.x:有一些包括Unicode、命名空间之类的新功能,看个 人喜好 ? 工作模式选择 ? Mod_php5.so:如果使用Apache的话,简单配置,可以使用本模式,挺稳定, 性能不错 ? FastCGI模式:推荐结合 php-fpm 的 fastcgi模式,性能很高,工作稳定,而且可 以跟 Apache、Nginx、Lighttpd 完美结合 ? 其他 ? 注意安全配置,注意 safe_mode、open_base_dir 等选项 ? 停掉不需要使用的PHP扩展
  • 22. ? 毋庸置疑,选择 Memcached 吧 ? Memcached注意点 ? 32位机上开辟内存不要超过2G,建议可以多开几个进 程 ? 如果没有富余的机器可以跟Web一起部署 ? 它单个数据值长度不能超过1M ? 数据存储最长有效期是30天
  • 23. ? MySQL Proxy ? 性能不是太好,目前功能不完善 ? 无法进行读写分离,需要自己写Lua脚本实现 ? SQL Relay ? 业内普遍反映不好用 ? 您有推荐的吗?
  • 24. ? 毋庸置疑,选择MySQL ? MySQL特点 ? 开放式存储引擎,可以编制自己的引擎 ? 安装部署简单,运维对比其他数据库简洁 ? 标配MyISAM 和 InnoDB引擎,各有所长 ? MySQL缺点 ? 没有好的热备工具(收费) ? 目前Cluster支持不太完善 ? Orache收购后,MySQL 5.5 性能更高 ? 替代品 ? MariaDB:创始人Monty构建,Maria引擎、XtraDB引擎 ? Percona Server:MySQL衍生版,性能更高
  • 25. ? MongoDB ? 文档数据库,介于 Key->Value 数据库和关系数据库之间 ? 无存储引擎,高写入性能,内存越大,性能越好 ? AutoSharding、主从复制 ? 操作简单,会JavaScript就会操作MongoDB ? 发展中,业内有应用,百度(商业产物)、淘宝(监控中心)、视觉中国 ? 缺点: ? 最大单记录 16M ? 比较浪费磁盘:4亿 数据 500G磁盘 ? Redis ? 可持久化的缓存服务 ? 纯粹Key ->Value结构,存储数据类型丰富:String/List/Set ? 可以持久化,可以主从同步 ? 缺点: ? 主从同步拷贝整个镜像文件 ? 内存大小限制了能存储最大持久化文件大小 ? 其他 ? Hadoop Hbase ? Apache CouchDB ? MySQL HandlerSocket ? 更多
  • 26. ? 反向代理服务器 ? Squid ? Varnish ? 数据检索服务 ? Sphinx ? Xapian ? 消息队列 ? MemcacheQ ? Q4M (queue for mysql)
  • 27. ? MySQL优化 ? 前端优化
  • 28. ? 服务优化 ? 选择合适的版本:MySQL 5.x ? 选择合适的存储引擎:MyISAM、InnoDB ? MyISAM:表级锁、查询快(500W),可以count ? Innodb:行级锁、事务支持(隔离级别),不要count,要设置 主键 ? 重要的配置: ? Max_connections、Query_cache、key_buffer、sort_buffer ? Innodb_buffer_pool_size、 innodb_flush_log_at_trx_commit ? 硬件 ? SSD > SAS > SCSI,随机存取 ? 内存越大越好,多核CPU
  • 29. ? 应用优化 ? 对数据进行Sharding:分表,分库 ? 垂直切分:按照业务或产物切分 ? 水平切分:按照数据拆分,比如mod或div ? 尽量减少查询 ? 可以缓存的就不要查数据库 ? 部分数据可以借助比如 Shpinx解决,检索需求 ? 要注意的查询 ? 给需要的字段加上索引,比如需要 WHERE 或者 ORDER BY 的字段 ? 不要LIKE ‘%key%’,不使用索引,可以 LIKE ‘key%’ ? 如果可以,少使用 SELECT * FROM XX,尽量查询自己需要的字段 ? 避免使用 JOIN/GROUP BY/DISTINCK ? INNODB表不要count
  • 30. ? 雅虎十四条前端优化规则 ? 减少HTTP请求 ? 把JS文件 和CSS文件合并压缩 ? 把页面图标类大图做成一个,使用CSS进行调用雅虎 十四条前端优化规则 ? 对静态资源进行处理 ? 静态资源修改过期时间为未来 ? 给静态资源独立的域名,比如 img.abc.com ? 其他
  • 31. ? http://www.keephelp.com/qianduan/yahoo- 14/ ? http://zh.linuxvirtualserver.org/node/1394 ? 谷歌搜索
  • 32. ? 黑夜路人 ? 博客:http://blog.csdn.net/heiyeshuwu ? 邮箱:heiyeluren@gmail.com ? 其他