教你如何让自己的商城扛得住高并发而不崩溃
一、什么是商城高并发?
高并发(High Concurrency)是系统运行过程中遇到的一种“短时间内大量操作请求”的情况,主要发生在web系统中通过大量访问收到大量请求时(例如12306的抢票情况;双十一活动)。这种情况的发生会导致系统在此期间执行大量的操作,比如请求资源、数据库操作等。
高并发也是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。 高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。
响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。
吞吐量:单位时间内处理的请求数量。
QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。
并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。
二、CRMEBpro商城系统是如何提高并发率的呢?
1.分布式缓存:redis、memcached等,结合CDN解决图片文件的访问等。
2.消息队列中间件:activeMQ等。,可以解决大量消息的异步处理能力。
3.应用拆分:将一个项目拆分成多个项目部署,用dubbo解决多个项目之间的通信。
4.数据库垂直拆分和水平拆分(子数据库和子表)等。
5.将数据库的读写分开,解决大数据的查询问题。
6.也可以用nosql,比如mongoDB结合mysql。
7.还需要建立大数据接入情况下的服务降级和限流机制。
8.采用swoole架构,多线程Reactor+多进程Worker,因为reactor基于epoll,所以每个reactor可以处理无数个连接请求。
9.增强单机硬件性能(优先):例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G。
三、高并发商城的优势和好处
1、速度优势:
多处理器:多处理器上的并发无疑会让程序运行的更快。
单处理器:如果是单处理器的机器,那么并发编程和顺序编程相比可能没有什么变化。但是,如果其中一个任务可能被阻塞,即使是单处理器,使用并发编程也会带来很大的好处,这样当一个任务被阻塞时,其他任务可以继续运行。
反应灵敏的用户界面:单处理器上性能改进的最典型的例子是“事件驱动编程”,例如创建一个带有按钮的响应性用户界面。如果我们不使用并发编程,那么我们需要在我们编写的每个代码段中检测用户输入。如果我们使用并发编程,我们只需要重启一个线程来监听用户输入。
并发实现:实现并发最直接的方式是在操作系统层面,使用进程,一个自包含的程序,使用自己的地址空间。操作系统会将进程相互隔离,所以对进程编程相对容易,不需要考虑共享资源的同步问题。但是在Java的并发编程中,由于线程共享内存或IO等相同的资源,所以在Java多线程编程中要考虑共享资源的同步问题。
进程和Java线程之间的选择:进程的确是一种实现并发的方式,butunfortunately there are generally quantity and overhead limitations toprocesses that prevent their applicability across the concurrency spectrum.
2、设计上的优势:
一般来说,线程使得你能够创建更加松耦合的设计。
单处理器:尽管单处理器上面的并发编程在同一时刻处理器仍然只能做一件事情,但是带来一个组织上面的重要优势:就是你的设计(design)会极大地简化。比如仿真。
仿真举例:如果没有并发,仿真将变得非常困难。 一般来说仿真涉及到多个交互元素,其中每一个都有“自己的想法”,尽管从程序员的角度来看每一个仿真元素都是被同一个处理器所驱动,但是设计上来看,每一个仿真元素都假装有自己的处理器以及运行独立的任务。
总结:
我们使用redis,消息队列,读写分离,swoole架构,集群部署,提高服务器配置等就能提高我们商城的并发量,支持了高并发,我们就可以开展各种商城活动不再担心因为用户量大而导致的服务器瘫痪造成的损失。如果商城不支持高并发,在秒杀等货送的时候可能将库存秒杀成负数,服务器内存爆满和瘫痪等问题。CRMEB PRO商城完美解决了这些问题。