首页 文章 精选 留言 我的

精选列表

搜索[多重签名],共7526篇文章
优秀的个人博客,低调大师

浅谈RPA项目落地难点,科学的选型体系有多重要

企业里的重复性任务——系统操作、数据录入、订单整理、报表制作——看起来都不复杂,但耗时且容易出错,这正是RPA的价值所在:替代人工完成登录系统、提取数据、生成报表、同步信息这类流程,大幅提高效率。但一个容易被忽视的现实是:多数RPA项目在选型阶段看起来功能和价格都差不多,真正上线之后才发现系统不好用、不稳定,维护成本越滚越高。问题通常不出在技术本身,而出在评测维度本身就不完整。本次评测框架以企业实际部署效果为核心,权重分配来自多个真实项目的复盘。

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

OS Prober 被禁用,Ubuntu 正在考虑新的多重引导方案

GNU GRUB(GRUB)是一个来自 GNU 项目的启动引导程序。它允许用户在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。 今年 6 月,由于上游 GRUB 引导程序在发布 2.06 版本时禁用 OS_Prober 后所带来的一些变化,Ubuntu 的开发者正在考虑如何在 Ubuntu 22.04 LTS 中管理双引导/多引导方案。 Ubuntu 依靠 OS-Prober 来检查其他已安装的操作系统,以便能够方便地在 GRUB 引导程序中显示它们。这意味着随着 Ubuntu 22.04 转向 GRUB 2.06,非 UEFI BIOS 用户不能再启动任何其他操作系统,而基于 UEFI 的系统如果通过 UEFI 引导程序,则仍然可以启动其他操作系统。这个问题主要是会阻碍那些仍然运行传统 BIOS 启动程序的用户使用已安装的系统。 默认禁用OS-Prober旨在通过操作系统检测功能解决潜在的安全问题,因为它在检查其他操作系统时,会检查并挂载系统上的所有分区,如果利用文件系统的漏洞,启用该功能会引发一个能被黑客利用的安全问题。 因此,面对安全和用户体验这个两难的选择下,Ubuntu 开发者也不得不考虑是否要重新启用 OS-Prober。 因为 OS_Prober 存在潜在安全风险,所以重新启用它并不是一个理想的解决方案,目前 Ubuntu 团队内部也在仔细思考这个问题,但不排除这个可能性。 Ubuntu 团队考虑的其他解决方案包括:创建一个新的 GRUB 模块,该模块只在用户查找系统时才执行 OS-Prober 的一些功能,用于增加一个链式启动选项专门处理用户需要启动 Windows 的需求;亦或是仅在安装系统时运行 OS-Prober,然后依靠该信息进行后续启动;最后一种可能性是,从以前的 Ubuntu 版本升级到 Ubuntu 22.04 时启用 OS-Prober。 我们还不清楚 Ubuntu 团队在上述选择中最终会如何进行抉择,在 Ubuntu 22.04 正式推出之前还有充足的考虑时间,可以访问 ubuntu-devel 了解更多详情。我们也将关注 GRUB 上游在此期间是否也会推出相应的解决方案。

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

接口的幂等性的多重考虑,你会了吗?

