分布式学习笔记

什么是分布式:

纵向:增加cpu的能力,或者加内存
横向:将本来一台计算机的压力分给多台计算机,从而可以平均分布io,同时提升响应速度
  • >请大家稍安勿躁,由于工作原因更新缓慢<

一、分布式系统

  • 目前国内主流分布式框架有Dubbo和SpringCloud。
  • 首先看Dubbo:

1、dubbo的工作原理

  • Dubbo是一个高性能、轻量级的RPC框架,主要用于构建大规模的分布式服务,提供了丰富的功能,如负载均衡、服务治理、容错、流量控制等。其工作原理如下:
  1. 服务提供者启动时,会向注册中心注册自己提供的服务,并启动服务容器。

  2. 服务消费者在启动时,会向注册中心订阅自己所需的服务。注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

  3. 服务消费者从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用。如果调用失败,再选另一台调用。服务消费者和提供者,在内存中累计调用次数和调用时间,并定时每分钟发送一次统计数据到监控中心。

  4. 服务提供者在启动时,会将自己提供的服务注册到注册中心,并保持与注册中心的长连接。服务消费者在调用服务时,从注册中心获取服务提供者的地址列表,并根据负载均衡算法选择一台提供者进行调用。如果调用失败,会重新选择另一台提供者进行调用。服务提供者和消费者,在内存中累计调用次数和调用时间,并定时每分钟发送一次统计数据到监控中心。

  • 总的来说,Dubbo通过注册中心实现服务的动态发现和负载均衡,提高了服务的可靠性和性能,并简化了分布式系统的开发和维护。

2、dubbo支持的序列化协议

  1. Dubbo支持多种序列化协议,其中包括Hessian2、Java二进制序列化、JSON、SOAP文本序列化等。在选择序列化协议时,需要考虑序列化和反序列化的类型、性能、可靠性、安全性等因素。
  2. Hessian2是一种高性能的二进制序列化协议,适用于大规模的分布式服务。在序列化过程中,Hessian2会对数据进行高效的压缩和加密,以减少网络传输的数据量,提高数据传输的效率。在反序列化过程中,Hessian2会自动进行数据解压缩和解密,以还原原始数据。
  3. Java二进制序列化是一种常见的序列化协议,它将对象序列化为二进制数据,以便在网络上传输。在序列化过程中,Java二进制序列化会将对象的内部状态全部转化为二进制格式,并生成一个结构化的数据字符串,以便在网络上传输。在反序列化过程中,Java二进制序列化会自动将数据反序列化为对象的内部状态。
  4. JSON是一种轻量级的序列化协议,它将数据转化为一组字符串,以便在网络上传输。在序列化过程中,JSON不会将数据的类型信息序列化,而是仅将数据的字符串表示序列化。在反序列化过程中,JSON会自动将数据反序列化为对象的字符串表示。
  5. SOAP是一种基于HTTP的协议,它将数据转化为一组XML格式,以便在网络上传输。在序列化过程中,SOAP不会将数据的类型信息序列化,而是仅将数据的XML表示序列化。在反序列化过程中,SOAP会自动将数据反序列化为对象的XML表示。
  6. 在选择序列化协议时,需要根据实际需求和场景,选择性能、可靠性、安全性等方面表现较好的协议。同时,也可以根据具体的业务场景,选择更适合的序列化协议进行开发。

