首页 文章 精选 留言 我的

精选列表

搜索[AI可见性],共10000篇文章
优秀的个人博客,低调大师

QuikRpc1.0.0 发布,可代替 feign 简化 Spring Cloud 接口开发和调用的组件

介绍 随着微服务兴起,越来越多的项目使用微服务架构进行开发,SpringCloud是最流行的微服务开发组件集之一。但是和dubbo相比,使用SpringCloud 开发和调用接口 要麻烦很多,很多开发人员都希望能简化SpringCloud 开发和调用过程和步骤,QuikRpc 就是用来简化SpringCloud 开发和调用过程的组件,使用QuikRpc 服务开发者只需要在service接口用注解标记哪个方法对外开放,服务使用者只需要像使用本地spring bean一样把service@Autowired进来即可,大大简化了spring cloud 服务接口开发和调用步骤,有效的降低了spring cloud的使用和学习成本。 对比 1 、用原生方式完成一个springcloud微服务接口开发与调用过程: A、写一个service接口,在service实现类中实现业务 B、写一个controller,调用service,完成接口暴漏 C、写一个feign 接口,用于包装controller暴漏出来的接口 D、消费者通过feign代理接口来调用 A步骤写的service代码 2、用QuikRpc完成一个springcloud微服务接口开发与调用过程: A、写一个service接口,在接口上加上注解,在暴漏的方法上加上注解,在service实现类实现业务 B、消费者@Autowired service到自己代码中完成调用。 食用步骤 1、给启动类所在项目添加POM依赖 <dependency> <groupId>com.fhs-opensource</groupId> <artifactId>easy-cloud-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency> 2 需要将依赖的POJO和service放到单独的一个模块中,让服务提供者和消费者都可依赖到,service 接口代码示例如下: @CloudApi(serviceName="producer")//producer 是服务提供者的服务名称 public interface UserService { @CloudMethod //加此注解意思是此方法提供给其他微服务调用 List<UserDto> listByIds(String[] ids); } 此模块需要依赖: <dependency> <groupId>com.fhs-opensource</groupId> <artifactId>easy_cloud_anno</artifactId> <version>1.0.0</version> </dependency> 3 消费者 和提供者启动类添加 @EnableEasyCloud(basePackages = "com.fhs") 其中com.fhs 指的是service类的包,可以多个 4 在消费者需要调用userservice的地方直接@Autowired 即可 @Autowired private UserService userService; 需要注意的点-一定要看完 1、如果参数或者返回值有泛型的情况下,或者嵌套层级过深,可能会有问题,这是Java编译机制和fastjson的问题 2、如果参数类型定义了map,反序列化后value的类型可能和你原来的类型不同,比如date 会变成日期字符串,所以map vallue只推荐使用字符串,数字,boolean类型传参,当然尽量不要用map 3、本插件消费者是通过restTemplate调用服务端接口,服务端接口路径为:/easyCloud/proxy/{serviceClass}/{methodName} 如果项目中用到了权限插件请放行 4、如果服务间调用希望加权限认证,可以自定义一个resttemplate,配合spring拦截器或者过滤器拦截/easyCloud/proxy开头请求实现认证

优秀的个人博客,低调大师

Spook.js:可绕过Google严苛网站隔离安全功能获取密码等数据

为了应对 Spectre 漏洞,Google 推出了名为“Strict Site Isolation”(严苛网站隔离)的安全功能,主要是防止未经授权的数据被盗。不过近日一支由多所国际大学组成的团队发现了 Spook.js,这种恶意的 JavaScript 代码可以绕过 Google 的这项安全功能从其他标签中获取密码等敏感数据。 目前,安全专家已经证实 Intel 处理器和苹果M1 芯片受到影响,但AMD芯片也被认为存在风险,但是目前并没有得到充分证明。 该团队由乔治亚理工学院、阿德莱德大学、密歇根大学和特拉维夫大学的研究人员组成。他们说,“尽管 Google 试图通过部署严格的网站隔离来缓解 Spectre,但在某些情况下,通过恶意的 JavaScript 代码提取信息仍然是可能的”。 研究人员继续说:“更具体地说,我们表明,攻击者控制的网页可以知道用户当前正在浏览同一网站的哪些其他页面,从这些页面中获取敏感信息,甚至在自动填充时恢复登录凭证(例如,用户名和密码)。我们进一步证明,如果用户安装了一个恶意扩展,攻击者可以从 Chrome 扩展(如凭证管理器)中检索数据”。 安全研究人员分享了几段视频,展示了 Spook.js 的行动。在第一段视频中,该攻击被用来从 Chrome 浏览器的内置凭证管理器中获取 Tumblr 博客的密码。 在第二个视频中,一个恶意的浏览器扩展被用来从 LastPass 盗取主密码。

