首页 文章 精选 留言 我的

精选列表

搜索[CPU升高],共10004篇文章
优秀的个人博客,低调大师

Elasticsearch 排序性能提升高达 900 倍

作者:来自 ElasticBenjamin Trent,Mayya Sharipova,Chenhui Wang及Libby Lin 了解我们如何通过更快的 float / half_float 排序和 integer 排序的延迟优化来加快 Elasticsearch 排序速度。 Elasticsearch 引入了大量新功能,帮助你为你的使用场景构建最佳搜索解决方案。深入了解我们的示例笔记本,开始免费云试用,或立即在本地机器上尝试 Elastic。 Elasticsearch 在字段类型排序速度方面持续优化,9.0.1 版本已加速了float / half_float 排序。此外,即将发布的 Elasticsearch 9.1 也将带来integer 排序的显著延迟提升。 这些新的排序优化不仅已应用于Elastic Cloud Serverless,也将回溯至 Elasticsearch 8.19,让尚未升级到 Elasticsearch 9.x 的用户也能享受排序性能提升。 通过两个不同的基准测试,我们观察到延迟显著改善: NYC Taxis 的 float 和 half_float 排序:提升 83 倍到 920 倍 Http_logs 的 integer 排序:提升 41 倍到 531 倍 在这里查看我们对 http_logs 的 nightly 基准测试结果(注意:2025 年 5 月新增了排序延迟指标)。 背景 在 2020 年,我们在 Elasticsearch 7.6 中对 long 和 date 字段类型的排序进行了重大优化。例如,按最新时间戳排序检索日志的速度大幅提升。随后在 7.16 版本中,我们引入了 search_after参数,支持了常见的分页场景。 这一次,我们将同样的优化应用到 integer、short 和 byte 字段类型,以及 float 和 half_float 字段类型。 根据你的数据及其在各个 segment 之间的分布情况,你可能会看到对 integer、short、byte、float 和 half_float 数据类型进行排序查询的速度提升从几倍到数百倍不等。 我们是怎么做到的? 我们没有依赖index sorting,而是采用了一种新方法:将 BKD(Block k-dimensional)树与 distance 查询结合使用。BKD 树的叶子块具有便于跳过的特性,因为每个块的字段最小值和最大值是可比较的。 结合使用distance_feature查询,我们可以在比较过程中快速判断哪些块不具备竞争性,从而跳过这些无效的数据区域,大大节省处理时间。 至于是从全局最小值还是最大值计算距离,取决于排序是升序还是降序。 这也意味着字段必须已建立索引,且不能为 null。 更详细的内容可以参考我们之前关于排序查询优化的博客。 下面是结果…… 结果 NYC Taxis 基准测试 在 NYC Taxis 基准测试中(添加了 half_float 类型),性能提升范围为83 倍到 920 倍(通过旧的 P90 延迟除以新的 P90 延迟计算得出): 从对数尺度的图像上可以直观看到显著的提升: Http_logs 基准测试 我们使用了开源工具Rally中的http_logs track,采用了此处提供的默认设置。 在 integer 排序优化中,http_logs 基准测试的八种不同使用场景下,性能提升在41 倍到 531 倍之间(同样通过旧的 P90 延迟除以新的 P90 延迟计算得出)。 同样,即使在对数尺度下,我们也能看到明显的性能提升对比: 根据我们的 nightly 基准测试,integer 排序的性能提升非常显著,结果如下复现: 许多用例都受益于这一性能提升,包括 Observability、Security 和 Search 中的分析仪表盘。更低的延迟也带来了更高效的计算和更低的基础设施成本。 展望 Elasticsearch 9.1 Elastic 9.1 还将包括其他令人兴奋的增强功能,包括但不限于: ES|QL全文搜索(MATCH、QSTR、评分)GA 线性检索器(Advancing Hybrid Search) HNSW 的ACORN-1性能改进 提前终止如何加快 Approximate KNN 搜索速度 我们致力于持续创新,以便您可以构建最快的搜索应用程序。 原文:Elasticsearch sorting just got up to 900x faster - Elasticsearch Labs

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

JVM GC耗时频频升高,我来教你排查

