摘要:本文是开发工具篇第九讲:菜鸟入坑指南。针对新人上手慢的问题,写了这篇入坑指南,方便自己回顾,总结。本文分为四个部分,分别为jenkins使用技巧;常用软件操作命令;开发手册;调试手册。主要材料来自于开发过程中遇到的坑,部分内容在后续会补充。
文章目录
第一部分:jenkins使用技巧(目前使用的是IPAAS运维平台)
应用模块与 jenkins 部署名称的对应关系
1、商品中心
应用模块/简介/jenkins名称(编译时)
-
1、item-microservice-center
- 商品中心center层,主要提供商品配套域相关dubbo接口
- compile-item-microservice-center
-
2、item-microservice-web-admin
- 商品中心controller层,提供给平台运营使用
- compile-web-item-admin
-
3、item-microservice-web
- 提供商品对外访问rest接口
- 打成jar包供web-agg使用
- 目前作为controller层,已经合并进im应用
- compile-web-aggregated
-
4、item-center
- (old)商品中心center层,提供dubbo接口
- 代码已经被下线,仅jar包还在被使用
- compile-item-center
- (old)商品中心center层,提供dubbo接口
-
5、item-microservice-external
- 商品中心提供给开放平台的center层
- 提供dubbo接口给 web-open-middle
- compile-web-open-middle
-
6、item-platform-center
- 商品中心center层,主要提供商品域相关dubbo接口
- 2021年新增
- compile-item-microservice-center
- 商品中心center层,主要提供商品域相关dubbo接口
-
7、web-item-platform
- 提供商品对外访问rest接口
2、标准中心
应用模块\简介\jenkins名称(编译时)
- 1、item-standard
- 标准中心,提供商品域基础数据
- compile-item-standard-center
3、协议中心
应用模块/简介/jenkins名称(编译时)
-
1、agreement-center
- 提供商品发布所需依赖的数据
- compile-agreement-center
-
2、aggrement-web
- 协议自身对外rest接口,与商品域无关
- compile-web-agreement
4、网超
应用模块\简介\jenkins名称(编译时)
-
1、zcy_webc
- 网超controller层,与商品域无关
- compile-web-web
-
2、extra-center
- 网超对接外网
- compile-extra-center
-
3、web-admin
- compile-web-admin
5、 jenkins使用技巧(待补充)
1、若想重启应用
- 方法1:可以在jenkins上找到对应的环境,然后点击restart application,选择对应的restart_modules;
- 方法2:通过运维平台找到对应的modules,然后点击重启(不一定有效)。
2、编译、开发、上线的步骤:compile→ dev-debug(自测,前后端联调) → test1(功能测试) → 预发环境→ 真线环境
第二部分:常用软件操作命令
1、日志操作的常用命令
操作项\步骤
-
1、在终端中登录日志系统
- 账号:
ssh developer@172.16.101.123
密码: zcy 日志中心
- 账号:
-
2、查看模块位置的指令
find -name web-item*
或find ./ -name item-mi*
(模糊搜索以web-item
开头的模块)
-
3、查看错误日志
- 方式1:
tail -f filename
(filename为前一个命令查到的路径) - 方式2:通过
vi filename
来查询 可以更加方便地搜索日志中的关键字
- 方式1:
-
注意事项
- 日志操作命令仅能查看线下环境(dev-debug/test),staging和真线必须使用“日志平台”进行查看日志平台地址
-
常用vi命令
- shift+g 查看最新日志 ?关键字 结合 n /n 关键字搜索
2、Git操作的常用命令:(熟练掌握)
- 推荐看这篇文章,更加全面
命令\作用
-
1、
git merge --no-ff feature/weide
- 合并分支(在当前分支上合并weide分支)
-
2、
git checkout -b dev
- 新建分支(dev为分支名称)
-
3、
git branch
- 查看当前分支
-
4、
git branch -d feature/weide
- 删除feature/weide 分支
-
5、
git stash list / git stash pop list
- 暂存/恢复 工作现场
-
6、
git push origin release/20190704
- push命令推送分支
-
7、
git pull origin release/20190704
- pull抓取分支
-
8、
git add file
- 将新增/修改的文件加到缓存区
-
9、
git commit —message “注释信息”
- 提交更改
分支|使用时机|注意事项
-
hotfix/问题描述
- 紧急修复bug
-
feature/功能
- 个人开发的功能/模块
-
release/日期
- 本期要开发的所有需求,在feature上开发完毕后合并到该分支
-
master
- 主分支,拉取最新分支,直至最终合并代码
政府采购云平台功能 地址1、可以查看菜单的定义信息,菜单详情
-
2、url访问权限管理(登录访问url/匿名访问url/授权访问url)
-
3、角色标签树
- 01采购单位
- 0201临时供应商
- 020101初审供应商
- 0202正式供应商
- 030101政府集中采购机构
- 030102部门集中采购机构
- 030201临时中介机构
- 030202正式中介机构
- 030203临时分支机构
- 030204正式分支机构
- 0401临时专家
- 0402正式专家
- 0409虚拟专家
- 0601采购监管处
- 0602预算处
- 0605车辆管理机构
- 13品牌商
- 14人民银行
- 15审计
- 17金融机构用户
- 88行政区划管理
- 99平台运营)
4、菜单权限配置
old:
- 1、通过点击菜单定义来查询需要补充的菜单,然后点击编辑可以看到各类数据:name/privilege/url/domain; 网址:
http://172.16.101.169:8044/#/login?_k=vr2cms
- 2、然后通过
http://confluence.cai-inc.com/pages/viewpage.action?pageId=6623436
来遍写菜单模板yml文件; - 3、然后通过
http://172.16.101.169:8044/#/ymlToSql?_k=rhzdo4
由yml文件生成sql语句; - 4、最后在数据库中执行语句,对应的数据库为db_user。执行完成后菜单的更新时间为5分钟。
new:纯界面操作,增量配置和修改配置两部分 参考文档
5、权限查询
6、redis管理
7、工作流配置
3、阿里开放平台(现阶段统一放在extra-center项目中)
- 推荐看这篇文章,更加全面
1、spu管理
-
作用:通过界面新增或是导入工具上传SPU时,会将数据上传到阿里库,然后每天定时任务(凌晨1点) 会将库中数据dump到本地,使用阿里开放平台可以实时查看到上传的数据。
- 目前已经去除对阿里spu的依赖
-
地址:Apollo下搜索项目extra-center,查找关键字 Apollo test环境
阿里库online环境 Api名称 taobao.spu.get
spu.aliapi.appKey
24360240spu.aliapi.appSecret
87ad2f51d8d0ff163fbf7d7446a05a2e
channel zcy
阿里库沙箱环境 spu.aliapi.appKey
1024360240
阿里沙箱环境挂过
spu.aliapi.appSecretsandbox
1d8d0ff163fbf7d7446a05a2e
channel zcy_staging
2、类目属性库
-
作用:拉取tmall类目属性,类目属性值
-
阿里环境:
appkey
:21008948appsecret
:0a16bd08019790b269322e000e52a19f
3、CSPU库
- 政采云开放平台
4、 maven踩坑
-
推荐看这篇文章,更加全面
-
1、传递依赖的问题
-
2、deploy的问题
-
snapshot版jar包被更新后,能实时拉取最新的代码
-
release版jar包必须升级版本号后,才能拉取最新代码如果dubbo接口有变动,上staging环境前必须升级pom文件版本号
-
如果release包deploy到dev环境失败时,必须重新打包
-
3、maven常用命令
作用 命令 清除无效jar包 mvn clean install -U -DskipTests 上传jar包到开发/测试环境 上传jar包到预发/真线环境
5、磐石系统
功能:
- 1、dubbo接口调试,环境: 开发测试 真线
- 2、dubbo服务治理(限流/鉴权/调试),限流步骤:填写接口,方法名,然后定义限流规则 调试步骤:填写环境,接口,方法,参数,点击测试。
- 3、开发工具(短信语音白名单/消息队列发送/dubbo压测/http压测/ZMQ后台管理)
- 4、链路分析(链路查询/流量详情)
- 5、监控告警(流量监控/关键字监控)
6、运维平台
地址:运维平台
- 1、资产管理:可以查看主机ip及负载,cpu,磁盘,内存等性能,也可以根据应用来重启或开启调试功能
- 2、版本维护:可以填写sql脚本,在各个环境执行
- 3、流程管理:新应用创建/上线,云主机申请
7、PINPOINT
-
主要功能是:查看接口的rt(response time),可以查看该调用链的依赖以及执行时间
-
使用时机:
- 1、做性能优化时查看性能瓶颈在何处;
- 2、执行全量dump任务时查看数据有没有被正确消费
8、DUBBO Monitor
-
功能是:查看某一接口/方法有没有成功注册,查看服务提供方与消费方
-
使用时机:在新增dubbo接口时查看,与磐石系统结合使用
9、ZMQ
地址 使用方法:1、填写对应的topic和pid 就可以了。
TopicPID
- 踩坑:消费方C_ID相同,但tags不同,ZMQ不支持这种场景
10、DMS
账号:
待整理
11、IPASS(现阶段用在上海环境)
功能:简介
- 1、运维平台:可以对应用构建更新操作(自动更新,对比jenkins优势明显),查看日志,通过端口调试
- 2、元数据管理:生成元数据集
第三部分:开发手册
1、idea提效工具
- 推荐看这篇文章,更加全面
插件功能推荐程度
-
1、mybatis插件(mybatisCodeHelperPro)可以生成基础的domain和mapper文件,提升开发效率 *****
-
2、sonarLint插件代码规范检查 ****
-
3、Maven helper便捷查看maven的层级结构 **
-
4、Lombok简化domain的代码量,方便构造对象 ****
快捷键功能备注
-
搜索相关command+o 搜索类
-
command+shift+f 搜索方法
-
两次shift 万能搜索
-
command+e 搜最近更改过的文件
-
command+f12 搜该类中方法
-
代码生成.var
- 生成返回值
-
重构相关alt+command+m 生成方法
2、应急响应策略
- 推荐看这篇文章,更加全面
现象排查方向故障降低措施
-
1、pinpoint 打点存在大批量300ms以上排查方向:检查db是否存在慢sql/定位调用链中具体接口/pinpoint inspector查看是否存在fullGC/应用dubbo线程池是否耗尽)
- 打点存在大批量红点(排查方向:确认红点出现源头,判断自己调用其他的业务服务是否存在超时)
-
2、应用 cpu突然升高排查方向:应用是否存在fullGC/检查应用流量是否突增/是否存在不合理调用(可参考监控大盘) 1、阈值标准:pinpoint最近5min出现大批量超过5s以上的打点/应用cpu 90%以上持续3min/应用内存90%以上持续3min(瞬间暴增除外)/收到上游最多两个以上业务方反馈
-
解决措施:打印线程栈:jstack l<pid> <路径文件名.bin>/dump jvm堆 jmap dump:format =路径文件名.bin/重启应用:运维执行命令/jenkins下游业务服务方响应超时 sentinel consumer限流/如果存在恶意攻击是,联系安全部门拦截/如果单业务流量大,针对url或dubbo进行限流/升级应用机器配置(一般是加机器)
-
内存升的很快排查方向:1、排查是否存在新版本发布的影响;2、查询下调用频率较高的接口是否存在内存缓存的使用;3、查询下日志确定应用是否存在大批量的异常抛出
-
-
3、数据库 cpu持续90%以上10分钟ops是否明显增高(是否爬虫等异常流量)/是否存在大批量数据查询(索引/动态sql) 阈值标准:数据库cpu100%持续2min且没有下降趋势/链接数一直增加没有下降的趋势,iops打满且没有下降的趋势/内存使用率80%以上持续5min
-
解决措施:定向业务限流/运维kill慢sql/运维kill锁进程/重启应用/升级配置(但是需要考虑升级时间的影响问题)
-
连接数线性增高且长时间不下查看是否存在慢sql/查看应用的数据库连接池配置/查看数据库中是否存在死锁 show engine innodb status;
-
iops飙高ddl操作 是否针对大表新增索引/是否存在变更大表字段,业务上是否存在大批量操作(写入或读取)
-
内存升高确认下数据库连接数是否异常(连接也占用内存)
-
-
4、中间件 MQ 消息堆积(基本不需要处理)
-
阈值标准:garafa canal delay 延迟超过用户不可接受的范围
-
解决措施:业务评估无影响情况下联系运维重置消费位点
-
canal delay延时高(排查方向:大批量数据操作,是否存在和其他业务共用canal,受其他业务影响)
-
3、数据库
- 推荐看这一系列文章,更加全面
table表名、有效数据量、重要字段、重要方法、备注(存在的坑)示例
spu相关
-
1 zcy_ali_spu spu库
- 1、channel(1 通过页面或excel上传的spu; 0 通过物品编码渠道上传的spu,不同之处在与后者不会将数据上传到阿里online库) 坑爹的,各种问题
-
2 spu审核表
-
3 spu快照表
品牌相关
- 1 parana_brand 品牌表
- 1、audit_status
- 2、status
商品相关
-
1 parana_items 商品表
-
1、status商品状态枚举(0 已发布PUBLISHED;1上架ONSHELF;-1下架;-2 冻结FROZEN;-3 删除DELETED;2 待审核;-4 审核不通过;5 解冻审核中 )
-
2、layer商品层级 基础ITEM:1 网超渠道:11 大宗渠道:12 疫苗渠道:13 制造馆渠道:14 协议供货渠道:15 医疗器械渠道:16 网超协议:111 大宗协议:112 疫苗协议:113 制造馆协议:114 协议供货协议:115 医疗器械协议:116
-
3、状态 DRAFT(10, “草稿”),PUBLISHED(0, “正常”),/** 基础 + 渠道 + 协议 共有状态 /FROZEN(-2, “冻结中”),WAIT_UNFREEZE(5, “解冻审核中”),DELETED(-3, “删除”),/* 协议 特有状态 /ONSHELF(1, “上架”),UNDERSHELF(-1, “下架”),WAIT_ONSHELF(2, “上架审核中”),WAIT_PRICE_RISE(3, “价格上涨审核中”),WAIT_PRICE_DECLINE(4, “价格下降审核中”),/* 审核不通过*/AUDITREJECT(-4, “审核不通过”);
-
经常被前端和运营问到商品枚举
-
-
2 商品属性表
- 类目属性相关1 parana_properties 8000 1、attr_vals_json 属性值json串
- 2、value_type (现阶段共15种)属性值的id化
-
2 parana_property_value 属性值表
-
3 parana_back_categories 后台类目
- 枚举值:normal 1 类目下可以新增商品,也可以查询类目下商品 frozen 0 类目下不能新增商品,类目下已有商品可以查看 OFFLINE 2 只有运营后台可见,供应商不可见DELETE 1 逻辑删除,运营后台、供应商均不可见,只有数据库中可见
-
4 parana_front_categories 前台类目
-
5 parana_category_attributes attr_vals_json 属性值id化
-
常用sql脚本1 利用excel生成sql脚本
CONCATENATE("update user_brand_dealer_item_22 set target_item_id = ",A2,", status = 1 where task_id = 6566507514137653907 and target_item_id =0 and status=2 and reason='' and target_shop_id = 2211405 and item_id = ",B2," ;")
-
2 类目层级关系脚本
select a.`name` AS '一级类目', a.id, a.tag_id, b.`name` AS '二级类目', b.id, b.tag_id, c.`name` AS '三级类目', c.`id` AS cid, c.tag_id from `db_item`.`parana_front_categories` a, `db_item`.`parana_front_categories` b, `db_item`.`parana_front_categories` c where c.level= 3 and c.status= 1 and b.level= 2and a.level= 1 and c.pid= b.id and b.pid= a.id
工具1 FIND_IN_SET函数
- Find_IN_SET 是精确匹配,字段值以英文”,”分隔
SELECT * from tb_test where FIND_IN_SET("daodao",list)
4、常用工具类
序号工具类使用方法
-
1 beanUtils 1、copy(source,target) 将原DTO拷贝到目标DTO,缺点是:没法进行深拷贝
-
2 字符串处理工具1、
-
3 sql语法检查
- 可以使用这个工具
- http://soar.supporting.cai-inc.com/static/index.html#/analysis
-
4 类目、属性缓存清理 缓存清理方法
- 目前是通过切面拦截后,发送MQ清理缓存
第四部分:调试手册
1、使用步骤地址
数据库连接信息查询:
-
1、通过Applo,可以查看各个数据库环境(ip/username/password) 地址:通过阿波罗查看数据库配置
-
2、通过cf链接,查看各类测试环境信息:测试环境信息
-
3、要想查看sql执行语句 :通过microservice center的日志 ,因为会直接连DB(center应用也能看到程序异常)
-
4、要想查看程序报错信息:通过web item admin的日志信息,
- web应用不连DB,仅用来连接前端和后端具体的业务逻辑,故web应用日志文件中一般只能看到由center应用上抛的错误信息
sql脚本维护:
-
1、开发过程中对数据库做了改变的地方(变更字段/索引等),需要将sql执行语句及回滚语句在运维平台进行版本维护 运维平台sql脚本维护地址
-
2、在“版本执行”根据版本号在不同环境下执行相应脚本
2、Idea 调试:
Idea 调试:
-
1、首先得部署好远程调试环境:在idea中配置Remote信息(host以及port),通过运维平台(资产管理 --》应用)可以查看详情运维平台地址
-
2、通过远程debug ,现将程序部署在dev-debug环境,然后在本地打断点,要保证远程环境和本地代码的一致性
调试技巧:
-
1、页面上出错后,根据关键词在后端代码中找到对应的log信息,然后根据此信息查询日志文件,快速定位;
-
2、容易出错的地方:mybatis中手写的Mapper文件,不会智能提示错误;
-
3、场景:遇到程序逻辑没问题,但是数据不能落库时,可以看
item-microservice-center
日志文件中的sql语句,看是否能在数据库中成功执行;也可以查看dubbo监控服务调用的信息,传入数据,看能否成功查询或插入数据。
第二种方法
-
1、连接要调试的环境,例如:test上海:-Denv=SH -Dapollo.cluster=test-shanghai -Dapollo.meta=http://172.19.195.201:8080
- 上海项目各环境方法信息
-
2、需要调试的类继承
InitializingBean
方法,然后实现该方法的afterPropertiesSet()
方法,构造需要调试的对象,最后打断点执行- 使用了Spring执行的生命周期
-
第三种方法:
- 单元测试1、
sql调优技巧待补充
花未全开月未圆,才是人间好风景 – – – 曾国藩