web高并发解决方案_第1页
web高并发解决方案_第2页
web高并发解决方案_第3页
web高并发解决方案_第4页
web高并发解决方案_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

web 高并发解决方案篇一:JAVA WEB 高并发解决方案java 处理高并发高负载类网站中数据库的设计方法(java 教程,java 处理大量数据,java 高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个 SPOF。尤其是的应用,数据库的响应是首先要解决的。 一般来说 MySQL 是最常用的,可能最初是一个 mysql主机,当数据增加到 100 万以上,那么,MySQL 的效能急剧下降。常用的优化措施是 M-S(主-从)方式进行同步复制,将查询和操作和分别在不同的服务器上进行操作。我推荐的是 M-M-Slaves 方式,2 个主 Mysql,多个 Slaves,需要注意的是,虽然有 2 个 Master,但是同时只有 1 个是Active,我们可以在一定时候切换。之所以用 2 个 M,是保证 M 不会又成为系统的 SPOF。 Slaves 可以进一步负载均衡,可以结合 LVS,从而将select 操作适当的平衡到不同的 slaves 上。 以上架构可以抗衡到一定量的负载,但是随着用户进一步增加,你的用户表数据超过 1 千万,这时那个 M 变成了 SPOF。你不能任意扩充 Slaves,否则复制同步的开销将直线上升,怎么办?我的方法是表分区,从业务层面上进行分区。最简单的,以用户数据为例。根据一定的切分方式,比如 id,切分到不同的数据库集群去。 全局数据库用于 meta 数据的查询。缺点是每次查询,会增加一次,比如你要查一个用户 nightsailer,你首先要到全局数据库群找到 nightsailer 对应的 cluster id,然后再到指定的 cluster 找到 nightsailer 的实际数据。 每个 cluster 可以用 m-m 方式,或者 m-m-slaves 方式。这是一个可以扩展的结构,随着负载的增加,你可以简单的增加新的 mysql cluster 进去。 需要注意的是: 1、禁用全部 auto_increment 的字段 2、id 需要采用通用的算法集中分配 3、要具有比较好的方法来监控 mysql 主机的负载和服务的运行状态。如果你有 30 台以上的 mysql 数据库在跑就明白我的意思了。 4、不要使用持久性链接(不要用 pconnect),相反,使用 sqlrelay 这种第三方的数据库链接池,或者干脆自己做,因为 php4 中 mysql 的链接池经常出问题。二:高并发高负载网站的系统架构之 HTML 静态化 其实大家都知道,效率最高、消耗最小的就是纯静态化 /shtml/XX07/的 html 页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统 CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的 CMS 是必不可少的。 除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,像 Mop的大杂烩就是使用了这样的策略,网易社区等也是如此。 同时,html 静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用 html 静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求高并发。 网站 HTML 静态化解决方案 当一个 Servlet 资源请求到达 WEB 服务器之后我们会填充指定的 JSP 页面来响应请求: HTTP 请求-Web 服务器-Servlet-业务逻辑处理-访问数据-填充 JSP-响应请求HTML 静态化之后: HTTP 请求-Web 服务器-Servlet-HTML-响应请求 静态访求如下 Servlet: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException if(“chapterId“) != null) String chapterFileName = “bookChapterRead_“+(“chapterId“)+“.html“; String chapterFilePath = getServletContext().getRealPath(“/“) + chapterFileName; File chapterFile = new File(chapterFilePath); if()(chapterFileName);return;/如果有这个文件就告诉浏览器转向 INovelChapterBiznovelChapterBiz = new NovelChapterBizImpl(); NovelChapternovelChapter = (“chapterId“);/章节信息 intlastPageId = ().getId(), (); intnextPageId = ().getId(), (); (“novelChapter“, novelChapter); (“lastPageId“, lastPageId); (“nextPageId“, nextPageId); new CreateStaticHTMLPage().createStaticHTMLPage(request, response, getServletContext(),chapterFileName, chapterFilePath, “/“); 生成 HTML 静态页面的类: package ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; /* * 创建 HTML 静态页面 * 功能:创建 HTML 静态页面 * 时间:XX 年 1011 日 * 地点:home * author mavk * */ public class CreateStaticHTMLPage /* * 生成静态 HTML 页面的方法 * param request 请求对象 * param response 响应对象* paramservletContext Servlet 上下文 * paramfileName 文件名称 * paramfileFullPath 文件完整路径 * paramjspPath 需要生成静态文件的 JSP 路径(相对即可) * throws IOException * throws ServletException */ public void createStaticHTMLPage(HttpServletRequest request, HttpServletResponseresponse,ServletContextservletContext,StringfileName,StringfileFullPath,StringjspPath) throws ServletException, IOException (“text/html;charset=gb2312“);/设置 HTML 结果流编码(即 HTML 文件编码) RequestDispatcherrd = (jspPath);/得到 JSP 资源 final ByteArrayOutputStreambyteArrayOutputStream = new ByteArrayOutputStream();/用于从ServletOutputStream 中接收资源 final ServletOutputStreamservletOuputStream = new ServletOutputStream()/用于从HttpServletResponse 中接收资源 public void write(byte b, intoff,intlen) (b, off, len); public void write(int b) (b); ; final PrintWriterprintWriter = new PrintWriter(new OutputStreamWriter(byteArrayOutputStream);/把转换字节流转换成字符流 HttpServletResponsehttpServletResponse = new HttpServletResponseWrapper(response)/用于从response 获取结果流资源(重写了两个方法) public ServletOutputStreamgetOutputStream() 篇二:开源企业级 web 高并发解决方案开源企业级 web 高并发解决方案 主要介绍利用开源的解决方案,来为企业搭建 web 高并发服务器架构花了一个多小时,画了张图片,希望能先帮你理解整个架构,之后我在一一介绍.linux 的大型架构其实是一点点小架构拼接起来的,笔者从各个应用开始配置,最后在完全整合起来,以实现效果。 笔者所使用的环境为 内核版本 实现过程在虚拟机中,所用到的安装包为 DVD 光盘自带 rpm 包 装过 Development Libraries Development Tools 包组 笔者所使用的环境为 内核版本 实现过程在虚拟机中,所用到的安装包为 DVD 光盘自带 rpm 包 装过 Development Libraries Development Tools 包组 笔者虚拟机有限,只演示单边 varnish 配置 一、配置前端 LVS 负载均衡 笔者选用 LVS 的 DR 模型来实现集群架构,如果对 DR模型不太了了解的朋友建议先去看看相关资料。 本模型实例图为: 现在 director上安装 ipvsadm,笔者 yum 配置指向有集群源所以直接用 yum 安装。 yum install ipvsadm下面是 Director 配置: DIP 配置在接口上 VIP 配置在接口别名上: varnish 服务器配置:RIP 配置在接口上: ;VIP 配置在 lo 别名上 如果你要用到下面的 heartbeat 的 ldirectord 来实现资源转换,则下面的#Director 配置不用配置 1. # Director 配置 2. ifconfig eth0 /16 3. ifconfig eth0:0 broadcast netmask up 4. route add -host dev eth0:0 5. echo 1 /proc/sys/net/ipv4/ip_forward1. # varnish 服务器修改内核参数来禁止响应对 VIP的 ARP 广播请求 2. echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignore 3. echo 1 /proc/sys/net/ipv4/conf/all/arp_ignore 4. echo 2 /proc/sys/net/ipv4/conf/lo/arp_announce 5. echo 2 /proc/sys/net/ipv4/conf/all/arp_announce 1. # 配置 VIP 2. ifconfig lo:0 broadcast netmask up 3. # 凡是到主机的一律使用 lo:0 响应 4. route add -host dev lo:0 1. # 在 Director 上配置 Ipvs,笔者虚拟机有限,只演示单台配置 2. ipvsadm -A -t :80 -s wlc 3. ipvsadm -a -t :80 -r -g -w 2 4. ipvsadm -Ln 至此,前端 lvs 负载均衡基本实现,下面配置高可用集群 二、heartbeat 高可用集群 本应用模型图: 高可用则是当主服务器出现故障,备用服务器会在最短时间内代替其地位,并且保证服务不间断。 简单说明:从服务器和主服务器要有相同配置,才能在故障迁移时让无界感受不到,从而保证服务不间断运行。在你的两台机器(一台 作为主节点,另一台为从节点)上运行 heartbeat, 并配置好相关的选项,最重要的是 lvs资源一定要配置进去。那么开始时主节点提供 lvs 服务,一旦主节点崩溃,那么从节点立即接管 lvs 服务。 SO: director 主服务器和从服务器都有两块网卡,一块eth0 是和后面 varnish 服务器通信,另一块 eth1 是彼此之间监听心跳信息和故障迁移是资源转移。笔者用的 eth0 是网段 vip 为 监听心跳为 eth1 网卡,主从的 IP 分别为(node1) 和(node2) 修改上面模型图两台主从服务器的信息 1. vim /etc/hosts 2. 3. node2 4. #用于实现两台 director 节点间域名解析,此操作 node1、node2 相同 1. vim /etc/sysconfig/network 2. #设置主机名 3. hostname 4. #修改主机名使之立即生效,node2 也同样修改为 为了安全起见,node1 和 node2 的通信需要加密进行 1. 2. 3. 4. 5. 6. ssh-keygen -t rsa #生成密钥 ssh-copy-id -i .ssh/id_ root #将公钥复制给 node2 ssh node2 - ifconfig #执行命令测试,此时应该显示 node2 的 ip 信息 准备工作完成,下面开始安装 heartbeat 和ldirectord 所需要的安装包为 本人直接用 yum 来实现,能自动解决依赖关系 ,node1 和 node2 都需要安装 1. yum localinstall -y -nogpgcheck ./* 2. #安装此目录中的所有 rpm 包 安装后配置: 1. cd /usr/share/doc/ 2. cp authkeys /etc/ 3. cp haresources /etc/ 4. cp /etc/ 5. #拷贝 heartbeat 所需配置文件到指定目录下 1. vim /etc/ 2. bcast eth1 3. #定义心跳信息从那一块网卡传输 4. node 5. node 6. #添加这两行,用于指明心跳信号传输范围 7. vim /etc/authkeys 8. auth 2 9. 2 sha1 键入随机数 10. chmod 400 authkeys 11. #保存退出并修改权限 400 12. vim /etc/haresource 13. /24/eth0/ ldir ectord: httpd 14. #末行添加主节点域名,vip 资源,广播地址,ldirectord 资源,以及用户提供显示错误 页面的 httpd 资源 同步配置文件到 node2 1. /usr/lib/heartbeat/ha_propagate 2. #脚本用来同步和 authkeys 文件到 node2 3. scp haresources node2:/etc/ 4. #复制 haresource 到 nod2篇三:高并发网站架构解决方案一个小型的网站,比如个人网站,可以使用最简单的html 静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系 统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技 术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html 静态网站所能 比拟的。 大型网站,比如门户网站。在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的 Web 容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。 上面提供的几个解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。 1、HTML 静态化 其实大家都知道,效率最高、消耗最小的就是纯静态化的 html 页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是 最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统 CMS,像我们常访问的各个门户站点 的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限 管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的 CMS 是必不可少的。 除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,像 Mop 的大杂烩就是使用了这样的策略,网易社区等也是如此。 同时,html 静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用 html 静态化来实现,比如论坛 中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这 部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。 一下是一个 SSH 下的 html 静态化例子 用 Article 表来演示下页面静态化,在此做记录,便于今后参考。这里是基于 SSH2 架构来演示的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论