关于近期技术改造的一些思考
在过去的差不多一个半月时间里,有幸参与了订单列表的翻译工作,这个工作就做一个事情,将订单列表的实现由php语言改为java语言(类似于搬运工的工作)。在这个过程中有一些个人的感悟,沉淀下来作为个人的总结。
个人感悟亦或是总结我觉得主要是分为两大块,一块我称之为项目把控的反思,另一块我称之为技术上的反思。
关于技术改造中项目把控的反思
现状的分析
- 这里想强调下前人工作的重要性,我参与的技术改造属于二期,所以很多问题和隐藏的坑已经被前人很好的解决了,我们能够站在前人的肩膀上继续前进。
- 因为有了前人的铺路,至少在两点上我们比较有信心,第一是实际方案的选择上几乎沿用了技术改造一期定的方案;第二是心理上对技术改造过程中能够遇到的困难比较乐观,至少我们能够遇到的问题不会比一期的更多,类似于有点战略上要藐视,战术要重视的意味。
- 实际执行当中至少技术上我们遇到的困难跟我们预估的比较相近,没有出现预期之外的问题。
跨团队协作问题。
- 在这个改造过程中,由于依赖的上下游业务接口同样需要由php改造为java的实现,所以这里就需要涉及到跨团队的协作问题。
- 针对这种跨团队的协作,我们也借鉴了一期技术改造的经验,通过前期梳理依赖接口,友邻团队专人跟进的方针去实施,这个方案的优点在于友邻团队能够在集中的时间窗口内提供服务。
- 实际过程中还可能遇到前期梳理存在遗漏的依赖接口或者提供的服务接口存在问题,这些都需要与友邻团队保持沟通及时反馈解决,这个过程中可能会零散地贯穿整个过程。
做好应对突发问题的预期
- 在整个技术改造过程中需要做好应对突发问题的预期,突发问题在实际改造过程指的就是原本已经在线上使用的接口有可能在java中就不好使了。
- 实际遇到的最大的突发问题就是原本java的服务通过rest协议发布服务在线上使用没有问题,但是一旦转为dubbo调用之后,各种不规范的写法导致的问题就会爆发,主要集中为基本的对象序列化定义缺失,导致部分接口需要重新发布上线。
- 另外,在开发和测试过程中会遇到一些服务不存在预发环境或者预发环境经常性重启服务不稳定,针对这种问题我们基本上把这类服务直接直连线上,当然这是有前期条件的,那就是我们的服务都是read类型,所以不存在污染线上环境的可能。
及时做好向上管理
- 这里主要想强调的是对于这类技术改造的项目,前期我们很难有全面的时间评估,而且大部分技术改造都是按照deadline来倒推时间线,时间点大概率是比较赶的,能做到的就是尽量往前赶,保证deadline之前完成。
- 在保证大deadline的前期下,对于未按照实际排期完成任务的情况,需要及时反馈问题做好向上管理,保证双方得到的信息是一致的。
技术改造时间点的选择
- 对于电商公司,Q3进行技术改造不是一个好选择,特别在双11-12期间,事实证明时间会被各种打乱。
关于技术改造中技术上的反思
翻译和重构的平衡
- 在改造过程中会自然而然遇到是直接搬运代码还是按照功能重构代码的灵魂拷问,平心而论直接搬运代码有辱程序员的底线,而按照功能重构代码又有时间上的问题,所以建议在两者取个平衡。
- 在保证时间点的前提下尽量把原来一团麻的代码进行有限的梳理,至少按照功能块拆分下保证条理顺便保证下代码的可读性。
- 强烈建议在模型和视图(MV)这个原则上,需要在代码上强行进行隔离,不然你会发现后人会在原本视图的基础上耦合进各种模型的内容,导致代码腐化的非常严重。
新技术和新平台的使用
- 在改造过程中针对具体实现,如果使用新的技术特性能够节省工作量那么强烈建议使用,至少在我们改造过程中java8的stream的语法节省了大量的工作量。
- 咨询下公司内部是否有新的平台能够帮忙提高自测的能效,如果有那么同样强烈建议使用。
往前多想一步
- 在保证改造工作完成的前期下,如果有时间能够往前多想一步,考虑到这个业务的迁移有可能导致流量分配的迁移以及带来的影响,可以提前做好方案。
- 备用的方案方案包括流量分配需要带来的机器扩容或者应用的拆分,其实改造只是第一步,后续带来的问题会引发一系列的问题同样值得深思。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
带你快速了解Java锁中的公平锁与非公平锁
前言 Java语言中有许多原生线程安全的数据结构,比如ArrayBlockingQueue、CopyOnWriteArrayList、LinkedBlockingQueue,它们线程安全的实现方式并非通过synchronized关键字,而是通过java.util.concurrent.locks.ReentrantLock来实现。 锁的底层实现 无论什么语言在操作系统层面锁的操作都会变成系统调用(System Call),以 Linux 为例,就是 futex 函数,可以把它理解为两个函数:futex_wait(s),对变量 s 加锁;futex_wake(s)释放 s 上的锁,唤醒其他线程。在ReentrantLock中很明显可以看到其中同步包括两种,分别是公平的FairSync和非公平的NonfairSync。公平锁的作用就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。默认情况下ReentrantLock是通过非公平锁来进行同步的,包括synchronized关键字都是如此,因为这样性能会更好。因为从线程进入了RUNNABLE状态,可以执行开始...
- 下一篇
typeorm 0.2.21 发布,ts/js 的 orm ,用于浏览器、APP 和 node
Bug修复 索引装饰器中允许expireAfterSeconds 0(关闭#5004)(#5005)(d05467c) 不更改连接选项(#5078)(1047989) mysql 驱动程序查询 stream(#5036)(aff2f56) 删除 consrc 用法(postgres,cockroachdb)(#4333)(ce7cb16),关闭#4332 锁定文件(#5052)(f0fd192)中的应用程序根路径的回调。 当 bigNumberStrings 为 false(#4822)(d205574)时,解决MySQL唯一索引检查,关闭#2737 使用 typeorm 迁移(#5121)(cb771a1)解决多个mongo vesves的排序错误,关闭#5115 在重复的迁移名称#4701(#4704)(3e4dc9f)上引发错误 “ migrations”的order子句中的未转义列名(#5108)(c0c8566) 升级 app-root-path(#5023)(7f87f0c) 特征 为 postgres 添加on()支持(#4954)(1293065) 将迁移事务添加连接选...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装