目录
  1. 1. 重要项目(时间先后)
    1. 1.1. 标识印刷业生产管理系统(3个月+)
    2. 1.2. 标识行业定制OA(半年+)
    3. 1.3. EPD批量数据中转(2个月+)
    4. 1.4. 内部业务平台重写(半年+)
    5. 1.5. 供应商数据处理及接口服务云端化(半年+)
    6. 1.6. 合作方数据自动整合系统(2个月+)
    7. 1.7. 行业版企业信息化平台和销售/报价网站(近一年)
    8. 1.8. 项目管理系统PMS(2个月+)
    9. 1.9. Opencart电商系统强化+微服务(3个月)
    10. 1.10. API仿真平台(1个月)
    11. 1.11. 移动电商系统PHP独立部署版本(半年)
    12. 1.12. 移动电商系统Saas版本(一年)
  2. 2. 总结

工作中经历的大小项目很多。以下列出对我个人比较有价值的,大部分由我主导技术架构和核心代码,并带队开发。

重要项目(时间先后)

标识印刷业生产管理系统(3个月+)

技术栈:Extjs, Java, 电信托管linux服务器

这个是我接触的第一个正规大项目。

该项目的目的是梳理通公司生产部门的业务流程,最大化实现流程自动化,如生产计划安排、仓库出入库管理、原材料采购、图纸管理等。

我是中途进入这个项目的,但是后面接管了项目的开发和升级工作。

通过这个项目, 让我完成了从接近零基础的前端知识加基本的Java开发知识,到迅速掌握Extjs这种重量级前端框架配合后端api调用开发方式的知识积累。

回想起来,一开始为了迅速进入状态,自已强迫症式的深夜加班经历还历历在目。。。

标识行业定制OA(半年+)

技术栈:Extjs, Java, 电信托管linux服务器

这个项目是上面生产系统完成后,公司余下业务自动化的又一关键系统。包含了商品管理,订单处理,采购管理,财务管理,及其他日常办公流程业务。

很遗憾,我们的项目经理那时候离开了。而我被看中,成了代理经理,带着几个小伙伴继续项目。

作为一个技术界新人,没前辈带,只能自已摸索。然而幸运的是,这确实也促使我养成了独立思考和解决问题的习惯。

几个月后,我带着几个新人,成功完成了这个项目,同时也积累了大量的技术笔记。

EPD批量数据中转(2个月+)

技术栈:Java, Spring Batch,SqlServer

这个是我在第二家公司完成的第一个项目。

项目目标是为供应商服务器和公司服务器的大数据量(单次G级以上大小)交互提供统一接口,可通过定时、API调用等方式促发导入和导出数据。但要求不能对中心服务器造成太大压力,且保证数据处理速度。

在服务器资源限制的条件下,我们选择了Spring Batch作为架构实现,大量使用了多线程优化方案。

这个项目让我有了不错的多线程、大数据批量处理实践机会。

内部业务平台重写(半年+)

技术栈:Java, Spring, FreeMarker, PostgreSQL, Maven, AWS, S3

这个项目是公司系统AWS化的一部分。

老的内部业务平台是近10年前写的,是定制系统,柔和了很多不同类型的功能,如供应商管理,客户管理等。并且高级框架和特性使用很少:老Java平台,纯jsp渲染,项目间依赖靠手动配置…

由于业务牵扯很多方面,并且新需求还一直有提出,每次修改、测试、上线相当繁琐。

所以目标很明确,就是复制并梳理老的管理系统业务,同时用更现代的方式构建新系统,方便后期扩展和维护。

在前一个项目搞成功后,leader让我来做AWS和新的Java模块化开发调研。

AWS具体技术的采用主要是来自leader经验,用了EC2服务器、RDS的PostgreSQL数据库、S3做图片和文件存储等。

Java框架调研后,锁定了Maven多模块依赖方式和依赖发布方式,使用强大的Freemarker模板代替了JSP。

供应商数据处理及接口服务云端化(半年+)

技术栈:Java, Spring, Hadoop Map/Reduce, AWS, S3, DynamoDB, ElasticSearch

这个项目是公司系统AWS化的又一大环节。

由于业务发展,之前的供应商交互数据处理服务处理能力需要不断提升。但是老的服务器处理能力有限,卡顿几率越来越大,性能遇到瓶颈。

通过采用AWS的Hadoop集群计算能力,可低成本解决这个问题,方便的通过增减机器调整服务计算能力。

那时候Hadoop的概念在国内还没这么火,对分布式并行计算、函数式编程、map reduce之类的概念也不是很了解。

调查后,发现Map Reduce其实相当好理解。原来只有昂贵的大型机才能解决的问题,可以用低成本的普通电脑解决了。

同时借助aws领先的云端基础设施方案,做大数据计算、存储变成了相对简单的事情。

合作方数据自动整合系统(2个月+)

技术栈:nodejs, phantonjs, casperjs

那时候公司的数据主要来自于近一千家合作方。

原来都是需要人工操作,定时去对方网站上下载CSV等格式的数据文件,然后整理校对后导入自已的系统。

这个事情耗费很多人力,如果能自动化,可以实现很好的效益。

于是我提议由我来牵头构建个系统,自动处理大部分下载任务和其他能自动化的操作。

调查后发现phaltonjs + nodejs组合可以很好的满足类似的需求:phaltonjs提供可编程浏览器环境模拟人工操作,nodejs配合处理其他逻辑部分。

项目大幅提高了数据处理效率,降低了出错概率。

通过这个项目,我的”后端JS”能力也得到了强化。

行业版企业信息化平台和销售/报价网站(近一年)

技术栈:Java, Nodejs, Solr, 分布式系统, 腾讯云, 又拍