1. 背景 多个业务线的应用出现LongGC告警 最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。 2. 知识回顾 2.1 JVM堆内存划分 新生代(Young Generation) 新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的是新生代的垃圾回收。 老年代(Old Generation) 在新生代中经历了几次Minor GC仍然存活的对象,就会被放到老年代。Major GC针对的是老年代的垃圾回收。本文重点分析的CMS就是一种针对老年代的垃圾回收算法。另外Full GC是针对整堆(包括新生代和老年代)做垃圾回收的。 永久代(Perm) 主要存放已被虚拟机加载的类信息,常量,静态变量等数据。该区域对垃圾回收的影响不大,本文不会过多涉及。 2.2 CMS垃圾回收的6个重要阶段 1、initial-mark 初始标记(CMS的第一个STW阶段),标记GC Root直接引用的对象,GC Root直接引用的对象不多,所以很快。 2、concurrent-mark 并发标记阶段,由第一阶段标记过的对象出发,所有可达的对象都在本阶段标记。 3、concurrent-preclean 并发预清理阶段,也是一个并发执行的阶段。在本阶段,会查找前一阶段执行过程中,从新生代晋升或新分配或被更新的对象。通过并发地重新扫描这些对象,预清理阶段可以减少下一个stop-the-world 重新标记阶段的工作量。 4、concurrent-abortable-preclean 并发可中止的预清理阶段。这个阶段其实跟上一个阶段做的东西一样,也是为了减少下一个STW重新标记阶段的工作量。增加这一阶段是为了让我们可以控制这个阶段的结束时机,比如扫描多长时间(默认5秒)或者Eden区使用占比达到期望比例(默认50%)就结束本阶段。 5、remark 重标记阶段(CMS的第二个STW阶段),暂停所有用户线程,从GC Root开始重新扫描整堆,标记存活的对象。需要注意的是,虽然CMS只回收老年代的垃圾对象,但是这个阶段依然需要扫描新生代,因为很多GC Root都在新生代,而这些GC Root指向的对象又在老年代,这称为“跨代引用”。 6、concurrent-sweep ,并发清理。 3. 分析 下面先看看出现LongGC时发生了什么。 选取其中一个应用分析其GC日志,发现LongGC发生在CMS 的收集阶段。 箭头1 显示abortable-preclean阶段耗时4.04秒。箭头2 显示的是remark阶段,耗时0.11秒。 虽然abortable-preclean阶段是concurrent的,不会暂停其他的用户线程。就算不优化,可能影响也不大。但是天天收到各个业务线的gc报警,长久来说也不是好事。 在调优之前先看下该应用的GC统计数据,包括GC次数,耗时: 统计期间内(18天)发生CMS GC 69次,其中 abortable preclean阶段平均耗时2.45秒,final remark阶段平均112ms,最大耗时170ms. 4. 优化目标 降低abortable preclean 时间,而且不增加final remark的时间(因为remark是STW的)。 5. JVM参数调优 5.1 第一次调优 先尝试调低abortable preclean阶段的时间,看看效果。 有两个参数可以控制这个阶段何时结束: -XX:CMSMaxAbortablePrecleanTime=5000 默认值5s,代表该阶段最大的持续时间 -XX:CMSScheduleRemarkEdenPenetration=50 默认值50%,代表Eden区使用比例超过50%就结束该阶段进入remark 调整为最大持续时间为1s,Eden区使用占比10%,如下: -XX:CMSMaxAbortablePrecleanTime=1000 -XX:CMSScheduleRemarkEdenPenetration=10 为什么调整成这样两个值,我们是这样考虑的:首先每次CMS都发生在老年代使用占比达到80%时,因为这是由下面两个参数决定的: -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly 而老年代的增长是由于部分对象在Minor GC后仍然存活,被晋升到老年代,导致老年代使用占比增长的,也就是在每次CMS GC发生之前刚刚发生过一次Minor GC,所以在那一刻新生代的使用占比是很低的。那么我们预计这个时候尽快结束abortable preclean阶段,在remark时就不需要扫描太多的Eden区对象,remark STW的时间也就不会太长。 调整的思路是这样了,那到底效果如何呢? 第一次调整的的结果 在统计期间(17小时左右)内,发生过2次CMS GC。Abortable Preclean 平均耗时835ms,这是预期内的。但是Final Remark 平均耗时495ms(调整前是112ms),其中一次是80ms,另一次是910ms!将近1秒钟!Remark是STW的!对于要求低延时的应用来说这是无法接受的! 对比这两次CMS GC的详细GC日志,我们发现了一些对分析问题非常有用的东西。 remark耗时80ms的那次GC日志 [YG occupancy: 181274 K (1887488 K)] - 年轻代当前占用情况和总容量 耗时80ms的这次remark发生时(早上9点,非高峰时段),新生代(YG)占用181.274M。 remark耗时910ms的那次GC日志 [YG occupancy: 773427 K (1887488 K)] 耗时910ms的这次remark发生时(晚上10点左右,高峰时段),新生代(YG)占用773.427M。因为这个时候高峰期,新生代的占用量上升的非常快,几乎同样的时间内,非高峰时段仅上升到181M,但是高峰时段就上升到773M。 这里能得出一个有用的结论:如果abortale preclean阶段时间太短,随后在remark时,新生代占用越大,则remark持续的时间(STW)越长。 这就陷入了两难了,不缩短abortale preclean耗时会报longgc;缩短的话,remark阶段又会变长,而且是STW,更不能接受。 对于这种情况,CMS提供了CMSScavengeBeforeRemark参数,尝试在remark阶段之前进行一次Minor GC,以降低新生代的占用。 -XX:+CMSScavengeBeforeRemark Enables scavenging attempts before the CMS remark step. By default, this option is disabled. 5.2 第二次调优 调优前的考虑: 增加-XX:+CMSScavengeBeforeRemark 不是没有代价的,因为这会增加一次Minor GC停顿。所以这个方案好或者不好的判断标准就是:增加CMSScavengeBeforeRemark参数之后的minor GC停顿时间 + remark 停顿时间如果比增加之前的remark GC停顿时间要小,这才是好的方案。 第二次调整的结果 在统计期间(20小时左右)内,发生3次CMS GC。Abortable preclean 平均耗时693ms。Final remark平均耗时50ms,最大耗时60ms。Final remark的时间比调优前的平均时间(112ms)更低。 那么CMS GC前的Minor GC停顿时间又如何呢?来看看详细的GC日志。 3次CMS GC remark前的Minor GC日志分析 第1次是非高峰时段的表现,Minor GC 耗时 0.01s + remark耗时 0.06s = 0.07s = 70ms,如下 第2次是高峰时段,Minor GC 耗时 0.01s + remark耗时 0.05s = 0.06s = 60ms,如下 第3次是非高峰时段,Minor GC 耗时 0.00s + remark耗时 0.04s = 0.04s = 40ms,如下 所以,3次Minor GC + remark耗时的平均耗时 < 60ms,这比第一次调优时remark平均耗时495ms好得多了。 6.优化结果 至此,我们最初的目标- 降低abortable preclean 时间,而且不增加final remark的时间 ,已经达到了。甚至remark的时间也缩短了。 7. 小结 解决abortable preclean 时间过长的方案可以归结为两步: 缩短abortable preclean 时长,通过调整这两个参数: -XX:CMSMaxAbortablePrecleanTime=xxx -XX:CMSScheduleRemarkEdenPenetration=xxx 调整为多少的一个判断标准是:abortable preclean阶段结束时,新生代的空间占用不能大于某个参考值。 在前面第一次调优后,新生代(YG)占用181.274M,remark耗时80ms;新生代(YG)占用773.427M时,remark耗时910ms。所以这个参考值可以是300M。而如果新生代增长过快,像这次调优应用2秒内就能用光2G新生代堆空间的,就只能通过CMSScavengeBeforeRemark做一次Minor GC了。 增加CMSScavengeBeforeRemark参数开启remark前进行Minor GC的尝试 虽然官方说明这个增加这个参数是尝试进行Minor GC,不一定会进行。但实际使用起来,几乎每次remark前都会Minor GC。 8. 总结 调优前明确目标 调优过程对GC指标进行数据统计分析(本文借助gceasy.io在线分析工具)来验证效果 需要能看懂GC日志 GC调优不是一个一蹴而就的事情,它是微调-观察-再微调的过程。所以需要比较深入了解GC的一些基础,才能少走弯路。 小编总结了2020面试题,这份面试题的包含的模块分为19个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM 。 关注公众号:程序员白楠楠,获取上述资料。

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

