最近做了一个基于中间件业务的性能优化,想来还是感慨不少,优化仍在进行中,现在是在做最后的确认阶段。

整个系统架构如下所示,整体对外服务访问是使用LVS+keepalived的方式实现的。

中间件层主要是做数据访问路由,使用MyCAT实现。

而数据节点层是我们常说的数据库实例。

基于中间件的负载均衡方案_经验分享

目前存在的问题是我们需要对标线上业务的性能指标,目前的性能指标初步定为查询为1.9ms,写入为7ms,而我们明确的指标查询在1ms以下,而数据写入在5ms以内。

面对这种情况,我们讨论了很多种可能的改进方案。 

比如方案1:

基于中间件的负载均衡方案_经验分享_02

这种方案在应用端切换过来之后,性能不降反升,而且表现很不稳定,这是毫秒级的要求,和单纯的可用是两码事。

所以在周末跑了两天这些对比测试之后,发现这个问题单单通过直连的方式难以解决。

方案2:基于DNS的方式来实现负载均衡。 

基于中间件的负载均衡方案_经验分享_03

这种方案看起来少了一层,可以直接通过域名的方式来进行处理。不过这一层限于环境配置还没有正式开始,而且consul的域名服务也难以保证性能和可用率在毫秒级完全可控。所以这需要打一个大大的问号。

按照刚才测试的情况,果断添加了一个中间件,这个时候效果好了很多。

基于中间件的负载均衡方案_经验分享_04

 

按照这个指标情况,是能够满足线上的性能压力的,而对于这个部分的测试和重构依然会进行,尝试找到一个更合适的方案。