3、dubbo的负载均衡和高可用策略,动态代理策略

  1. Dubbo是一个高性能、轻量级的RPC框架,主要用于构建大规模的分布式服务,提供了丰富的功能,如负载均衡、服务治理、容错、流量控制等。在分布式系统中,负载均衡和高可用性是非常重要的,因为它们能够提高系统的可靠性和性能。
  2. Dubbo支持多种负载均衡策略,包括随机负载均衡、轮询负载均衡、一致性哈希负载均衡等。随机负载均衡是一种基于随机选择服务提供者的策略,它会随机选择一个服务提供者来响应请求。轮询负载均衡是一种基于轮询的策略,它会轮询指定的服务提供者,并选择一个满足条件的服务提供者来响应请求。一致性哈希负载均衡是一种基于哈希表的策略,它会将请求哈希到一个哈希表中,并从哈希表中选择一个服务提供者来响应请求。
  3. Dubbo还支持多种高可用策略,包括最小活跃数、失败重试、限流等。最小活跃数策略是一种只保留最小活跃数量服务提供者的策略,当活跃数达到最小值后,新的请求将被重新选择。失败重试策略是一种在服务提供者调用失败时重新尝试的策略,失败次数达到一定条件后,将放弃这个请求。限流策略是一种限制请求速率的策略,它会限制每个服务提供者的请求速率,以防止某个服务提供者承受过大的负载。
  4. 此外,Dubbo还支持动态代理策略,它可以在运行时动态地选择一个代理对象来代理调用请求。动态代理策略可以在运行时动态地切换代理对象,以提高系统的性能和灵活性。
  5. 总的来说,Dubbo支持多种负载均衡策略和高可用策略,以提高分布式系统的可靠性和性能。同时,它还支持动态代理策略,以提高系统的灵活性和性能。在实际使用中,可以根据具体的需求和场景,选择合适的负载均衡策略和高可用策略来优化系统的性能和可靠性。

4、dubbo的SPI思想

  1. 在Dubbo中,SPI思想主要体现在以下几个方面:
  2. SPI规范:Dubbo框架遵循一定的SPI规范,服务提供者需要在META-INF/services/目录下以接口全名称作为文件名,文件里面写上具体的实现类名称。这样,框架就可以根据接口全名称自动找到并加载对应的实现类。
  3. 动态代理:Dubbo支持动态代理,可以在运行时动态地选择一个代理对象来代理调用请求。通过代理对象,框架可以动态地将请求转发给不同的服务提供者,从而实现负载均衡和高可用性。
  4. SPI注解:在接口上使用@SPI(Service ProviderInterface)注解来指定key,配置文件中按照properties格式配置(key=value的格式),通过SPI指定的key来锁定实现类的路径。这样,框架就可以根据注解自动加载指定的实现类。
  5. SPI服务:Dubbo框架提供了一些内置的SPI服务,如Protocol、Invoker、Invoker.Custom、Filter等,这些服务可以帮助框架更好地实现服务的发现和加载。
  6. 通过SPI思想,Dubbo可以更好地适应不同的业务需求,并且可以减少代码的耦合性。框架可以根据接口全名称自动找到并加载对应的实现类,同时支持动态代理和SPI服务,从而实现更好的服务发现和加载机制。

5、如何基于dubbo进行服务治理、服务降级、失败重试以及超时重试

  1. 服务治理:
    在Dubbo中,服务治理主要是通过注册中心实现的。可以通过配置注册中心来实现服务的发现、注册、降级、限流等功能。例如,可以实现服务的负载均衡、故障转移、超时重试等功能。
  2. 服务降级:
    在服务治理中,可以通过限流等方式来降低服务的性能,以保证系统的稳定性和安全性。当服务出现故障时,可以通过降级机制将服务的性能降低,以保证系统的可用性。
  3. 失败重试:
    在Dubbo中,可以通过重试机制来实现失败重试。当服务调用失败时,可以通过重试机制将调用重新发送给服务提供者,直到成功为止。可以配置重试次数、重试间隔、重试策略等参数。
  4. 超时重试:
    当服务调用超时时,可以通过超时重试机制将调用重新发送给服务提供者,直到成功为止。可以配置超时时间、超时重试次数、重试策略等参数。

总的来说,Dubbo支持多种负载均衡策略和高可用策略,以提高分布式系统的可靠性和性能。同时,它还支持动态代理和SPI服务,以提高系统的灵活性和性能。在实际使用中,可以根据具体的需求和场景,选择合适的负载均衡策略和高可用策略来优化系统的性能和可靠性。

6、dubbo服务接口请求的顺序性如何保证

  1. 一致性哈希负载均衡策略:使用一致性哈希算法,将请求哈希到一个哈希表中,并从哈希表中选择一个服务提供者来响应请求。这样,能够保证请求的顺序性,即按照顺序将请求分发到不同的服务提供者上。
  2. 分布式锁策略:使用分布式锁机制,保证同一时间只有一个请求被处理。可以在服务提供者和消费者之间设置锁,确保请求的顺序性。但是,这种方法会影响系统的性能,因此应该谨慎使用。
  3. 负载均衡策略:在 Dubbo
    中,可以使用随机负载均衡、轮询负载均衡、一致性哈希负载均衡等负载均衡策略,来保证请求的顺序性。这些策略可以根据实际业务需求进行选择,以达到最佳的性能和可靠性。
  4. 总的来说,要保证 Dubbo 服务接口请求的顺序性,可以采用一致性哈希负载均衡策略、分布式锁策略或负载均衡策略等方法,来实现。

