首页 文章 精选 留言 我的

精选列表

搜索[EdgeOneMakersAgent案例],共10000篇文章
优秀的个人博客,低调大师

《社区人员管理》实战案例设计&个人案例分享

作者:京东科技 刘宗恺 一、项目背景 北京市疫情防控一体化平台是以“京办”为支撑,集病例流调、排查管控、隔离管理、人员转运、监测评估于一体的疫情防控平台,秉承五位一体统筹、现有体系融通、共性能力支撑、高效部门系统、快速局部突破的理念,进行建设。 1.1 技术挑战 功能:多系统协作、多端支持、多角色支持 非功能: 数据、安全、事件高并发的支撑 1.2 架构挑战 庞大多系统流转集成方案、政务网互联网的多端开发适配 需求变更下的灵活设计、数据流设计 二、系统架构设计 防疫系统五位一体的模块拆分: 2.1 确定业务的主题边界 2.2 全景分析-领域事件流 2.3 场景驱动-分解任务 2.4 业务中台 2.5 数据治理 2.6 人员数据鲜活  三、性能、稳定性设计 3.1 应用层 3.1.1 系统稳定性 3.1.2 系统高可用 高可用:故障频率要低、故障范围要小、故障恢复要快 3.1.3 系统柔性可用 3.1.4 事务中不包含外部调用(不建议) 3.1.5 人员核酸比对 •安全保障:系统安全、网络安全、数据安全 •高可用性:数据备份、负载均衡、异地多活 •容量预测:预计最大抗原检测结果上报 3.2 网络层(流量管控) •五位一体系统分别部署在多朵云,Keepalived、心跳、故障转移。 •专线带宽及现在使用情况,专线是否与其他业务系统共用,是否有备线。 •机房出入口网络监控,每个机房流量是否均衡,或每台机器的流量是否均衡。 •网络出、入口稳定性做好监控及应急方案。 •流量负载,限流。 •多级负载架构:(级联层次越多,请求在系统中的路径越长,系统性能相应也会受一定影响) 3.3 数据层 3.3.1 容灾备份 •容灾系统按国际标准分为七个层次,0级:无异地备份,1级:实现异地备份,2级:热备份站点备份,3级:在线数据备份,4级:定时数据备份,5级:实时数据备份,6级:零数据丢失。 •排查管控模块:风险人员研判,大数据时空筛查的相关能力和数据,需做到定时数据备份。 3.3.2 异地多活 •数据同步(数据库出现异常主从节点,故障转移) •冗余的越多,系统的故障率就越低,并且是呈指数级降低。 •任何一地故障,另一地都可提供完整服务。 •多机房同时对外提供服务,确保服务随时可用。同时尽量可以实现同机房调用。 3.4 特殊压测 •全场景压测,压测共享资源瓶颈,如用到了加解密的服务特别压测下加解密。 •混沌测试,模拟cpu使用率过高、内存过高、磁盘空间满了;应用连接的数据库超时、缓存超时、依赖服务中断等。 chaosblade支持模拟的场景: 定位分析: 四、通用性设计 面向未来考虑:不仅仅是五位一体,跨场景:通用性和普适性设计,跨区域跨城市:换一套区域是否可以复用,比如在另一个城市建立一个相同的项目。 4.1 泛化场景(自上而下/自下而上) 4.2 抽象流程编排能力 •编排利器:对于复杂的业务逻辑,需要按业务最小粒度实现一个个组件,每个组件保持单一职责。同时定义一个编排规则文件, 即可使复杂业务系统最大程度解耦,同时最大化程度实现组件复用,组件热编排等独有特性。 •优雅稳定:所有的组件互相独立且统一,利用上下文数据槽来传递信息,不同线程之间的数据槽安全隔离。 •规则轻量:串行,并行,条件选择,多层嵌套子流程等。 可以在规则中嵌入JavaScriopt,Groovy等脚本语言,可以实现热刷新的特性。 •监控治理:监控每个组件的运行耗时,统计每个组件排行。 •可视化操作:支持页面动态编排组件服务。 4.3 泛化场景(AI赋能) 项目成本:人力成本,实施成本、项目交付吃紧,通过AI赋能,减少一部分工作量,推进和实施工作。 通过AI视频化能力,降低运营侧交付成本,通过可视化平台手段的手段,低成本、高效率自动化生成视频。 •PPT+非线性编辑系统 •文案转换成视频的过程 •FAQ问题环节 洽谈、讲解、展示;收集客户反馈问题,通过数字人视频播报,减少实施交付成本。 五、收获沉淀 •设计是一个让人梦想成真过程,开始编码、测试、调试之前进行需求分析和架构设计,才能保证关键方面都做正确; •稳定的需求只是一个神话,架构的好坏,很大部分取决于它应对变化灵活性。如何复杂去掉而得到简单,是一种抽象; •架构设计终极目标,用最小的人力成本来满足构建和维护该系统的需求。面向未来考虑:通用和扩展性; CASE分享 -智能视频生产平台 1 业务与技术需求简介 •智能视频生产平台,是基于语音TTS、2D真人+3D卡通数字人、多样化图表、视觉算法融合、动画渲染等智能AI方式进行视频合成的过程。可基于讲解文案生成每种元素的子视频,将每个子视频按照一定的时间顺序和空间位置组合起来,生成最终的视频。 2 技术与业务场景引入、相关人、态度、立场 •支持对内对外多个场景的视频生产需求,具备了高质量视频的规范化生产能力。可根据产品特征和数据缺失情况,自适应增减版式内容; •视频元素生成包括文字、前景、背景等元素的展示效果: •智能字幕:实现了文本重要信息的自动提取与强调效果,并能够根据文本内容进行合理的字幕分页分行; •图文关联:已积累近千张金融领域的图片素材,通过文本中的关键字与图片素材标签的对应规则,实现了从文本到图片的自动映射,增强视频的动态效果; •数据可视化:实现了数据的动态可视化引擎,可根据请求选择相应的动态图表,支持折线图、柱状图、饼图等一系列图表类型; 3 场景下的问题、挑战、冲突是什么 •在搭建这个平台过程中也遇到一些挑战,比如视频模板多,业务场景多。大家对于细节调整是非常频繁。当发现这个情况后,意识到API模式已无法满足端到端应用诉求,需要提供一套可视化平台,能够具备一些标准化、自动化的能力,以更好的支持业务。因此我们设计了一套在线可视化编辑器,既能满足算法设计运营调优和反馈,又能沉淀形象、声音模板等,大大提升了我们平台的复用性。 4 如何分析技术与业务场景,如何形成研发或应用策略 •技术选型,抽象一套公共视频组件及模板IR层,用了IR平台之后,如新加数字人需求,只需要修改部分IR数据,可以无缝接入整个平台,复用原来能力。 5 做了什么,取得了什么效果、反馈 •首先在科技内部做了视频说明书、保险、金融百科、基金种草,完成了每月3150只视频线上投放,效果优于外部引入。为C端业务提供批量化、规范化的视频生产服务。 •保险知识讲解,每周投放7条视频,在视频号、抖音、快手等平台的交互数据与真人录制视频持平。 •视频说明书,每月完成2400+视频合成,替代外部引入,转化率较图文形式有明显提升。 •零售小家电,已与7家品牌商建立合作,累计投放100个视频,商详页视频转化率高于其他页面,购买转化率较静态图片介绍方式提升。通过实效视频资讯来吸引用户,增强用户黏性。 •每日经济新闻,批量生产新闻资讯视频,客户在两会期间使用,效果获媒体一致好评。树立公司品牌形象。 •人民日报,批量生产新闻资讯视频,客户已在全国范围内的20000+大屏幕推广。 京东云、百度APP数字人联合解读618消费趋势,降本增效释放商业价值;数据显示,微博阅读总量超1.2亿,微博视频热搜榜前10位。 通过视频生产平台制作编辑,数字人形象成功登录京东云峰会城市、零售主题论坛,展示效果从声音、图像、清晰度、动作得到现场嘉宾与运营方高度认可。

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

