Category Archives: 未分类

移动终端网络接入

1.1 终端接入网络 1.1.1 移动终端接入网络有如下的几种情况 终端设备在属地,终端设备通过基站,接入属地的网络 终端设备在国内漫游时,移动设备会漫游连接到当地的网络,联通和电信则需要漫游回属地的网络 终端设备在国外漫游时,需要漫游回属地的网络 1.1.2 基站接入分析 移动终端通过基站接入移动运营商网络,终端与基站之间是数据链路层,不涉及网络层(IP)和传输层(TCP),终端设备的IP地址是由运营商分配的,在切换基站时一般不会引起IP地址的变化。 有以下几种情况: 当设备进行重启、飞行模式切换等时,设备会重新发起接入,这时IP地址会发生改变 设备在同一区域内切换基站的过程中,如果没有发生断网情况下,即没有重新接入,IP地址是不会变化的 设备在区域间切换基站,比如联通设备从北京到河北,接入由北京联通变成河北联通,IP地址会发生变化 终端设备切换基站一般情况下可在50ms~200ms完成,TCP是基于连接的协议,连接状态由状态机来维护,连接完毕后,双方都会处于established状态,它们之间的连接由各自的IP和TCP的端口唯一标识,即使这个连接没有任何数据,但仍是保持连接状态。TCP的KeepAlive机制用于检测连接死活,一般时间为 7200 s,失败后重试 10 次,每次超时时间 75 s,以释放无效链接。这个时间比切换基站时间要大的多,因此TCP通道在切换基站时,其IP地址一般没有变化,所以基于IP和端口的已建立的TCP连接不会失效。 1.1.3 DNS解析 当前移动 DNS 的现状: 运营商 LocalDNS 出口根据权威 DNS 目标 IP 地址进行 NAT,或将解析请求转发到其他DNS 服务器,导致权威 DNS 无法正确识别运营商的 LocalDNS IP,引发域名解析错误、流量跨网。 域名被劫持的后果:网站无法访问(无法连接服务器)、访问到钓鱼网站等。 … Continue reading

Posted in 未分类 | Leave a comment

用detectron2做识别

config.yaml

Posted in 未分类 | Leave a comment

博客网站搭建

最近把网站迁移到国内的云服务厂商上,之前几次迁移部署都是采用编译安装的方式,非常的不方便,此次采用的是docker方式搭建环境的配置,前端也不再采用nginx,采用了能够自动生成和替换证书的ca#ddy来实现的。 安装workpress 安装docker和docker-compose 编写wordpress的docker-compose.yml文件 本地需要创建mysql和wordpress的目录,docker会把本地创建的目录挂载到docker镜像中,这样mysql的数据和wordpress的配置才会在docker销毁时不会丢失。 启动docker镜像 然后临时打云厂商的防火墙的8000端口,在本地看是docker是否能到安装配置页面,如果可以正常打开,说明wordpress已经安装配置完成,可以使用 docker-compose up -d 转到后台执行,我们现在需要把云厂商的防火墙关闭。 安装配置ca#ddy 编写执行脚本 编写Ca#ddy的配置文件 预创建目录 执行脚本启动服务器,服务启动后我们在本地机器上可以通过配置hosts的方式,连接上去,看是否能打开wordpress的安装页面。 配置证书 我们使用cloudflare的证书,需要先到其官方网站上注册 https://dash.cloudflare.com/login 账号。 接下来我们需要在网站上添加我们的网站 然后到自己的域名服务商修改域名服务器为cloudflare的,等cloudflare检测通过 接下来需要拿到我们的api key,点击cloudflare右上角 “我的个人资料” – “API令牌“ 配置ca#ddy 在服务器 caddy/conf 文件夹下编写文件 caddy.service 文件内容为: 接下来重启ca#ddy 此时用chrome打开网站,查看地址栏左侧是否提示锁的图标,如果不是也不用着急,有可能是域名解析还没有完全切换到新的域名服务器,这需要一定的时间。

Posted in 未分类 | Leave a comment

redis数据结构

数据结构在新版本的Redis中做了优化

Posted in 未分类 | Leave a comment

COS视频去音频处理脚本

手写了个python+ffmpeg的视频去音轨的脚本,多线程。 支持ctrl+关闭程序 相对完善的统计数据

Posted in 未分类 | Leave a comment

qcow2镜像定制指南

