首页 文章 精选 留言 我的

精选列表

搜索[硬链接],共10002篇文章
优秀的个人博客,低调大师

深度数智加入openKylin,基于RISC-V打造软、硬协同新生态!

深度数智科技(珠海)有限公司(以下简称:深度数智)签署openKylin社区CLA(Contributor License Agreement 贡献者许可协议),正式加入openKylin开源社区。 深度数智成立于2021年6月,总部位于珠海。自成立起,深度数智便致力于聚合最优秀的技术人才,开发基于RISC-V芯片的创新产品。RISC-V架构具备简单、易于移植、设计成本低等特点,此外还有低功耗、体积小等优势,已在物联网领域得到广泛应用,并持续向高性能场景演进。 近年来,RISC-V生态培育明显提速,RISC-V生态链条的参与者也逐渐多元化。深度数智始终引领产业风向,于近期完成全球首款原生 RISC-V 笔记本电脑 ROMA发布,该产品预装并支持openKylin系统。 在加入社区后,深度数智愿同值得信赖的社区伙伴一起,在软硬协同生态层面开展深入合作,持续对ROMA的软件生态进行优化,不断提升openKylin系统对RISC-V硬件的支持能力,持续提升产品性能及运行稳定性,致力于为开发者带来最佳的RISC-V开发体验。 社区会员持续招募中 目前,openKylin社区会员招募正在火热进行中,欢迎更多企业伙伴加入,携手共建,打造桌面操作系统顶级社区,推动国产操作系统产业生态健康发展。详情可查看:【https://mp.weixin.qq.com/s/yk82DEQSG0knaQNKyc-vsg】 openKylin(开放麒麟)社区旨在以“共创”为核心,在开源、自愿、平等、协作的基础上,通过开源、开放的方式与企业构建合作伙伴生态体系,共同打造桌面操作系统顶级社区,推动Linux开源技术及其软硬件生态繁荣发展。 社区首批理事成员单位包括麒麟软件、普华基础软件、中科方德、麒麟信安、凝思软件、一铭软件、中兴新支点、元心科技、中国电科32所、技德系统、北京麟卓、先进操作系统创新中心等13家产业同仁和行业机构。 审核:openKylin

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

12 张图 | 硬刚了一波,Eureka 三层缓存架构

