并发是什么,之前我觉得就是对数据的一个安全性操作,这样理解也没有错,因为这是数据的并发,那么什么是并发呢?

并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。这也是我之前的理解。

现在我认为对于web系统并发是分为两类的:1.用户量的并发;2.数据的并发

那么怎么处理这两类并发呢,在真实的项目中我也没实践过,仅仅整理了一下别人的成果,如下:

针对用户量的并发处理:

1.网页静态化。

先说说静态化的好处:

1.搜索引擎优化是细节上的优化, 从网站优化来分析,搜索引擎更喜欢静态的网页

2.提高了网站反映速度(或许指的是纯HTML网页,非JSP网页)

3.静态网页化之网站稳定,从安全角度讲,静态网页不宜遭到黑客攻击,从网站稳定性来讲,如果程序、数据库出了问题,会直接影响网站的访问,而静态网页就避免了如此情况,不会因为程序等,而损失网站数据,影响正常打开

在第一次请求web服务时会执行如下过程:

1.客户端发送请求给web容器

2.web容器将jsp首先转译成servlet源代码

3.web容器将servlet源代码编译成.class 文件

4.web容器执行.class 文件

5.web容器将结果响应给客户端 
所以web第一次为请求提供服务比较慢,从第二次请求开始会省略2、3两个步骤。

在网上有看到有两种方法做Jsp的静态化:

1.部分文章直接用JspWriter的方式输出jsp,我没有经过测试,不知道这种方式性能是不是真的能提升,但是我觉得这种方式还是逃不开上面的5步,所以自我感觉没有意义。

2.部分文章是把要输出的jsp直接编译用HTML的方式保存在服务器了,当用户调用的时候不用查询数据库,而是直接返回该HTML页面,这样也省去web容器对JSP的操作

理论上确实有效果的,但是保存的HTML文件都是些不会变动内容,变动了还要重新保存HTML,感觉吃力不讨好的样子。

对于所谓的静态化,感觉做一下伪静态化倒是个不错的主意,不知道猫扑和天涯是采用的什么方式去做的,或许真的有好的办法也说不定,欢迎大家留言告诉我。

2.图片服务器分离

这种方式主要是减轻服务器的压力,基于带宽和服务器的处理性能的优化,当客户端的浏览器解析服务端传回来的HTML时,会远程调用图片服务器的图片下载,这样就减小了主服务器的压力。

说到图片的话,也要说一下图片缓现技术了,jQuery有一个插件lazyload.js,它可以在图片很多的网页中使用,当用户滚动到哪里时哪里再加载图片,可以有效的使用服务器带宽,用户体验也不错,貌似就发现这么一款插件,欢迎大家给我推荐。

3.ajax异步请求

有人说用ajax请求也能减轻服务器的压力,可以不用传整个页面给客户端了,确实是这样。不过我觉得也不能太依赖ajax,要看场合的使用吧,比如说添加和修改等操作还是用表单提交的好。

4.对系统做数据缓存、系统负载均衡处理

数据的缓存缓存都是指放在内存里面的,方便快速读取而不用重新去数据库查询的数据。据说spring对ehchache的支持特别好,看了其它的帖子介绍,hibernate和JDBC都是能够使用这种第三方的缓存机制的,Apache也有相应的缓存机制,不过没用过,个人倾向于ehcache。

再来就是对系统做负载均衡的处理了,这一块的话没有什么太多建议,因为没有从事过,只知道概念,以后再单独写给大家。

5.数据库集群和库表散列

这是针对数据库做的数据库服务器集群,数据库集群方面,很多数据库都有自己的解决方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是类似的方案,您使用了什么样的DB,就参考相应的解决方案来实施即可,有时间再具体讨论吧。

6.镜像站点

镜像站其实就是主服务器系统的一个备份,除了带宽和服务器性能可能有差异外,其它都是一样,而且域名也不一样,这样也能起到分散主服务器压力的效果,就是有点麻烦。

一些常用的系统架构服务器分类:图片服务器,页面服务器,数据库服务器,应用服务器,日志服务器等等

针对数据的并发处理:

1.在方法调用时使用synchronize机制。

在调用Java方法时,可以使用这种同步机制,只允许一个线程操作里面的数据,也就不会发生脏读,幻读了。

2.给数据库加锁,利用事务的隔离级别

数据库有各种的锁机制,可以避免数据的并发操作,这个大概只能数据库用得到,比如存储过程。JDBC的预编译PreparedStatement 只能对事务进行管理,不会锁表的,所以若是代码去处理可以利用spring的事务管理机制中的隔离级别去处理了。

3.hibernate使用的是version字段判断。

以前做项目用的是hibernate,那时候为了防止数据的并发,就在每个bean中设计了version的字段,当查出来的数字和要更新时的数字显示不相同时,就说明该数据已经被其它用户给操作了,从而判断是否数据安全,这种方式是hibernate倡导的。

暂时知道的也就这么多了,希望大家多提点建议让我改进改进吧,回头熟悉了服务器集群和数据库集群再和大家讨论讨论。