优秀的个人博客,低调大师

关于隐私权设置,Facebook和苹果在“杠”的同时,Mozilla可遭殃了!

Mozilla的志愿者们最近被网上商家和营销人员的请求所淹没,他们要求将自己的域名添加到所谓的公共后缀列表(PSL)中。 PSL 是由 Mozilla 创建的公共资源,官网是 publicsuffix.org。它由两部分组成:一部分是由 ICANN(The Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构)提供的 TLD(Top Level Domain,顶级域名)列表;一部分是由个人或机构提供的 PRIVATE 列表。完整的 PSL 可以从这个地址获得。Public Suffix List (PSL)是Mozilla社区志愿者的一项倡议,旨在维护顶级域(tld)的列表,并将其作为一个域来处理,以防止不同域之间的cookie混合。那是因为在域级别设置的Cookie可以用来启用它的所有子域,即使这些子域彼此不相关或不属于同一个组织。 虽然由Mozilla的开源社区志愿者维护,但该列表受到了各种应用程序和项目的青睐,并帮助它们区分单独的TLD/suffix 和子域名。 然而,在Facebook建议将其作为更新的隐私增强功能的补救措施后,苹果最近推出的隐私增强功能导致在线营销人员向Mozilla提出大量请求,要求将其域名添加到列表中。 随着iOS14.5的正式上线,Facebook和苹果已经“杠”上了 最近,苹果在iOS、iPadOS和tvOS的14.5版中引入了一项新的隐私保护功能,要求用户向跟踪他们的应用程序或网站授予权限。 通过收集特定数据来跟踪用户的应用程序和网站也需要遵守苹果的App tracking Transparency (ATT)框架。 iOS 14.5用户被提示通过cookie向跟踪他们的应用程序或网站授予权限 苹果ATT框架引入的政策禁止数据收集和共享,除非用户明确选择在运行iOS 14.5的设备上启用跟踪(cookie)。 但是,随着越来越多的用户选择退出苹果设备上的追踪,在线广告网络和商店在提供广告或从用户那里收集个性化和分析数据方面将受到限制,从而影响那些以投放广告为生的企业的利益。 由于Facebook的分析平台Facebook Pixel也受到了苹果的这些变化的影响,Facebook提出了一些在线企业可以使用的变通方案。 对于那些有兴趣投放针对转换事件优化的广告的企业,Facebook的建议是让企业验证他们的域名。 但Facebook补充说,他们也会尊重Mozilla的公共后缀列表(PSL)中包含的域名。 “如果托管域(eTLD)在公共后缀列表中注册,这将使企业能够验证他们的eTLD+1域。例如,如果myplatform.com是公共后缀列表的注册域名,那么带有子域名jasper.myplatform.com的广告商jasper将能够验证jasper.myplatform.com。” 然而,据Mozilla称,该页面的早期版本让Facebook错误地暗示PSL是一种潜在的补救措施。 简单地说,存在PSL是为了使来自不同域的cookie不会被混淆,或者被本不应该访问它们的域访问。 这是因为在互联网上没有权威的方法来知道什么是合适的顶级域(TLD),什么是子域。 一个示例是.uk和.co.uk TLD扩展名。 co.uk不是一个单独的TLD的“.uk”(子)域。因此,为* .uk域设置的cookie不应由* .co.uk域访问。 而且,这也是PSL的最初目的,它帮助应用程序、web浏览器和服务解析PSL,区分什么是单独的TLD,什么只是子域。 例如,web浏览器将不接受服务器为PSL上的任何域设置的cookie,因为“域”现在被视为公共后缀或TLD。 PSL的最新副本的一个片段如下所示: Mozilla公共后缀列表(PSL)中的一个片段 Mozilla的PSL志愿者正忙于处理请求 就在Facebook宣布将把PSL中的域名作为其域验证过程的一部分之后不久,在线商店的所有者们蜂拥向旧PSL的维护者们提出了添加域名的请求。 在GitHub上出现了多个问题线程,PSL维护者提出了他们的担忧,甚至拒绝了请求。 由于采用了苹果公司的ATT框架,在线广告商(例如使用Facebook基于像素的跟踪机制来衡量转化次数的在线广告商)可能会发现其Cookie被阻止。 在某些情况下,这可能会极大地影响(降低)广告定位和性能衡量的有效性,主要是针对电子商务平台,它允许每个店面有许多不同的子域名。 例如,booksforcheap.shopnow.com, familypizza.shopnow.com, midnightcookies.shopnow.com,等等。 Facebook工程师Benjamin Savage以Etsy及其商户为例,解释到目前为止Facebook还无法支持PCM: “我们现在还不能支持这些商家使用‘私人点击量( Private Click Measurement)’。根据目前的编写方式,所有在facebook.com上运行并直接连接etsy.com任何部分的广告都将有资格从etsy.com的任何部分获得转换。不幸的是,对于在etsy.com上销售商品的单个商人来说,这并不是一个特别有用的统计数据。” 在本例中,将etsy.com添加到PSL将确保子域被视为单独的属性(起源),并允许不同的商店所有者单独收集指标,例如特定于其商店的 Private Click Measurement(PCM)。 苹果公司2021年2月推送了iOS14.5 Beta 版,并且在其中引入一种叫做私有点击测量(Private Click Measurement)的新技术。这是给在线广告商一种私下衡量广告的方法。 但是,这并不是PSL的初衷。 Mozilla的一位代表告诉BleepingComputer: “公共后缀列表是由Mozilla在许多年前创建的,用来识别那些实际上不是独立的域名,而是像co.uk或tokyo.jp这样的后缀的域名。” 如今,维护人员仅仅是来自网络社区的志愿者。 Mozilla发言人告诉BleepingComputer: “依赖这个数据集的人和项目数量惊人,错误地将一个域名添加到列表中常常会导致未来意想不到的问题。” PSL志愿者和gTLD行业专家Jothan Frakes告诉BleepingComputer ,PSL是一群志愿者,他们正在帮助维护广泛使用的资源,并且不想被一堆为了商业利益的请求所淹没,首先: 1.在PSL,志愿者通常会收到新提交者的第一个请求,然后提出问题,最后再在需要更改后进行完善,因此每个请求可能要花费一定的时间。 2.验证过程也需要一些时间。如果某人不明白自己的要求是什么,那么在第一个请求中,他们可能会无意中破坏他们预期的cookie行为——没有sla或其他相关的东西,除了确保一个人实际上是一个域名的运营商外,他们通过检查DNS来获取与pull请求相关的特定记录。 所有这些都可能给PSL志愿者社区带来相当大的负担。 争夺行业主导权才是隐私设置的终极目标 早在2020年6月,库克在苹果开发者大会上就宣布了一个计划。为了保护用户隐私,会修改iOS 14系统中广告平台获取IDFA码的规则,会明确要求用户选择是否允许应用程序中的广告跟踪。 随后Facebook随即就表示了强烈不满,这些信息的缺失会对广告投放效果造成严重的冲击。不过库克还认为,这些利益至上的业务导致了错误信息泛滥、不信任增多,甚至激发了现实世界中的暴力。 根据Facebook的内部测试,从移动广告安装广告系列中删除个性化设置后广告商的收入会下降50%以上。 此后,两家公司不断地就互相“杠”了起来。 但因为开发者需要一段时间更新技术和相关系统,苹果不断推迟更改IDFA规则的时间点,直到近期的iOS 14.5测试。 iOS14.5正式版本上线后,开发者或公司想留在iOS系统上就必须适应新的IDFA规则,更新SDK,配合苹果SKadnetwork进行技术对接。 iOS14.5系统上线后,应用软件和运营商要访问用户的IDFA,手机会弹出提醒窗口,让用户选择是否允许跟踪自己的信息和数据。如果用户选择禁止信息跟踪,企业就无法获得手机的IDFA码,取而代之的是一连串无意义的0。 苹果向iOS上的开发者发出警告:不要尝试绕过即将推出的应用跟踪透明度隐私功能,否则应用将被下架。 而在Facebook看来,用户隐私只是幌子,苹果谋求的是行业主导地位,争夺行业主导权才是隐私设置的终极目标。 本文翻译自:https://www.bleepingcomputer.com/news/security/mozilla-flooded-with-requests-after-apple-privacy-changes-hit-facebook/如若转载,请注明原文地址。

