何为高并发

在同时或者极短时间内,有大量的请求到达服务端,每个请求都需要服务端消耗资源去进行处理。同时开启的进程数、能同时运行的线程数、网络连接数、cpu、io、内存均为服务端资源,由于服务端资源是有限的,所以服务端能同时处理的请求也是有限的。则从这个角度看,高并发中我们需要去解决的问题就是:资源的有限性。本篇文章是从整体系统架构演进和设计上进行概述,并不是仅仅从java的并发编程谈起。

一个系统中客户端访问服务端的一个示例图,在真实的场景中,其实client不仅仅包括浏览器、移动端、pc端等,其实还有服务端之间通过api接口进行的调用,此时的调用者已不再是服务端,而是一个客户端。

高并发带来的问题

当请求短时间内大量出现,服务端的处理和响应会越来越慢,甚至会丢弃部分请求不予处理(某种情况下是合适的),更严重的可能会服务器崩溃。服务器的崩溃进而导致的就是经济损失已经客户的流失。同时高并发的情况下,也可能由于程序员编写的程序处理逻辑的健壮性问题,导致业务逻辑出错,进而数据异常。

高并发问题的处理层面

个人认为高并发处理问题,需要从以下几个方面进行考虑:web前端、web服务器、web应用、数据库等。由于个人能力有限,暂时只能考虑到这些,仅供参考。

处理的基本思路

当遇到高并发的问题的时候,从最基本的请求、响应模式考虑,即两个问题,怎么提高“客户端”的能力以及怎么提高“服务端”的能力。

从客户端(web浏览器和调用端)角度看

减少请求数量(缓存或者在前端能处理的情况下由前端进行处理,比如小数据量数据的分页和排序交给前端)

减少不必要资源的浪费,重复使用某些资源,比如连接池

从服务端角度

增加资源数量以及资源供给:网络带宽、高配置服务器、高性能web服务器、高性能数据库

请求分流

使用集群,应用架构的集群方式,通过lvs、nginx等进行多个集群间的分流

分布式系统架构,在一个系统内部,根据业务进行拆分多个服务,对于关键核心服务进行多份部署、高可用处理。

应用优化:优化业务逻辑、优化sql、读写分离等

基本手段

综合方案需要将手段按需要进行组合。不应盲目使用。

客户端层面

使用浏览器的缓存功能,减少访问服务器,js、css、图片

压缩文件传输,减少网络流量

异步请求,分批获取数据

静态服务器接受前端层面

动静分离,部分静态资源直接从nginx返回。

根据请求不同,分发请求到不同的后端服务:负载均衡或者业务拆分

对nginx再做负载均衡,比如lvs

使用cdn服务

varnish

动态内容缓存,如jsp

页面片段缓存

web服务器层面

使用最新的jvm,并进行配置优化

调整web服务器配置,比如调整内存数量、线程数量

后端服务器负载均衡。

服务器分类,提供专门的图片、文件、视频

web应用层面

动态内容静态化

java开发优化,合理并正确的使用并发编程模型

优化业务逻辑

合理高效利用缓存

优化访问数据库的sql

使用内存数据库

避免远程调用和大量io

合理规划事务等较为消耗资源的操作

合理使用异步处理

减少实时计算

数据库层面

合理选择数据库的引擎

进行配置优化

合理的数据库设计

分库、分表

合理使用nosql,不需要强事务的数据,存储到nosql中

原则:分而治之(外功)、提高单个处理的速度(内功)。外功是最容易提高的,内功是需要实打实的能力。

