后端程序,并发是我们立项时就要考虑的问题。程序能支持多少负载,是你的代码能运行多久的一个重要标准。那么程序并发都涉及哪些内容,我们应该如何做呢。
这里我们先约定一个范围,大型的项目一般都是由多语言,多模块组成,这种程序都会用到集群,DNS,大型程序一般都由架构师去架构处理。我们先不考虑这些。作为码农我只说距离自己最近的。
高并发处理其实有几个方向:
1、服务器
2、数据库
3、代码
服务器:
主要涉及带宽,服务器性能,服务器连接数(Nginx,Apache,Node,Tomcat等等 )。
带宽:是硬件的,带宽多少这个是前端获取服务器资源数据的阀值,多少带宽单位时间内客户下载资源就这么多。如果你的下载资源过多,需要使用一些三方去进行分离存储信息。例如阿里云的oss。使用它不止节约了存储空间,还能减少服务器压力。因为你的数据获取不经过自己服务器。
服务器:不论是自己的还是云服务器或者空间,性能是计算量的一个重要指标。服务器性能越好,你的系统部署上去稳定性,和运行速度会越好。现在服务器还有各种型号,有计算型,实用性,存储型,他们都有不同的特点,适合的就好。
服务器连接数:服务器连接数是我们部署环境的一个配置,也叫并发。这个配置其实是一个不太重要的标注。没有特别的需求这个可以不做处理的。当然如果你的系统为秒杀而生,这个数值你不设置也不行啊。连接数是系统环境单位时间内能处理的链接数,同时三个人请求你的网站,这就是三个链接数。链接数一般是没有时间区间的,但是你可以先理解为一秒内的链接。
数据库:
数据库主要涉及数据结构,索引,锁,存储过程。数据结构:好的数据结构,不仅仅可以满足存储数据,还具有很高的扩展性。数据结构的建立一般有几个注意事项:
1、分离常驻数据,多变数据,减少数据查询。
2、减少表中字段数,多用附表。
3、避免关联信息和表主体在一起。
索引: 索引是数据表中至关重要的一个东西。对相应的数据查询建立索引会极大的提高查询效率。这个提升能直观的体现在你的代码运行中。所以遇到程序慢,先查索引。
优点
1.大大加快数据的检索速度;
2.创建唯一性索引,保证数据库表中每一行数据的唯一性;
3.加速表和表之间的连接;
4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
缺点
1.索引需要占物理空间。
2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。
锁: 悲观锁,其实也就是行锁和表锁,这个很好理解,表锁就是数据处理时,锁定整个表。其他执行无法进行,行锁是数据处理的时候锁单行,其他可以执行。表锁行锁各有优势,想深入了解的同学可以自己百度一下。锁一般是处理并发稍微多的请求的。为什么是稍微呢,因为这不是最好的方案。真正高并发是需要用,队列,缓存或者是NoSql存储的,更有甚者需要更加复杂的技术支持。
存储过程: 存储过程是个很好的技术,他可以将系统中固定的复杂的存储直接放到数据库运行。可以被系统直接调用。是复杂数据库处理提示效率的一个最优解。基本上对复杂数据处理能倍速提升。存储过程有很多分类,这里就不一样讲解了,有兴趣的同学可以自己查询一下。这个技术很成熟,网络上的知识很全。
代码:
代码主要从几个方面入手,一个是系统框架,代码块算法,缓存使用,数据查询次数。
系统框架: 这个一般很难修改,当系统开发完后系统框架能做的是使用框架内含的一些插件,对整个系统进行重构优化,更有甚者需要对框架进行直接更换。目前语言发展很快,新的技术也在产生。我们只要及时跟进自己使用框架就可以了。
代码块算法,缓存使用,数据查询次数: 这三个其实是一个东西。就是优化我们的代码。这个是优化方向。减少数据查询是为了减少链接数据库,数据检索的时间消耗。(有的时候还要减少无用代码的加载)。缓存使用,这个是很重要的。想减少数据查询,就必定使用缓存。缓存有数据缓存,查询结果缓存,文件缓存,等等很多种。适时的使用缓存能大大提高代码运行效率。同时也能让你的代码起飞,增加更高的并发。因为代码运行时间越短,系统并发越高。最后一个是算法。算法很重要,算法也不重要。算法重要是因为不用算法和使用算法代码运行是天差地别。算法不重要是算法用的点真的不是很常遇到。我们练习的算法例子在现实开发中很少会见到。就算有用到的,你只要一百度就能搞定。但是学习算法能提高自己的逻辑能力。会提高你对代码运行,自身代码能力。所以具体如何去看待算法,看你是属于哪个程序员阶段了。
代码优化是我们后端系统维护的一项工作。它是我们自身价值的体现。也是为我们之前的问题填坑。
以上就是我们提升系统并发的方法了,当然不是全部,但是对于绝大多数肯定是够用的。祝所有程序道路上的朋友们远离BUG。我是码农林中小鸟一个后端工作者。最近小鸟做了个拼多多砍价项目,欢迎大家关注公众号“淘小喵”查看项目内容和进度,小鸟会将完整的项目分享给大家。