Redis开源协议调整,我们怎么办?

2024年3月20日, Redis官方宣布,从 Redis 7.4版本开始,Redis将获得源可用许可证 ( RSALv2 ) 和服务器端公共许可证 ( SSPLv1 ) 的双重许可,时间点恰逢刚刚完成最新一轮融资,宣布的时机耐人寻味。

 

Redis协议调整,对云计算厂商的影响

Redis协议调整听起来可能没什么,但在开源项目领域是一个大问题。这并不是 Redis 官方第一次改变许可方式,早在 2018 年,Redis Labs 将其许可证从 AGPL 更改为Apache 2 modified with Commons Clause。Commons Clause在其许可之上增加了商业限制条款。

从Redis Labs 团队成员在网上发布的言论,可以了解到: “目前部分云提供商复用成功的开源项目,却没有为其社区做出重大贡献,他们将非其自行研发的软件产品通过重新打包的方式,转变成极具竞争力的云服务产品,并利用他们的业务优势从这些开源项目中获取可观的收入。”

不可否认,随着云计算技术的飞速发展,Redis作为一款流行的开源内存计算高速缓存,在云环境中将发挥着举足轻重的作用,其高效的数据处理能力和丰富的数据结构支持,使其成为众多企业应用和云服务产品的重要组件。

然而,随着云计算厂商纷纷推出相应的Redis之后,也面临着诸多方面的挑战:

  1. 合规性:Redis自2013年起,采用了BSD开源协议,允许云服务商自由分发和使用Redis代码,但随着Redis Labs引入Commons Clause补充条款之后,针对商业软件服务提供商便提出了额外限制,这意味着云厂商必须注意许可模式的变化,确保在提供托管Redis服务时符合开源协议的精神及其附加条款,避免潜在的法律风险。
  2. 技术创新与差异化:开源Redis虽然提供了基础功能,但为了在竞争激烈的云服务市场中脱颖而出,云计算厂商需要开发出具备差异化特性的高级功能或管理工具。如何在遵循开源协议的同时,增加诸如监控、备份恢复、安全防护等增值服务,是对云厂商技术研发能力的考验。
  3. 服务质量与SLA保障:云服务商提供的Redis服务不仅要保证开源版本的稳定性和性能,还需提供高质量的服务水平协议(SLA),包括高可用性、容灾恢复以及弹性扩展等,而这些特性往往需要在开源Redis基础上进行大量定制开发和优化工作。
  4. 维护与升级:云环境下的Redis集群需要及时更新至最新版本以获取最新的功能和安全修复。然而,不同客户可能依赖于不同的Redis版本,这就要求云厂商在提供统一服务的同时,必须处理好不同版本之间的兼容性和平滑升级的问题。

为了满足用户需求及顺应市场变化,各云厂商采取了以下对策:

  • 积极参与社区:云计算厂商应积极贡献开源社区,参与Redis核心功能的改进与发展,同时也通过这种方式获得社区的信任和支持,增强自身在开源生态中的影响力。
  • 自主创新与合作:建立专门的研发团队,针对Redis进行深度定制开发,推出自有知识产权的增强版Redis服务。此外,与Redis官方或其他第三方合作伙伴建立紧密联系,共同解决许可问题并寻求共赢解决方案。
  • 标准化服务与管理平台:构建完善的自动化运维平台,确保能够快速响应Redis实例的创建、扩容、迁移和维护等需求,同时提供可视化管理和监控工具,提升用户体验和运维效率。
  • 多样化的服务模式:根据客户需求提供多种服务模式,例如开源Redis的托管服务、基于Redis的企业版解决方案,甚至包含具有技术支持和个性化功能的高级服务包。

面对Redis开源协议带来的挑战,云计算厂商需在遵守许可规定的基础上,持续创新,提供优质服务,强化与开源社区的合作,并通过不断提升自身的技术服务实力,以满足日益增长的市场需求。在这个过程中,不仅推动了Redis技术在云端的应用普及,也促进了整个云计算行业的健康发展。

 

无惧Redis协议更改,华为云100%技术自主创新缓存更快更强

华为云分布式缓存服务DCS是华为云为客户提供的一款基于Redis内核的云服务,经过多年持续不断的投入与建设,较开源Redis在易用性、高性能、高可靠和性价比方面都具有显著的优势,已经成为企业信赖和依靠的一款优秀产品。