这个是回到第一个公司后的主要项目。

在立足工业品生产、销售领域之后,老板希望把之前的软件积累和想法整理,并做成标准化的行业软件方案。

讨论很久后,我们调整了之前一个系统业务全包的形式,代之以开发多个独立,又可互联的子系统,如生产系统,产品管理系统,文件图片管理系统,仓储系统,订单管理系统,财务系统等。
每个系统作为可独立开关/购买的模块对外展现。同时考虑到做网站营销的需求,支持设置多个网站后台,可管理多个对外销售/询价网站的数据源。

对于电商展示网站,那时候同时对传统的Java一站式搞定前后端系统的方式进行了反思,最后和淘宝的方案一样,让前端同学直接使用上手较快的nodejs调用后端api直接构建网站,效果不错。

限于传统行业的背景,这个项目商业化道路并不顺利,但是不管是沟通、思辨、技术解决的方案、团队管理、最终的结果,对我来说都有极大的意义。

Drawing Drawing

项目管理系统PMS(2个月+)

技术栈:Nodejs, Koa, Angularjs, Bootstrap, MongoDB

这个项目是我进入朋友公司前,花了两个月业余时间给他们定制的,后面又经过了很多次改进。

那时候待办事项型的管理工具不少,比如国外的Trello, 国内的worktile, Teambition。但是作为项目管理工具来说都有所欠缺。

同时传统太重量级的管理工具过于繁琐,而且形式不够现代和方便。

其实我们就是希望保留Teambition等现代工具方便快捷的形式的前提下,再多些需求管理和内部定制功能就可以。

这个项目最后采用敏捷项目常用的白板展现形式,配以团队、权限、需求、文档、知识库管理等功能作为整体需求。

因为是一个人开发,前后端都要处理,所以后端选择了比较轻量的nodejs和方便的koa开发框架,前端直接用angularjs+bootstrap搞定。

Drawing Drawing
Drawing Drawing

Opencart电商系统强化+微服务(3个月)

技术栈: PHP, Opencart, Java

基于Opencart开源电商系统的定制开发,是第三个公司初期的主业。

然而因为是Opencart(PHP)第一代,工程化开发支持相对较弱(比如没有统一的服务分层), 加上PHP的一些语言限制和特点(比如基于多进程创建/销毁模型,不支持定时),造成开发、运行效率不算高。

于是结合之前Java平台的经验,进行重构和强化。基本思路就是发挥原有框架和语言的长处,再用其他方式来弥补其短处:抽取独立业务分层、使用composer管理依赖、开发java微服务作为外部独立的补充。

改造后的体系总体上开发效率提高了1倍以上,并迅速应用到了新的项目中去。

API仿真平台(1个月)

技术栈:Nodejs, Koa, Angularjs, Bootstrap, Mysql

那时候公司有很多前后端分离的项目,但是并行开发经常需要前端等后端接口、后端等前端反馈。

经过调查,解决这个问题的最有效办法是先把API接口规范定下来,然后提供一个模拟接口调用方式。

传统的写静态json的方式对于前端来说是可以的,但是也有明显的问题:1. 没有API文档;2. 后端人员要参考、或者修改不方便。

所以最终的方案是,基于简单的用户权限区分和版本管理策略,提供统一的api文档编辑入口,可直接设置模拟数据。并有单独的模拟api入口地址方便测试。

平台做完后经过了很多项目实际检验,结果令人满意。后来发现,百度阿里等也有类似的方案,但是看起来开发和部署成本都不低。

Drawing Drawing

移动电商系统PHP独立部署版本(半年)

技术栈: PHP, Java, Mysql, Ionic

这个项目是公司战略升级后的产物:电商业务向移动端更进一步,前端覆盖PC、移动网站/微网站、APP。

之前重点依赖的Opencart代码不够现代,改造后的开发相率还是跟不上业务的发展。根据公司业务目标,这种情况必须尽快改变。

所以在继续强化Java微服务的基础上,用更标准的业务模块化、分层模型重写和完善了PHP版本的电商系统,同时去掉了OC中不适合实际业务的设计(如遍布的多语言支持,用到的场景少,维护成本又高)。

同时重点开发了移动APP端作为主推部分。

移动电商系统Saas版本(一年)

技术栈: Java, Ionic, Mysql, Redis, Solr, Jenkins CI

以上的PHP版本在顺利运行1年之后,有几个问题有了扩大影响的苗头:

  • 一个是PHP人员招聘在这边比较费力,很多社招的PHP工程师都是前端出家,其实没有太强的后端逻辑能力,而校招对于小公司来说又有很大风险;
  • 另一个是公司想做saas化电商产品进行推广,对高端客户再进行定制。而老版本并不是为了做saas而设计的,要支持saas,可选的方案只能是共享形式多次部署同一套代码或者用docker等容器化方式。对开发和运维一致性会造成很大问题。

几经考虑,最终决定还是转向Java平台:

  • Java各层次人才存量比较大,加上我们原来的后端开发都有Java经验
  • Saas的经典做法是数据隔离,要求单个服务实例的性能要尽可能好,并且足够稳定。这方面Java是佼佼者。

在综合考虑了项目的主要目标和当时的情况后,制定了如下方案并实施:

图示

Drawing Drawing

总结

每一个项目都有其独特的业务背景和要求。通过沟通,梳理清楚业务,并建模转换为系统设计,是很有价值的。

每个项目都是非常好的架构实践平台,成功的经验可以复制,失败的经验可以避免。

同时,做项目和管公司可能也有很多相似性,掌控者都需要站得高,看得远,全局把控各种资源,个人能力得以不断强化。