优秀的个人博客,低调大师

用Spine2D+PIXI来实现可操控的live2D动画

vTuber行业越来越火爆,看着那些形形色色的皮套,忍不住自己实现一遍的冲动,说起2D骨骼动画软件,Spine2D首当其冲。这次就用它来耍一耍。 为啥我不用live2D?毕竟这是日本软件,英语的本地化翻译不知道靠不靠谱,与Spine价格也差不太多,看了一些教程,操作也比较复杂,感觉更倾向于给不熟悉编程的设计人员使用。 为啥不用免费的国产软件龙骨?开始确实是试用了一段时间,软件的基础功能应该满足我的需求,但是程序文档比较简陋,而且似乎已经停止维护,非常可惜。 无奈之下,忍痛花299刀买了Spine。(T_T) 虚拟主播用的动画不知道有没有专业一些的称呼,我暂时就叫“live2D动画”吧~live2D动画的核心是骨骼绑定与蒙皮动画,蒙皮动画的原理和我以前用canvas2D实现的图片变形效果类似:Canvas2D实现对图片进行网格变换。 首先去网上找了一个已经对角色分件完的PSD模型,为了demo制作方便我找了个比较简单、贴图较少的“人物”,然后用官方的ps插件PhotoshopToSpine.jsx导出图层,然后用Spine打开导出的工程即可。(psd原件我会放到文末的源码中) 接下里就是再spine里绑定骨骼,刷权重,key帧这些繁琐的工作了,三言两语也说不完,网上的教程还是挺多的,本文还是着重程序实现。我会把Spine工程也在源码中分享出来,如果大家有疑惑的地方我这个生手也许能解答一部分~ 程序实现主要用到两个库,pixi.js和pixi-spine,用的都是当前(2021-02-28)的最新版,因为我的spine版本是3.8,pixi-spine只有最新版才支持,所以pixi.js也必须是最新版(v5) 虽然spine官方也提供了webgl版的运行时,但是自从上次用了pixi感觉还是相当好使的,pixi也提供了插件,果断就拿来用了。 本次功能主要是三个:①眼球根据鼠标移动位置;②点击角色张嘴;③根据音乐节奏跳动; 功能①的实现主要依赖spine动画的ik约束,具体实现见官方论坛的这篇博文:眼睛距离限制设置,我就拿来现学现卖了,然后程序上只要通过findBone方法找到约束的骨骼,然后移动位置即可。 关键代码: // ... controlEye = skeleton.findBone('eye') // 获取眼球控制的骨骼 controlHead = skeleton.findBone('head') // head是eye的父级,eye在head的本地坐标系内移动 // ... // 记录眼球相对位置 controlEyeX = controlEyeXTarget = controlEye.x controlEyeY = controlEyeYTarget = controlEye.y eyeBasePos.x = controlHead.worldX eyeBasePos.y = controlHead.worldY // ... stage.on('pointermove', (e) => { pageX = e.data.global.x pageY = e.data.global.y // 修改眼球在本地坐标系中的位置 controlEyeXTarget = pageX - (basePos.x + eyeBasePos.x) controlEyeYTarget = -(pageY - (basePos.y + eyeBasePos.y)) // y轴翻转 }) // ... 功能②则是先在spine中创建一段关键帧动画,然后通过setAnimation方法来进行播放,如果有多个动画可以通过设置BlendMode并控制每段动画轨道的alpha来进行混合,这一块我会以后写个新的demo专门介绍。 关键代码: // ... // 加载spine数据 loader.add('monster', 'monster.json') .load(function (loader, resources) { spineMonster = new pixiSpine.Spine(resources.monster.spineData) // ... state = spineMonster.state // ... }) // ... // 点击场景播放“laugh”动画一次 stage.on('pointertap', () => { const entry = state.setAnimation(0, 'laugh', false) }) // ... 功能③也是通过ik约束和修改关键骨骼的位置来实现,根据音乐节奏跳动的部分不是本文的重点,主要是对音乐的流数据进行采样归并,我也没做深入的研究,目前只是简单调用api的阶段,有兴趣详细了解的小伙伴可以看MDN的入门教程:Using the Web Audio API。 关键代码: // ... let analyser let bufferLength = 0 let dataArray = [] let now = performance.now() let last = now const loop = function (delta) { stats.begin() if (gameRunning) { now = performance.now() if (now - last > 100) { last = now } if (dancing) { analyser.getByteFrequencyData(dataArray) let i let audioVal = 0 for (i = 0; i < bufferLength; i++) { audioVal += dataArray[i] } audioVal /= bufferLength // 获取均值 controlBodyYTarget = -bodyBasePos.y + audioVal controlBodyYTarget = controlBodyYTarget * 0.3 controlBodyYTarget = Math.max(30, Math.min(240, controlBodyYTarget)) } controlEyeX += (controlEyeXTarget - controlEyeX) * 0.1 controlEyeY += (controlEyeYTarget - controlEyeY) * 0.1 controlBodyX += (controlBodyXTarget - controlBodyX) * 0.1 // 左右移动身体 controlBodyY += (controlBodyYTarget - controlBodyY) * 0.5 // 根据节奏上下移动身体 controlEye.x = controlEyeX controlEye.y = controlEyeY controlBody.x = controlBodyX controlBody.y = controlBodyY } renderer.render(stage) stats.end() } ticker.add(loop) // ... const $btn = document.getElementById('play-btn') const $file = document.getElementById('file') let audio = null let timer = -1 $file.onchange = function () { const file = $file.files[0] if (!file) return if (audio) audio.pause() audio = new Audio() audio.loop = true audio.addEventListener('canplay', event => { audio.play() let flag = false clearInterval(timer) // 每秒换一次水平方向 timer = setInterval(function () { flag = !flag controlBodyXTarget = flag ? 50 : -50 }, 1000) dancing = true }) audio.src = URL.createObjectURL(file) // 使用本地音源 // 创建分析器节点 const audioCtx = new (window.AudioContext || window.webkitAudioContext)() analyser = audioCtx.createAnalyser() analyser.fftSize = 32 // 采样 // 把分析器节点连接到声源 const source = audioCtx.createMediaElementSource(audio) source.connect(analyser) // 分析器节点输出到另一个节点(不输出也可以正常使用。但前提是它必须与一个声源相连,直接或者通过其他节点间接相连都可以) analyser.connect(audioCtx.destination) bufferLength = analyser.frequencyBinCount // 值是FFT的一半 dataArray = new Uint8Array(bufferLength) } 最终效果如下: 如果文章对你有帮助,还请点个赞 ٩( 'ω' )و 完整代码+工程资源+psd源文件 在线演示1、在线演示2

