如何获得高并发的经验

来源:互联网 发布:网络集线器hub 编辑:程序博客网 时间:2024/06/05 15:07
作者:知乎用户
链接:https://www.zhihu.com/question/40609661/answer/87440849
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

其实高并发经验是考验一个程序员或者说是考验架构师功底和能力的时刻.

这里高并发只探讨网站。

为了高并发,要学习所有的,完整的前后端技术,才能做好高并发,否则你砸钱买解决方案吧,你面试总不能说我会砸钱吧 >,<

如何获得,这个问题太细节了,我也只是基于我以前的工作经验总结一番。。。。或者说只是粗浅的概括。

前端概括:

首先,前端的所有脚本,资源包括图片,通信时HTTP协议传输的内容,以及你对POST GET的把握,和网页间的跳转频率要有个清楚的认识。比如为什么切图要切在一张上面?为什么图片要清晰和小巧的?怎么压缩内容? 如何知道哪些JS的通信通知了后台?JS通信异步和同步的选择?对前端的总总情况把握的越好,对网站并发侧重的重灾区就越了解。因为前端最能看出病灶,但是病灶并不直接发生在前端,因为前段程序员忙的那些JS和CSS的技术和并发的关系实在不那么的大,可能前端技术中90%都和浏览器和客户端本身的素质有关。除了我上面提到的资源压缩,假如在前端所有的一切都已经做到很好的时候,有效的缓存那些服务端的累赘资源,减轻服务端压力,于后端服务器的消息通信就成了TOP 1的问题。

中间语言概括(比如.NET和JAVA写的那些东西):你不得不承认,再牛X的技术,到目前还只是个缓存和负载均衡,只是放在的位置不同而已。负载均衡就是一个分成多个,缓存就是复杂高并发逻辑下数据存放的频率和有效性以及可靠性之间的权衡。这里的方案最多,能说的也最多,负载均衡可以根据好的算法进行服务器之间的最优选择,这里一部分是钱的问题,而另一部分是远见的问题。因为负载均衡和缓存的搭配也比较头疼,所以此时缓存就要考虑范围问题,因为跨服务器缓存的方案开销过于庞大,所以单服务器缓存方案就对数据的范围可控性上做了严苛的要求。 我们在这里抛开业务层代码不管的情况下,单是缓存方案就有很多种。

多线程技术和数据锁的概括。一个好的高并发网站对于多线程技术的运用,几乎是决定方案成败的关键。每次看到微软开了一个类,上面总要写,这是线程安全的,和另一种无法提供有效的线程安全。这些在多线程编程的时候尤为重要,多线程编程的思路很多,建议如果是初学的话,多看看显卡和CPU方面的设计方法找灵感,因为在这两种硬件编程里,把多线程技术用的如火纯青,别老盯着现在的代码看了,有时候其他产品的设计方案可以借鉴和运用,纵然你在这个项目中的设计的再牛,框架再好也逃不过性能这把大刀。多开阔眼界是必要的,这里我的经验还在不停的补充中。举个例子吧,多线程有很多思路,比如线程等待后可以直接转接到结果上从而跳出中间处理的环节来节约时间,因为某些线程只为等一个结果,而结果刚刚算好在内存中,参数相同的情况下,变量一直,结果也一致,你要考虑时间性,有些随着时间是不一致的,这里就有点缓存的意思了,但是这里使用的是多线程编程的基本概念,JIT也是有这个原理在里面,你也可以用到你的业务中去! 思考非常重要,这种对代码的要求很高,这时候对数据锁,查看数据有效性,编排数据集合,等等一系列,总之因人而异吧。 每个人在这里的思路都是不一样的。

数据库。你不得不说,一个网站不得不等待数据库返回结果,而这里是最头疼的。拿我最熟悉的SQL SERVER来说,如何设计表? 用来简化中间层的逻辑?聚集索引怎么设计,怎么做索引覆盖从而达到只扫描索引就能拿到数据的目的,以及每次查询的逻辑读,物理读,表分区,文件组。RAID的选择。数据库事务的设计。这些的这些不是一两年就能有经验的。

最后谈谈测试。在设计系统的时候,必要的LOG设计是非常重要的。它能为还在测试阶段的产品打下良好的基础,微软有LOAD TEST但是要配置Controller和agent,而且并发KEY价格不菲。做LOAD TEST是有必要的,拿目前比较流行的MVC来说,微软可以提供兼容上下文的Page load test来完成一整个生命周期的CALL,所有的CALL C层都会有详细的记录,并且可以逐渐累加,对性能测试是尤为有好处的,当然其他语言也有类似的工具。

虽然我是90后,但是我用了10年的时间去理解以上的东西。希望能对你有点帮助。

最后希望不要误人子弟,这只是我自己的一些经验。有说错的地方望指正。

0 0