并发,在操作系统中,指的是几个程序在启动和运行之间的一段时间内,并且这些程序都运行在同一个处理器上,但是在任何时间点只有一个程序在运行在处理器上。————出处《百科》顾名思义,高并发是指系统在指定时间内可以同时处理大量的请求(连接数)。那么如何衡量高并发呢?高并发指标响应时间:系统响应请求的时间,即一个http请求返回的时间;吞吐量:单位时间内处理的请求数;QPS(TPS):每秒可以处理的请求或交易的数量;并发用户数:同时承载正常使用系统功能的用户数,即同时使用系统且系统仍能正常运行的用户数;根据以上指标,可以看出提高并发能力必须解决以下问题:如何提高并发连接数?这么多连接怎么处理业务?如何提高应用服务器的处理水平?如何利用微服务架构提升高并发逻辑?别担心,我们有这么多问题需要分析和解决!1)如何增加并发连接数?如下图所示,常规的单网络连接模型只能有一个连接对应一个线程,压力集中在内存上,导致内存开销非常大,必须支持的连接数是有限的!(直接挂断)单网连接模型没错。业务写得再好,也不如高性能的服务器。这个锅不一定要开发商背!!!服务器的连接入口那么大(比如Tomcat只有几千个连接),那么处理能力就只限于几千。如何解决?选择合适的网络IO模型或者selector,采用线程轮询或者事件触发的方式,支持上万甚至更多的连接,如果再结合nginx进行负载就更完美了。2)那么多连接的业务如何处理?我们都知道nginx只有反向代理和负载均衡的功能,并不能处理具体的业务逻辑,也不能作为应用服务器使用。比如webSphere、tomcat、jetty等,但是我们可以使用nginx将接收到的大量连接以均衡的方式(polling、weight、hash)分发到不同的应用服务器进行业务处理!nginx负载3)应用服务器的处理水平如何提高?要想提高应用服务器的处理水平,就必须知道我们的应用服务器的瓶颈在哪里。一般有两个:数据库压力:数据库是支撑产品业务的核心模块,系统高并发的主要压力也来自于数据库。处理方式如下:数据库本身:建立有效索引、读写分离、双主互备、分库分表(sharding-jdbc等)等策略,提高数据库处理能力,减少压力!结合内存数据库:如redid、memcached等,根据业务需要,缓存一些数据字典、枚举变量、经常使用的数据,减少数据库访问次数,提高数据库处理能力。web集群架构图如上web集群架构图所示:nginx用于加载多个应用服务器;redid/memcached用于业务缓存;再加上数据库集群,就形成了经典的web高并发集群架构。代码中的业务逻辑:可以参考阿里巴巴java开发手册中的开发规范。一般来说,少创建线程,少创建对象,少加锁,防止死锁,少创建线程,注意内存回收等策略来提高代码性能。在开发中可以采用前后端分离的架构模式,通过动静分离、松耦合等方式提高前后端处理能力。4)如何利用微服务架构提升高并发逻辑?我们来看看这张非常流行的微服务架构图:微服务架构图主要包括11个核心组件,分别是:核心支撑组件服务网关Zuul服务注册发现Eureka+Ribbon服务配置中心Apollo认证授权中心SpringSecurityOAuth服务框架SpringMVC/Boot监控反馈组件数据总线Kafka日志监控ELK调用链监控CATMetrics监控KairosDB健康检查报警ZMon限流熔断和流聚合Hystrix/Turbine以上总结除了解决高并发服务器的逻辑处理瓶颈,网络还要考虑因素,比如使用CDN加速,将不同地点的请求分发到不同的服务集群,避免网络对速度的影响!范围内尽量拆分。拆分后类似的服务可以通过水平扩展实现整体的高性能和高并发。同时,将比较脆弱的资源放在链接的末尾。每次访问的资源消耗。服务之间直接restful模型使用http调用,或者redis、kafka等消息中间件进行通信。单个服务直接使用nginx作为负载集群,前后端分离、数据库分库分表等一套完整的分布式服务体系前后端分离
