从AWS迁移至Azure后Java Tomcat应用性能显著下降问题咨询
跨云应用迁移性能问题解答
一、「跨云数据库传输导致性能下降」的推测是否成立
该推测完全成立,同时建议先做简单校验排除其他干扰因素:
- 跨公网的云厂商间访问本身延迟远高于同云内部访问:同区域AWS EC2访问同区域RDS的内部链路延迟通常低于1ms,而同一地理区域的AWS到Azure公网访问延迟普遍在20~50ms区间,跨区域的话延迟甚至会到数百ms。如果你的Java应用存在单业务请求多次调用数据库的逻辑,延迟会被成倍放大,最终表现为整体性能大幅下降。
- 先排查非链路原因确认问题:可以先验证两个点,一是对比原AWS EC2和现有Azure实例的JVM监控,看GC频率、CPU使用率是否有明显差异,排除Azure实例内存少1GB导致的堆内存不足、GC频繁问题;二是在Azure实例上用
mtr、tcping等工具测试RDS公网地址的延迟、丢包率,同时在应用侧统计数据库操作的平均耗时,和迁移前的数值做对比,就能直接实锤链路问题。
二、搭建VPN是否能优化跨云数据库访问性能
如果确认是跨云公网链路导致的性能问题,绝大多数场景下搭建VPN可以获得明显的性能提升:
- 公网跨云访问的路由路径不可控,会存在较高的抖动、丢包率,而IPsec VPN或云厂商官方的跨云私网互联方案,会走运营商的骨干专线链路,不仅延迟会比公网降低30%以上,丢包、抖动问题也会大幅缓解,对数据库这种对链路稳定性要求极高的业务,优化效果会非常明显。
- 注意两种场景下VPN优化有限:一是跨大地理区域的跨云部署,比如AWS业务在新加坡、Azure业务在国内,物理距离导致的基础延迟无法通过VPN消除,这种场景更建议将数据库也迁移到Azure同区域,或者在Azure侧部署数据库只读副本承担读请求;二是你的应用本身存在大量大体积数据的数据库传输,VPN的加密开销会占用一定的实例CPU资源,可能会抵消部分链路优化收益,这种场景可以选择无加密的私网互联方案,或者升级实例规格抵消加密开销。
- 额外优化建议:不管是否搭建VPN,都可以通过增加应用层本地缓存、调整业务逻辑合并数据库查询、优化数据库连接池配置等方式,减少跨云的数据库交互次数,进一步提升性能。
内容的提问来源于stack exchange,提问作者Josy Sclei
相关产品推荐
相关产品推荐

