高并发的小笔记
高并发分两种方向:流量跟事务;(负载均衡、分流、消息队列排队、降级、熔断)
在高并发场景下,处理流量和事务是两个关键方向,而负载均衡、分流、消息队列排队、降级、熔断这些技术手段能有效应对高并发带来的挑战。以下为你详细解释这些技术,并举例说明。
流量处理相关技术
负载均衡
- 原理:将大量的请求均匀地分配到多个服务器上进行处理,避免单个服务器因负载过高而崩溃,从而提高系统的整体性能和可用性。
- 示例:以电商网站为例,在“双十一”大促时,会有海量用户同时访问商品详情页。这时可以使用 Nginx 作为负载均衡器,将用户的请求根据一定的算法(如轮询、IP 哈希等)分发到多个后端的商品服务服务器上。比如轮询算法,会依次将请求分配给每一台服务器,让各服务器的负载相对均衡。
分流
- 原理:根据不同的规则将流量引导到不同的处理路径或服务器集群中,以减轻主要业务路径的压力。
- 示例:还是电商网站,对于一些静态资源(如商品图片、CSS、JavaScript 文件等)的请求,可以通过 CDN(内容分发网络)进行分流。CDN 会将这些静态资源缓存到离用户最近的节点上,用户请求时直接从这些节点获取资源,而不是都访问电商网站的主服务器,从而减轻主服务器的流量压力。
消息队列排队
- 原理:把大量的请求先放入消息队列中,按照先进先出的原则依次处理,起到缓冲的作用,避免瞬间的高流量冲垮系统。
- 示例:在火车票售票系统中,每到车票开售的时刻,会有大量用户同时发起购票请求。如果直接将这些请求发送到后端的票务处理系统,可能会导致系统崩溃。这时可以使用消息队列(如 RabbitMQ),将用户的购票请求先存入队列中,票务处理系统按照队列中的顺序依次处理请求,保证系统的稳定运行。
事务处理相关技术
降级
- 原理:当系统的资源(如 CPU、内存等)达到瓶颈或者出现故障时,为了保证核心业务的正常运行,暂时牺牲一些非核心业务的功能,将这些功能进行降级处理。
- 示例:在金融交易系统中,当系统面临高并发时,对于一些非核心的业务功能(如交易记录的实时统计分析)可以进行降级。比如将实时统计分析改为定时统计分析,这样可以减少系统的资源消耗,确保核心的交易业务能够正常进行。
熔断
- 原理:当某个服务出现问题(如响应时间过长、频繁出错等)时,为了防止故障的扩散,暂时切断对该服务的调用,避免整个系统受到影响。就像电路中的保险丝,当电流过大时会自动熔断,保护电器设备。
- 示例:在微服务架构中,一个电商系统由订单服务、商品服务、支付服务等多个微服务组成。如果支付服务出现了问题,频繁返回错误信息,这时可以使用熔断机制(如 Hystrix)。当错误率达到一定阈值时,系统会自动熔断对支付服务的调用,直接返回一个默认的错误信息给调用方,避免因为支付服务的问题影响到整个订单流程。等支付服务恢复正常后,再恢复对它的调用。
综上所述,这些技术手段在高并发场景下相互配合,从流量和事务两个方向保障系统的稳定运行和高效处理。
https:// s是指加密,需要上阿里申请ssl证书,配置到服务器,开启https
doubbo治理服务,注册服务,还有事务机制,跟spring cloud很像;
Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了服务治理的能力,能够帮助开发者更好地管理和维护分布式服务。下面详细介绍 Dubbo 服务治理的原理,并结合简单易懂的例子进行说明。
1. 服务治理概述
服务治理主要是为了解决分布式系统中服务的注册、发现、调用、容错、负载均衡等问题,确保服务的高可用性、高性能和可维护性。Dubbo 的服务治理主要依赖于其架构中的几个核心组件:服务提供者(Provider)、服务消费者(Consumer)、注册中心(Registry)和监控中心(Monitor)。
2. 核心组件及原理
服务提供者(Provider)
- 原理:服务提供者是提供具体服务的一方,它会将自己提供的服务信息(如服务接口、实现类、地址等)注册到注册中心。当有服务消费者发起调用请求时,服务提供者会根据请求信息执行相应的服务逻辑,并返回结果。
- 示例:假设我们有一个电商系统,其中有一个商品服务,负责提供商品信息的查询。商品服务就是服务提供者,它将自己的服务信息注册到注册中心。
// 商品服务接口
public interface ProductService {
    String getProductInfo(String productId);
}
// 商品服务实现类
public class ProductServiceImpl implements ProductService {
    @Override
    public String getProductInfo(String productId) {
        return "Product info for ID: " + productId;
    }
}
在 Dubbo 中,通过配置将该服务注册到注册中心:
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="product-service-provider" />
<!-- 使用 Zookeeper 作为注册中心 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!-- 暴露服务 -->
<dubbo:service interface="com.example.ProductService" ref="productService" />
<bean id="productService" class="com.example.ProductServiceImpl" />
服务消费者(Consumer)
- 原理:服务消费者是调用服务的一方,它会从注册中心获取服务提供者的信息(如地址、端口等),然后根据这些信息发起远程调用请求。在调用过程中,Dubbo 会根据配置的负载均衡策略选择合适的服务提供者。
- 示例:在电商系统中,订单服务需要调用商品服务来获取商品信息,订单服务就是服务消费者。
// 订单服务类
public class OrderService {
    // 注入商品服务
    @Reference
    private ProductService productService;
    public String createOrder(String productId) {
        String productInfo = productService.getProductInfo(productId);
        return "Order created with product info: " + productInfo;
    }
}
在 Dubbo 中,通过配置从注册中心获取服务:
<!-- 消费方应用信息,用于计算依赖关系 -->
<dubbo:application name="order-service-consumer" />
<!-- 使用 Zookeeper 作为注册中心 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!-- 引用远程服务 -->
<dubbo:reference interface="com.example.ProductService" id="productService" />
注册中心(Registry)
- 原理:注册中心是 Dubbo 服务治理的核心组件之一,它负责存储服务提供者的注册信息和服务消费者的订阅信息。服务提供者将自己的服务信息注册到注册中心,服务消费者从注册中心订阅所需的服务信息。当服务提供者的信息发生变化时,注册中心会及时通知订阅该服务的消费者。
- 示例:常用的注册中心有 Zookeeper、Nacos 等。以 Zookeeper 为例,商品服务提供者将自己的服务信息注册到 Zookeeper 的指定节点下,订单服务消费者从该节点获取商品服务的信息。
监控中心(Monitor)
- 原理:监控中心用于收集服务的调用统计信息,如调用次数、调用时间、成功率等。通过监控中心,开发者可以实时了解服务的运行状态,及时发现和解决问题。
- 示例:Dubbo 提供了默认的监控中心,服务提供者和消费者会将调用信息发送到监控中心。开发者可以通过监控中心的界面查看服务的调用情况,如某个时间段内商品服务的调用次数和平均响应时间。
3. 服务治理的其他功能
负载均衡
- 原理:当有多个服务提供者提供相同的服务时,Dubbo 会根据配置的负载均衡策略选择合适的服务提供者进行调用。常见的负载均衡策略有随机、轮询、最少活跃调用数等。
- 示例:假设商品服务有两个提供者,订单服务在调用商品服务时,Dubbo 会根据负载均衡策略选择其中一个提供者。如果使用轮询策略,订单服务会依次调用两个提供者的服务。
<!-- 配置负载均衡策略为轮询 -->
<dubbo:reference interface="com.example.ProductService" id="productService" loadbalance="roundrobin" />
容错机制
- 原理:在分布式系统中,服务调用可能会因为网络故障、服务提供者异常等原因失败。Dubbo 提供了多种容错机制,如失败重试、快速失败、失败安全等,以提高服务的可用性。
- 示例:如果使用失败重试机制,当订单服务调用商品服务失败时,Dubbo 会自动重试一定次数。
<!-- 配置失败重试次数为 2 次 -->
<dubbo:reference interface="com.example.ProductService" id="productService" retries="2" />
总结
Dubbo 的服务治理通过服务提供者、服务消费者、注册中心和监控中心等核心组件,实现了服务的注册、发现、调用、容错和负载均衡等功能。开发者可以根据具体的业务需求配置不同的策略,确保分布式服务的稳定运行。
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号