新型的大型bbs架构(squid+nginx
2019独角兽企业重金招聘Python工程师标准>>>
这个架构基于squid、nginx和lvs等技术,从架构上对bbs进行全面优化和保护,有如下特点:
1、高性能:所有的点击基本上全部由前端缓存负责,提供最快速的处理。
2、高保障度:不需考虑应用程序稳定与否、程序语言是何种、数据库是何种,都能从架构上保证稳定。
3、高可用性:对应用程序的修改达到最简化:在程序的某些地方加入清缓存的语句即可,当然还需要做页面静态化的工作和统计工作。
首先看图,这个图比较大:
这个架构的特点和一些流程的说明:
1、主域名和图片域名分离
域名分离可以使流量分离,缓存策略分离等等,好处诸多。bbs初期一定要做好规划,将图片用另外的域名独立服务,即使没有足够机器,域名也要先分开。另外,图片服务器可以使用有别于主域名的另一个域名,一个好处是可以减少读取cookie对图片服务器的压力,另一个是提高安全性,避免cookie泄露。
2、使用LVS作为前端、二级代理和数据库的访问入口
使用LVS作为入口,比其他任何一种方式都来得更优质。首先LVS的负载能力很强,因为它工作在网络协议的第4层,使用虚拟ip技术,所以它本身并不担负任何流量的处理,仅仅是一个封包转发的功能;第二,LVS的配置相对简单而且稳定,一般去调整的几率比较低,也减少了因人为等因素而出现故障;第三,LVS可以处理任何端口的负载均衡,所以它基本可以做所有服务的负载均衡和容错。在这个架构中,除了处理http的80端口之外,LVS也处理了数据库mysql的3306端口,在数据库这个应用中是采用的双机热备策略。
3、使用nginx+squid作为最前端的缓存组合
在这个架构中,是最能体现app_nginx_squid_nginx架构的优势的。在这个架构中的bbs运行在缓存上,用户每发布一张帖子,都需要使用purge指令清除该帖子的缓存,如果是squid在最前端,那么每次发布一张帖子,都需要在所有的squid中调用purge指令,这样在机器比较多的时候,purge将成为一个巨大的压力。
所以在这里将nginx放在最前端并使用手工url_hash的方式分流,将经常需要purge的帖子页面和列表页面按一个url对应一台squid的策略,分布到各台squid上,并提供了一台或一组backup的squid,个别squid出现异常时将自动使用backup的机器继续提供一段时间的服务直到其正常。在这样的架构下,purge就不再是关键问题,因为一个url只会对应到一台机器上,所以purge的时候,后端app_server找到对应的机器就可以了。
可以看到在前端中还有一台nginx(purge)的机器,这台机器是专用于purge的,只要发送purge指令和需要清除的url到这台机器,就可以找到相应的服务器并清除缓存了。另外,purge时还需要清理backup机器上的缓存,所以无论前端机器增加到多少,purge指令只会在2台机器上执行,如果backup机器使用到2-3台,purge指令就会在3-4台机器上执行,仍然在可接受范围之内。
nginx作为前端,另有的好处:
1/使用nginx的日志统计点击量非常方便
2/nginx也可作为缓存,一般可以直接负责favicon.ico和logo等固定的小图片
4、基于nginx的中层代理
nginx中层代理的优势,在:
nginx和squid配合搭建的web服务器前端系统
这篇文章中有解释。
在这个架构中,假如后端的app_server上把帖子页和列表页直接生成了静态页面,那么使用中层代理再做一次url_hash,将可以解决后端app_server的硬盘容量的压力,但是如果使用到url_hash的话,那做容错就相对麻烦了。所以建议不要采用生成静态页的方式,后端的压力一般不会非常的大,所以没有必要生成静态页。假如前端squid的命中率实在太低下,造成大量穿透,可以考虑使用二级代理暂顶。
5、基于LVS的数据库双机热备
在这个架构中,因为大量的并发和访问量都由前端的缓存处理掉了,所以后端的mysql主要压力来自于数据的写入,所以压力并不是非常大,并且负载比较稳定,一般不会随着访问量上升而提高过快,估计目前一台64位的机器,加满内存并使用高速的硬盘,前端负载数亿访问量时数据库都不会出现性能问题。在数据库这方面应主要考虑故障恢复,因为数据库崩溃的话,按照一般使用备份恢复的做法,耗时很长而且难免丢失数据,是很棘手的问题。使用双机热备的方案,出现故障时首先可由一台时刻同步着的备用数据库即刻充当主数据库,然后卸下的数据库可以有充分的时间对其进行维修,所以是个很安全有效的办法。
当然,数据库的优化还是要细心做的,参考:
mysql性能的检查和调优方法
细心地调一遍,性能会好很多。
6、图片服务器
图片服务器我在这个架构中没有特别详细的介绍,在大型的bbs系统下,图片常常会出现容灾现象——图片数量严重超过了单台前端服务器容纳能力,导致前端服务器命中率低下。处理容灾问题也是非常棘手的,往后会有更详细的介绍。
7、简单的点击量统计办法
1/使用js的script标签访问另一(台)组服务器的空文件,然后定期向数据库更新
2/在前端的nginx上直接开启日志功能,按需要统计点击量的链接规则进行记录,然后定期更新数据库
转载于:https://my.oschina.net/tenking/blog/32072
新型的大型bbs架构(squid+nginx相关推荐
- 新型的大型bbs架构(squid+ngi
图片服务器我在那个架构中没有希奇详细的引睹,在大型的bbs系统下,图片常常会泛起容灾现象--图片数目严重超过了单台前端服务器包容能力,导致 前端服务器命中率低下.处理容灾问题也是非常棘手的,往后会有更 ...
- 大型网站架构 图片服务器分离
转自http://www.cnblogs.com/hukailee/p/5285018.html 大型网站架构 图片服务器分离 1 介绍 现在很多的网站上都会用到大量的图片,而图片是网页传输中 ...
- 大型网站架构演变和知识体系
存爱好,作为收藏,原地址:http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html ,同时向原创致敬 之前也有一些介绍大型网站架构 ...
- 千万级流量的大型分布式系统架构设计
本文是学习大型分布式网站架构的技术总结.对架构一个高性能.高可用.可伸缩及可扩展的分布式网站进行了概要性描述,并给出一个架构参考.文中一部分为读书笔记,一部分是个人经验总结,对大型分布式网站架构有较好 ...
- 照抄不翻车:抗住千万流量的大型分布式系统架构设计
作者介绍 烂猪皮,十余年工作经验,曾在 Google 等外企工作过几年,精通 Java.分布式架构.微服务架构以及数据库,最近正在研究大数据以及区块链,希望能突破到更高的境界. 本文是学习大型分布式网 ...
- 大型网站架构设计系列总结
大型网站架构设计系列-我的总结如下: 1. 数据结构和产品架构设计,这是基础! 2. 角色分开,各司其职(web服务器,缓存服务器,负载平衡,数据库等) 3. HTML静态化(用缓存服务器也可) 4. ...
- 干货丨千万流量大型分布式系统架构设计实战
- 前言 - 本文是学习大型分布式网站架构的技术总结.对架构一个高性能.高可用.可伸缩及可扩展的分布式网站进行了概要性描述,并给出一个架构参考.文中一部分为读书笔记,一部分是个人经验总结 ...
- 大型互联网架构与集群技术
java架构必须掌握的几点技术? 关于学习架构,必须会的几点技术 1. java反射技术 2. xml文件处理 3. properties属性文件处理 4. 线程安全机制 5. annocation注 ...
- 基于Java技术的大型网站架构设计方案
架构设计漫长路 最佳实践我来数 千万并发没问题 要点首推数据库 SQL语句要优化 索引创建有艺术 三大范式不可废 冗余字段难维护 查询过多怎么办 缓存使用是本固 频繁访问不用怕 每秒数千扛得住 更新插 ...
最新文章
- 正则表达式校验IP地址
- tf.reduce_max用法
- mysql数据库的安装
- C++Kosaraju找有向图的强连通分量算法(附完整源码)
- 获取Spring的ApplicationContext的几种方式
- android 学习链接大集合
- php+分针和时针重合,时钟问题—两针重合
- python可以连接sql server_python连接sqlserver数据库
- Oracle数据库空间突然增大,Oracle数据库突然宕机,处理方案
- 在Logstash中配置多个管道
- JavaScript Oriented[探究面向对象的JavaScript高级语言特性]
- 揭开2016手机进化史 寒冬整合重返市场成主旋律
- Excel VBA 设计调查问卷
- 【牛客网C++服务器项目学习】Day12-网络编程的两种事件处理模式
- Android 硬件加速
- 百度宣布“百度有啊”正式上线
- 学生信息管理系统心得
- Django实现视频播放
- 商品3D展示来啦,HMS Core3D建模服务助力电商发展
- 【历史上的今天】9 月 6 日:Facebook 收购 Instagram;华为发布 5G 芯片;惠普并购康柏
热门文章
- 如何安装OpenCV?如何安装cv2?如何更新numpy?
- ArrayList转Json的2个坑
- R语言常用包分类总结
- Linux系统使用apt命令安装java
- 循环队列c语言的实现,循环队列的C语言实现
- bootstrap五星评分_星型打分插件 bootstrap-rating-input
- mysql div 没有小数,mysql order by limit 的一个坑
- dell存储Linux配置,Dell MD3200远程存储的特殊配置
- esp8266手册_ESP8266_前言
- barplot参数 python_Python零基础入门Python数据分析最好的实战项目