DCS与开源产品对比情况:

 

除此之外,DCS的研发团队也非常重视对开源社区的回馈。

截止发文日,过去一年在开源社区贡献排名第5,累计贡献排名第9;国内社区影响力排名第2;累计154次commit次数和138次PR,总共贡献13000+行代码。

在去年2023年,华为云分布式缓存服务DCS还特别推出了企业版,该企业版是100%自主创新开发的多线程高性能缓存,并且100%兼容Redis协议,较Redis不管是在多线程、内存效率还是高吞吐量上都完全超越对方。

Redis 5.x以前的单(主)线程模型,主线程主要处理新建网络链接接入、命令解析、命令执行、响应封装等,同时负责网络读写,当遇到网络阻塞或者高耗时任务,如命令执行时,则会导致时延增高。

随着计算硬件的性能提升,网络的读写成为系统性能提升的瓶颈,在Redis6.0以上,通过多线程模型处理网络读写,提升系统性能,主线程承接高时延的命令执行任务,考虑到多线程复杂度问题,在满足80%业务诉求的情况下,仍然采用单主线程。

在业务发展的同时,仍然需要能够把更高性能要求的硬件资源发挥到极致,那么,命令执行任务的时延问题就会成为性能提升的瓶颈,DCS企业版的核心解决思路就是通过完全的多主线程模型提升性能,并且100%兼容开源Redis,通过网络多线程调度模型,大大提升网络读写任务的并发量,保障秒级的读写性能,下面是实验室评测的一些数据:

20240329-180956(WeLinkPC).png

20240329-1182831(WeLinkPC).png

 可以看到,华为云DCS企业版Redis的QPS并发数优于基于开源Redis版本最大接近5倍,时延是其25%,完全遥遥领先。 

华为云分布式缓存服务DCS经过5年的发展,目前已经广泛应用于电商、社交文娱、游戏等行业。

在上云阶段通过专业的上云搬迁团队,提供贴身技术咨询和迁移实施支持服务,实现了应用“零改造”,搬迁上云业务无中断;上云后通过千万级的并发接入能力和百万级的读写能力保障秒杀商品“零等待”、订单无丢失、直播间礼物“零卡顿”等高难度应用场景,成为华为云客户信赖的最有价值的云服务。

 阅读原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/295449.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx三大常用功能“反向代理,负载均衡,动静分离”

注意:以下案例在Windows系统计算机作为宿主机,Linux CentOS 作为虚拟机的环境中实现 一,Nginx配置实例-反向代理 1.反向代理 案例一 实现效果:使用nginx反向代理,访问 www.123.com 直接跳转到127.0.0.1:8080 准备工…

Golang Context是什么

一、这篇文章我们简要讨论Golang的Context有什么用 1、首先说一下Context的基本作用,然后在讨论他的实现 (1)数据传递,子Context只能看到自己的和父Context的数据,子Context是不能看到孙Context添加的数据。 (2)父子协程的协同,比…

vue两个特性和什么是MVVM

一、什么是vue 1.构建用户界面 用vue往html页面中填充数据,非常的方便 2.框架 框架是一套线成的解决方案 vue的指令、组件(是对ui结构的复用)、路由、vuex 二、vue的特性 1.数据驱动视图 2.双向数据绑定 1.数据驱动视图 数据的变化会驱动…

面试题 之 vue

1.vue里怎样实现双向数据绑定? Viewmodel 中的Domlisteners 工具会帮我们检测页面上Dom元素的变化,如果有变化,则更改Model中的数据,更新model中的数据时,数据事件绑定工具会帮我们更新页面中的Dom元素 2.Vue的响应式原…

idea快速找到maven中冲突的依赖,解决依赖冲突

红色实线:冲突,红色虚线:依赖于同一个包的多版本 选择包,右键Excluede,排除 问题原因: 一个项目中需要jar包A和jar包B,而jar包A和jar包B都需要依赖jar包C,但A需要1.2.16版本的C,B需要1.2.17版本的C,这时候就可能会产…

升降梯人数识别摄像机

