1718总结与计划

2018年已经悄然到来,回望过去一年,收获不少,感恩不少;将来一年,心里充满了期待,不管是工做仍是生活,将会发生很大变化。大年初一的晚上,将本身的所思所想记录下来,与你们分享,激励本身18年更努力。html

17年总结

我目前就任于小米,在『小米网智能客服项目』从事开发工做,项目主要包含在线客服、智能机器人、智能数据分析三大块,另外还包括热线、邮件、工单等模块。git

16年3月份,我加入这个团队,当时就4我的,每一个人负责多个子项目。通过了解,项目初期想作的功能不少,设计的比较大,不少人投入进来,造成了不少个子服务。因此17年上半年以前,我一直在维护项目,解决线上的一些问题,实现业务的一些小需求。另外,当时小米的管理比较扁平化,项目管理和团队管理也不是很规范,本身也比较松散,技术和团队协做能力提高的都比较少。github

17年下半年,小米发展增速明显,国内和国外的业绩都有了很大提高。管理上也开始重视起来,招了不少项目经理,『小米网智能客服项目』有了产品功能规划,开发团队也慢慢扩大,慢慢变得好起来。web

还有一点对我影响很大,咱们团队的开发负责人,17年中旬加入进来,有10多年的开发、管理经验,从他身上,在任务规划、执行力、团队协做上学到了不少。spring

下面从主要工做、线上问题处理、规划执行能力、家庭几个方面总结本身过去的一年。数据库

主要工做

我主要负责在线客服,使用到的主要技术点:浏览器

  • NIO
  • 多线程
  • WebSocket协议
  • 会话状态管理
  • CAS单点登陆
  • Shiro权限控制

使用到的主要框架和组件:缓存

  • SSM
  • Redis
  • RabbitMQ
  • ZooKeeper
  • Thrift

消息平台

在线客服最重要的一点是保证用户和客服可以在线沟通,相似于IM。现有系统缺乏消息确认、重发机制,多终端消息同步也不支持,17年在技术负责人的指导下,重构了『在线实时聊天』模块,进行了抽象,变为通用的『消息平台』:服务器

  • 长链接接入层仍是使用netty实现的websocket通道,比以前更通用,扩展其余协议也很方便,另外可支持多实例部署,随时重启;
  • 消息存储层,为了方便,使用MySQL+Redis进行存储,保证了消息的有循序,实现了消息确认和重发机制;

有点遗憾的是,17年下半年规划需求比较多且比较紧急,人也比较少,没可以正式上线,18年必定要推动上线。websocket

maven依赖统一管理&工具类封装

前面说到,项目有不少子服务,每一个服务maven的配置都很类似,更新维护都要修改全部的服务,不是很方便。通过调研和思考,决定将公共的依赖、版本声明、构建过程、maven插件统一管理,抽象出一个parent pom。

maven自己就支持parent pom,每一个子项目只需声明下继承父pom,就能够直接声明须要的依赖,不须要再声明版本,构建过程。

另外,将公司其余组的一些工具类,也声明在父pom中。客服项目特有的一些工具类移到父pom所在项目,并在父pom中声明。

国内和海外代码分支合并

因历史缘由,国内和海外代码分支是不一样的分支,海外的功能较国内相对较少,并且海外有近1年未更新了。一次,业务提出一个海外需求,该需求在国内分支已经实现。通过确认,海外有的功能,国内都有,并且交互和操做都相同,只是一些基础存储组件不一样。最终决定,合并国内和海外分支,方便之后功能扩展,节约开发时间和维护成本。

升级过程熬了2个通宵(不是连续的),过程在此就不详细描述了,简单总结下:

  • 大的变动上线前,必定要作好回滚预案, 升级失败可及时回滚,不影响现有业务;
  • 条件容许,最好有预上线环境,尽可能彻底模拟线上,由于海外网络结构比较复杂,虽然测试环境测试正常,上线后可能出现各类问题;
  • 上线时,相关人都要在场,有问题时及时协调处理;

推动协做开发规范

相信大部分团队都在使用git进行代码版本控制,但真正用好git,多人协做开发一个项目,须要规定一套工做流规范。

我借鉴网上比较流行的git flow规范,造成了相关规范,对各类场景的使用进行了说明,并作了一次分享,如今已经在项目中试运行,明年会增强推动。

扩展阅读:

线上问题处理

