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


    摘要:本文是开发工具篇第九讲:菜鸟入坑指南。针对新人上手慢的问题,写了这篇入坑指南,方便自己回顾,总结。本文分为四个部分,分别为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
    • 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、在终端中登录日志系统

      • 账号: ssh developer@172.16.101.123 密码: zcy 日志中心
    • 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操作的常用命令:(熟练掌握)

    命令\作用

    • 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踩坑

    • 推荐看这篇文章,更加全面

    • 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 <路径文件名.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," ;")
      
      • 1
      • 2
    • 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
      • 2
      • 3

    工具1 FIND_IN_SET函数

    • Find_IN_SET 是精确匹配,字段值以英文”,”分隔
      SELECT * from tb_test where FIND_IN_SET("daodao",list)
      
      • 1

    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调优技巧待补充

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

  • 相关阅读:
    Spring的后处理器
    MySQL存储过程 事务 简介及两者之间的关系
    Everything扫描非C盘
    Windows yarn 突然不能用了怎么解决
    抽象问题方法论
    27、JavaScript学习笔记——查看及操控窗口
    [谷粒商城笔记]08、环境-linux安装docker
    GB28181学习(四)——网络设备信息查询
    技术对接48
    ElasticSearch深度分页问题如何解决
  • 原文地址:https://blog.csdn.net/qq_28959087/article/details/126538914