性能优化-Server优化

Server端在单台服务器上的优化,并没有多少技巧可言。

当然,这是在你充分了解如何写出优秀代码的前提下,如果你对这方面没有自信,建议先看看《XX性能优化》这类的书!

1. Server端的优化,排在第一位的一定是【缓存】

根据二八定律,数据库修改数据和查询数据的比例是2:8,在门户网站,这样的比率还要更低!

如果数据没有变化,理论上基于数据的无数次计算,结果一定是幂等的。

那么,是不是可以避免多次的重复运算?  答案就是缓存。

缓存的重要性用多少话语来描述都不过分。淘宝,京东这些可以处理上亿并发的平台,很大一部分都是依赖于后台强大的分布式缓存架构。

在处理缓存时,最要注意的是缓存的命中率。如果缓存的命中率过低,反而会拖累系统的性能,反过来讲,缓存的命中率过高,又会导致脏数据的产生。关于这部分我就不深入讲,感兴趣的话,可以个人研究。

关于缓存方面的框架,最NB的只能是Memcache。Memcache是一款key/value的NoSql数据库,为了提升性能,所有数据都放在内存中。由于Memcache和PHP集成的很好,国内淘宝,微博等这些使用PHP开发的平台都是基于Memcache搭建缓存框架的。

而Memcache由于需要单独部署,在一些小型系统中使用起来成本太高,很多其他的替代方案也是不错的选择。

比如在Java中,Ehcache的使用率要远远高于Memcache。

Ehcache不用独立安装,并且可以很好的和Spring,Hibernate这样的框架进行一键整合,并且也支持分布式部署。

相关的性能测试,Ehcache的跑分也并不比Memcache逊色。

Ehcache缺点是基于Web容器,部署分布式相当麻烦,同时也只支持Java平台。在数据持久化方面,需要写入硬盘,这是相当耗费性能的。这在类比淘宝的大平台中,部署分布式缓存还一定要部署一个Tomcat,听说淘宝有8000个服务器,也就是XXXX个tomcat,好TMD的壮观。

不过从另一方面来讲,在一些Java管理系统中,根本不需要分布式,而且买系统天然送JBoss,不用单独部署,这绝对是优点!

2. 数据库访问

目前很多成熟的ORM框架代理了系统中的数据库访问,大大方便了开发人员。但是正是由于ORM的高度封装性,在查询时会大大拖慢系统的性能。

ORM的大厂商Hibernate,也深知自己的弱点所在,在后期的版本中增加了Criteria,期望以Criteria来替代臃肿的查询,可是在易用性上一直为人所诟病,所以迟迟不能推广。

建议使用其他的查询框架替代Hibernate HQL和Criteria,并结合Ehcache来使用。

Java中比较出名QueryDSL,JOOQ都是不错的选择,使用它们,也会大大提高系统查询方面的灵活性。

3. 学会使用并发

并发在开发中,绝对属于高级的东西。相信很多开发人员都没有接触过。

Java6中提供了ExecutorService,Java7升级为Fork/join,Java8更是在Fork/join的基础上实现了并行Stream的概念。这证明在数据越来越庞大,硬件越NB的情况下,并发编程是大势所趋。

还有,普通的家用机现在都是4核CPU,8线程,不用并发,太浪费了吧?

给大家举一个我实际遇到的例子,来证明并发的好处。

我有一个客户,需要一次性导出不下于100张订单的PDF报告,平均每生成一个PDF的时间大约为4秒,在这种情况下,我无论如何也没脸面同客户解释,只导出100张订单,需要等待至少6分钟.....

之后我引入了并发来实现这个功能,测试时,100张订单,只需要6秒!!当我第一次看到这个效果,直接在办公室兴奋的嗷嗷叫!!!

在使用并发时,也可以使用相关的框架来简化开发。

Java 的Akka是非常不错的并发框架,在小型的项目中,也可以使用Guava提供的API,简单易用。

由于Server端都是强语言,成熟且易于控制,确实没有多少技巧可讲。

如上三点同样是粗放简单的,如果你有心,使用它们提升你的系统性能吧。

下一篇,将讲解数据库方面的优化,主要涉及索引,缓存,慢查询,分表,读写分离等,敬请期待。

如有您有兴趣,请关注我的微信公众号,谢谢。

