系统高性能

总的来说,系统的设计是否合理,比局部代码问题,对性能的影响更大。

例如,程序设计成频繁读写磁盘中的数据,肯定比先把数据一次性加载到内存中再读写,在合适的时候再写入更新到磁盘的设计,性能要差很多。

使用服务器集群、多线程多进程的架构,肯定比使用单服务器、单线程单进程的架构,性能要差。

服务端使用异步通信的设计,肯定比同步通信要好。

通信消息的设计,消息体的长度设计为变长,肯定要比设计成定长,性能更好。

使用资源池设计,肯定是比频繁创建/销毁资源要好。

对于频繁随机删除的操作,选择list比vector性能要好。

不同的系统,高性能的指标是不一样的。

对于数据流处理系统,主要指每秒处理的流量(bps)、资源占用率。

对于网站,高性能包括响应时间、支持的并发数、吞吐量 等。

对于存储系统,主要包括iops、带宽。

数据流处理系统,主要注意要将数据尽量放在内存中处理,写磁盘时采用带缓存的API,采用合理的数据结构和算法、不要频繁的创建/释放资源(可以的话就一直持有打开的资源)、等等。

对于网站,可分为web前端优化、应用服务端优化、存储优化。

web前端优化:浏览器优化、运用CDN、使用反向代理等等。

服务端优化:缓存、异步、负载均衡/集群、代码优化

缓存是优化第一定律。它本质是一个hash表,将数据以key-value方式存储在内存的hash表中。 客户端先从缓存中查询数据,如果没有则去数据库查找,返回结果并更新到缓存中。一般采用LRU(最近最久未用算法)更新缓存中数据,有可能会出现数据不一致的情况,但如果业务要求不高那也可以接受。也可以采用主动通知更新缓存数据,但这样的

设计会带来较大开销。它适用于读写比很高、较少变化的数据,频繁修改的数据并不适合放在缓存。分布式缓存架构分为2种,一是以jboss cache为代表的需要同步更新的缓存,一是以memcached为代表的互不通信缓存。 jboss cache需同步更新,当集群规模较大时,更新代价惊人,所以一般用在较小规模的、企业应用系统中。 memcached不需互相通信,所以理论上可无限扩展。

代码优化:多线程/多进程,资源池,算法数据结构 等等。 多线程中,采用无状态对象、多使用局部变量、并发访问资源加锁等等。

猜你喜欢

转载自blog.csdn.net/zhaoyuyuan88/article/details/81166270