问题处理也是很重要的能力,更能提现一我的的能力,遇到问题时,首先不要排斥,它是提高本身能力的一个机会,问题解决后,要进行总结回顾,下次遇到类似问题时能够快速定位和处理。

17年遇到了很多问题,下面列举2个问题总结(当时总结的)。

测试环境-客服端没法访问

  • 问题描述
    • 浏览器访问测试环境客服端时,直接提示502错误,后台服务不可用;
  • 排查过程
    • 查看resin服务器日志和程序日志,未发现异常;
    • 查看cpu指标,未发现异常;
    • 查看jvm内存使用状况、垃圾回收状况,未发现异常;
    • 查看jvm栈,发现有好多线程在同一处等待数据库资源,可能数据库资源已被耗尽;
    • 重点关注“线程等待的代码”,打开数据库链接池日志,在本地尝试复现;
    • 同事在本地复现,发现调用snaker(一个开源的工做流框架)的一些方法时,占用不少链接, 用完后并无释放;
    • 同事经过review代码,发现,在Service类加上Spring事务管理器后,问题解决;
    • 经过查看snaker源码,snaker在处理工做流时,旨在最后一次操做还回链接,若是未开启事务管理, 会获取多个链接,但仅释放最后一次链接,致使链接泄漏;
  • 总结
    • 排查问题时,不该太着急,理清思路,一步步进行排查;
    • 珍视排查问题的机会,从中会学到不少;

海外正式环境-ip白名单问题

  • 问题处理过程
    • 2018/02/04,发现时常有提示【ip禁止访问】的问题,当时以为可能本身的网络不稳定,没有在乎;
    • 2018/02/05,业务开始反馈多个客服出现【ip禁止访问】的问题,我和同事开始介入排查;
    • 尝试重启服务解决这个问题,但无效;
    • 临时关闭ip白名单功能,让业务能够正常使用;
    • 2018/02/06上午,我尝试开启ip白名单功能,但仍是出现【ip禁止访问的问题】;但发现服务端打印的访问者(个人内网机器)ip和我真实的不一样;(curl cip.cc)
    • 把发现的状况告诉运维,运维开始排查;
    • 2018/02/06下午,4点半左右,运维定位到问题:信息部将某个域名公网IP转发到专线出口,说是为了解决国内到新加坡走国际链路慢的问题;
    • 5点半左右,我添加对应的网段到ip白名单中,开启ip白名单功能;
    • 后续观察,问题解决;
  • 总结
    • 不放过一个异常的现象,也不排斥和惧怕处理这些问题;
      • 明确:线上问题处理能力是很重要的能力;
      • 总体上分析问题出现的可能缘由;
    • 若是线上一直运行正常,忽然某个功能不可用,就要考虑外部的一些因素了,尤为是网络;

规划执行能力

从团队负责人身上,获益最大的就是规划执行能力,让我作事有条不紊,善始善终,更充实、更有效。

下面分享下咱们团队和个人规划执行过程

  • 每个月初进行月度总结和规划;
  • 每周四下午填写周报,我会详细总结上周计划完成状况、下周计划;(特别重要,会特别认真填写)
  • 每周五进行进行周会;
  • 每周五,我会把下周主要工做同步到outlook日历中,细分每一天的任务;
  • 协做过程
    • 接到需求后,产品先进行分析,给出产品文档和初步的原型设计;
    • 开发阅读和理解产品文档,记录下疑问;
    • 产品和开发一块儿参加需求确认人,对一些细节和疑问进行讨论,肯定最终的需求和原型;
  • 其余
    • 团队任务使用teambition进行管理,可查看团队全部任务;
    • 重点任务,天天下班前会进行沟通,确保任务按计划执行;

我严格执行了上面的过程,获益良多。

家庭

篇幅缘由,就很少说了,总结两点:

  • 老婆辛苦了,怀了小宝宝,我没能好好照顾你,感谢你的包容;
  • 感谢丈母娘,专门辞去工做照顾你的女儿,辛苦了;

18年计划

技术学习

我会深刻学习如下相关技术:

  • 即时通信
  • NIO
  • 消息系统
  • 分布式缓存
  • spring boot
  • 数据分析

管理能力

18年,我将带个小组,多花精力在管理上,阅读相关数据,向身边优秀的人多学习,增强小组、部门间的协做沟通。

家庭

3月份,个人宝宝就要出生了,我会多花点时间学习如何与她沟通。 老婆会更辛苦,我会多包容她,陪着她。

情情说
相关文章
相关标签/搜索