<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[森林里的一天]]></title><description><![CDATA[上上班，读读书，写写字]]></description><link>https://blog.youkuaiyun.com/dtlscsl</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dtlscsl]]></copyright><item><title><![CDATA[记一次大事务导致的数据库死锁引起线上服务器load飙升的故障]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/111914461</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/111914461</guid><author>dtlscsl</author><pubDate>Tue, 29 Dec 2020 14:58:52 +0800</pubDate><description><![CDATA[一、背景描述
公司业务系统由多个语言开发，核心业务由.net团队支持，数据存储在sqlServer中，为了使用这些数据由JAVA团队在上层做一个数据聚合平台，创建了个职责单一的新应用来做数据转换，同步到底层mysql数据库中，对外提供了一个标准接口由业务方通过定时任务分批同步，支持一次传输多条数据，数据同步策略是每秒6个线程并发同步5条记录，同步失败会在1，2，4s内重试三次
二、故障现场
第一次
故障现象： api层服务异常日志告警，同步数据服务dubbo服务超时5s，但是业务应用中没有任何异常日志，跟业]]></description><category></category></item><item><title><![CDATA[记一次后台订单列表检索慢SQL优化实践]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/107644033</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/107644033</guid><author>dtlscsl</author><pubDate>Wed, 29 Jul 2020 16:25:38 +0800</pubDate><description><![CDATA[记一次后台订单列表检索慢SQL优化实践一、背景介绍二、设计思路如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能，丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
一、背景介绍
先简单介绍下我们的故事背景~

需求描述：新增一种订单类型order_flag，然后在后台可以根据条件分页检索
订单表数据量：165w，单库单表
表]]></description><category></category></item><item><title><![CDATA[JVM(二) ：垃圾回收机制]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/98336660</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/98336660</guid><author>dtlscsl</author><pubDate>Sat, 03 Aug 2019 14:40:23 +0800</pubDate><description><![CDATA[一、怎么判断是垃圾

引用计数
可达性分析

二、如何回收
1. 分带收集算法
1.1 标记-清除（老年代）
该算法会有两个问题：
1. 效率问题，标记和清除效率不高。
2. 空间问题: 标记清除后会产生大量不连续的内存碎片, 空间碎片太多可能会导致在运行过程中需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集。
所以它一般用于"垃圾不太多的区域，比如老年代"。
1.2 复制（...]]></description><category></category></item><item><title><![CDATA[HashedWheelTimer原理介绍]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/94185614</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/94185614</guid><author>dtlscsl</author><pubDate>Sat, 29 Jun 2019 18:22:10 +0800</pubDate><description><![CDATA[一、前言
之前一直研究延迟队列的时间方式，调研过挺多技术，Netty中提供的HashedWheelTimer时间轮算法的实现也是其中一种。
于是就研究了下内部实现的原理，研究的代码的版本如下：
&lt;groupId&gt;io.netty&lt;/groupId&gt;
&lt;artifactId&gt;netty-parent&lt;/artifactId&gt;
&lt;version&g...]]></description><category></category></item><item><title><![CDATA[JVM(一) ：Java内存区域和HotSpot介绍]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/94184493</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/94184493</guid><author>dtlscsl</author><pubDate>Sat, 29 Jun 2019 18:12:25 +0800</pubDate><description><![CDATA[一、运行时内存划分
在JDK1.7中，根据Java虚拟机的规范，将其所管理的内存划分为以下这个运行时数据区域：

1. 程序计数器
当前线程所执行的字节码的行号指示器。每个线程都独立拥有一个程序计数器。
如果线程正在执行的是一个Java方法，则计数器保存正在执行的字节码指令地址，如果是Native方法则程序计数器的值则为空（Undefined）。
程序计数器是Java虚拟机规范中唯一没有规定任何O...]]></description><category></category></item><item><title><![CDATA[如何构建延迟任务调度系统（三）：架构设计]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/90722553</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/90722553</guid><author>dtlscsl</author><pubDate>Fri, 31 May 2019 20:35:40 +0800</pubDate><description><![CDATA[功能设计
系统功能：
延迟任务调度系统提供统一的任务操作接口给业务方调用，业务方可以提交任务，取消任务，查询任务状态。
调度服务属于底层应用，因此采用MQ的方式解耦，所有触发的延迟任务都通过消息的方式发送给业务消费方，
由消费方控制流量，业务幂等。同时也保证了任务的重试机制。
采用技术：elastic-job + db + delayQueue + mq
整体架构

业务调用方

业务方在需要延迟...]]></description><category></category></item><item><title><![CDATA[阿里云CentOS搭建zookeeper集群环境]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/89633610</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/89633610</guid><author>dtlscsl</author><pubDate>Sun, 28 Apr 2019 10:54:23 +0800</pubDate><description><![CDATA[1.下载zk安装包
cd /home/user/zk
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz

2.zk包解压
tar -zxvf zookeeper-3.4.12.tar.gz

3.搭建3个节点的zk伪分布式集群
在同一台服务器上，部署一个3个ZooKeepe...]]></description><category></category></item><item><title><![CDATA[如何构建延迟任务调度系统（二）：技术调研]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/88895490</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/88895490</guid><author>dtlscsl</author><pubDate>Fri, 29 Mar 2019 16:04:47 +0800</pubDate><description><![CDATA[延时队列实现的几种方式

java.util.Timer + java.util.TimerTask
java.util.concurrent.ScheduledExecutorService
Quartz
java.util.concurrent.DelayQueue
数据库轮询
redis过期键通知
rocketMQ中的延时队列

1. Timer+TimerTask
使用 Timer 实现任...]]></description><category></category></item><item><title><![CDATA[如何构建延迟任务调度系统（一）：需求目标]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/88895463</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/88895463</guid><author>dtlscsl</author><pubDate>Fri, 29 Mar 2019 16:03:54 +0800</pubDate><description><![CDATA[1.需求描述
之前笔者接触过一些营销业务场景，比如说：

用户注册未登录过APP第二天早上10点发一条营销短信促活
红包过期前两天短信通知，下午16:00发送
等等定时任务处理业务。

采用的技术方案是定时任务扫数据汇总表，分页读取一定数量然后处理
然而随着业务的发展，业务多元化，遇到了以下场景：

拼团砍价活动过期前半小时提醒
订单提交半小时内没有完成支付，订单自动取消，库存退还
用户几天内没有...]]></description><category></category></item><item><title><![CDATA[如何构建营销活动平台（一）：前言概述]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/87885148</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/87885148</guid><author>dtlscsl</author><pubDate>Fri, 22 Feb 2019 20:28:46 +0800</pubDate><description><![CDATA[背景
笔者接触营销活动已经接近半年时间，围绕C端用户的邀新，留存，促活也上线了一些营销活动，为了实现组件化，在编程过程中也一直在思考如何搭建一个营销平台，
从而实现运营活动的配置化和扩展性，忙中偷闲，对半年来的营销活动工作做了一些总结和梳理，以及营销活动平台整体的业务规划，以下是这半年来的思考和沉淀。

git源码地址：git clone https://github.com/caisl/acti...]]></description><category></category></item><item><title><![CDATA[如何构建营销活动平台（五）：单元测试]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/87885094</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/87885094</guid><author>dtlscsl</author><pubDate>Fri, 22 Feb 2019 20:23:27 +0800</pubDate><description><![CDATA[接入指南


同步仓库到本地
git clone https://github.com/caisl/activity-platform.git


根据实际业务调整代码




DB设计
activity-platform对营销活动流程框架和规则引擎提供了详细的设计和分析，DB请根据实际的需求设计，这里就不提供详细的内容。


新活动接入
举例：接入新人有礼活动，实现FunctionCodeEnu...]]></description><category></category></item><item><title><![CDATA[如何构建营销活动平台（四）：规则引擎设计]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/87855534</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/87855534</guid><author>dtlscsl</author><pubDate>Thu, 21 Feb 2019 10:02:00 +0800</pubDate><description><![CDATA[前言
前面将活动抽象成了规则检验和一系列的操作，不同的活动的规则有重叠也有不同，如何设计才能保证最好的扩展性。
规则引擎的出现就是制定一套规则检验的模型，下面来看下具体的设计。
核心UML图

组件介绍
主要分为以下三个关键模块

规则实体
存储规则属性
规则检验器
执行规则检验，检验不通过可以自定义文案，该文案可以展示给用户看
执行引擎
串联业务请求和规则检验

使用场景


活动参与条件判断
...]]></description><category></category></item><item><title><![CDATA[如何构建营销活动平台（三）：活动平台扩展性演进]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/87288592</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/87288592</guid><author>dtlscsl</author><pubDate>Thu, 14 Feb 2019 18:18:39 +0800</pubDate><description><![CDATA[前言
经过了几个月的努力，初步建立了营销平台，也承载了几个营销活动。但是也存在规划工作不充分，
代码层面要求未规范，导致后续的营销活动策划，设计，管理，开发出现了一系列的问题，包括不能快速迭代接入
新的营销活动，不能及时响应运营和市场的节奏
一期应用搭建完成接入第一个活动之后，对于规范这块要求松懈，同时由于多个项目时间排期周期赶，
多人撸代码风格不一致，导致了一系列的技术债。所谓就是先污染后治理，...]]></description><category></category></item><item><title><![CDATA[如何构建营销活动平台（二）：业务功能设计]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/86691057</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/86691057</guid><author>dtlscsl</author><pubDate>Tue, 29 Jan 2019 15:55:16 +0800</pubDate><description><![CDATA[营销活动主流程

功能描述


营销活动平台模块划分
通过上图，我们可以了解各个产品模块在营销平台中的定位，一个规范的完整的营销体系架构
营销业务规划重要性
一个完整的营销体系规划对于后续营销活动的策划，设计，管理，开发提供了很多帮助。从活动的实现角度来看，很难
做到一套营销系统支持所有类型的活动，但是我们可以分析多个活动的共性，从而抽象出来一些相同的功能模块，制定
一套活动设计的规范，系统编码层...]]></description><category></category></item><item><title><![CDATA[索引（三）查询性能优化]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/86610135</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/86610135</guid><author>dtlscsl</author><pubDate>Wed, 23 Jan 2019 14:55:13 +0800</pubDate><description><![CDATA[索引（三）查询性能优化

高性能MYSQL需要设计最优的库表结构，建立最好的索引，合理的设计查询。查询优化，索引优化，库表结构优化三辆
大车需要起头并进，才能达到最好的性能。

查询的生命周期
MySQL查询的生命周期：



客户端发送一条查询给服务器


服务器先检查查询缓存，如果命中了缓存，则立刻返回存储在缓存中的结果，否则进入下一阶段。


服务器进行SQL解析，预处理，再由优化器生成对应...]]></description><category></category></item><item><title><![CDATA[索引（二）innodb索引]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/86351205</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/86351205</guid><author>dtlscsl</author><pubDate>Sat, 12 Jan 2019 11:08:15 +0800</pubDate><description><![CDATA[索引（二）innodb索引
B+树索引
innoDB中的B+树索引可以分为两种索引：

聚集索引
辅助索引

聚集索引和辅助索引的不同点在于叶子节点存放的是否是一整行信息
这两个名字虽然都叫做索引，但是这并不是一种单独的索引类型，而是一种数据存储方式。
聚集索引


聚集索引就是按照每张表的主键构造一颗B+树，同时叶子节点中存放的是整张表的行记录数据，聚集索引的叶子节点
也称为数据页，索引文件就是...]]></description><category></category></item><item><title><![CDATA[索引（一）索引的本质]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/86255265</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/86255265</guid><author>dtlscsl</author><pubDate>Thu, 10 Jan 2019 20:57:34 +0800</pubDate><description><![CDATA[索引（一）索引的本质
先看一个sql
SELECT
	count(*)
FROM
	op_log
WHERE
	method = &quot;updateActivity&quot;
AND operator_id =&quot;shinan&quot;
AND create_time &amp;gt; 1533819466000
AND create_time &amp;lt; 1543819466000
AND type=1;

查询效率很慢：
1...]]></description><category></category></item><item><title><![CDATA[dubbo负载均衡]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/81702836</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/81702836</guid><author>dtlscsl</author><pubDate>Wed, 15 Aug 2018 13:45:42 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[服务器load高但是CPU使用率低]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/81563491</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/81563491</guid><author>dtlscsl</author><pubDate>Fri, 10 Aug 2018 15:00:33 +0800</pubDate><description><![CDATA[线上应用部署了两台服务器，项目发布之后跟踪线上服务器性能，发现一台load为3，一台load为1，四核服务器，有一台已经快到瓶颈了，因此紧急排查下原因

1.TOP命令查看load和占用CPU比较大的进程，显示如下



shift+c排序 占用最大的也就0.7% 1命名查看每个cpu的使用情况 基本上都处于空闲状态

2.vmstat 2 5查看io情况

procs -----------me...]]></description><category></category></item><item><title><![CDATA[脚本启动钉钉机器人]]></title><link>https://blog.youkuaiyun.com/dtlscsl/article/details/80871009</link><guid>https://blog.youkuaiyun.com/dtlscsl/article/details/80871009</guid><author>dtlscsl</author><pubDate>Sat, 30 Jun 2018 23:17:29 +0800</pubDate><description><![CDATA[背景：每周都需要催促团队成员撰写周报，因此想到在全员群里面设置定时通知机器人1.服务器创建目录 创建shell脚本mkdir shell -创建shell目录存放sh脚本vim dingding.sh -创建并且编写shell脚本填入以下内容：#!/bin/bashcurl 'https://oapi.dingtalk.com/robot/send?access_token=XXXX'  -H '...]]></description><category></category></item></channel></rss>