跳转至

高性能

📌 CDN

内容分发网络,这里的内容主要指静态资源。

CDN的作用就是将静态资源分发至多个不同地方以实现就近访问,加快访问,减轻服务器负担;类似京东就近仓库发货。

全站加速,区别于CDN,既可加速静态资源又可加速动态资源,不同云服务商叫法不同。

📌 负载均衡

🚁 服务端负载均衡

包括软件、硬件。

硬件负载均衡,通过专门的硬件设备(比如F5、A10、Array)实现,好用但贵。

软件负载均衡通过软件实现,在工作中,通常使用Nginx做七层负载均衡,LVS(Linux Virtual Server)做四层负载均衡。

🔧 七层负载均衡

OSI模型第七层,也就是应用层,主要协议是HTTP。

核心是报文内容层面的负载均衡,执行第七层负载均衡的设备通常被称为反向代理服务器

常用的方案:DNS解析和反向代理。

DNS解析

用户请求域名的时候,DNS服务器采用轮询算法返回IP地址,实现轮询版负载均衡。

反向代理

Nginx,常用的反向代理服务器,隐藏了真实服务器IP地址。

客户端发送请求,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。

📌 消息队列

作用

  • 异步处理,如购票成功后发短信
  • 限流
  • 降低系统耦合
  • 实现分布式事务
  • 顺序保证
  • 延时/定时处理
  • 即时通讯
  • 数据流处理

带来的问题

  • 系统可用性降低
  • 系统复杂性提高
  • 一致性问题

🚁 如何测试消息队列

通过JMeter AMQP Publisher组件(需要安装插件),持续往测试环境队列发消息

1.看消息能否随着时间逐步被处理

2.检查资源:内存和磁盘空间是否居高不下(high watermark默认是40%)

Tip

rabbitmq-熔断隔离: 系统间通信时,防止故障传播,导致系统崩溃。

具体过程: 监控某个服务的请求失败率,达到一定阈值,触发熔断,阻断故障请求。属于处理消息堆积的一种方式。

🚁 Kafka对比传统消息队列(如RabbitMQ)

场景 Kafka RabbitMQ
典型场景 日志采集、实时数据分析、事件溯源 任务队列、微服务通信、事务性消息
优势场景 高吞吐量、数据持久化、流式计算集成 低延迟、复杂路由、企业级消息传递
劣势场景 低延迟敏感场景(如高频交易) 海量数据堆积、需长期存储的场景

参考资料:

JavaGuide-高性能