dns案例演示

实验拓扑图: dns解析基本流程 DNS是公网上提供的一种域名解析的服务,主要负责把用户的域名转换成IP地址。 DNS服务器是本身就是一个包含了诸多主机名和IP地址对应关系的数据库 1.问题讨论: 企业内部有必要有自己DNS服务器吗? 1)如果企业环境是一个域架构,必须需要DNS服务器,因为域架构的运行,必须需要DNS的支持。 2)如果企业环境是一个工作组机构,DNS服务器根据公司的具体情况来决定,但是DNS有一些特殊的功能:提供DNS缓存,屏蔽某些网站 2.非常重要 在DNS解析中,域名的解析是有优先级的: 1)本地Hosts文件 2)本地DNS解析 3)公网DNS解析 3.在上海,202.96.209.133和北京的cn的DNS服务器有什么区别? 总结:北京的cn的服务器中存放了所有域名后缀为cn的所有的记录,而上海的202.96.209.133中存放了上海本地区经常访问的一些域名。 4.DNS服务解析是使用UDP 53端口 5.DNS中正反向区域 正向查找区域---主要负责把域名转换成IP地址 能够把www.iLync.cn转换成222.73.236.83 反向查找区域---主要负责把IP地址转换成域名 主要应用于邮件,能够把公司ip地址转换成域名 6.客户端测试域名是否成功解析,有两种方法: 1)pingwww.iLync.cn(推荐) 9.有两种情况会使用到备用的DNS地址: 1)主DNS服务器宕机或者主DNS服务器的DNS服务有问题。 2)用户解析的时候没有在主DNS服务器上找到其解析域名的权威区域。 10. DNS路的容错 1)在活动目录架构中,创建多个与AD相集成的DNS区域,多个区域间会自动的同步数据 2)在工作组中,创建多个标准辅助区域为标准主要区域容错。 构架dns服务 主服务器上172.16.10.10 1)mount /dev/cdrom /mnt/cdrom//挂载光盘 2)yum -y install bind bind-chroot bind-utils //安装dns 3)vim /etc/named.conf //修改配置文件 options { listen-on port 53 { 172.16.10.10; }; //修改的地方 listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; // //修改的地方 zone "baby.com" IN { //增加的地方 type master; file "baby.com.zone"; allow-transfer {172.16.10.20;}; }; zone "kuparts.com" IN { type master; file "kuparts.com.zone"; allow-transfer {172.16.10.20;}; }; zone "10.16.172.in-addr.arpa" IN { type master; file "172.16.10.zone"; allow-transfer {172.16.10.20;}; }; cp -ap /var/named/named.* /var/named/chroot/var/named/ //创建配置区域数据库文件 [root@localhost ~]# cd /var/named/chroot/var/named [root@localhost named]# cp -ap named.localhost baby.com.zone [root@localhost named]# cp -ap named.localhost kuparts.com.zone [root@localhost named]# cp -ap named.localhost 172.16.10.zone vim baby.com.zone //编辑数据库配置文件 $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns.baby.com. ns IN A 172.16.10.10 www IN A 172.16.10.10 //需要修改增加的地方 Vim kuparts.com.zone $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns.kuparts.com. ns IN A 172.16.10.10//需要修改增加的地方 www IN A 172.16.10.10 vim 172.16.1.zone $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS ns.baby.com. //需要修改增加的地方 NS ns.kuparts.com. 10 IN PTR ns.baby.com. 10 IN PTR ns.kuparts.com. 10 IN PTR www.baby.com. 10 IN PTR www.kuparts.com. service named restart 实验完成 从服务器上172.16.10.20上 mount /dev/cdrom /mnt/cdrom yum -y install bind bind-chroot bind-utils vim /etc/named.conf options { listen-on port 53 { 172.16.10.20; }; //改成自己的ip地址 listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; recursion yes; zone "baby.com" IN { //增加这些行 type slave; file "slaves/baby.com.zone"; masters {172.16.10.10;}; }; zone "kuparts.com" IN { type slave; file "slaves/kuparts.com.zone"; masters {172.16.10.10;}; }; zone "10.16.172.in-addr.arpa" IN { type slave; file "slaves/172.16.10.10"; masters {172.16.10.10;}; }; service named restart 重启测试 注意: ++++++++++++++++++++++++++++++++ Slaves文件夹在主DNS和辅助DNS的位置需要一样 附件:http://down.51cto.com/data/2366579 本文转自 探花无情 51CTO博客,原文链接:http://blog.51cto.com/983865387/1916031

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