JVM GC耗时频频升高,这次排查完想说:还有谁?

点击上方蓝色字关注我们~ 1. 背景 多个业务线的应用出现LongGC告警 最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。 2. 知识回顾 2.1 JVM堆内存划分 新生代(Young Generation) 新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的是新生代的垃圾回收。 老年代(Old Generation) 在新生代中经历了几次Minor GC仍然存活的对象,就会被放到老年代。Major GC针对的是老年代的垃圾回收。本文重点分析的CMS就是一种针对老年代的垃圾回收算法。另外Full GC是针对整堆(包括新生代和老年代)做垃圾回收的。 永久代(Perm) 主要存放已被虚拟机加载的类信息,常量,静态变量等数据。该区域对垃圾回收的影响不大,本文不会过多涉及。 2.2 CMS垃圾回收的6个重要阶段 1、initial-mark 初始标记(CMS的第一个STW阶段),标记GC Root直接引用的对象,GC Root直接引用的对象不多,所以很快。 2、concurrent-mark 并发标记阶段,由第一阶段标记过的对象出发,所有可达的对象都在本阶段标记。 3、concurrent-preclean 并发预清理阶段,也是一个并发执行的阶段。在本阶段,会查找前一阶段执行过程中,从新生代晋升或新分配或被更新的对象。通过并发地重新扫描这些对象,预清理阶段可以减少下一个stop-the-world 重新标记阶段的工作量。 4、concurrent-abortable-preclean 并发可中止的预清理阶段。这个阶段其实跟上一个阶段做的东西一样,也是为了减少下一个STW重新标记阶段的工作量。增加这一阶段是为了让我们可以控制这个阶段的结束时机,比如扫描多长时间(默认5秒)或者Eden区使用占比达到期望比例(默认50%)就结束本阶段。 5、remark 重标记阶段(CMS的第二个STW阶段),暂停所有用户线程,从GC Root开始重新扫描整堆,标记存活的对象。需要注意的是,虽然CMS只回收老年代的垃圾对象,但是这个阶段依然需要扫描新生代,因为很多GC Root都在新生代,而这些GC Root指向的对象又在老年代,这称为“跨代引用”。 6、concurrent-sweep ,并发清理。 3. 分析 下面先看看出现LongGC时发生了什么。 选取其中一个应用分析其GC日志,发现LongGC发生在CMS 的收集阶段。 箭头1 显示abortable-preclean阶段耗时4.04秒。箭头2 显示的是remark阶段,耗时0.11秒。 虽然abortable-preclean阶段是concurrent的,不会暂停其他的用户线程。就算不优化,可能影响也不大。但是天天收到各个业务线的gc报警,长久来说也不是好事。 在调优之前先看下该应用的GC统计数据,包括GC次数,耗时: 统计期间内(18天)发生CMS GC 69次,其中 abortable preclean阶段平均耗时2.45秒,final remark阶段平均112ms,最大耗时170ms. 4. 优化目标 降低abortable preclean 时间,而且不增加final remark的时间(因为remark是STW的)。 5. JVM参数调优 5.1 第一次调优 先尝试调低abortable preclean阶段的时间,看看效果。 有两个参数可以控制这个阶段何时结束: -XX:CMSMaxAbortablePrecleanTime=5000 默认值5s,代表该阶段最大的持续时间 -XX:CMSScheduleRemarkEdenPenetration=50 默认值50%,代表Eden区使用比例超过50%就结束该阶段进入remark 调整为最大持续时间为1s,Eden区使用占比10%,如下: -XX:CMSMaxAbortablePrecleanTime=1000 -XX:CMSScheduleRemarkEdenPenetration=10 为什么调整成这样两个值,我们是这样考虑的:首先每次CMS都发生在老年代使用占比达到80%时,因为这是由下面两个参数决定的: -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly 而老年代的增长是由于部分对象在Minor GC后仍然存活,被晋升到老年代,导致老年代使用占比增长的,也就是在每次CMS GC发生之前刚刚发生过一次Minor GC,所以在那一刻新生代的使用占比是很低的。那么我们预计这个时候尽快结束abortable preclean阶段,在remark时就不需要扫描太多的Eden区对象,remark STW的时间也就不会太长。 调整的思路是这样了,那到底效果如何呢? 第一次调整的的结果 在统计期间(17小时左右)内,发生过2次CMS GC。Abortable Preclean 平均耗时835ms,这是预期内的。但是Final Remark 平均耗时495ms(调整前是112ms),其中一次是80ms,另一次是910ms!将近1秒钟!Remark是STW的!对于要求低延时的应用来说这是无法接受的! 对比这两次CMS GC的详细GC日志,我们发现了一些对分析问题非常有用的东西。 remark耗时80ms的那次GC日志 [YG occupancy: 181274 K (1887488 K)]- 年轻代当前占用情况和总容量 耗时80ms的这次remark发生时(早上9点,非高峰时段),新生代(YG)占用181.274M。 remark耗时910ms的那次GC日志 [YG occupancy: 773427 K (1887488 K)] 耗时910ms的这次remark发生时(晚上10点左右,高峰时段),新生代(YG)占用773.427M。因为这个时候高峰期,新生代的占用量上升的非常快,几乎同样的时间内,非高峰时段仅上升到181M,但是高峰时段就上升到773M。 这里能得出一个有用的结论:如果abortale preclean阶段时间太短,随后在remark时,新生代占用越大,则remark持续的时间(STW)越长。 这就陷入了两难了,不缩短abortale preclean耗时会报longgc;缩短的话,remark阶段又会变长,而且是STW,更不能接受。 对于这种情况,CMS提供了CMSScavengeBeforeRemark参数,尝试在remark阶段之前进行一次Minor GC,以降低新生代的占用。 -XX:+CMSScavengeBeforeRemark Enables scavenging attempts before the CMS remark step. By default, this option is disabled. 5.2 第二次调优 调优前的考虑: 增加-XX:+CMSScavengeBeforeRemark不是没有代价的,因为这会增加一次Minor GC停顿。所以这个方案好或者不好的判断标准就是:增加CMSScavengeBeforeRemark参数之后的minor GC停顿时间 + remark 停顿时间如果比增加之前的remark GC停顿时间要小,这才是好的方案。 第二次调整的结果 在统计期间(20小时左右)内,发生3次CMS GC。Abortable preclean 平均耗时693ms。Final remark平均耗时50ms,最大耗时60ms。Final remark的时间比调优前的平均时间(112ms)更低。 那么CMS GC前的Minor GC停顿时间又如何呢?来看看详细的GC日志。 3次CMS GC remark前的Minor GC日志分析 第1次是非高峰时段的表现,Minor GC 耗时 0.01s + remark耗时 0.06s = 0.07s = 70ms,如下 第2次是高峰时段,Minor GC 耗时 0.01s + remark耗时 0.05s = 0.06s = 60ms,如下 第3次是非高峰时段,Minor GC 耗时 0.00s + remark耗时 0.04s = 0.04s = 40ms,如下 所以,3次Minor GC + remark耗时的平均耗时 < 60ms,这比第一次调优时remark平均耗时495ms好得多了。 6.优化结果 至此,我们最初的目标- 降低abortable preclean 时间,而且不增加final remark的时间 ,已经达到了。甚至remark的时间也缩短了。 7. 小结 解决abortable preclean 时间过长的方案可以归结为两步: 缩短abortable preclean 时长,通过调整这两个参数: -XX:CMSMaxAbortablePrecleanTime=xxx -XX:CMSScheduleRemarkEdenPenetration=xxx 调整为多少的一个判断标准是:abortable preclean阶段结束时,新生代的空间占用不能大于某个参考值。在前面第一次调优后,新生代(YG)占用181.274M,remark耗时80ms;新生代(YG)占用773.427M时,remark耗时910ms。所以这个参考值可以是300M。而如果新生代增长过快,像这次调优应用2秒内就能用光2G新生代堆空间的,就只能通过CMSScavengeBeforeRemark做一次Minor GC了。 增加CMSScavengeBeforeRemark参数开启remark前进行Minor GC的尝试 虽然官方说明这个增加这个参数是尝试进行Minor GC,不一定会进行。但实际使用起来,几乎每次remark前都会Minor GC。 8. 总结 调优前明确目标 调优过程对GC指标进行数据统计分析(本文借助gceasy.io在线分析工具)来验证效果 需要能看懂GC日志 GC调优不是一个一蹴而就的事情,它是微调-观察-再微调的过程。所以需要比较深入了解GC的一些基础,才能少走弯路。 来源 |https://urlify.cn/mM7rIr 在公众号菜单中可自行获取专属架构视频资料,包括不限于 java架构、python系列、人工智能系列、架构系列,以及最新面试、小程序、大前端均无私奉献,你会感谢我的哈 往期热门文章: 1,架构的本质:如何打造一个有序的系统? 2, 分布式高可靠之负载均衡,今天看了你肯定会 3, 分布式数据之缓存技术,一起来揭开其神秘面纱 4,分布式数据复制技术,今天就教你真正分身术 5, 数据分布方式之哈希与一致性哈希,我就是个神算子 6 ,分布式存储系统三要素,掌握这些就离成功不远了 7 ,想要设计一个好的分布式系统,必须搞定这个理论 8 , 分布式通信技术之发布订阅,干货满满 9, 分布式通信技术之远程调用:RPC 10 ,秒杀系统每秒上万次下单请求,我们该怎么去设计 本文分享自微信公众号 - 架构师修炼(jiagouxiulian)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

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