时间: 2024-10-07 08:03:41

性能优化-Server优化的相关文章

tomcat性能优化Server——Connector

该元素可用于Tomcat 6.0.11以及更高版本. 允许您为一个Service的所有Connector配置一个共享线程池.在运行多个Connector的状况下,这样处理非常有用,而且每个Connector必须设置一个maxThread值,但不希望Tomcat实例并发使用的线程最大数永远与所有连接器maxThread数量的总和一样高. 这是因为如果这样处理,则需要占用太多的硬件资源.相反,您可以使用Executor元素配置一个共享线程池,而且所有的Connector都能共享这个线程池. 警告:为

SqlServer性能检测和优化工具使用详细

原文:SqlServer性能检测和优化工具使用详细 工具概要 如果你的数据库应用系统中,存在有大量表,视图,索引,触发器,函数,存储过程,sql语句等等,又性能低下,而苦逼的你又要对其优化,那么你该怎么办?哥教你,首先你要知道问题出在哪里?如果想知道问题出在哪里,并且找到他,咱们可以借助本文中要讲述的性能检测工具--sql server profiler(处在sql安装文件--性能工具--sql server profiler) 如果知道啦问题出现在哪里,如果你又是绝世高手,当然可以直中要害,写

SQL Server优化

虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决. 查询速度慢的原因很多,常见如下几种: 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) I/O吞吐量小,形成了瓶颈效应. 没有创建计算列导致查询不优化. 内存不足 网络速度慢 查询出的数据量过大(可以采用多次查询,其他的方法降低数据量) 锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷) sp_lock, sp_who, 活动的用户查看,原因是读写竞争资源. 返回了不必要的行和列 查

SQL Server优化器特性-隐式谓词

原文:SQL Server优化器特性-隐式谓词 我们都知道,一条SQL语句提交给优化器会产生相应的执行计划然后执行输出结果,但他的执行计划是如何产生的呢?这可能是关系型数据库最复杂的部分了.这里我为大家介绍一个有关SQL Server优化器的特性-隐式谓词,并简单介绍在此特性下如何根据场景控制优化器的行为. 在这里我通过一个简单的实例来给大家说明下. code CREATE TABLE T1 (A INT, B INT) CREATE TABLE T2 (A INT, B INT) set sh

Linux服务器性能评估与优化(一)

网络内容总结(感谢原创) 1.前言简介 一.影响Linux服务器性能的因素 1. 操作系统级 性能调优是找出系统瓶颈并消除这些瓶颈的过程. 很多系统管理员认为性能调优仅仅是调整一下内核的参数即可解决问题, 事实上情况并不是这样. 性能调优是实现操作系统的各个子系统之间的平衡性,这些子系统包括: ?       CPU ?       内存 ?       磁盘I/O带宽 ?       网络I/O带宽 子系统之间相互依存,任何一个子系统的负载过度都能导致其他子系统出现问题,例如: * 大量的 p

关于android性能,内存优化(转载)

原文地址:http://www.cnblogs.com/zyw-205520/archive/2013/02/17/2914190.html   转自(http://www.starming.com/index.php?action=plugin&v=wave&tpl=union&ac=viewgrouppost&gid=74&tid=20713&pg=1) 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都

SQL Server优化50法

查询速度慢的原因很多,常见如下几种:    1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)    2.I/O吞吐量小,形成了瓶颈效应.    3.没有创建计算列导致查询不优化.    4.内存不足    5.网络速度慢    6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)    7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)    8.sp_lock,sp_who,活动的用户查看,原因是读写竞争资源.    9.返回了不必要的行和列   

关于android性能,内存优化

随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要 求远远高于PC的桌面应用程序.以上理由,足以需要开发人员更加专心去实现和优化你的代码了.选择合适的算法和数据结构永远是开发人员最先应该考虑的事 情.同时,我们应该时刻牢记,写出高效代码的两条基本的原则:(1)不要做不必要的事:(2)不要分配不必要的内存. 我从去年开始接触Android开发,以下结合自己的一点项目经验,同时参考了Google的优化文档和网

mysql数据库性能优化 - 参数优化

Mysql Server优化                                                                                                                                 1.查看mysql server参数 show variables; / show variables like '参数名';   --mysql服务器配置信息 show status; / show global