GreatSQL 死锁案例分析

1.背景概述 客户业务发生死锁的报错,根据业务程序日志及业务流程,发现造成死锁的原因是:事务1 delete + insert ,事务2 delete + insert 2个事务交替执行导致的死锁;由于GAP锁阻塞了插入意向锁,并且当delete的数据存在时死锁不会发生,当delete的数据不存在时,会发生死锁。 2.问题复现 本次测试基于 GreatSQL-8.0.32-24,隔离级别为 RR 2.1 创建测试表 greatsql> create database test; greatsql> create table test(c1 int unique key, c2 int, c3 int, c4 int); greatsql> insert into test values (1,1,1,1),(3,3,3,3),(5,5,5,5),(9,9,9,9); greatsql> select * from test; +------+------+------+------+ | c1 | c2 | c3 | c4 | +------+------+------+------+ | 1 | 1 | 1 | 1 | | 3 | 3 | 3 | 3 | | 5 | 5 | 5 | 5 | | 9 | 9 | 9 | 9 | +------+------+------+------+ 4 rows in set (0.01 sec) 2.2 事务执行顺序 按以下事务执行顺序,如果要删除的数据存在,则不会发生死锁;如果要删除的数据不存,并且要删除的数据在同一个GAP锁的区间内则会发生死锁; 时间 事务1 事务2 T1 BEGIN; BEGIN; T2 delete from test where c1=?; T3 delete from test where c1=?; T4 insert into test value(?,?,?,?); T5 insert into test value(?,?,?,?); 2.3 当delete的数据存在时 事务1:delete greatsql> begin; Query OK, 0 rows affected (0.00 sec) greatsql> delete from test where c1=3; Query OK, 1 row affected (0.00 sec) 查看锁信息: greatsql> select THREAD_ID,OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME,LOCK_TYPE,LOCK_MODE,LOCK_STATUS,LOCK_DATA from performance_schema.data_locks; +-----------+---------------+-------------+-----------------+-----------+---------------+-------------+-------------------+ | THREAD_ID | OBJECT_SCHEMA | OBJECT_NAME | INDEX_NAME | LOCK_TYPE | LOCK_MODE | LOCK_STATUS | LOCK_DATA | +-----------+---------------+-------------+-----------------+-----------+---------------+-------------+-------------------+ | 59 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 59 | test | test | c1 | RECORD | X,REC_NOT_GAP | GRANTED | 3, 0x000000000201 | | 59 | test | test | GEN_CLUST_INDEX | RECORD | X,REC_NOT_GAP | GRANTED | 0x000000000201 | +-----------+---------------+-------------+-----------------+-----------+---------------+-------------+-------------------+ 3 rows in set (0.00 sec) 此时事务1给 3, 0x000000000201 这条数据加了 记录锁 X,REC_NOT_GAP 事务2:delete greatsql> begin; Query OK, 0 rows affected (0.00 sec) greatsql> delete from test where c1=5; Query OK, 1 row affected (0.00 sec) 查看锁信息: greatsql> select THREAD_ID,OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME,LOCK_TYPE,LOCK_MODE,LOCK_STATUS,LOCK_DATA from performance_schema.data_locks; +-----------+---------------+-------------+-----------------+-----------+---------------+-------------+-------------------+ | THREAD_ID | OBJECT_SCHEMA | OBJECT_NAME | INDEX_NAME | LOCK_TYPE | LOCK_MODE | LOCK_STATUS | LOCK_DATA | +-----------+---------------+-------------+-----------------+-----------+---------------+-------------+-------------------+ | 57 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 57 | test | test | c1 | RECORD | X,REC_NOT_GAP | GRANTED | 5, 0x000000000202 | | 57 | test | test | GEN_CLUST_INDEX | RECORD | X,REC_NOT_GAP | GRANTED | 0x000000000202 | | 59 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 59 | test | test | c1 | RECORD | X,REC_NOT_GAP | GRANTED | 3, 0x000000000201 | | 59 | test | test | GEN_CLUST_INDEX | RECORD | X,REC_NOT_GAP | GRANTED | 0x000000000201 | +-----------+---------------+-------------+-----------------+-----------+---------------+-------------+-------------------+ 6 rows in set (0.00 sec) 此时事务2给 5, 0x000000000202 这条数据加了 记录锁 X,REC_NOT_GAP 事务1:insert greatsql> insert into test value(3,3,3,3); Query OK, 1 row affected (0.00 sec) 查看锁信息: greatsql> select THREAD_ID,OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME,LOCK_TYPE,LOCK_MODE,LOCK_STATUS,LOCK_DATA from performance_schema.data_locks; +-----------+---------------+-------------+-----------------+-----------+---------------+-------------+-------------------+ | THREAD_ID | OBJECT_SCHEMA | OBJECT_NAME | INDEX_NAME | LOCK_TYPE | LOCK_MODE | LOCK_STATUS | LOCK_DATA | +-----------+---------------+-------------+-----------------+-----------+---------------+-------------+-------------------+ | 57 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 57 | test | test | c1 | RECORD | X,REC_NOT_GAP | GRANTED | 5, 0x000000000202 | | 57 | test | test | GEN_CLUST_INDEX | RECORD | X,REC_NOT_GAP | GRANTED | 0x000000000202 | | 59 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 59 | test | test | c1 | RECORD | X,REC_NOT_GAP | GRANTED | 3, 0x000000000201 | | 59 | test | test | GEN_CLUST_INDEX | RECORD | X,REC_NOT_GAP | GRANTED | 0x000000000201 | | 59 | test | test | c1 | RECORD | S,GAP | GRANTED | 3, 0x000000000201 | | 59 | test | test | c1 | RECORD | S,GAP | GRANTED | 5, 0x000000000202 | | 59 | test | test | c1 | RECORD | S,GAP | GRANTED | 3, 0x000000000206 | +-----------+---------------+-------------+-----------------+-----------+---------------+-------------+-------------------+ 9 rows in set (0.00 sec) 此时事务1给 被delete删除的数据 3, 0x000000000201 ,插入的数据 3, 0x000000000202,以及相邻的下一条数据 5, 0x000000000202 加了 间隙锁 S,GAP 事务2:insert greatsql> insert into test value(5,5,5,5); Query OK, 1 row affected (0.01 sec) 查看锁信息: greatsql> select THREAD_ID,OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME,LOCK_TYPE,LOCK_MODE,LOCK_STATUS,LOCK_DATA from performance_schema.data_locks; +-----------+---------------+-------------+-----------------+-----------+---------------+-------------+-------------------+ | THREAD_ID | OBJECT_SCHEMA | OBJECT_NAME | INDEX_NAME | LOCK_TYPE | LOCK_MODE | LOCK_STATUS | LOCK_DATA | +-----------+---------------+-------------+-----------------+-----------+---------------+-------------+-------------------+ | 57 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 57 | test | test | c1 | RECORD | X,REC_NOT_GAP | GRANTED | 5, 0x000000000202 | | 57 | test | test | GEN_CLUST_INDEX | RECORD | X,REC_NOT_GAP | GRANTED | 0x000000000202 | | 57 | test | test | c1 | RECORD | S,GAP | GRANTED | 5, 0x000000000202 | | 57 | test | test | c1 | RECORD | S,GAP | GRANTED | 9, 0x000000000203 | | 57 | test | test | c1 | RECORD | S,GAP | GRANTED | 5, 0x000000000207 | | 59 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 59 | test | test | c1 | RECORD | X,REC_NOT_GAP | GRANTED | 3, 0x000000000201 | | 59 | test | test | GEN_CLUST_INDEX | RECORD | X,REC_NOT_GAP | GRANTED | 0x000000000201 | | 59 | test | test | c1 | RECORD | S,GAP | GRANTED | 3, 0x000000000201 | | 59 | test | test | c1 | RECORD | S,GAP | GRANTED | 5, 0x000000000202 | | 59 | test | test | c1 | RECORD | S,GAP | GRANTED | 3, 0x000000000206 | +-----------+---------------+-------------+-----------------+-----------+---------------+-------------+-------------------+ 12 rows in set (0.00 sec) 此时事务2给 被delete删除的数据 5, 0x000000000202 ,插入的数据 5, 0x000000000207,以及相邻的下一条数据 9, 0x000000000203 加了 间隙锁 S,GAP 由于GAP锁之间是相互兼容的,所以没有发生锁等待及死锁,此时事务1,事务2都执行完成,可以正常提交。 2.4 当delete的数据不存在时 事务1:delete greatsql> begin; Query OK, 0 rows affected (0.01 sec) greatsql> delete from test where c1=6; Query OK, 0 rows affected (0.00 sec) 查看锁信息: greatsql> select THREAD_ID,OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME,LOCK_TYPE,LOCK_MODE,LOCK_STATUS,LOCK_DATA from performance_schema.data_locks; +-----------+---------------+-------------+------------+-----------+-----------+-------------+-------------------+ | THREAD_ID | OBJECT_SCHEMA | OBJECT_NAME | INDEX_NAME | LOCK_TYPE | LOCK_MODE | LOCK_STATUS | LOCK_DATA | +-----------+---------------+-------------+------------+-----------+-----------+-------------+-------------------+ | 61 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 61 | test | test | c1 | RECORD | X,GAP | GRANTED | 9, 0x000000000203 | +-----------+---------------+-------------+------------+-----------+-----------+-------------+-------------------+ 2 rows in set (0.00 sec) 此时事务1给 9, 0x000000000203 这条数据加了 间隙锁 X,GAP 事务2:delete greatsql> begin; Query OK, 0 rows affected (0.00 sec) greatsql> delete from test where c1=7; Query OK, 0 rows affected (0.00 sec) 查看锁信息: greatsql> select THREAD_ID,OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME,LOCK_TYPE,LOCK_MODE,LOCK_STATUS,LOCK_DATA from performance_schema.data_locks; +-----------+---------------+-------------+------------+-----------+-----------+-------------+-------------------+ | THREAD_ID | OBJECT_SCHEMA | OBJECT_NAME | INDEX_NAME | LOCK_TYPE | LOCK_MODE | LOCK_STATUS | LOCK_DATA | +-----------+---------------+-------------+------------+-----------+-----------+-------------+-------------------+ | 62 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 62 | test | test | c1 | RECORD | X,GAP | GRANTED | 9, 0x000000000203 | | 61 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 61 | test | test | c1 | RECORD | X,GAP | GRANTED | 9, 0x000000000203 | +-----------+---------------+-------------+------------+-----------+-----------+-------------+-------------------+ 4 rows in set (0.00 sec) 此时事务2给 9, 0x000000000203 这条数据加了 间隙锁 X,GAP 间隙锁可以相互兼容,因此没有报错 事务1:insert greatsql> insert into test value(6,6,6,6); ---hang住,处于锁等待 查看锁信息: greatsql> select THREAD_ID,OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME,LOCK_TYPE,LOCK_MODE,LOCK_STATUS,LOCK_DATA from performance_schema.data_locks; +-----------+---------------+-------------+------------+-----------+------------------------+-------------+-------------------+ | THREAD_ID | OBJECT_SCHEMA | OBJECT_NAME | INDEX_NAME | LOCK_TYPE | LOCK_MODE | LOCK_STATUS | LOCK_DATA | +-----------+---------------+-------------+------------+-----------+------------------------+-------------+-------------------+ | 62 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 62 | test | test | c1 | RECORD | X,GAP | GRANTED | 9, 0x000000000203 | | 61 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 61 | test | test | c1 | RECORD | X,GAP | GRANTED | 9, 0x000000000203 | | 61 | test | test | c1 | RECORD | X,GAP,INSERT_INTENTION | WAITING | 9, 0x000000000203 | +-----------+---------------+-------------+------------+-----------+------------------------+-------------+-------------------+ 5 rows in set (0.00 sec) 此时事务1,要申请给 9, 0x000000000203 这条数据加 间隙锁,插入意向锁 X,GAP,INSERT_INTENTION;由于事务2已经加了 间隙锁 X,GAP 间隙锁与插入意向锁并不兼容,因此事务1的insert处于锁等待状态 事务2:insert greatsql> insert into test value(7,7,7,7); ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction 查看锁信息: greatsql> select THREAD_ID,OBJECT_SCHEMA,OBJECT_NAME,INDEX_NAME,LOCK_TYPE,LOCK_MODE,LOCK_STATUS,LOCK_DATA from performance_schema.data_locks; +-----------+---------------+-------------+-----------------+-----------+------------------------+-------------+------------------------+ | THREAD_ID | OBJECT_SCHEMA | OBJECT_NAME | INDEX_NAME | LOCK_TYPE | LOCK_MODE | LOCK_STATUS | LOCK_DATA | +-----------+---------------+-------------+-----------------+-----------+------------------------+-------------+------------------------+ | 61 | test | test | NULL | TABLE | IX | GRANTED | NULL | | 61 | test | test | c1 | RECORD | X,GAP | GRANTED | 9, 0x000000000203 | | 61 | test | test | c1 | RECORD | X,GAP | GRANTED | 6, 0x000000000213 | | 61 | test | test | GEN_CLUST_INDEX | RECORD | X | GRANTED | supremum pseudo-record | | 61 | test | test | GEN_CLUST_INDEX | RECORD | X,GAP | GRANTED | 0x000000000213 | | 61 | test | test | c1 | RECORD | X,GAP,INSERT_INTENTION | GRANTED | 9, 0x000000000203 | +-----------+---------------+-------------+-----------------+-----------+------------------------+-------------+------------------------+ 6 rows in set (0.01 sec) 事务2回滚,只有事务1的加锁信息。 由于此时事务2,要申请给 9, 0x000000000203 这条数据加 间隙锁,插入意向锁由于事务1已经加了 间隙锁 X,GAP 间隙锁与插入意向锁并不兼容,因此事务2的insert处于锁等待状态,2个事务相互等待锁导致死锁,此时事务2回滚。 3.总结 此次死锁的发生主要是GAP 锁 和 插入意向锁的冲突,建议让业务修改一下逻辑,先判断数据是否存在 select 一下,存在的话 delete 后在 insert ; 不存在的话直接 insert 不用delete了。 Enjoy GreatSQL :) 关于 GreatSQL GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。 相关链接: GreatSQL社区 Gitee GitHub Bilibili GreatSQL社区: 社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html 社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html (对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~) 技术交流群: 微信&QQ群: QQ群:533341697 微信群:添加GreatSQL社区助手(微信号:wanlidbc )好友,待社区助手拉您进群。

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

