草庐IT

【性能优化】单一接口优化过程全记录(主要涉及Redis)

接口优化过程记录问题背景某个接口耗时长(247ms),但里面逻辑不算复杂,只进行了简单的对象引用以及操作了多次Redis步骤1:链路追踪,确定业务耗时点接口里通过链路追踪以及日志查询发现主要是操作Redis的这条链路耗时变长步骤2:从Redis找问题,列出可能点原因可能是:Redis本身存在问题,可能是命令复杂度、IO、连接数不够、过载等网络原因,获取连接或者是数据传输耗时经测试发现以下这些问题使用本机ping服务器,网络延迟大概在42ms(ping内网内部逻辑对获取Redis连接进行耗时记录,发现除首次获取连接需30ms,后续获取连接耗时内部对Redis的一个get操作需要47ms(高耗时)

【性能优化】单一接口优化过程全记录(主要涉及Redis)

接口优化过程记录问题背景某个接口耗时长(247ms),但里面逻辑不算复杂,只进行了简单的对象引用以及操作了多次Redis步骤1:链路追踪,确定业务耗时点接口里通过链路追踪以及日志查询发现主要是操作Redis的这条链路耗时变长步骤2:从Redis找问题,列出可能点原因可能是:Redis本身存在问题,可能是命令复杂度、IO、连接数不够、过载等网络原因,获取连接或者是数据传输耗时经测试发现以下这些问题使用本机ping服务器,网络延迟大概在42ms(ping内网内部逻辑对获取Redis连接进行耗时记录,发现除首次获取连接需30ms,后续获取连接耗时内部对Redis的一个get操作需要47ms(高耗时)

设计模式介绍和单一职责原则

设计模式的目的编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好代码重用性(即:相同功能的代码,不用多次编写)可读性(即:编程规范性,便于其他程序员的阅读和理解)可扩展性(即:当需要增加新的功能时,非常的方便,称为可维护)可靠性(即:当我们增加新的功能后,对原来的功能没有影响)使程序呈现高内聚,低耦合的特性设计模式七大原则设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据)设计模式常用的七大原则有:单一职责原则接口隔离原则依赖倒转(倒置)原则里氏替

设计模式介绍和单一职责原则

设计模式的目的编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好代码重用性(即:相同功能的代码,不用多次编写)可读性(即:编程规范性,便于其他程序员的阅读和理解)可扩展性(即:当需要增加新的功能时,非常的方便,称为可维护)可靠性(即:当我们增加新的功能后,对原来的功能没有影响)使程序呈现高内聚,低耦合的特性设计模式七大原则设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据)设计模式常用的七大原则有:单一职责原则接口隔离原则依赖倒转(倒置)原则里氏替

针对单一key加读写锁

一、什么是读写锁读写锁是JDK1.5提供的一个工具锁,适用于读多写少的场景,将读写分离,从而提高并发性。二、读写锁的特点读锁是共享锁,写锁是排他锁,读锁和写锁不能同时存在;读锁不能升级为写锁;写锁可以降级为读锁;三、锁的本质锁的本质就是锁住一块资源而不是一块代码.在常见的一些代码实现都是加一把大锁,将这一块代码资源统一加锁,无法针对资源进行精确进行锁控制.四、代码实现`importlombok.extern.slf4j.Slf4j;importjava.util.concurrent.ConcurrentHashMap;importjava.util.concurrent.locks.Read

针对单一key加读写锁

一、什么是读写锁读写锁是JDK1.5提供的一个工具锁,适用于读多写少的场景,将读写分离,从而提高并发性。二、读写锁的特点读锁是共享锁,写锁是排他锁,读锁和写锁不能同时存在;读锁不能升级为写锁;写锁可以降级为读锁;三、锁的本质锁的本质就是锁住一块资源而不是一块代码.在常见的一些代码实现都是加一把大锁,将这一块代码资源统一加锁,无法针对资源进行精确进行锁控制.四、代码实现`importlombok.extern.slf4j.Slf4j;importjava.util.concurrent.ConcurrentHashMap;importjava.util.concurrent.locks.Read

【odoo】【知识杂谈】单一实例多库模式下定时任务线程崩了

现象接上一篇,在成功实现单一实例多库模式下定时任务的问题后,现在可以实现多个库的定时任务跑起来了。但是发现在任务跑几次后就不再执行了,每次重启odoo实例就会恢复。但是很快又不行了。分析查看进程发现,后台开启的两个定时任务线程直接消失了。。。查看日志,有段报错,如下:fordb_name,registryinregistries.d.items():RuntimeError:OrderedDictmutatedduringiteration可以定位到问题出现server.py文件中的cron_thread函数上。经过实验发现,python3版本的OrderedDict对象在迭代的过程中如果新增

【odoo】【知识杂谈】单一实例多库模式下定时任务线程崩了

现象接上一篇,在成功实现单一实例多库模式下定时任务的问题后,现在可以实现多个库的定时任务跑起来了。但是发现在任务跑几次后就不再执行了,每次重启odoo实例就会恢复。但是很快又不行了。分析查看进程发现,后台开启的两个定时任务线程直接消失了。。。查看日志,有段报错,如下:fordb_name,registryinregistries.d.items():RuntimeError:OrderedDictmutatedduringiteration可以定位到问题出现server.py文件中的cron_thread函数上。经过实验发现,python3版本的OrderedDict对象在迭代的过程中如果新增

【odoo】【知识杂谈】单一实例多库模式下定时任务的问题分析

欢迎转载,但需标注出处,谢谢!背景:有客户反应有个别模块下的定时任务没有正常执行,是否是新装的模块哪些有问题?排查后发现,客户是在一台服务器上跑着一个odoo容器,对应多个数据库。个别库的定时任务是正常的,但是一个对接其他平台的库的定时任务没有正常跑起来。先说结论,看官没时间支持按说明处理即可,分析过程在下面。结论在odoo的配置文件db_name字段配置希望后台一直跑着的库名称字符串,以英文“,”分割。分析直接源码看odoo日志,我们知道odoo的任务正常执行时会打印StartingJob任务名称,直接vscode全局查找,定位到ir_cron.py文件的_process_jobs函数。@c

【odoo】【知识杂谈】单一实例多库模式下定时任务的问题分析

欢迎转载,但需标注出处,谢谢!背景:有客户反应有个别模块下的定时任务没有正常执行,是否是新装的模块哪些有问题?排查后发现,客户是在一台服务器上跑着一个odoo容器,对应多个数据库。个别库的定时任务是正常的,但是一个对接其他平台的库的定时任务没有正常跑起来。先说结论,看官没时间支持按说明处理即可,分析过程在下面。结论在odoo的配置文件db_name字段配置希望后台一直跑着的库名称字符串,以英文“,”分割。分析直接源码看odoo日志,我们知道odoo的任务正常执行时会打印StartingJob任务名称,直接vscode全局查找,定位到ir_cron.py文件的_process_jobs函数。@c