目录 [TOC] 前言 今天的主题:接口幂等性的解决方案。本来是想把对象的存储过程和内存布局肝出来的,但是临时产生了变化,哈哈,这部分内容我们留在下一期吧,有句话说的好,好事多磨,对吧。</br> 在实际项目开发中接口是我们在开发中经常接触到的,而且是经常经常要写,每一个项目可能都会伴随着大量的接口开发,在moon来涂鸦的这几个月,基本上就是在与接口作斗争了,新需求除了业务相关就是设计表和接口编写了。</br> 当然,在接口设计中我们要考虑很多问题,安全性,格式,设计等等,今天我们先来聊聊,在高并发环境下,接口幂等性的解决方案有哪些。 正文 1 接口幂等性 就是说在多次相同的操作下保证最终的结果是一致的。 其实这个概念还是比较简单的,很容易理解,那我们思考一个问题,如果不保证接口幂等性会有什么问题? 1.1 案例 我们简单的举个例子,现在有一个接口,提供了转账的功能,a要给b转账1000元,正常情况下我们接口一次性就调用成功了,但是却因为网络抖动等其它原因没有成功,于是就开始不停的重试,突然网络好了,但是这时却连续发出去了三个请求,但是这个接口没有保证幂等性,于是从结果上来看就是a给b转了3000元,这显然是程序业务逻辑上不能接受的(其实moon可以当b的)。 2 解决方案 2.1 token机制 token机制其实是比较简单的,我们先来简单的说一下流程。</br> 首先客户端先请求服务端,服务端生成token,每次请求生成的都是一个新的token(这个token一定要设置超时时间),将token存入redis当中,然后将token返回给客户端。 客户端携带刚刚返回的token请求服务端做业务请求。 服务端收到请求,做判断。 如果token在redis中,则直接删除该token,然后继续做业务请求。 如果token不在redis中,代表已经执行过当前业务了,则不执行业务。 图示如下: token机制实现方式还是比较简单的,但是其实对于我们某些响应速度要求很高的业务不太友好,缺点就是需要多一次请求获取token的过程。 正常来说是每次请都会生成一个新的token,如果有极限情况下,有两个请求都带着相同的token进来,会存在都走入判断是否存在的过程,可能都会同时查到存在,这样也会有问题,针对这种情况,我们可以在删除前判断下是否存在,存在就删除,为了保证原子性,这部分逻辑建议使用lua脚本完成。 2.2 去重表 去重表的机制是根据mysql唯一索引的特性来的,我们先来说下它的流程: 首先客户端先请求服务端,服务端先将这次的请求信息存入一张mysql的去重表中,这张表要根据这次请求的其中某个特殊字段建立唯一索引,或者主键索引。 判断是否插入成功 如果插入成功,则继续做后续业务请求。 如果插入失败,则代表已经执行过当前请求。 图示如下: 去重表机制的问题有两点: 1.mysql容错性,也就是mysql本身如果不是高可用的那么业务可能会受到影响: 2.既然是唯一索引,自然在写表的时候就没有办法用到changbuffer,每次都要从磁盘查出来判断再写入,对于一个高并发的接口来说,这些都是需要考虑的因素。 2.3 redis 的 SETNX键值 过程如下: 首先客户端先请求服务端,服务端将能代表这次请求业务的唯一字段以 SETNX 的方式存入redis,并设置超时时间,超时时间可以根据业务权衡。 判断是否插入成功 如果插入成功,则继续做后续业务请求。 如果插入失败,则代表已经执行过当前请求。 这里我们是利用了redis setnx 的特性来完成的。</br> setnx:只在键key不存在的情况下,将键key的值设置为value。若键key已经存在,则SETNX命令不做任何动作。命令在设置成功时返回1,设置失败时返回0。 图示如下: 这种方案可以说是针对上一个方案改进的,效率也会提高很多。 2.4 状态机幂 这种机制适用于有不同状态的业务,moon的上一家公司就是这样做的。 我们的订单系统,一条订单会有多个状态,如:待付款,锁定,已付款等状态,而这些状态都是有流程和逻辑的,我们可以根据这个状态判断是否执行后续业务操作。 2.5 乐观锁(更新操作) 就是数据库中增加版本号字段,每次更新根据版本号来判断 过程如下: 首先客户端先请求服务端,先查询出当前的version版本。 select version from .. where .. 根据version版本来做sql操作 UPDATE .. SET ... version=(version+1) WHERE .. AND version=version; 这个图示我就不再画了,还是比较简单的 2.6 悲观锁(更新操作) 假设每一次拿数据,都有认为会被修改,所以给数据库的行上锁,也是基于数据库特性来完成。 当数据库执行select for update时会获取被select中的数据行的行锁,因此其他并发执行的select for update如果试图选中同一行则会发生排斥(需要等待行锁被释放),因此达到锁的效果。 START TRANSACTION; # 开启事务 SELETE * FROM TABLE WHERE .. FOR UPDATE; UPDATE TABLE SET ... WHERE ..; COMMIT; # 提交事务 结语 关于接口幂等性这部分内容,解决方案其实大同小异,很多方式的原理都是一样的,更多的其实都是在业务链路中去过滤,也会有很多是有消息中间件去解决的,默认在中间件这一层就直接过滤掉了,当然每种方式都有各自的优点和缺点,需要结合当前的业务去选择,今天的文章内容,你get到了吗? 我是moon 文章首发于我的微信公众号:moon聊技术,欢迎大家关注 ! 关注后回复666 有一线大厂面试题赠送,助你成为offer收割机!下一篇,真的要讲jvm了~ 下次见~

资源下载

更多资源
Spring

Spring

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

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

用户登录
用户注册