几个绘图小案例

昨天给一个做无人机的机构开发了一节流水灯的课程,不过由于没有实物,只能用turtle库模拟一下效果,便于放到课程中; 步骤图: 代码: (没有无人机,没法测试,纯靠看文档编的) 完成后有了一些新的想法,就在现有的流水灯程序上进行修改,完成了一些其它demo。 手串 代码: 绘制多边形 代码: 多边形内外接圆 代码: (全文完) 长按二维码,加关注!叶子陪你玩 欢迎转载,转载请注明出处! 欢迎关注公众微信号:叶子陪你玩编程 分享自己的python学习之路 本文分享自微信公众号 - 叶子陪你玩编程(gh_cd062460d25e)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

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

Phoenix ODPSBulkLoadTool 使用案例

1.创建ODPS表 create table hbaseport.odps_test ( key string, value1 string, value2 bigint); 2.配置MR集群访问云HBASE环境 开通云 HBase HDFS 端口 配置hdfs-site.xml使之能访问云HBASE HA的hdfs, 具体参考这里 配置hbase-site.xml文件可访问云HBASE 在MR集群上创建临时conf目录, 执行hadoop命或者yarn命令时通过--config选项添加到命令运行时的classpath中,目录中包括如下: ls conf/ core-site.xml hbase-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml 3.创建Phoenix测试表 DROP

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