升降梯人数识别摄像机是一种智能监测设备,主要用于实时识别和计算升降梯内乘客的数量。通过搭载先进的图像识别技术和人工智能算法,该设备可以准确监测乘客进出数量,提供重要数据支持和信息反馈,帮助管理人员有效管理升降梯运行&a…

Java基础知识总结(第八篇):集合:Collection(List、Set)、Map、Collections 工具类

声明: 1. 本文根据韩顺平老师教学视频自行整理,以便记忆 2. 若有错误不当之处, 请指出 系列文章目录 Java基础知识总结(第一篇):基础语法 Java基础知识总结(第二篇)&#x…

外汇110:交易中,是否真的存在确定性?

我们看问题的角度不同,得到的结果必然也是不一样的。我们不能否认任何一种可能性,但一切需要从逻辑出发。交易中,最大的确定性就是市场是不确定的,什么样的行情都可能发生。当然,绝对的确定性是不存在的,但…

九州未来深度参与元宇宙标准会议周

近日,元宇宙标准化工作组成立大会暨第一次全体委员会会议在浙江青田成功举办。本次会议由元宇宙标准化工作组主办,中国电子技术标准化研究院、中共青田县委 青田县人民政府承办,涵盖了《元宇宙参考架构》国家标准编制会、《工业元宇宙参考架构…

基于SpringBoot和Vue的房产销售系统的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的房产销售系统的设计与实现 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕&#x1f…

家庭影院触摸屏中应用的电容式触摸芯片

家庭影院的主要组成部分包括显示设备、音响设备、信号源和接线设备等。其中,显示设备通常采用高清电视或投影仪,音响设备包括功放、音箱、低音炮等,信号源可以是蓝光光盘、游戏机、有线电视、网络电视等多种媒体设备。 家庭影院的影像信号通…

SQL语句学习+牛客基础39SQL

什么是SQL? SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。 SQL语法 数据库表 一个…

QA测试开发工程师面试题满分问答6: 如何判断接口功能正常?从QA的角度设计测试用例

判断接口功能是否正常的方法之一是设计并执行相关的测试用例。下面是从测试QA的角度设计接口测试用例的一些建议,包括功能、边界、异常、链路、上下游和并发等方面: 通过综合考虑这些测试维度,并设计相应的测试用例,可以更全面地评…

使用pytorch构建带梯度惩罚的Wasserstein GAN(WGAN-GP)网络模型

本文为此系列的第三篇WGAN-GP,上一篇为DCGAN。文中仍然不会过多详细的讲解之前写过的,只会写WGAN-GP相对于之前版本的改进点,若有不懂的可以重点看第一篇比较详细。 原理 具有梯度惩罚的 Wasserstein GAN (WGAN-GP)可以解决 GAN 的一些稳定性…

OpenHarmony error: signature verification failed due to not trusted app source

问题:error: signature verification failed due to not trusted app source 今天在做OpenHarmony App开发,之前一直用的设备A在测试开效果,今天换成了设备B,通过DevEco Studio安装应用程序的时候,就出现错误&#xf…

蓝桥杯刷题-四平方和

四平方和 代码: from copy import deepcopy n int(input()) maxn int(5e6) 10 dic dict() for a in range(maxn):if a * a > n:breakfor b in range(a,maxn):if a * a b * b > n:breakif dic.get(a*ab*b) is None:dic[a*ab*b] (a,b) ans [maxn for _ …

基于springboot+vue+Mysql的教学视频点播系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

网络安全 | 什么是DDoS攻击?

关注WX:CodingTechWork DDoS-介绍 DoS:Denial of Service,拒绝服务。DDoS是通过大规模的网络流量使得正常流量不能访问受害者目标,是一种压垮性的网络攻击,而不是一种入侵手段。NTP网络时间协议,设备需要…

c++ 插值搜索-迭代与递归(Interpolation Search)

给定一个由 n 个均匀分布值 arr[] 组成的排序数组,编写一个函数来搜索数组中的特定元素 x。 线性搜索需要 O(n) 时间找到元素,跳转搜索需要 O(? n) 时间,二分搜索需要 O(log n) 时间。 插值搜索是对实例二分搜索的改进,…

C#开发中一些常用的工具类分享

一、配置文件读写类 用于在开发时候C#操作配置文件读写信息 1、工具类 ReadIni 代码 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks;namesp…