大家好,我是悟空。 先说下哈,这篇文章画原理图用了很多时间,求个三连! Eureka 注册中心系列文章已经写到第七篇了,这里汇总下: 领导让我研究 Eureka 源码 | 启动过程 领导“叕”让我研究 Eureka 源码:注册过程 值得收藏的 Eureka 控制台详解 原来一个 Map 就能搞定注册表了 6 张图 | 剖析客户端首次同步注册表 11 张图 | 讲透原理,最细的增量拉取 > 本文已收录到我的 github: https://github.com/Jackson0714/PassJava-Learning 一、前言 上一讲我们讲到了 Eureka 注册中心的 Server 端有三级缓存来保存注册信息,可以利用缓存的快速读取来提高系统性能。我们再来细看下: 一级缓存:只读缓存 readOnlyCacheMap,数据结构 ConcurrentHashMap。相当于数据库。 二级缓存:读写缓存 readOnlyCacheMap,Guava Cache。相当于 Redis 主从架构中主节点,既可以进行读也可以进行写。 三级缓存:本地注册表 registry,数据结构 ConcurentHashMap。相当于 Redis 主从架构的从节点,只负责读。 看图更清晰,如下图所示: 另外 ConcurrenthashMap 也是一种 map 结构,也就是以键值对的方式进行存储,如下图所示: 本篇悟空哥会带着大家来看下 Eureka 的缓存架构是怎么样,通过学习这篇,我们也可以借鉴 Eureka 的缓存设计思想,将其运用到项目当中。 二、引发的几个思考 我们再来看下 Eureka 源码,其实不难看懂,下面会做解释。 默认会先从只读缓存里面找。 没有的话,再从读写缓存里面找。 找到了的话就更新只读缓存,并返回找到的缓存。 还找不到的话,就从本地缓存 registry 中加载进来。 带来了三个问题: > (1)三级缓存数据怎么来的? > > (2)缓存数据如何更新的? > > (3)缓存如何过期? 三、本地缓存 我们先来看下本地缓存 registry,它是一种定义为 ConcurrentHashMap 的数据结构,之前也详细讲解过。 当客户端发起注册请求的时候,就会把注册信息放到 registry 中。如下代码所示: registry.putIfAbsent(app) putIfAbsent 表示如果存在重复的 key,就不会放入值,如果传入的 key 对应的 value 已经存在,就返回存在的 value,不进行替换。 经过 putIfAbsent 操作就把客户端的注册信息放到 registry 中了。 我们再来看下其中的一种缓存结构:读写缓存。 四、读写缓存 读写缓存,顾名思义,就是既可以进行读,也可以进行写的缓存。读主要是给只读缓存来读取的。写主要是将缓存更新到自己的 Map 中。 下面分别从写缓存的原理、写缓存的源码、过期时机的原理、过期时机的源码几个方面来分别解答。 3.1 写缓存的原理和源码 我开始以为当我们读缓存读不到的时候,就会去数据库查了。找了半天,没找到读数据库的地方。 然后我就用 IDEA 工具查找 readOnlyCacheMap 被使用的地方,终于让我找到了。 读写缓存用的是 Guava Cache工具类,这篇不会深究。简单来说就是当访问读写缓存时,如果这个 key 在缓存中不存在,则从本地去查,查到后再放回缓存。 然后又实现抽象方法 load(key),这个方法的作用就是当读写缓存中没有,则从本地 registry 缓存中拿。 读写缓存过期的时候其实分两种:定时过期和实时过期。由于上面的源码已经定义了定时过期的时间间隔,所以我们先来看定时过期。 3.2 定时过期 当构建这个读写缓存时,就会定义间隔多久过期整个读写缓存。如下代码所示,180 s 会定时过期读写缓存。 expireAfterWrite(180s) 3.3 实时过期 当有新的服务实例进行注册或者下线、发生故障时,就会把这个对应的服务实例的缓存给过期掉。 如下图所示,最上面的时注册中心,下面三个是服务实例。服务实例发生注册、下线、发生故障,注册中心都是可以感知到的,然后就会主动过期读写缓存对应的服务实例。 3.4 实时过期源码 从源码层面我们再来看下读写缓存过期的源码。调用了 invalidateCache 方法,进行过期。 文件路径:com/netflix/eureka/registry/AbstractInstanceRegistry.java 五、只读缓存 5.1 定时更新 只读缓存 readOnlyCacheMap,有一个定时更新的机制,每隔 30 秒就会更新一次只读缓存中的某些 key。 它其实是遍历自己的所有注册信息,然后和读写缓存进行比对,如果注册信息不一致,则替换为读写缓存的数据。 源码如下,有一个定时调度任务,每隔 30 秒调度一次。 5.2 更新 另外当客户端获取注册信息时,也会先读只读缓存,如果只读缓存中没有,则会从读写缓存中找,找到后就放到只读缓存中。如果读写缓存中没有,则从本地注册表 registry 中加载到读写缓存中,然后将注册表信息返回。 > 这里大家是否有个疑问:既然这个缓存叫做只读缓存,怎么还能被更新,不应该是不变的吗? 其实这里的不变是相对于客户端来说的,客户端获取注册表信息时,最开始访问的就是只读缓存,类似数据库或 Redis 的主从架构,主负责读写,从负责读。然后系统内部会把主节点的信息同步给从节点。大家明白了吗? 六、缓存相关配置 下面我们来看下 Eureka Server 对于缓存有哪些配置呢? 6.1 是否开启只读缓存 > eureka.server.useReadOnlyResponseCache 当客户端获取注册信息时,是否先从只读缓存获取。如果为 false,则直接从读写缓存获取。默认为 true。 6.2 定时更新只读缓存的间隔时间 > eureka.server.responseCacheUpdateIntervalMs 默认每隔 30 秒将读写缓存更新的缓存同步到只读缓存。 七、缓存带来的问题 三级缓存看似可以带来性能的提升。但是也会引入其他问题,比如缓存不一致问题。 只读缓存每隔 30s 才会刷新一次,和读写缓存会造成数据的不一致,客户端在 30s 内获取的注册表信息是滞后的。 当使用 Eureka 集群时,这种缓存不一致的问题会更明显,不同的节点之间也会出现只读缓存的数据不一致,所以 Eureka 只能保证高可用,并不能保证强一致性,也就是保证了 AP,不保证 CP,另外我们可以选用强一致性的注册中心,比如 Zookeeper、Nacos,这是后续要讲的内容了。 > 如何缓解不一致的问题呢? (1)在服务端,我们可以设置更新只读缓存的时间间隔,默认是 30 秒,缩短一点,比如 15 秒,频率太高,可能对 Eureka 造成性能问题。 (2)服务端,我们也可以考虑关闭从只读缓存读注册表信息,Eureka Client 直接从读写缓存读取。 八、总结 本篇学习了 Eureka 注册中心 Server 端的三层缓存架构,分为 registry、readOnlyCacheMap、readWriteCacheMap,用来保存服务注册信息。 默认情况下,每隔 30 秒从读写缓存将注册信息更新到只读缓存。 默认情况下,客户端读取注册表时,先从只读缓存读,如果没有,则从读写缓存中读取,如果还是没有,则从本地注册表 registry 读取。 默认情况下,每隔 180 秒定时过期读写缓存。 服务实例注册、下线、故障时,会实时过期读写缓存。 参考资料: www.passjava.cn 《微服务架构深度解析》 Eureka 源码 > 作者简介:悟空,8年一线互联网开发和架构经验,用故事讲解分布式、架构设计、Java 核心技术。《JVM性能优化实战》专栏作者,开源了《Spring Cloud 实战 PassJava》项目,公众号:悟空聊架构。本文已收录至www.passjava.cn

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

