开发工具篇第九讲:菜鸟入坑指南

摘要:本文是开发工具篇第九讲:菜鸟入坑指南。针对新人上手慢的问题,写了这篇入坑指南,方便自己回顾,总结。本文分为四个部分,分别为jenkins使用技巧;常用软件操作命令;开发手册;调试手册。主要材料来自于开发过程中遇到的坑,部分内容在后续会补充。

文章目录

      • 第一部分:jenkins使用技巧(目前使用的是IPAAS运维平台)
        • 1、商品中心
        • 2、标准中心
        • 3、协议中心
        • 4、网超
        • 5、 jenkins使用技巧(待补充)
      • 第二部分:常用软件操作命令
        • 1、日志操作的常用命令
        • 2、Git操作的常用命令:(熟练掌握)
        • 3、阿里开放平台(现阶段统一放在extra-center项目中)
        • 4、 maven踩坑
        • 5、磐石系统
        • 6、运维平台
        • 7、PINPOINT
        • 8、DUBBO Monitor
        • 9、ZMQ
        • 10、DMS
        • 11、IPASS(现阶段用在上海环境)
      • 第三部分:开发手册
        • 1、idea提效工具
        • 2、应急响应策略
        • 3、数据库
        • 4、常用工具类
      • 第四部分:调试手册
        • 1、使用步骤地址
        • 2、Idea 调试:

第一部分: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
  • 5、item-microservice-external

    • 商品中心提供给开放平台的center层
    • 提供dubbo接口给 web-open-middle
    • compile-web-open-middle
  • 6、item-platform-center

    • 商品中心center层,主要提供商品域相关dubbo接口
      • 2021年新增
    • compile-item-microservice-center
  • 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、在终端中登录日志系统

  • 2、查看模块位置的指令

    • find -name web-item* find ./ -name item-mi* (模糊搜索以web-item开头的模块)
  • 3、查看错误日志

    • 方式1tail -f filename(filename为前一个命令查到的路径)
    • 方式2:通过vi filename 来查询 可以更加方便地搜索日志中的关键字
  • 注意事项

    • 日志操作命令仅能查看线下环境(dev-debug/test),staging和真线必须使用“日志平台”进行查看日志平台地址
  • 常用vi命令

    • shift+g 查看最新日志 ?关键字 结合 n /n 关键字搜索
2、Git操作的常用命令:(熟练掌握)
  • 推荐看这篇文章,更加全面
    • 开发工具篇第二讲:git使用技巧 从基础到进阶(快速入门/高阶用法/git别名/项目实战/gitLab)

命令\作用

  • 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 24360240
  • spu.aliapi.appSecret 87ad2f51d8d0ff163fbf7d7446a05a2e

channel zcy

阿里库沙箱环境 spu.aliapi.appKey1024360240
阿里沙箱环境挂过

spu.aliapi.appSecretsandbox1d8d0ff163fbf7d7446a05a2e
channel zcy_staging

2、类目属性库

  • 作用:拉取tmall类目属性,类目属性值

  • 阿里环境:appkey:21008948 appsecret:0a16bd08019790b269322e000e52a19f

3、CSPU库

  • 政采云开放平台
4、 maven踩坑
  • 推荐看这篇文章,更加全面

    • 开发工具篇第三讲: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提效工具
  • 推荐看这篇文章,更加全面
    • 开发工具篇第一讲:Intellij 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、应急响应策略
  • 推荐看这篇文章,更加全面
    • JVM第六讲:线上环境 FGC 频繁,如何解决?

现象排查方向故障降低措施

  • 1、pinpoint 打点存在大批量300ms以上排查方向:检查db是否存在慢sql/定位调用链中具体接口/pinpoint inspector查看是否存在fullGC/应用dubbo线程池是否耗尽)

    • 打点存在大批量红点(排查方向:确认红点出现源头,判断自己调用其他的业务服务是否存在超时)
  • 2、应用 cpu突然升高排查方向:应用是否存在fullGC/检查应用流量是否突增/是否存在不合理调用(可参考监控大盘) 1、阈值标准:pinpoint最近5min出现大批量超过5s以上的打点/应用cpu 90%以上持续3min/应用内存90%以上持续3min(瞬间暴增除外)/收到上游最多两个以上业务方反馈

    • 解决措施:打印线程栈:jstack l <路径文件名.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调优技巧待补充

花未全开月未圆,才是人间好风景 – – – 曾国藩

你可能感兴趣的:(常用开发工具,稳定性建设,jenkins,java,运维,菜鸟入坑,知识点汇总)