以前我将高并发的解决方法误认为是线程或者是队列能够解决,由于高并发的时候是有不少用户在访问,致使出现系统数据不正确、丢失数据现象,因此想到 的是用队列解决,其实队列解决的方式也能够处理,好比咱们在竞拍商品、转发评论微博或者是秒杀商品等,同一时间访问量特别大,队列在此起到特别的做用,将 全部请求放入队列,以毫秒计时单位,有序的进行,从而不会出现数据丢失系统数据不正确的状况。html
今天我通过查资料,高并发的解决方法有俩种,一种是使用缓存、另外一种是使用生成静态页面;还有就是从最基础的地方优化咱们写代码减小没必要要的资源浪费:(java
1.不要频繁的new对象,对于在整个应用中只须要存在一个实例的类使用单例模式.对于String的链接操做,使用StringBuffer或者StringBuilder.对于utility类型的类经过静态方法来访问。程序员
2. 避免使用错误的方式,如Exception能够控制方法推出,可是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof作条件判断,尽可能使用比的条件判断方式.使用JAVA中效率高的类,好比ArrayList比Vector性能好。)web
首先缓存技术我一直没有使用过,我以为应该是在用户请求时将数据保存在缓存中,下次请求时会检测缓存中是否有数据存在,防止屡次请求服务器,致使服务器性能下降,严重致使服务器崩溃,这只是我本身的理解,详细的资料仍是须要在网上收集;数据库
使用生成静态页面我想你们应该不模式,咱们见过不少网站当在请求的时候页面的后最已经变了,在转换成htm后,访问速度将提高,由于静态页面不带有服务器组件;在这里我就多多介绍一下:缓存
1、什么是页面静态化:安全
简 单的说,咱们若是访问一个连接 ,服务器对应的模块会处理这个请求,转到对应的jsp界面,最后生成咱们想要看到的数据。这其中的缺点是显而易见的:由于每次请求服务器都会进行处理,如 果有太多的高并发请求,那么就会加剧应用服务器的压力,弄很差就把服务器 搞down 掉了。那么如何去避免呢?若是咱们把对 test.do 请求后的结果保存成一个 html 文件,而后每次用户都去访问 ,这样应用服务器的压力不就减小了?服务器
那么静态页面从哪里来呢?总不能让咱们每一个页面都手动处理吧?这里就牵涉到咱们要讲解的内容了,静态页面生成方案… 咱们须要的是自动的生成静态页面,当用户访问 ,会自动生成 test.html ,而后显示给用户。mybatis
2、下面咱们在简单介绍一下要想掌握页面静态化方案应该掌握的知识点:并发
一、 基础- URL Rewrite
什么是 URL Rewrite 呢 ? URL 重写。用一个简单的例子来讲明问题:输入网址 ,可是实际上访问的倒是 abc.com/test.action,那咱们就能够说 URL 被重写了。这项技术应用普遍,有许多开源的工具能够实现这个功能。
二、 基础- Servlet web.xml
若是你还不知道 web.xml 中一个请求和一个 servlet 是如何匹配到一块儿的,那么请搜索一下 servlet 的文档。这可不是乱说呀,有不少人就认为 /xyz/*.do 这样的匹配方式能有效。
若是你还不知道怎么编写一个 servlet ,那么请搜索一下如何编写 servlet.这可不是说笑呀,在各类集成工具漫天飞舞的今天,不少人都不会去从零编写一个 servlet了。
3、基本的方案介绍
其中,对于 URL Rewriter的部分,可使用收费或者开源的工具来实现,若是 url不是特别的复杂,能够考虑在 servlet 中实现,那么就是下面这个样子:
总 结:其实咱们在开发中都不多考虑这种问题,直接都是先将功能实现,当一个程序员在干到1到2year,就会感受光实现功能不是最主要的,安全性能、质量等等才是 一个开发人员最该关心的。今天我所说的是高并发,个人解决思路是,一、采用分布式应用设计二、分布式缓存数据库三、代码优化
Maven,Springmvc mybatis shiro, Druid, Restful, Dubbo, ZooKeeper,Redis,FastDFS,ActiveMQ,Nginx
1. 项目核心代码结构截图
项目模块依赖
特别提醒:开发人员在开发的时候能够将本身的业务REST服务化或者Dubbo服务化
2. 项目依赖介绍
2.1 后台管理系统、Rest服务系统、Scheculer定时调度系统依赖以下图:
2.2 Dubbo独立服务项目依赖以下图:
3. 项目功能部分截图:
zookeeper、dubbo服务启动
dubbo管控台
REST服务平台