行业数据风险升高 85%数据泄露有人为因素

近几年,随着云计算、人工智能等新兴技术发展,加速了数据价值的发现和流通,同时也使得数据安全问题不断凸显。 例如2020年1月,英国政府泄露2800万未成年人数据,2020年4月,德国政府遭冠状病毒主题钓鱼攻击损失数千万欧元,2020年6月,美国200多个公检法部门泄露296GB数据文件,2020年10月,希腊电信巨头遭黑客攻击,大量用户个人信息被泄露,2021年4月,苹果代工厂“广达”被国际黑客组织REvil攻击,黑客组织盗取了包括正处于计划量产中的MacBook Pro图纸在内的各类机密文件数据,并通过加密方式勒索赎金(约合3.2亿元人民币)。这些不仅给民众和社会公共利益造成了威胁和损害,甚至会严重损害相关政府部门和行业的声誉。 全国政协委员、上海市信息安全行业协会名誉会长谈剑锋表示,数据有价值就会有风险,只是程度或者影响后果不同,这是共性也是普遍性的问题。 那么,从行业角度来看,目前医疗、金融、能源和工业等各个行业都存在哪些数据安全风险,又可以采取哪些保护措施,来控制风险? 医疗数据具有高敏感性,能源和工业数据具有高价值性 近几年针对数据的威胁和风险迅速升级,根据美国电信巨头Verizon公司发布的,由81个国家参与调研的《2020年数据泄露调查报告》(下称泄露报告)显示,72%数据安全事件的受害者是大型企业,70%的数据泄露事件涉及外部入侵。 而各个行业由于数据特点和价值不同,其安全风险又呈现不同的特征,并且受害程度也不同。中关村网络安全与信息化产业联盟理事、联盟数据与信息安全智库专家柳遵梁表示,行业数据安全风险的大小取决于两个基本因素,一是数据价值高低;二是数据泄露后果严重程度。 比如医疗行业,北京师范大学网络法治国际中心执行主任吴沈括表示,医疗行业的特点是,其拥有大量患者的健康状况数据,而这些数据具有较强的敏感性和隐私性,一旦这些数据泄露,可能会影响后续诊疗,也会对患者生活、工作带来较大的负面影响。 “除数据泄露外,数据勒索也是医疗行业常见的数据安全风险,将会带来严重威胁”,广东工业大学教授刘文印说。根据泄露报告显示,针对医疗领域的勒索软件攻击连续两年占所有恶意软件事件的70%以上。 再比如,能源和工业行业,吴沈括指出,能源是国家的基础性战略资源,因此能源行业数据,实际上关系到国家的战略安全;而工业领域,随着工业日益成为提升制造生产力、竞争力、创新力的关键产业,工业数据的高价值性特点越来越凸显,这导致工业数据也成为黑客攻击的重点目标。 今年5月,美国最大输油管道因勒索软件攻击关闭。黑客通过加密手段锁住科洛尼尔管道运输公司计算机系统并盗取机密文件,试图以解锁为条件来勒索赎金。该公司一度被迫关闭整个能源供应网络,极大影响了美国东海岸燃油等能源供应。 根据工业和信息化部发布的《关于工业大数据发展的指导意见》,我国34%的联网工业设备存在高危漏洞,这些设备的厂商、型号、参数等信息长期遭恶意嗅探,仅在2019年上半年“嗅探”事件就高达5151万起。 谈剑锋表示,能源和工业领域比较复杂,它们并非是纯粹的信息系统,工控系统与物理世界紧密互动,一旦工控系统受到攻击,轻则造成质量事故或者停产,重则人身伤害甚至直接导致现实社会中的重大灾难和群体性事件。因此,保证工控系统的生产数据安全,被能源和工业企业看做重中之重的事情。同时,谈剑锋指出,近年来随着新兴技术的兴起,智能工厂技术不断成熟,这使得以往封闭的数据围墙必然要被打通,工业领域的数据安全压力骤然上升,安全管理挑战越来越大。 85%数据泄露有人为因素,医疗保健行业因员工疏忽致数据泄露占比23% 那么,这些行业的数据安全风险是由什么造成的。柳遵梁指出,总体来看,分为外部入侵和内部风险。外部入侵主要由于入侵者有足够的动机、精力和机会,一方面可以获取巨大的利益;另一方面又由于各个行业的网络是相对开放的,给外部入侵者制造了机会。 而内部风险主要由于内部人员会受到各种各样的诱惑,使得他们铤而走险,通过对外非法提供数据来获取利益,柳遵梁表示。 而各行各业由于数据特点不同,其安全风险原因也不同,85%的数据泄露都有人为因素。这其中有外部因素,但更多的还是内部因素。 谈剑锋指出,正所谓,坚固的堡垒往往是从内部被攻破的。从已经披露的案例来看,内部的人为因素占到74%。一方面,员工由于疏忽无意造成违规也是重要原因,例如,2020年娱乐业中有34%的数据泄露是由员工粗心造成的;医疗保健行业尽管法规严格,但由员工疏忽造成的数据泄露还是占到23%。 另一方面,也可能出于个人利益或者个人泄愤的目的而故意违规。这几年因为个人利益发生数据泄露的案件数量开始攀升,而个人泄愤的情况也频频出现,比较极端的表现就是“删库跑路”。 据IBM发布的《2020年数据泄露成本报告》(以下称成本报告;本报告中的年份是指发布年份。2020年报告中分析的数据泄露发生在2019年8月至2020年4月之间。),科技、交通、零售和金融行业由于恶意攻击,造成数据泄露的比例最高;而研究、公共部门因人为错误导致数据泄露的比例最高。并且,系统故障也成为环保和消费行业中出现数据漏洞的根本原因。 刘文印指出,对企业而言,一旦发生数据安全风险事件,不仅需要赔偿用户,还要缴纳政府的罚款,同时还有事后的法律成本和公关成本,这些都是企业要付出的代价。 刘文印表示,根据GDPR(《通用数据保护条例》)相关规定,数据隐私泄露的违法罚款可以高达全球营业额的4%(最高2000万欧元),中国即将出台的《个人信息保护法》征求意见稿中,企业罚款可以达到5%(最高5000万人民币),另外再追加个人责任人的责任和罚款,最高100万人民币。 各个行业由于特点不同,其为数据安全风险所付出的代价也不同。根据成本报告数据显示,医疗行业数据泄露的损失最大,平均总成本最高。其次,是能源和金融服务行业,这些行业的数据价值也都较大。 并且,受到更严格监管要求的组织具有更高的平均数据泄露成本,比如医疗保健、能源、金融服务和制药的平均数据泄露总成本明显高于监管较少的行业,如酒店、媒体和研究。 谈剑锋指出,随着形势的转变,数据安全风险原因和来源也更加复杂。总体而言,工作环境趋于开放,网络及信息系统就需要更安全、更灵活,这在一定程度上也会带来新的数据安全问题,给问题的原因分析也增添了难度。 “主动防御”才是各行业破解数据安全难题之钥 那么,各个行业面对这些数据安全风险,应采取哪些举措,这也是行业数据安全问题的重要难题。刘文印指出,目前各个行业对数据泄露的解决方式更多的是采用头痛医头,脚痛医脚,当数据风险被识别后再采取相应的解决方案。而这些“被动式防御”既滞后,又无法从根本上解决系统性和机制性的问题。 据成本报告数据显示,各个行业识别风险都是需要一定时间的,长短不一。虽然金融行业识别风险所需时间最短,但也要177天,而医疗保健行业识别风险所需时间最长,长达236天。同时,风险识别后,控制风险也需要一定时间,大致在50天-100天之间。 根据报告数据,各个行业从数据风险的识别,再到控制,基本都要在200-350天范围内,这个时间越长,数据风险所造成的危害就越大。而数据泄露成本最大的医疗行业,其所需要的识别和控制风险时间还最长。 因此,传统的网络安全防控方式,即发现、识别风险再控制风险的路径已经行不通。中关村网络安全与信息化产业联盟副理事长、数据安全治理专业委员会主任刘晓韬表示,解决数据安全风险问题,不应是事后发生了,再去追踪,而应根据行业特点,采取有针对性的“主动式”防御手段。 他指出,比如医疗行业,针对数据具有高敏感性,容易受到黑客攻击的问题,可以通过数据库防火墙或者数据安全网关这些防护措施,来加强防护;针对医疗数据具有高价值性,容易受到数据勒索,或者由于运维人员疏忽而导致数据泄露的这些问题,可以采取数据脱敏等相关技术手段。 “再比如能源行业,目前国网平台已经实现了数据共享,而数据的互联网化会导致一些新的风险。”刘晓韬表示。针对该问题,刘晓韬认为,可以首先对这些数据进行梳理,再通过数据态势感知或者数据管控运维平台,运用平台化的措施,再加上数据加密或者防火墙的手段,对其进行特殊保护。 除了技术手段外,数据安全的保护还要靠管理。刘文印表示,数据安全是“三分靠技术,七分看管理”,管理问题是重点,也是难点。 谈剑锋指出,防护数据安全风险,在管理方面,可以从三方面着手,一是政府加强对数据安全产业的扶持和监管力度,二是政企单位要贯彻《网络安全法》、《数据安全法》及《个人信息保护法》等相关法律法规,制定严谨详细的数据安全管理制度并严格执行,落实好数据的分级分权管理,尽量降低核心数据泄露的风险;三是企业要加强全员网络安全意识教育培训,提升员工相关意识和技能,切实做好数据安全防护工作。 【责任编辑:未丽燕 TEL:(010)68476606】

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

