什么是高并发,如何避免高并发

之前我将高并发的解决方法误认为是线程或者是队列可以解决,因为高并发的时候是有很多用户在访问,导致出现系统数据不正确、丢失数据现象,所以想到 的是用队列解决,其实队列解决的方式也可以处理,比如我们在竞拍商品、转发评论微博或者是秒杀商品等,同一时间访问量特别大,队列在此起到特别的作用,将 所有请求放入队列,以毫秒计时单位,有序的进行,从而不会出现数据丢失系统数据不正确的情况。

今天我经过查资料,高并发的解决方法有俩种,一种是使用缓存、另一种是使用生成静态页面;还有就是从最基础的地方优化我们写代码减少不必要的资源浪费:(

1.不要频繁的new对象,对于在整个应用中只需要存在一个实例的类使用单例模式.对于String的连接操作,使用StringBuffer或者StringBuilder.对于utility类型的类通过静态方法来访问。

  1. 避免使用错误的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做条件判断,尽量使用比的条件判断方式.使用JAVA中效率高的类,比如ArrayList比Vector性能好。)

首先缓存技术我一直没有使用过,我觉得应该是在用户请求时将数据保存在缓存中,下次请求时会检测缓存中是否有数据存在,防止多次请求服务器,导致服务器性能降低,严重导致服务器崩溃,这只是我自己的理解,详细的资料还是需要在网上收集;

使用生成静态页面我想大家应该不模式,我们见过很多网站当在请求的时候页面的后最已经变了,如“http://developer.51cto.com/art/201207/348766.htm”该页面其实是一个服务器请求地址,在转换成htm后,访问速度将提升,因为静态页面不带有服务器组件;在这里我就多多介绍一下:
一、什么是页面静态化:

简 单的说,我们如果访问一个链接 ,服务器对应的模块会处理这个请求,转到对应的jsp界面,最后生成我们想要看到的数据。这其中的缺点是显而易见的:因为每次请求服务器都会进行处理,如 果有太多的高并发请求,那么就会加重应用服务器的压力,弄不好就把服务器 搞down 掉了。那么如何去避免呢?如果我们把对 test.do 请求后的结果保存成一个 html 文件,然后每次用户都去访问 ,这样应用服务器的压力不就减少了?

那么静态页面从哪里来呢?总不能让我们每个页面都手动处理吧?这里就牵涉到我们要讲解的内容了,静态页面生成方案… 我们需要的是自动的生成静态页面,当用户访问 ,会自动生成 test.html ,然后显示给用户。

二、下面我们在简单介绍一下要想掌握页面静态化方案应该掌握的知识点:

1、 基础- URL Rewrite

什么是 URL Rewrite 呢 ? URL 重写。用一个简单的例子来说明问题:输入网址 ,但是实际上访问的却是 abc.com/test.action,那我们就可以说 URL 被重写了。这项技术应用广泛,有许多开源的工具可以实现这个功能。

2、 基础- Servlet web.xml

