稳定高并发高性能程序设计原则简单总结

稳定性

稳定性是第一前提,如系统崩溃恢复容灾备份这些,主要是一些数据保护的机制,还有就是程序参数的校验、异常的处理、事务的回滚、程序边界的设计(合理的边界划分可以避免服务的连锁崩溃)、对账机制等,这些都是日常生活中常用的一些手段在计算机领域的体现,更详细的设计就不深入的分析了。

高并发

通过多年来对操作系统的研究,以及结合多年来各种语言的编程经验来说,高性能的程序的开发其实都是有规可循的。因为高性能的程序基本上都会面临相似的问题:如何提高并发,如何降低时间复杂度(但是并不是一味的降低,需要在空间复杂度之间做一个平衡)。

如何提高并发:在目前的大多数程序中或多或少的都会遇到并发的问题,如何设计高效的并发非常的重要,从我个人的经验来说,当遇到一个会存在并发的业务场景,我会首先整理业务场景,并根据业务场景画出简单的数据流图,根据数据流图找出相应的会并发访问修改的数据,缩小加锁的粒度(只对需要并发访问的数据进行加锁),。

然后分析数据的性质是否可以局部的并发,这种情况下就可以使用分段锁(再次减小加锁的粒度,一个比较出名的例子就是mysql的表锁、行锁机制)。

最后再分析数据的访问性质,是读多写少(大部分都是这种情况)、读少写多(日志)、还是读写频率差不多,不同的业务情况使用不同的锁,比如针对读多写少的业务来说,为了提高读的并发性可以使用读写锁;针对并发粒度较小,且并发操作的耗时很短的情况,操作系统又提出了CAS操作(乐观锁),这种操作避免了上锁和释放锁耗时的过程,进一步提高了并发性,但是只是针对特定的场景才能达到想要的性能。

当单台并发达到上限之后,就是分布式系统粉墨登场了,虽然分布式系统数据一致性会有一定的耗时,但是分布式系统的并发却有了显著的提高,一致性所带来的耗时/并发数带来的平均延迟并不大,所以能很好的满足系统的需求。

高性能

高性能的设计主要分为两个层面,一个层面是操作系统层面的,另外一个层面是业务层。

操作系统层面:尽量使用操作系统和处理器自身的高性能的指令或者是运算方式,最简单的例子是位运算,针对一些特殊的算法如果能使用位运算实现,那么尽量使用位运算实现(这在很多算法面试题中都会考的,因为位运算在很多场景都有特别切合实际的使用),还有就是合理高效的使用操作系统自身的API,如DMA之类的机制,以及有效的利用缓存之类的机制。

业务层面来说:首先需要为数据的存储设计合适的数据结构,这个也需要在空间利用率和访问复杂度之间做权衡;然后为业务中需要计算的场景设计高效的算法,算法的抽象是一个比较难的事情,算法设计需要在时间复杂度和空间复杂度中做权衡,还有就是针对算法的特性进行优化,可以参考算法设计,如果算法具有分治、动态规划这些算法的特性,那么此类算法可以采用并发机制提高算法的性能(算法设计很复杂,算法本身涉及到的很多高等数学的知识,还有就是算法的实现是否更加符合计算机的运行机制,建议多看看ACM算法设计相关书籍)

你可能感兴趣的:(高并发,高性能,设计原则)