参考资料:

http://baike.baidu.com/view/1417314.htm?fr=aladdin

http://blog.csdn.NET/dyllove98/article/details/8588790

http://www.cmhello.com/jquery-lazyload-js.html

javaweb项目高并发处理相关推荐

  1. akka框架——异步非阻塞高并发处理框架

    akka actor, akka cluster akka是一系列框架,包括akka-actor, akka-remote, akka-cluster, akka-stream等,分别具有高并发处理模 ...

  2. 【Web】JavaWeb项目为什么我们要放弃jsp?为什么要前后端解耦?为什么要前后端分离?2.0版,为分布式架构打基础。 - CSDN博客

    前戏 前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦, 并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务 ...

  3. maven java web项目_Maven创建JavaWeb项目

    使用模板创建项目 JavaWeb项目模板使用 使用模板创建JavaWeb项目,就是上图的结构.缺少src/main/java目录,以及两个test目录.但是多了webapp目录,这个目录就等效于以前J ...

  4. 关于写javaweb项目,遇到的问题:三层架构

    关于写javaweb项目,遇到的问题 三层架构: 表示层(UI)业务逻辑层(BLL) 数据访问层(DAL) 高内聚,低耦合. 高内聚:一个模块内各元素彼此结合紧密程度高(只负责单一功能) 低耦合:简单 ...

  5. 想要在华为云上部署javaweb项目怎么做

    前言 之前使用过华为云部署了一个简单的javaweb 项目,其中遇到了许多问题,现就这一篇博客简单说下我是如何部署项目. 入站规则和出站规则 简单的说,出站就是你访问外网,入站就是外网访问你. 具体说 ...

  6. 高并发处理之商品详情页

    首页 博客 专栏·视频 下载 论坛 问答 代码 直播 能力认证 高校 会员中心 收藏 动态 消息 创作中心 高并发处理之商品详情页 卜大伟 2019-01-18 11:13:47  2488  收藏  ...

  7. redis高并发处理由浅入深(备java基础,javaee课程)-任亮-专题视频课程

    redis高并发处理由浅入深(备java基础,javaee课程)-10331人已学习 课程介绍         Redis是一款依据BSD开源协议发行的高性能Key-Value存储系统(cache a ...

  8. JavaWeb项目介绍

    web项目:通俗的说就是在服务器上跑的项目,页面是通过服务器上的程序运算所得到的结果.常见的web项目按计算机语言分,有:Java Web(Java EE).ASP.Net.PHP项目. JavaWe ...

  9. Vue+Javaweb 项目心得

    一.Vue项目如何访问JavaWeb的Servlet 简单描述该问题: 该问题是我因为初学JavaWeb,所以导致我不太会使用Vue来访问JavaWeb的资源.主要解决能够在本地的Vue项目中访问本地 ...

最新文章

  1. 2021牛客寒假算法基础集训营1 题解
  2. dict是python语言的内置对象_Python内置了字典:dict的支持
  3. python 哪些项目_哪些Python开源项目比较好
  4. java中断响应时间_Java多线程 sleep方法响应中断 sleep面试问题(与wait/notify的
  5. 云栖独栋别墅_云栖没有玫瑰
  6. 小宝机器人怎么开机_是我低估了网友的脑洞 扫地机器人充电“事故现场”
  7. 山东自考c语言程序设计停考了吗,山东省自考教育类停考专业遗留问题的通知...
  8. python+requests+pytest_Python+Requests+Pytest 在window下的安装(附pip升级过程遇到的问题)...
  9. EasyUI Dialog 对话框
  10. AD9371+ZYNQ结构中JESD204B IP核的AXI_STREAM接口数据结构
  11. MariaDB 安装
  12. Navicat远程连接服务器mysql,先后报错10060,10061
  13. ROS2前置基础教程 | 小鱼教你用g++编译ROS2节点
  14. 2017-11-20 白银解说
  15. b站视频详情数据抓取,自动打包并发送到指定邮箱(单个或者群发)
  16. 等额本金和等额本息的区别
  17. 顾客信息表mysql_Qt5.5.0使用mysql编撰小软件源码讲解-顾客信息登记表_mysql
  18. vrtualbox虚拟机全屏显示
  19. Simplygon软件初探之软件安装
  20. 【深度学习】ResNet系列网络结构

热门文章

  1. 前后端接口测试神器Swagger基本使用
  2. 易软社区诊所门诊病历系统
  3. 【泡泡机器人转载】SLAM: 现在,未来和鲁棒年代
  4. tableau商业分析一点通 数据下载_干货分享:谁说设计师不会做数据分析
  5. 小白转行web前端碎碎念
  6. 解决ffmpeg生成mp4文件不能正常预览的问题
  7. java2048朝代版代码_求2048朝代版的源代码?
  8. Git远程仓库与本地仓库链接的两种方案
  9. Android:截屏/视频截图
  10. Unity项目中不显示手柄