背景 目前网络上关于定制镜像的说明很分散,需要搜寻很多文章才能完成镜像的定制任务。所以我尝试提供一个全面而系统的指南,遵循本指南,用户可以方便的完成镜像的定制。 实施步骤 一、环境配置 1、准备软件mac pro、VmWare fusion、CentOS-7-x86_64-DVD-1708.iso、CentOS-7-x86_64-GenericCloud-1708-20180123.qcow22、安装嵌套CentOs环境由于MacOs不支持Kvm,故需要在嵌套的操作系统中安装云镜像需要的软件,使用Fusion很容易在MacOs中虚拟出一个CentOs的环境。3、修改嵌套操作系统配置在centos关闭的情况下打开虚拟机“处理器和内存”配置,选择“高级配置”,选中“在此虚拟机中启用虚拟化管理程序”和“在此虚拟机中启用代码分析应用程序”,如无这步操作,则在启动virt-manager时会报:“virt-manager 报 WARNING : KVM不可用.这可能是因为没有安装KVM软件包,或者没有载入KVM内核模块.您的虚拟机可能性很差。”的错误,启动虚拟机。以下操作如无特殊说明都是在嵌套操作系统中执行。4、安装依赖 5、编译nbd内核模块(如不使用“nbd挂载方式修改镜像”则不需要安装此模块)执行命令,出现以下报错时,说明没有nbd模块,需要自己手动安装 执行下面的命令安装hbd模块 安装kernel组件 编译安装hbd组件 编译安装时的错误处理阶段:make CONFIG_BLK_DEV_NBD=m M=drivers/block 处理: 二、设置镜像共享 设置嵌套虚拟机文件夹共享qcow2文件放置在mac本地文件夹中,嵌套虚拟机通过文件共享的方式使用qcow2文件。需要注意的是qcow2文件权限需要在macos中设置为可读写,否则在嵌套虚拟机中无法更新配置。 嵌套虚拟机中,需要要关闭SeLinux否则同样无法更新镜像内容 三、guestfish工具使用 1、示例程序:获取镜像ip地址 2、示例程序:配置用户访问权限 四、nbd挂载方式修改镜像(qemu-nbd) 1、确保已安装nbd模块,加载模块 3、建立nbd连接,挂载到目录 4、执行chroot 5、执行修改,比如 6、修改完毕后解除挂载点,解除连接 五、通过virt-manager挂载虚拟机 1、执行 2、新建虚拟机选择“导入现有磁盘”,“使用ISO镜像”,选择qcow2文件…如果报:“WARNING : KVM不可用.这可能是因为没有安装KVM软件包,或者没有载入KVM内核模块.您的虚拟机可能性很差。”的警告相应的解决方案是: 关闭虚拟机 进入虚拟机设置(可以配置网卡,硬盘,光驱的地方) 点击“处理器和内存”,勾选虚拟化Inter VT-x/EPT … Continue reading

Posted in 未分类 | Leave a comment

hive生命周期

功能 当前线上系统情况: hadoop集群小文件数太多 hive的meta存储压力,有hive分区表有75W+分区 释放非必要存储资源,中间层的数据较容易重新生成 规范业务Hive使用,数据治理 名词: 路径不规范: 库路径无重合 库路径下不能有其它库 库路径必须在库所有者目录(/user/{Database.getOwnerName()}/…)下 表是在所在库路径下 表路径下不能有其它库 表路径下不能有其它表 表路径必须在表所有者目录(/user/{Table.getOwnerName()}/…)下 TTL: 数据保留时间(单位:天) LEVEL:数据级别(0:永久保留;1:需要进行生命周期) 需要实现的功能: 新建表将纳入生命周期,增加库表TTL和LEVEL的设置功能 新建表未指定生命周期会使用默认值,默认生命周期会删除60天前未更新的数据,除非新建表对应的库设置了生命周期,此种情况下,新建表会继承对应库的生命周期,建议创建表时设置,避免数据误删除;配置方式:CREATE EXTERNAL TABLE guoguo.t_test_02(id string) … TBLPROPERTIES (‘LEVEL’=’1′,’TTL’=’70’) 配置了生命周期的非分区表到期会Drop表,分区表则只Drop分区 判断数据更新时间的标准是: 1)表分区元数据更新时间,2)表分区对应的hdfs数据更新时间 取两者的最大值做为数据更新的时间 生命周期清理数据时基于数据更新时间后推ttl天清理 数据安全方案 邮件:执行删除前一周会分别和库、表的所有者发送其负责的待删除的库、表的通知 邮件:执行日报,每天把当天执行的情况汇总按需发给管理员,库所有者,表所有者 邮件:路径不规范的库和表,不会进行处理,并每天有报警邮件,会给相关负责人发送,提醒业务整改 备份:清理数据是先移动数据到每天生成的一个处理备份目录,然后再清理元数据 hive有内部表和外部表之分,内部表删除会影响内部表的元数据和底层数据存储,为保持处理一致,不采用只删除元数据,到期再清理数据的方案 移动数据会把meta信息和权限信息一同带到备份目录 … Continue reading

Posted in 未分类 | Leave a comment

Sqoop源码分析