优秀的个人博客,低调大师

电子书Kindle被爆出3个新漏洞,黑客可瞬间清空用户余额

纸质书和电子书之争,在近些年逐渐被淡化,得益于智能手机的普及,越来越多的人养成数字阅读的好习惯。电子书阅读器由于类纸体验等优点,满足了广大深度阅读爱好者的需求,被越来越多的人接受。 亚马逊出品的Kindle最早杀入中国市场,依托平台优势,形成“硬件+内容+服务”的闭环生态,沉淀了一大批阅读爱好者,成为电子阅读器行业的领头羊。 去年10月份,以色列安全网络公司Realmode研究人员发现Kindle中的3个安全漏洞,事情被曝光后,很多人才知道,原来一个看书的设备,也可以成为黑客的攻击目标。 为什么黑客会攻击Kindle?正所谓有利益的地方,就有黑客。黑客之所以对Kindle感兴趣,主要与Kindle的盈利模式有关。用户购买Kindle后,仍然需要购买商店中的书籍,这个步骤必然涉及到支付,这给了黑客很大的动力。 研究人员发现的第一个漏洞,与“Send to Kindle”这一特征有关。这一特征允许用户通过邮件,将MOBI格式的电子书以附件的形式发送到Kindle设备。此时亚马逊会生成一个@Kindle。Com的邮箱地址,用户可以使用这一体质,实现电子书的发送。 黑客则可以利用这一特征,伪造一本电子书,当这本“电子书”发送到Kindle时,一旦用户点击含有恶意代码的电子书中的链接,Kindle会立刻打开浏览器,黑客的代码就会被执行,权限会得到相应提高。 不仅如此,研究人员还发现一个可以提升权限的漏洞,这一漏洞,可以使黑客以最高权限执行代码,达到完全控制Kindle的目的。 甚至黑客还可以访问设备凭证。虽然信用卡卡号和密码,并没有保存在并Kindle中,但攻击者只需要知道用户的邮件地址,并让用户点击恶意电子书的链接,用户很容易中招,一旦中招,黑客便可以使用用户的信用卡在Kindle商店购买书籍,只要黑客商店售书,再将用户的余额转移到自己的账户中即可。 庆幸的是,这一漏洞是安全网络公司研究人员首次发现的,在第一时间就提交给亚马逊官方。亚马逊通过漏洞奖励计划,奖励给研究人员1.8万美元,并随后给Kindle打上了代码提升权限的补丁。 完整技术分析: https://medium.com/realmodelabs/kindledrip-from-your-kindles-email-address-to-using-your-credit-card-bb93dbfb2a08

