场景:
0、原始所有数据库均为access,为了优化速度,将容量占比最大的文章表升级为mssql数据库,并且迁移到了另一台服务器;
1、程序与mssql数据库不在同一内网;
2、连接一次约200-400ms,程序首页进行了6次连接,导致页面响应时间长达2.2-2.6s;
问题分析:
将程序页面复制到mssql服务器,通过ip连接自身数据库6次,响应时间仅为200-400ms。将程序页面复制到其他web服务器,响应时间仍为2s+。说明与服务器性能无关,主要为网络问题。
单次响应时间长达200-400ms,应为请求通过各网络节点+web服务器防火墙、安全组出/入+sql服务器防火墙、安全组出/入时,累计产生的延迟。同时,每次请求都会重复这些步骤,最终导致响应总时间长达2s+。
解决方案:
将首页需要连接的6个模块内容的数据,在后台数据提交阶段,就同时保存到同服务器的专用access表里(正则表达式也在此环节应用,首页直接读取结果,不用每次访问都执行一次。此优化也能提升1s)。该表,仅保存首页需要读取的数据字段及内容,如6个模块的标题、mssql数据库的id、添加时间、及部分过滤后的content。
由于仅保存小部分刚需内容,所以该表数据库很小,响应速度很快。且该表内数据,仅最新的几条是实际使用。其余过期数据为冗余数据,有必要时,可全部清楚进一步提升响应速度。
总结:
该解决方案虽有点怪异,但针对该特殊场景,仍具有一定价值。缺点是增加了程序的复杂程度。