java vanish 缓存_高并发基础、思路以及普遍的处理方式相关推荐

  1. java currenttimemillis 效率_高并发场景下System.currentTimeMillis()的性能问题的优化

    前言 System.currentTimeMillis()的调用比new一个普通对象要耗时的多(具体耗时高出多少我也不知道,不过听说在100倍左右),然而该方法又是一个常用方法,有时不得不使用,比如生 ...

  2. java设计模式并发_[高并发Java 七] 并发设计模式

    [高并发Java 七] 并发设计模式 [高并发Java 七] 并发设计模式 为什么80%的码农都做不了架构师?>>> 在软件工程中,设计模式(design pattern)是对软件设 ...

  3. 高并发基础之Java并发包

    转自:https://my.oschina.net/hosee/blog/607677 其他资料: https://my.oschina.net/zhupanxin/blog/269037 摘要: 本 ...

  4. .Net高并发解决思路(转)

    .Net高并发解决思路 2018年10月21日 14:19:14 赵东小生 阅读数:736 高并发 高并发一直是网站上线后会遇到的一个严峻的考验,渡过了一切都好,渡不过就是宕机. 在电商时代如此发达的 ...

  5. Java开发大型互联网高并发架构实战之原理概念分析

    JAVA大飞哥 2019-06-16 21:07:08 引言 高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11.双12,就会产生高并发.又如贴吧的爆吧,就是恶意的高并发请求, ...

  6. Java多线程学习处理高并发问题

    在程序的应用程序中,用户或请求的数量达到一定数量,并且无法避免并发请求.由于对接口的每次调用都必须在返回时终止,因此,如果接口的业务相对复杂,则可能会有多个用户.调用接口时,该用户将冻结. 以下内容将 ...

  7. .Net高并发解决思路【转载】

    文本为转载文章 首先在windows上安装好Redis,RabbitMQ Redis-cli使用示例 ModelContext.cs代码: public class ModelContext : Db ...

  8. 队列处理高并发_高并发场景下缓存处理的一些思路

    在实际的开发当中,我们经常需要进行磁盘数据的读取和搜索,因此经常会有出现从数据库读取数据的场景出现. 但是当数据访问量次数增大的时候,过多的磁盘读取可能会最终成为整个系统的性能瓶颈,甚至是压垮整个数据 ...

  9. html访问java接口出现缓存_高可用架构设计(3) -电商商品详情页缓存背景及框架说明...

    Github 0 导读 我们这个教程,基于hystrix,如何来构建高可用的分布式系统的架构,项目实战 模拟真实业务的这么一个小型的项目,来全程贯穿,用这个项目中的业务场景去一个一个的讲解hystri ...

最新文章

  1. HTML的标签描述9
  2. 死锁和活锁有什么区别?
  3. Ajax与WebGIS
  4. git linux 登陆_Git安装及基础命令
  5. windows下面sublime无法粘贴复制的问题解决(转)
  6. IIS 错误代码分析手册
  7. 无限踩坑系列(8)--猿界神猿
  8. ASP.NET MVC 过滤器(五)
  9. java实现所有括号组合的遍历_括号正确嵌套问题的实现(Java)
  10. matlab 3.BPF封装 巴特沃斯带通滤波器
  11. 童诗白先生诞辰100周年纪念会暨“天立-童诗白中国自动化教育奖”启动仪式
  12. 安鸾渗透实战平台--综合渗透--企业网站渗透流程
  13. pytorch搭建分类网络并进行训练和测试
  14. ArcPy以表格显示分区统计(ZonalStatisticsAsTable)
  15. 系统集成项目管理工程师章节重点第一章
  16. go chan 类型用法
  17. 程序员学习资料整理(1)
  18. Hexo Icarus配置和美化升级
  19. Python全栈开发【基础-09】深浅拷贝+while循环
  20. Mac和Windows哪个好 ?windows和mac对比介绍

热门文章

  1. 如何做到大容量硬盘对拷
  2. 小鸟云管理终端(VNC连接)常见问题
  3. 030 | 广西趣海有限责任公司创业计划书 | 大学生创新训练项目申请书 | 极致技术工厂
  4. python手机app开发_在手机上用python开发APP
  5. 主动变被动9个例句_初中英语,被动语态的特殊用法考点总结
  6. 美图商业化2.0:探寻多元增长曲线
  7. 一念起,万水千山;一念灭,沧海桑田。
  8. 经典算法研究系列:图像特征提取与匹配之SIFT算法
  9. javascript中的instance和typeof
  10. 这些喜闻乐见的Java面试知识点,你都掌握了吗?