【硬创邦】跟hoowa学做智能路由(十三):网络音箱之Android篇

我们继续网络音箱的专题,这章将介绍安卓系统下的MP标准软件控制路由器播放音乐。 什么是MP MP全称为音乐播放进程(Music Player Daemon)。它是一个可定制化功能强大的服务端播放音乐软件,通过其自身的插件和库系统即可完成通过网络控制播放音乐。MP具备一个自己的控制管理协议,这些协议是基于TCP协议进行传输的。客户端连接到服务器上控制服务端进行处理。MPD表示服务端,MPC表示客户端。 MP是一个完全开放源代码的整体系统,因此有很多操作系统下的客户端,在安卓手机中即可使用MPDroid这个软件控制服务端播放,而如果您需要开发自己的产品,完全可以参考官方的资料自己开发一个控制程序,甚至给服务端增加新的功能。 使用MP的好处是,只要你的手机连接到家里的路由器上既可以控制播放音乐,而手机还随身携带,这样不影响你扫地啊、

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

| 硬创公开课

近年来态势感知、威胁情报等等新词不断出现,其实万变不离其宗,它们都是利用已知的数据来判断风险,甚至预知未发生的威胁。这如同一个老练的探险者孤身穿行在原始丛林,他能轻巧自然地避开蛇虫鼠蚁,用脚印来预知猛兽的威胁。这一切都依赖于他那颗善于思考,经验丰富的大脑。 在网络安全的原始森林里,SIEM就扮演这样一个威胁感知大脑的角色。如何在合理成本下打造一个最为强大、合适的 SIEM 系统,是许多安全人员头疼的问题。雷锋网有幸邀请到了拥有十年安全产品经验的百度安全专家兜哥,为大家讲解如何使用开源软件搭建企业的SIEM系统。 嘉宾简介 兜哥,百度安全专家,具有十年云安全产品经验,主要研究方向为机器学习、僵尸网络、威胁情报、沙箱技术、具有多年企业安全建设经验,拥有安全方向相关专利多项;发表多篇安全学术论文。 【百度安全专家-兜哥】 公开课内容整

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Rocky Linux

Rocky Linux

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册