优秀的个人博客,低调大师

Nacos 1.4.1 修复指定特殊 UA 可绕过所有鉴权的安全漏洞

Nacos 1.4.1 已发布,此版本的主要新功能是支持 IPv6 服务注册,以及为 Csharp 客户端提供 UDP push 支持。 更值得关注的是,1.4.1 版本解决了此前被曝出的绕过鉴权的安全漏洞 (#4593)。release note 写到,增加服务器身份认证以替代 UA 白名单模式。 开发者@threedr3am半个月前向 nacos 提交issue反馈了一个可以绕过鉴权的安全漏洞(出于安全考虑,提交者已删除此 issue 内容,具体的漏洞描述已无法查看)。 从上下文来推测,此漏洞大概是在 nacos 中使用特殊的 UA 即可忽略鉴权——从而绕过了鉴权机制。维护者回复称,这个特殊UA 用于服务间通信鉴权白名单,由于是白名单模式,所以会忽略鉴权,而且这是服务端之间的通信鉴权,不会推荐用户直接使用,因此并没在文档进行描述。 issue 的回复显示,nacos 从 1.2.0 开始增加了鉴权功能,所以建议使用 1.2.0 及以上版本的用户升级至最新的 1.4.1。 nacos 1.4.1 发布后,开发者@threedr3am又发现了一个能绕过鉴权的机制 (#4701),nacos 维护者确认后在 1.4.1 基础上进行hotfix解决了此问题。 建议用户直接下载最新的 1.4.1 版本进行部署升级。 下载地址:https://github.com/alibaba/nacos/releases/tag/1.4.1

优秀的个人博客,低调大师

Dubbo 3.0 前瞻系列:服务发现支持百万集群,带来可伸缩微服务架构

1.Dubbo 3.0roadmap 发布 2.Dubbo 3.0 前瞻之应用级服务发现 3.Dubbo 3.0 前瞻之:重塑 Spring Cloud 服务治理 4.Dubbo 3.0 前瞻之:常用协议对比及 RPC 协议新形态探索 5.2020双11,Dubbo 3.0 在考拉的超大规模实践 本文是一篇关于 Dubbo 地址推送性能的压测文章,我们期望通过对比的方式展现 Dubbo3 在性能方面的提升,尤其是新引入的应用级地址模型。但要注意,这并不是官方正式版本的性能参考基线,并且由于环境和时间原因,部分对比数据我们并没有采集,但只要记住我们只是在定性的检测阶段成果,这些限制总体上并不会有太大影响。 1 摘要 本文主要围绕下一代微服务框架 Dubbo 3.0 在地址推送链路的性能测试展开,也是在性能层面对 Dubbo 3.0 在阿里落地过程中的一个阶段性总结,本轮测试了 Dubbo2 接口级地址发现、Dubbo3 接口级地址发现、Dubbo3 应用级地址发现。压测数据表明,在百万实例地址的压测场景下: 基于接口级地址发现模型,Dubbo3 与 Dubbo2 对比,有超过 50% 常驻内存下降,Full GC 间隔更是明显拉长 Dubbo3 新引入的应用级服务发现模型,可以进一步可以实现在资源占用方面的大幅下降,常驻内存比 Dubbo3 接口级地址进一步下降 40%,应用实例扩缩容场景增量内存分配基本为零,相同周期内(1小时) Full GC 减少为 2 次。 Dubbo 3.0 作为未来支撑业务系统的核心中间件,其自身对资源占用率以及稳定性的提升对业务系统毫无疑问将带来很大的帮助。 2 背景介绍 2.1 下一代服务框架 Dubbo 3.0 简介 一句话概括 Dubbo 3.0**,它是 HSF & 开源 Dubbo 后的融合产品,在兼容两款框架的基础上做了全面的云原生架构升级,它将成为未来面向阿里内部与开源社区的主推产品。** Dubbo 3.0 诞生的大背景是阿里巴巴在推动的全站业务上云,这为我们中间件产品全面拥抱云上业务,提供内部、开源一致的产品提出了要求也提供了契机,让中间件产品有望彻底摆脱自研体系、开源体系多线作战的局面,有利于实现价值最大化的局面。一方面阿里电商系统大规模实践的经验可以输出到社区,另一方面社区优秀的开发者也能参与到项目贡献中。以服务框架为例,HSF 和 Dubbo 都是非常成功的产品:HSF 在内部支撑历届双十一,性能优异且久经考验;而在开源侧,Dubbo 坐稳国内第一开源服务框架宝座,用户群体非常广泛。 同时维护两款高度同质化的产品,对研发效率、业务成本、产品质量与稳定性都是非常大的考验。举例来说,首先,Dubbo 与 HSF 体系的互通是一个非常大的障碍,在阿里内部的一些生态公司如考拉、饿了么等都在使用 Dubbo 技术栈的情况下,要实现顺利平滑的与 HSF 的互调互通一直以来都是一个非常大的障碍;其次,产品不兼容导致社区输出成本过高、质量验收等成本也随之增长,内部业务积累的服务化经验与成果无法直接赋能社区,二次改造适配 Dubbo 后功能性、稳定性验收都要重新投入验证。为彻底解决以上问题,结合上文提到的阿里集团业务整体上云、开源以及云产品输出战略,我们制定了全面发展 Dubbo 3.0 的计划, 2.2 Dubbo 不同版本在地址推送链路上的性能压测与对比 下图是服务框架的基本工作原理,橙色路径即为我们此次重点压测的地址推送链路,我们重点关注在百万地址实例推送的情况下,Dubbo 不同版本 Consumer 间的差异,尤其是 Dubbo 3.0 的实际表现。 作为对比,我们选取了以下场景进行压测: Dubbo2,此次压测的参考基线 Dubbo3 接口级地址发现模型,与 Dubbo2 采用的模型相同 Dubbo3 应用级地址发现模型,由云原生版本引入,详细讲解请参见这篇文章 压测环境与方法 | 压测数据 | 本次压测模拟了**220w(接口级)**集群实例地址推送的场景,即单个消费端进程订阅 220w 地址 | | 压测环境 | 8C16G Linux,JVM 参数中堆内存设置为 10G | | 压测方法 | Consumer 进程订阅 700个接口,ConserverServer作为注册中心按一定比例持续模拟地址变更推送,持续时间 1 hour+,在此过程中统计 Consumer 进程以及机器的各项指 | 3 优化结果分析与对比 3.1 GC 耗时与分布 Dubbo2 接口级地址模型 Dubbo3 接口级地址模型 Dubbo3 应用级地址模型 3.2 增量内存分配情况 Dubbo2 接口级地址模型 Dubbo 3.0 接口级地址模型 Dubbo3 应用级地址模型 3.3 OLD 区与常驻内存 Dubbo2 接口级模型 Dubbo3 接口级模型 Dubbo3 应用级模型 3.4 Consumer 负载 Dubbo3 接口级模型 Dubbo3 应用级模型 4 详细对比与分析 4.1 Dubbo2接口模型 vs Dubbo3接口模型 在 200w 地址规模下,Dubbo2 很快吃满了整个堆内存空间,并且大部分都无法得到释放,而由此触发的频繁的 GC,使得整个 Dubbo 进程已无法响应,因此我们压测数据采集也没有持续很长时间; 同样保持接口级地址模型不变,经过优化后的 Dubbo3 ,在 1 个小时之内只有 3 次 Full GC,并且持续推送期间不可释放内存大概下降在 1.7G。 4.2 Dubbo3 接口模型 vs Dubbo3 应用模型 当切换到 Dubbo3 应用级服务发现模型后,整个资源占用情况又出现了明显下降,这体现在: 应用进程上下线场景,增量内存增长很小 (接口级的 MetadataData 基本得到完全复用,新增部分仅来自新扩容机器或部分服务的配置变更) 常驻内存相比 Dubbo3 接口级又下降了近 40%,维持在 900M 左右 值得一提的是,当前的应用级地址推送模型在代码实现还有进一步优化的空间,比如 Metadata 复用、URL 对象复用等,这部分工作将是我们后续探索的重点。 5 总结 Dubbo 3.0 目前已经实现了 Dubbo&HSF 的全面融合,云原生方案也在全面推进中。在刚刚过去的双十一中,Dubbo 3.0 平稳支撑了考拉业务,并且也已经通过阿里其他一些电商应用的部分线上试点。后续我们将专注在推动 Dubbo 3.0 的进一步完善,一方面兑现应用级服务发现、全新服务治理规则、下一代 Triple 协议等,另一方面兑现我们立项之初设定的资源占用、性能、集群规模等非功能性目标。 此次推送链路的性能压测,是落地/研发过程中的一次阶段性验收,应用级服务发现在资源占用方面大幅下降,让我们看到了新架构对未来构建真正可伸缩集群的可行性,这更坚定了我们对应用级服务发现架构的信心。后续迭代中,在继续完善接口级、应用级两种模型并实现 Dubbo 3.0 的全面性能领先后,我们将专注在迁移方案的实现上,以支持老模型到新模型的平滑、透明迁移。 作者| 刘军(陆龟) Apache_Dubbo_PMC

优秀的个人博客,低调大师

覆盖不足:韩国5G用户仅有15%时间可接入5G网络

据韩联社报道,来自行业跟踪公司OpenSignal的一份报告显示,韩国智能手机用户接入5G网络服务的频率远低于预期,5G用户仅能在15%的时间内使用5G网络。 韩国于去年4月正式商用5G移动网络,目前该国以非独立(NSA)模式提供5G服务,这需要依赖于现有的4G LTE网络。目前,韩国的5G移动网络服务仅限于在首尔等主要城市提供。 根据OpenSignal的报告显示,韩国最大移动运营商SK电讯的用户仅有15.4%时间连接了5G网络,其次为排名第三的移动运营商LG U+(15.1%),而韩国电信(12.5%)则排在最后。 该报告称,在剩下的时间里,5G用户不得不依赖于4G网络,该报告从2月1日到4月30日追踪了韩国218095台设备。 报告称,当连接至5G网络时,LG U+用户享有最快的下载速度——237.2Mbps,SK电讯和韩国电信分别以220.4Mbps和214.8Mbps的下载速率排在其后。 韩国一直在积极推动扩大5G网络覆盖,今年上半年,韩国三大运营商计划投资总计4万亿韩元(33亿美元)用于扩建新的5G基础设施。 尽管运营商们一直在加紧努力,但其5G网络覆盖范围仍然有限,尤其是在室内环境中,这导致了消费者的投诉。为了解决这些问题,韩国政府计划在今年部署大约2000个室内5G基站。 根据韩国ICT部的数据,截至今年4月,韩国共有11.5万个5G基站,远小于覆盖韩国全国范围的87万个4G LTE基站的数量。 韩国的目标是到2022年实现全国范围的5G覆盖。 韩国运营商今年已经在有限的条件下测试了5G SA服务,不过尚未正式投入商用。 根据韩国ICT部的数据,截至5月底,韩国5G用户数为690万,占据该国6900万移动用户的10%。 分析师预计,随着三星Galaxy Note 20等更多5G手机的发布,韩国5G用户数到今年年底有望达到1000万。

优秀的个人博客,低调大师

国产自研操作系统发布,个人用户可马上下载体验

即将开播:5月14日,Jenkins在K8S下的三种部署流程和实战演示 目前中国的经济可以说完全走在了世界前列,但是在科技领域,却仍然有许多的路要走。就拿去年的美国制裁华为和2018年美国制裁中兴来说,在科技领域,没有自研的技术,很容易就会被别人抓住把柄,“任人宰割”。如同中兴,被制裁后,到现在元气仍然没恢复,而华为因为有了一定的自研技术存储,所以不仅扛过了去年美国的制裁,并且营业额相对于2018年还有所上升。 美国先后制裁中兴和华为 这只是在手机通讯领域,而在操作系统领域,则是我们心中的另一块“痛”。其实在Windows操作系统刚进入中国时,当时有许多自研的国产操作系统,而Windows却实行的收费政策。如果在那个时候,国人坚持开发国产操作系统,而大家也也坚持去用国产操作系统,那么到现在,有可能就不是Windows一家独大了。 不过那个时候的Windows玩了一个花招,他们针对国内用户,在收费这一块放的非常松,致使当时的Windows操作系统盗版横行,虽然这让很多人都用上了免费的Windows操作系统,但是国人也在这二十年,习惯了Windows操作系统,完全遗忘了国产操作系统。 好在国产操作系统开发人员并没有放弃,这些年他们一直在开发国产操作系统UOS,并且在近日正式公布,还提供了下载渠道。不管是企业,还是个人,只要注册登录后,都可以下载体验。虽然不管在界面上,还是在功能上,都比不上现在的Windows操作系统,但是这毕竟是我们自己研发的操作系统,不管是自主性还是未来保护国家机密,我们都应该大力支持国产操作系统。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册