Sqoop的Mysql数据导出实现分两种,一种是使用JDBC方式从Mysql中获取数据,一种是使用MysqlDump命令从MySql中获取数据,默认是 JDBC方式获取数据,如果要使用dump方式获取数据,需要添加 -direct 参数。 使用JDBC方式从Mysql中获取数据 配置语句时,需要添加 $CONDITIONS 点位符,比如:SELECT id FROM user WHERE $CONDITIONS,Sqoop在内部实现时会把它替换成需要的查询条件。 Sqoop启动后会先查询元数据,它会把 $CONDITIONS 替换为 (1=0) ,然后用得到的SQL语句查询数据表对应的Meta信息对于导出一个表的情况,Sqoop会使用这个SQL查询三次数据库,分别是: 1、获取 colInfo(最终得到columnTypes信息)2、查询ColumnNames信息3、生成QueryResult类执行 generateFields操作获取columnTypeNames时。 Sqoop会对获取的Fields做校验,列不能重复,它还会处理数据库的字段到Java属性名的转换 QueryResult类是通过构建java类文件,然后获取JavaCompiler,然后编译加载,为了提高处理性能,不是使用反射实现的,这个生成类内部处理mysql到hdfs属性值为空和分隔符的处理。 接着它会进行下面一个Sql查询操作,查询结果集为MIN(split列),MAX(split列),查询条件的处理逻辑为 $CONDITIONS 替换为(1=1),然后再添加外面SELECT查询 (举例:SELECT MIN(id), MAX(id) FROM (SELECT ID,NAME,PASSPORT WHERE (1=1) ) AS t1 ),这样就查询出来此次导出数据最大的split列值和最小的split列值。 对于为整数、布尔值、时间格式、Float等 的分区列,进行split时直接根据对应值的大小进行Split,Text文本的处理方式比较特殊,Sqoop先会对之前获取到的Min和Max的字串寻找它们最大的相同前缀子字串,然后把后面的字段转化为BigDecimal,结合时char占两个字节(65536),算法在 … Continue reading

Posted in 未分类 | Leave a comment

Camus源码分析

协议: 输出文件压缩:Camus默认只支持两种压缩格式(snappy和deflate),默认是defalte,使用 StringRecordWriterProvider写入文本格式文档时,还可以指定gzip的压缩格式,扩展其它压缩格式很容易,只需要添加 两行代码就可以,建议增加lzo和lzop的压缩格式,以和我们Hive保持一致。 输出格文件类型:建议文本格式的文件 文件目录规则:(配置的目录)+ topic名 + daily|hour + (年/月/日)|(年/月/日/小时) + 数据文件,例如:/rocketmq/data/vip_ods_heartbeat/daily/2015/06/10 /vip_ods_heartbeat.broker-a.0.999.48388735.1433865600000.deflate 文件名规则:topic名+ (RocketBrokerId)|(kafka的对应分区的learder的BrokerId)+ (RocketQueueId)|(kafka分区号)+ 写入消息行数 + 最后一条消息的Offset + 编码的分区(时间 + 压缩格式后缀),例如:vip_ods_heartbeat.broker- a.0.999.48388735.1433865600000.deflate Topic的命名规则:业务标识+数据库名+数据库表名(分表只需要BaseName就可以),例 如:vip_ods_heartbeat 消息格式:操作类型\t表名(分表的话是分表名)\t数据库名\t主键名\t唯一索引\tBinlog日志时间 \tCheckPoint字段\tDataBefore\tDataAfter,库名表名都是RockMQ中的原始数据,在生成列数据时,列中数 据如果有\t等特殊字符需要替换,例如:insert\theartbeat\tvip_ods\tid\tname,pid\t1232132131\t120@21\t{“字段名”,”字段 值”,…}\t{“字段名”,”字段值”,…} 确定数据导入是否完成: Camus中会在History的目录中存放历次消费的状态,包括开始执行的分区和它们的Offset、 执行结束位置的分区和它们的Offset,这两个文件以SequenceFile的形式存放在HDFS文件中 Camus在执行结束后可以把 执行信息汇总发送到Kafka的Topic中,Topic的名字为:TrackingMonitoringEvent,如果监控程序监控这个 Topic,是可以得到当前执行的情况的信息的。

Posted in 未分类 | Leave a comment

理解索引而不需要理解数据结构

Understanding Indexing Without Needing to Understand Data Structures MySQL UC 2011 – April 12, 2011 Zardosht Kasheff 什么是表? (key,value)对集合的词典 确保你可以 修改 这个词典(插入、删除、修改)和 查询(点查询、范围查询)词典 B-Tree和Fractal Tree是两个词典的例子 哈希则不是(不支持范围查询) 例子: 然后我们插入一批数据 a b c 100 5 45 101 92 2 156 56 45 165 6 2 … Continue reading

Posted in 未分类 | Leave a comment