容量规划
调校Tomcat在线服务器性能的另一重要部分就是容量规划(capacity planning)。无论调校多少配置文件与进行多少测试,如果没有符合网站预期流量大小的硬件与带宽,实际上也帮不了忙。
就本节的内容而言,容最规划的大概定义为:通过研究及(或)预测网站必须处理的总 网络流量,决定可接受的服务质量与寻找满足或超越服务器软件需求,来预测网站所需的计算机硬件、操作系统与带宽的活动。在这里所说的服务器软件包括Tomcat,以及在 Tomcat前端使用的笫三方Web服务器和负载均衡器。
如果在购买与部署生产服务器之前不进行任何容量规划,则将无法知道服务器硬件是否能处理网站负载。或者,更严重的是直到已经订购硬件、付款并部署应用程序之后,您 才认识到错误,而通常此时已经太晚因此无法做重大的改变。逋常您可以新增较大 的硬盘,或甚至购更多更好的服务器计算机,不过有时在一开始就购买及维护较少量的服务器计算机,会比较省钱。
网站流量愈大或每一客户端请求所产生的负载愈大,容量规划也愈重要,某些网站的流量高到只能侬靠服务器集群才能在合理的响应时间限制内处理所有的请求。相对地,流量较少的网站要找到能满足所有需求的硬件比较不成问题。投入更多或更大的硬件通常 可以解决问题,但是尤其是在髙流量的情况下,却可能因太花钱而无法做到。对于大多 数公司而言,硬件成本愈低(包括在初始阶段之后的后续维护),获利也愈高。另外一 个考虑因素是员工的创造力。举例来说,如果拥有较快的硬件可以提升开发者20%的效率,则可能值得订购更大/更快的硬件,当然这需视开发团队的大小而言定。
通常在系统升级的时候也会进行容量规划。在订购替代硬件之前,依据更新的需求、公共业务负载、软件蓝图等,来捜集关于公司需求的信息可能是不错的点子。
当进行容量规划时,至少有一两个常用的决定方法。笔者会介绍两种主要的类型:经验式与学术式(如企业容量规划)的方法。
经验式的容量规划
经验式的容量规划是一种轻量级的规划方式,它不一定要很精确,但已足够让公司免于完全不做容量规划的后果。这种方法符合以前的业界经验产生的容量与性能趋势。例如,对于网站在高峰时有多少输出流量,您可以做最佳的预测,然后将该数字加倍。该 数字则成为网站最新输出带宽的需求。接着您就可以购买及部署能处理该带宽需求的硬件了。大多数人都是实行这种容两规划法,因为它很快,而且不需要太多工夫或时间。
企业容量规划
企业容量规划的目的是要更精确,因此也需要更久的时间。这种方法是超高流量网站所必需的,而这些网站通常也会伴随着髙负载。像这样的详细的容量规划是必需的,以期 尽可能降低硬件与带宽的成本,同时仍提供公司保证或合同上必须维持的服务质量。通 常这会使用商业级的容量规划分析软件,以及反复的测试与模拟仿真。很少有公司会做 这种容量规划,而少数如此规划的公司都是庞大的企业,拥有足够的预算来支付(主要是因为这种彻底的规划最后都会获利)。
经验式容量规划与企业容量规划最大的差异是深度。经验式容量规划使用经验法则,因此比较像是经验预测,而企业容量规划是深度地研究需求与性能,其目标是尽可能产生最精确的数字。
Tomcat上的容量规划
若要对运行Tomcat的服务机器进行容量规划,您可以研究及规划下列的任何项目(这不是完整的淸单,而是一些常用的项目):
服务器计算机硬件
使用哪种计算机架构呢?网让需要多少部计算机呢?是一台大型主机吗?还是许多 台小型主机呢?每部计算机要用多少颗CPU呢?多大的RAM呢?硬盘要多大,I/O 要多快呢?后续的维护情形如何?切换至不同的JVM实现会如何影响硬件的需求 呢?
网络带宽
在高峰时刻会需要多少输人与输出的带宽呢? Web应用程序该如何修改以降低这些 需求呢?
服务器操作系统
哪种操作系统最适合服务网站的工作呢?各个操作系统可用的JVM实现有哪些?每 个实现如何利用操作系统呢?例如,JVM支持本地多线程吗?支持对称式多进程吗?如果JVM支持SMP,是否要考虑多处理器的服务器计算机硬件呢?哪种系统 让您的Web应用程序执行得更快、更可靠以及更便宜?是多台处理器的服务器计算 机,还是一部四颗CPU的服务器计算机呢?
以下是特别适用于Tomcat的各种容童规划的一般程序:
1.找出负载的特性。如果网站已经架设了好,而且在运行中,您可以测暈每秒钟的请求数,整理不同种类的请求,以及测量每神请求类型的资源使用情形。如果网站尚 未运行,则可以依经验预测请求的数量,并进行分段测试以决定资源的需求。
2.分析性能的趋势。您必须知道哪些请求会产生最多的负载量,以及与其他请求的比较情形。通过了解哪些请求会产生最多的负载量或使用最多的资源,您会知道需要最佳化的对象,以便对服务器计算机产生最佳的整体影响。例如,如果査询数据库的servlet需要花很多的时间才能送出响应,则也许将某些数据存入RAM的缓存区会 安全地提升响应速度。
3.决定可接受服务的最低需求,例如,可能希望让用户最多只等20秒钟,就要得到网 页的响应。这表示,甚至在负载的髙峰期,没有规定请求的总时间——从请求开始 到完成响应————可以超过20秒。这可能会包括任何所需的数据库査询以及文件系统 的访问,以完成应用程序中耗费最多资源的请求。可接受服务的最低需求由公司决定,而且毎个公司都可能会不同。其他类型的服务底限还包括服务器必须能提供的 每秒请求数。以及最低的同步并行的进程与用户数。
4.决定要使用何种基础体系的资源,并在分段的环境下测试。基础体系的资源包括计 算机硬件、带宽、操作系统的软件等至少订购一台与生产系统完全相同的服务器 机器,在部署及测试后,检査它是否能满足您的需求。当在测试Tomcat时,请确定 要尝试一个以上的JVM实现,以及尝试不同的内存大小设定值,与请求线程池的大小。
5. 如果第4歩可以符合您的服务需求,就可以订购并部署更多的相同的机器,以作为生产用的服务器计算机。否则,请重复第4步,直到满足服务需求为止。
请务必要用文档记录所做的工作,因为当某些人需要知道贵公司是如何求得答案时,这会是十分费时而且必须不断重复的过程。同时,因为测试是一种反复式的过程,用文档 记录每次反复测试的所有结果及产生这些结果的配置设置值,从而可以知道在调校时不再产生明显的正面结果。
一旦完成容量规划工作,就可以把您的网站调校成性能更佳的网站了,主要归功于进行了各种严谨的测试。只需为特殊用途的Tomcat使用适当的硬件、操作系统与JVM的组合,就应能获得显著的性能改进。