7、dubbo服务接口的幂等性如何设计(比如不能重复扣款、不能重复生成订单、不能重复创建卡号)使用一致性哈希算法:使用一致性哈希算法,将请求哈希到一个哈希表中,并从哈希表中选择一个服务提供者来响应请求。这样,能够保证请求的幂等性,即请求的结果是唯一的,不会重复。

  1. 使用分布式锁策略:使用分布式锁机制,保证同一时间只有一个请求被处理。可以在服务提供者和消费者之间设置锁,确保请求的幂等性。但是,这种方法会影响系统的性能,因此应该谨慎使用。
  2. 使用幂等性的服务治理:在 Dubbo
    中,可以使用幂等性的服务治理,例如使用基于策略的负载均衡、限流等,来保证请求的幂等性。这些策略可以根据实际业务需求进行选择,以达到最佳的性能和可靠性。
  3. 总的来说,要设计 Dubbo
    服务接口的幂等性,可以采用一致性哈希算法、分布式锁策略或幂等性的服务治理等方法,来实现。但是,请注意,服务治理应该在开发和测试阶段使用,生产环境下应该使用更可靠的方法来保证系统的性能和可靠性。

8、如何自己设计一个类似dubbo的rpc框架

要设计一个类似 Dubbo 的 RPC(Remote Procedure Call)框架,需要考虑以下几个方面:

  1. 服务接口设计:RPC 框架的核心在于服务接口的设计,因此服务接口的设计是 RPC
    框架的关键。你需要明确服务的输入输出格式、调用方式、异常处理等方面的细节。
  2. 序列化与反序列化:在 RPC
    过程中,通常需要对传输的数据进行序列化,以保证数据的完整性和可靠性。你需要选择合适的序列化框架,并且需要实现数据的反序列化。
  3. 负载均衡策略:在 RPC
    框架中,负载均衡是非常重要的,它可以均衡服务提供者的压力,提高系统的可用性和性能。你需要选择合适的负载均衡策略,如随机负载均衡、轮询负载均衡、一致性哈希负载均衡等。
  4. 服务注册与发现:在 RPC
    框架中,服务注册与发现也是非常重要的,它可以帮助框架快速地找到服务提供者,提高服务调用的效率。你需要实现服务的注册与发现机制,如服务的注册与发现接口、负载均衡策略等。
  5. 错误处理与容错机制:在 RPC
    框架中,错误处理与容错机制也是非常重要的,它可以保证服务调用的稳定性和可靠性。你需要实现错误处理机制,如异常的捕获与处理、超时重试等。
  6. 跨语言支持:由于 RPC
    框架通常被用于不同语言的服务之间,因此跨语言支持是非常重要的。你需要实现跨语言支持,如多语言的服务接口设计、多语言的序列化与反序列化等。
  7. 性能优化:由于 RPC 框架通常被用于大规模的分布式系统中,因此性能优化是非常重要的。你需要实现高性能的 RPC
    机制,如序列化与反序列化的优化、消息传递的优化等。
  8. 社区支持:一个好的 RPC 框架需要有良好的社区支持,你需要与社区保持良好的沟通,接受用户的反馈和建议,不断改进和优化框架。
  9. 总的来说,设计一个类似 Dubbo 的 RPC 框架需要考虑以上方面的因素,并且需要在实践中不断地进行优化和改进。

2、分布式存储
3、分布式微服务
4、分布式数据库
5、分布式事务
6、分布式锁
7、分布式会话
8、分布式搜索
9、分布式缓存
10、分布式消息队列
11、统一配置中心
12、分库分表
13、限流、熔断、降级

    8、如何自己设计一个类似dubbo的rpc框架
    其次为SpringCloud  隶属于分布式微服务,第三点将继续介绍
    
    由于内容过多后续还会慢慢细化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值