MySQL案例-replication"卡死"

场景: MySQL-5.7.17, 主从架构, 业务读写分离, 只读从库的SQL线程卡在某一个事务两个多小时没有动过, IO线程正常; 结论: 给某个表加上了索引, 同步开始追赶 _(:з」∠)_叮嘱程序要养成加主键的好习惯.....ㄟ( ▔, ▔ )ㄏ 分析: 第一反应是bug?? hang住了? 在delete几千万的表?? _(:з」∠)_ 事务提交策略是2,0, 没有开启log_slave_update, 按道理来说, 纯粹的执行事务, 不应该会卡住, 后台的一些线程也是suspending, 不是running, 好像也不是线程之间的问题, 看看relaylog里面是什么语句... 卡住的地方, 可以看到是929064394事务 把relaylog转义一下, 找一下这个事务, 发现确实是很多的delete语句(内容已处理) 大概统计了一下, 删除了有15W左右的数据, 然后看了一下两个多小时的时间, 同步进度如何... 只从速度上看, 还得卡两个多小时, 而且之后还有类似的语句, 真要完全追上, 估计..... 于是看了眼这个tmp_log表的结构 CREATE TABLE `tmp_log` ( `s_id` int DEFAULT NULL, `d_id` int DEFAULT NULL ) ENGINE=InnoDB 木有主键..... _(:з」∠)_ 同步和主键有什么关系?MySQL同步的时候, 会去利用主键来搜索需要修改的行(或者是一些二级索引); PS: 具体的资料可以参考slave_rows_search_algorithms的官方解释, 默认的设置下, 如果没主键也没有二级索引(where条件可用), 那么就会用全表扫描来搜索数据;摘抄部分 The default value is TABLE_SCAN,INDEX_SCAN, which means that all searches that can use indexes do use them, and searches without any indexes use table scans. To use hashing for any searches that do not use a primary or unique key, set this option to INDEX_SCAN,HASH_SCAN. Specifying INDEX_SCAN,TABLE_SCAN,HASH_SCAN has the same effect as specifying INDEX_SCAN,HASH_SCAN. To force hashing for all searches, set this option to TABLE_SCAN,HASH_SCAN. PPS: 开启HASH_SCAN可能对这个场景有效;PPPS: HASH_SCAN默认没有开, 并且开启HASH_SCAN在某些情况下会遇到bug, 升级到>=5.7.20的版本之后再考虑开HASH_SCAN; 不打算去定位"为什么从库TABLE_SCAN这么慢?"了, 把表加上索引吧... "想办法"停掉了同步, 加上索引之后, 同步恢复正常了;

资源下载

更多资源
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部分的功能。

用户登录
用户注册