openGauss3.0.0新特性--新增集群管理工具,提升高可用能力

openGauss作为一款企业级开源关系型数据库,具有高性能,高可用,高安全,易运维等特点。CM的加入,使openGauss集群在易运维,可靠性等方面进一步提升。 CM是什么? CM(Cluster Manager)是一款集群资源管理软件。支持自定义资源监控,提供了数据库主备的状态监控、网络通信故障监控、文件系统故障监控、故障自动主备切换等能力。 CM能做什么? CM提供了丰富的集群管理能力,如集群、节点、实例级的启停,集群状态查询、选主、主备切换、日志管理等。 CM架构图如上所示,组件包括4个可执行文件: cm_server:cm的服务端,负责收集cma上报的状态,并作为仲裁中心和全局配置中心,集群能否稳定运行以及在发生单点故障后,备实例能否正常切换为主来保证集群的可用性,都与CMS是否稳定相关。 cm_agent:通常集群中的每台机器都安装一个,负责管理本节点所有实例的状态检测和上报以及cms下发命令的执行。 om_monitor:通常集群中的每台机器都安装一个,负责保障本节点cm_agent进程的健康。 cm_ctl:cm的客户端工具,提供集群管理操作。 进程监控 cm接管集群后,会周期性的对集群中的所有进程(包括cma,cms,openGauss等进程)进行探测监控,负责集群进程的保活及僵死恢复。 数据库状态采集 cma会周期性的采集openGauss数据库的运行状态,采集指标包括主备状态,日志位置及回放速率,日志发送接收进度等信息,并汇总在cms,这些信息将被用于选主仲裁及工具展示。 日志压缩 cma提供了日志管理能力,通过日志文件总大小,日志文件数量,日志时间等维度对日志目录进行监控,自动归档,清理日志。 可靠的选主仲裁 当数据库主机发生不可恢复的故障而无法继续提供服务时,集群管理会感知并基于qurom协议,进行选主仲裁。CM的仲裁都是使用的状态机模式,依据当前数据库状态进行仲裁逻辑的推进。 以上是CMS选主仲裁的时序图,总体流程包含上报和仲裁两大部分(仲裁命令实际实时都是通过信息上报获取的,图中返回结果只是为了方便理解)。 信息采集上报: 每个数据库实例的状态都会被cma定时采集并上报cms。 选主仲裁: cms周期性的检测数据库的主备状态,如果发现主机不能够正常提供服务,则会触发选主仲裁。 1.状态:无主。 操作:给所有备机发送命令,使其进入LOCK1状态。 说明: 如果备机此时连接主机,则lock1不会成功。Lock1状态成功主要有两个条件:1)备机与主机复制链路永久断开且不再主动重连。2)备机日志全部回放结束,不再增加。 2. 状态:(n+1)/2个备机已经进入LOCK1状态。 操作:选合适的主,发送failover 说明:根据qurom的特点,当(n+1)/2个备机进入LOCK1状态后,这几个备机中一定有至少1个同步备,cms从这几个备机中找到日志最多的节点(一定是同步备),发送升主命令。如果有多个满足条件的备机,则按照以下策略: a)原主能起来,则选原主 b)选择与原主同AZ的 c)按节点顺序 3. 状态:新主升主成功。 操作:给主备机发送unlock/lock2消息,恢复成正常状态 说明:如果主机处于lock1状态,则给主机发送unlock消息使其退出lock1状态,如果备机处于lock1状态,则给备机发送lock2消息,指定新主ip,使其连接新主。 通过以上逻辑,CM保证了集群永远只有一个可写主机,且RPO=0。 CM集群的安装 在安装带CM的openGauss之前,需要创建clusterconfig.xml配置文件。XML文件包含部署openGauss+CM的服务器信息、安装路径、IP地址以及端口号等。用于告知openGauss、CM如何部署。用户需根据不同场配置对应的XML文件,带CM的安装,除安装配置文件需要添加CM外,其余步骤与openGauss安装完全相同。 下面以一主二备的部署方案为例,说明如何创建带CM的openGauss集群XML配置文件。以下value取值信息仅为示例,可自行替换。每行信息均有注释进行说明。 集群安装xml样例 注:此处xml中的ip、nodeNames、path等变量均只作为演示,需要按实际情况填写。 <?xml version="1.0" encoding="UTF-8"?><ROOT> <!-- openGauss整体信息 --> <CLUSTER> <!-- 数据库名称 --> <PARAM name="clusterName" value="dbCluster" /> <!-- 数据库节点名称(hostname) --> <PARAM name="nodeNames" value="node1,node2,node3" /> <!-- 节点IP,与nodeNames一一对应 --> <PARAM name="backIp1s" value="192.168.0.11,192.168.0.12,192.168.0.13"/> <!-- 数据库安装目录--> <PARAM name="gaussdbAppPath" value="/opt/huawei/install/app" /> <!-- 日志目录--> <PARAM name="gaussdbLogPath" value="/var/log/omm" /> <!-- 临时文件目录--> <PARAM name="tmpMppdbPath" value="/opt/huawei/tmp"/> <!--数据库工具目录--> <PARAM name="gaussdbToolPath" value="/opt/huawei/install/om" /> <!--数据库core文件目录--> <PARAM name="corePath" value="/opt/huawei/corefile"/> <!-- openGauss类型,此处示例为单机类型,“single-inst”表示单机一主多备部署形态--> <PARAM name="clusterType" value="single-inst"/> </CLUSTER> <!-- 每台服务器上的节点部署信息 --> <DEVICELIST> <!-- node1上的节点部署信息 --> <DEVICE sn="1000001"> <!-- node1的hostname --> <PARAM name="name" value="node1"/> <!-- node1所在的AZ及AZ优先级 --> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.11"/> <PARAM name="sshIp1" value="192.168.0.11"/> <!--CM--> <!--CM数据目录--> <PARAM name="cmDir" value="/opt/huawei/install/data/cm" /> <PARAM name="cmsNum" value="1" /> <!--CM监听端口--> <PARAM name="cmServerPortBase" value="5000" /> <PARAM name="cmServerlevel" value="1" /> <!--CM所有实例所在节点名及监听ip--> <PARAM name="cmServerListenIp1" value="192.168.0.11,192.168.0.12,192.168.0.13" /> <PARAM name="cmServerRelation" value="node1,node2,node3" /> <!--dbnode--> <PARAM name="dataNum" value="1"/> <!--DBnode端口号--> <PARAM name="dataPortBase" value="26000"/> <!--DBnode主节点上数据目录,及备机数据目录--> <PARAM name="dataNode1" value="/opt/huawei/install/data/db1,node2,/opt/huawei/install/data/db1,node3,/opt/huawei/install/data/db1"/> <!--DBnode节点上设定同步模式的节点数--> <PARAM name="dataNode1_syncNum" value="0"/> </DEVICE> <!-- node2上的节点部署信息,其中“name”的值配置为主机名称(hostname) --> <DEVICE sn="1000002"> <PARAM name="name" value="node2"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.12"/> <PARAM name="sshIp1" value="192.168.0.12"/> <PARAM name="cmDir" value="/opt/huawei/install/data/cm" /> </DEVICE> <!-- node3上的节点部署信息,其中“name”的值配置为主机名称(hostname) --> <DEVICE sn="1000003"> <PARAM name="name" value="node3"/> <PARAM name="azName" value="AZ1"/> <PARAM name="azPriority" value="1"/> <!-- 如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP --> <PARAM name="backIp1" value="192.168.0.13"/> <PARAM name="sshIp1" value="192.168.0.13"/> <PARAM name="cmDir" value="/opt/huawei/install/data/cm" /> </DEVICE> </DEVICELIST></ROOT> 安装过程与openGauss安装一致,如需请查看官网。 安装后集群状态确认 部分出现名词的解析: CMServer State :cm的状态信息。 node:节点号和节点名称。 instance:表示instanceId(此id为集群内的概念,每个集群中的实例都会拥有一个独一无二的instanceId,用来标识此实例)。 state:cm的角色信息,primary表示主,standby表示备,unknown表示无法获取到cm的角色信息(一般故障场景才会出现unknown)。 Cluster State:集群相关状态信息。 cluster_state:集群状态,一共有三种状态:Normal,表示数据库正常;Degraded,表示数据库可用,但有某个数据节点存在异常;Unavailable,表示数据库不可用。 Datanode State:数据库各个实例的信息。 node:数据库实例所在节点的节点号和节点名称。 instance:表示instanceId(此id为集群内的概念,每个集群中的实例都会拥有一个独一无二的instanceId,用来标识此实例)。 state:数据库实例的状态信息,由三个具体的信息注册:第一个字段P/S表示初始的角色信息,P为主,S为备;第二个字段为角色信息;第三个字段为数据库具体的状态。 至此,一个由CM管理的一主两备openGauss集群就部署好了,后续就可以用过CM提供的工具对集群做一些基本的运维操作。 CM客户端工具cm_ctl cm_ctl客户端工具提供了丰富的集群操作和管理接口,使集群管理变得更加便捷和可靠。 功能概览 启停集群 停止整个集群: 任意机器,普通用户下执行命令: cm_ctl stop 执行结果: 任意机器上查询状态: cm_ctl query -Cv 查询结果: 启动整个集群 任意机器上执行命令: cm_ctl start 执行结果: 任意机器上查询状态: cm_ctl query -Cv 查询结果: 启停节点 任意机器上执行停止命令: #停止节点1上的数据库实例,-n后面指定节点号,-D后面指定数据库实例的数据目录。cm_ctl stop -n 1 -D /home/omm/cluster/data/dn1 任意机器上执行启动命令: #启动节点1上的数据库实例,-n后面跟节点号,-D后面跟数据库实例的数据目录。cm_ctl start -n 1 -D /home/omm/cluster/data/dn1 openGauss数据库主备切换 指定数据库切换为主 任意机器执行命令: #-n参数后面跟的是需要升主的数据节点的节点id,-D后面跟的是数据目录(可参考前面步骤获得数据目录)cm_ctl switchover -n 3 -D /home/omm/cluster/data/dn3 结果: 任意机器上查询状态: cm_ctl query -Cv 查询结果: 恢复成初始主备关系 任意节点执行命令: cm_ctl switchover -a 结果: 任意机器上查询状态: cm_ctl query -Cv 代码片段:可切换语言,无法单独设置文字格式 查询结果: CM集群部分高可用能力 CM支持数据库进程保活,备机故障后自动主备切换,备机日志损坏后的自动重建等高可用能力。 自动恢复数据库实例演示 在节点1(node1)上,故障注入 #查看数据库进程id,并kill掉数据库进程ps -uxkill -9 [pid] 查看进程示例: 查看进程信息,发现数据库进程已经被拉起 ps -ux 查看进程示例: 其他高可用场景能力大家可以实际安装体验。 CM集群管理的加入,使openGauss的高可用能力得到了巨大的提升,其强大的故障检测和自动恢复能力使数据库在应对各种故障场景的运维变得更加简单可靠。 欢迎访问openGauss官方网站 openGauss开源社区官方网站: https://opengauss.org openGauss组织仓库: https://gitee.com/opengauss openGauss镜像仓库: https://github.com/opengauss-mirror 扫码关注我们 微信公众号|openGauss 微信社群小助手|openGauss-bot 本文分享自微信公众号 - openGauss(openGauss)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

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

开源 RISC-V CPU挑战闭源 x86 和 ARM CPU

SiFive 上周宣布它创造了两款可供授权的芯片设计。它的 32 位 E31 Coreplex 处理器设计针对的是物联网设备,64 位 CorePlex E51 则可用于服务器、存储设备和网络处理器等计算设备。 芯片授权的价格是固定的,不需要版税。相比之下,ARM 和 Imagination Technologies 的芯片设计授权都征收授权费和版税。除了授权外,该公司还计划在今年晚些时候生产芯片。

资源下载

更多资源
Nacos

Nacos

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

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部分的功能。

用户登录
用户注册