如果你还不知道 web.xml 中一个请求和一个 servlet 是如何匹配到一起的,那么请搜索一下 servlet 的文档。这可不是乱说呀,有很多人就认为 /xyz/*.do 这样的匹配方式能有效。

如果你还不知道怎么编写一个 servlet ,那么请搜索一下如何编写 servlet.这可不是说笑呀,在各种集成工具漫天飞舞的今天,很多人都不会去从零编写一个 servlet了。

三、基本的方案介绍
在这里插入图片描述
其中,对于 URL Rewriter的部分,可以使用收费或者开源的工具来实现,如果 url不是特别的复杂,可以考虑在 servlet 中实现,那么就是下面这个样子:
在这里插入图片描述
总 结:其实我们在开发中都很少考虑这种问题,直接都是先将功能实现,当一个程序员在干到1到2年,就会感觉光实现功能不是最主要的,安全性能、质量等等才是 一个开发人员最该关心的。今天我所说的是高并发,我的解决思路是,1、采用分布式应用设计2、分布式缓存数据库3、代码优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

到底多大才算高并发?

一、什么是高并发 定义: 高并发(High Concurrency)是使用技术手段使系统可以并行处理很多请求。关键指标: -响应时间(Response Time) -吞吐量(Throughput) -每秒查询率QPS(Query Per Second) -每秒事务处理量TPS(Transaction Per Second) -同时在…

eclipse安装maven插件

1、在线安装插件 a.打开eclipse,菜单“Help”-“Install New Software...” b.在Work with 地址栏输入:http://download.eclipse.org/releases/对应eclipse版本名称 c.在filter框中输入maven d.选择“Collaboration”-“m2e - Maven Integration for Ecl…

VS2017 网站打包发布生成的文件中包含.pdb文件,解决办法

右键点击项目属性,选择打包/发布 Web,勾选 排除生成的调试符号: 再次发布,就不会再生成.pdb文件 转载于:https://www.cnblogs.com/JoinLet/p/10297254.html

分布式学习路线

由于分布式系统所涉及到的领域众多,知识庞杂,很多新人在最初往往找不到头绪,不知道从何处下手来一步步学习分布式架构。 本文试图通过一个最简单的、常用的分布式系统,来阐述分布式系统中的一些基本问题。 负载均衡分布式缓存分…

IDEA开发vue.js卡死问题

在执行cnpm install后会在node_modules这个文件下面生成vue的相关依赖文件, 这个时候当执行cnpm run dev命令时,会导致IDEA出现卡死的问题,解决方法如下: 转载于:https://www.cnblogs.com/heqiuyong/p/10301925.html

各种缓存介绍

说起缓存相关技术,老多了, memcache、redis、squid、varnish、web cache、 CDN等等。缓存技术五花八门,但这些技术间有什么共性的地方,又有什么不同的地方呢?答案肯定是有的,这次为大家分享及整理一下缓存方…

CentOS6.8 安装node.js npm

环境:CentOS6.8_X64系统 一、到官方下载最新的编译好的安装文件,目前是6.9.4。 $>cd /usr/local/src #定位到这个目录,下载的文件会在这个目录#使用wget下载(这个内置命令) $>wget https://nodejs.org/dist/v8.1…

[上下界网络流][二分] Bzoj P2406 矩阵

题目描述 输入输出格式 输入格式: 第一行两个数n、m,表示矩阵的大小。 接下来n行,每行m列,描述矩阵A。 最后一行两个数L,R。 输出格式: 第一行,输出最小的答案; 输入输出样例 输入样…

PYTHON 爬虫笔记七:Selenium库基础用法

知识点一:Selenium库详解及其基本使用 什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Sele…

RPC简介及框架选择

简单介绍RPC协议及常见框架,对比传统restful api和RPC方式的优缺点。常见RPC框架,gRPC及序列化方式Protobuf等 HTTP协议 http协议是基于tcp协议的,tcp协议是流式协议,包头部分可以通过多出的\r\n来分界,包体部分如何分…

JAVA中几种常用的RPC框架介绍

RPC是远程过程调用的简称,广泛应用在大规模分布式应用中,作用是有助于系统的垂直拆分,使系统更易拓展。Java中的RPC框架比较多,各有特色,广泛使用的有RMI、Hessian、Dubbo等。RPC还有一个特点就是能够跨语言&#xff0…

WC2019 自闭记

不咕了 Day 1 2019/1/24 辣么快就到冬令营了,还沉迷于被柿子吊打的状态的菜鸡一时半会还反应不过来。我们学校这次分头去的冬令营,差点上不了车。这次做的动车居然直达广州,强啊。 然鹅还是到太晚,没饭吃了。路上花了15大洋买了个…

跨语言RPC框架Thrift详解

一、 概念 Apache的Thrift软件框架,是用来进行可伸缩的、跨语言的服务开发,它通过一个代码生成引擎来构建高效、无缝的服务,这些服务能够实现跨语言调度,目前支持的语言有: C, Java, Python, PHP, Ruby, Erlang, Perl,…

小知识

1.时间格式的处理 new Date().format(yyyy-MM-dd hh:mm:ss) 2.保留两位小数的方法 element.recTime element.recTime.toFixed(2) 3.如何判断一个对象为空的方法 JSON.stringify(this.getEcho) ! "{}" 4.判断时间是否为标准格式的方法 (this.formValidate.outDateti…

MTK-TP(电阻屏校准程序ts_lib移植)

现今的项目中已经很少有使用电阻TP,但总有些奇怪的需求。如果项目中遇到需要校准电阻屏如何保证较快且较稳的调试TP呢。这里介绍使用ts_lib库来进行调试。 当然也可以使用一些常见的校准算法,采集5点,但最终的公式应该是不变的: X…

ONENET读取与控制麒麟座MINI开发板LED状态

硬件 麒麟座MINI开发板V1.4 嵌入式软件 OneNET_Demo_ESP8266_EDP_Led 工程修改内容 led.c文件修改 函数LED_Init,mini开发板LED所在GPIO为PB6、PB7、PB8、PB9 函数LED_GetValue,mini开发板LED状态与IO口状态相反 /** * brief LED指示灯初始化函数**/v…

activemq的使用场景

一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。 目前在生产环境&#xff0c…

Java(发布/订阅模式)

1、概述 观察者模式又称为发布/订阅(Publish/Subscribe)模式 观察者设计模式涉及到两种角色:主题(Subject)和观察者(Observer) (1)Subject模块 Subjec模块有3个主要操作 addObserver()&#…

VUE $SET源码

转载于:https://www.cnblogs.com/smzd/p/11634255.html

Java实现消息队列服务

使用 JAVA 语言自己动手来写一个MQ (类似ActiveMQ,RabbitMQ) 主要角色 首先我们必须需要搞明白 MQ (消息队列) 中的三个基本角色 ProducerBrokerConsumer 整体架构如下所示 自定义协议 首先从上一篇中介绍了协议的相关信息,具体厂商的 MQ(消息队列) 需要遵循某种协议或者…