今天是2019年1月29号,马上就回家过年了,趁春节放假前回顾一下2018,展望一下2019。
总结2018
关于工作
18年团队转到 '空间中心' 这边的头一个月主要参与了 moca
服务迁移 的工作,moca
服务是一个运行了三四年之久的项目,因为历史原因,导致服务器成本开销巨大,通过这次迁移我们简化了之前冗杂的服务架构,减少了服务器及相应磁盘的使用量,为公司大程度的节省了服务器方面的开销。
第二个月份投入到了 萌股 项目后端业务的研发工作。我在这个项目的研发中,大致分为两大块,基础框架 scaffold 的构建和发现模块及股票模块的开发。
scaffold 主要基于 Yii2高级项目模版 进行的一系列工程化的封装,是团队之前许多次基于 Yii2
框架开发中积累的沉淀,主要目的是为了更加高效、规范和工程化的满足项目开发的需求。在基础框架的构建中,首先是与目前大热的 docker
进行整合,实现了让本地、测试和正式全部都运行在相同的容器化环境中,并将 Dockerfile
落到基础框架中,打通Dev与Ops的 ‘隔阂’,让整个开发交付环节更加敏捷,并为之后的持续集成打下基础。然后就是对业务层这一方面进行的诸多工程化封装。比如在Request阶段,通过 JWT
及 timestamp
实现数据传输的安全性;实现具有识别前段缓存的数据提供器(FdbVersion Displaying Data);规范了 PHP-FIG 的代码规范,并增加代码规范检查和代码质量检查,等等。还有一个重要的就是对 Yii2
组件的封装,有些是直接集成到了基础框架中的,比如:集成 Adminlte 及 RBAC 的 Yii2 后台框架 yii2-desktop、kvstore存储的方式来对数据量大的情况下进行优化的 yii2-kvstore 、提供了灵活可编辑的 app hosts 数据的 yii2-app-devhosts 等等。基础框架的研发是我认为整年中最为重要的一个阶段,为 萌股 项目及之后的 慧珍 的开发奠定了基础。
基础框架构建之后,就是进行 萌股 项目相关模块的开发了。首先发现模块,主要是对二次元资源(比如 番剧、二次元人物)的一些整合、展示。然后是股票模块,它和发现模块中二次元人物紧密相关,实现了股票投资、众筹上市、股价排行榜等一系列功能。
在这之后,我转投到了容器编排的相关工作中来。单纯的容器化在面对部署在多个主机时就显得无所适从了,为了超越单个容器管理,我们必须转向编排工具。这次的容器编排对于我来说是一个试错的实践,虽然最终往业务实施阶段失败了,但是这次实践也带来技术方面和思维方面的成长,为之后业务飞速发展奠定了良好的开端。先说一下失败的原因,主要是因为项目初期阶段不具备支撑 Kubernetes
容器编排方案的维护成本。一开始的部署方案,是直接在云服务器上自己搭建 Kubernetes
集群,然后就面临了部署方式复杂、不安全、不利于维护,对于新节点的部署也很浪费时间的问题,就想到了通过 ansible
来实现对部署方案的管理和应用,当时正好在一个《kubernetes技术群》里看到了 kubeasz 的项目,它通过Ansible脚本安装K8S集群,并不受国内网络环境影响,经过调研并测试没问题后,便确定了这个部署方案,很快便部署完成,进入到了业务应用阶段,业务应用阶段面临的最大问题就是在 Kubernetes
下的持续集成了,最终实现了围绕Jenkins的一个持续集成方案(如下图)
没有持续多久在一次压力测试之后,导致了多台服务节点宕机,相关组件停止服务,并未能尽快恢复,让我意识到,目前阶段对于 Kubernetes
集群的维护难度与成本,当然也有解决方案,也是目前更推荐的一种方案,就是完全使用相关云平台的 Kubernetes
服务,包括相关存储方案、网络方案等等。当时我也转移到了公司服务所在的云平台提供的 Kubernetes
服务,但是最终发现还是不太稳定,当前业务还处在初期阶段,并不适用,最终放弃。
意识到目前阶段并不适合容器编排之后,就需要在目前的容器化架构(docker-compose编排)下实现持续集成了,在之前使用 Jenkins
进行持续集成中,发现了一些弊端,了解到目前公司使用的私有自建代码托管仓库 GitLab
也支持相关持续集成,进行调研之后发现能够解决之前的那些弊端,并能最大程度帮助目前容器化架构在多个主机下部署的问题。在实现 GitLab
下的持续集成过程中,也遇到了解决了很多问题,比如通过在服务端维护版本库实现代码回滚、根据git的 short commit 实现容器镜像版本化、通过研发 phpclb 工具在腾讯云CLB下实现滚动部署的发布模式等等。最终推出了一个稳定的、契合目前阶段的持续集成方案。目前在该方案下(从10月份至今),已经进行了8400+次的持续集成(见下图)
极大的加快了研发效率。
除去这些,还有一些根据业务的需要实现的 Yii2
组件和php扩展,比如提供了灵活可编辑的 app hosts 数据的 yii2-app-devhosts、websocket 扩展 yii2-websocket以及生成腾讯云游戏多媒体引擎提供鉴权密钥的php扩展 autherbuffer。
关于技术
先回顾一下去年的目标:
-
读完《PHP 7内核剖析》 | 100%
-
读完《C Primer Plus》 | 37%
-
掌握编写 PHP 扩展的能力 | 40%
虽然读完了《PHP 7内核剖析》这本书,却没有学到太多的东西,主要原因是因为对C语言掌握的不足导致,这也限制了编写 PHP 扩展的能力。然后就是工作当中带来的技术成长,在工作发现了很多不足,比如在容器编排过程中发现对网络知识的不足、对服务器问题处理的不足等等,虽然通过 极客时间
进行了补足,但还需要继续学习。
展望2019
新的一年,新的开始。先在这里大致列一下对自己对工作新的期望。
对自己:
-
读完《C Primer Plus》,增加编写 PHP 扩展的能力
-
继续补足自己在网络和数据算法方面的薄弱面,学完
极客时间
的 《数据结构与算法之美》 -
学习 go 语言
对工作:
-
输出平台化技术产品
-
完善日志收集和监控报警
-
构建稳定的容器编排环境