1 那一夜,你伤害了我

今夜的雨下得凉快,小南睡得正香,突然收到远洋运维小周的电话:Hello, Are you OK? WAS有issue,快起来help me!

只见小南登陆WAS机,查看了机器日志、应用日志,终于定位了问题,登上WAS管理界面,一顿操作猛如虎,应用终于恢复了。但不记得这是第几次新人不懂WAS而向小南求救了。

第二天,小南向领导呈上《替换WAS表》,开始了一场浩荡的服务器之战。其文曰:

先弟修bug未半,而中道离职。今WAS已老,Springboot又新,此诚用Boot换WAS之秋也。

......

今当替换,临码涕零,不知所言。

所谓WAS,即IBMWebSphere Application Server,是一种Java应用服务器。相对Tomcat等,会更重型,更复杂;更重要的是价格昂贵。得益于IBM及它一整套的企业开发套件,也还是有一定的市场占有率,特别是在传统行业里。

随着技术向前发展与之前轰轰烈烈的去IOE运动,用WAS的人越来越少了,许多新人更是完全没有接触过,又因其价格昂贵且不利于DevOps,我司决定要替换掉它。经讨论,代替它上场的就是现在红红火火的Springboot,原因众多,如开源免费、开箱即用、利于发布、容易运维等。

2 大刀阔斧还是小打小闹

硬件、软件同时替换,就必须谨慎小心,主要方案如下:

(1)硬件上从装有WAS机器的Linux转移到普通的Linux机器,但需要注意关键指标如处理器、内存、硬盘等。

(2)软件上从之前打成war包,现改为jar包,包结构完全改变,引入Springboot后,Spring容器和bean要对应调整、数据库池化也对应调整。原来WAS跑的是SOAP Webservice,现通过Springboot整合cxf-spring-boot-starter-jaxws实现。

(3)网络上依然是https协议,但以前WEB服务器为IHS,现在直接使用Springboot,证书需要重新生成和导入。客户端证书要先从IHS服务器的密钥文件导出,需要查看IBM官网资料。

关于https的内容可参考:HTTPS专题

同时引入新的负载均衡器F5,且需要在上线当天更新DNS到新F5上。结构图如下:

服务器1与服务器2在同一个数据中心,正常运行时处于工作状态。如果该数据中心发生灾难(如地震等),就会启用服务器3,并把DNS更新到灾备服务器的地址。

(4)发布上由手工发布改为Ansible发布,可减少人力和错误风险。

(5)监测上有日志监控,但Springboot日志文件更少更集中,同时Springboot可整合Springboot Admin,可参考:用Springboot Admin监控你的微服务应用

(6)UAT需要实现多环境部署,可通过maven实现。

3 测试

任何变更都有可能出错,都会引入风险。由墨菲定律可知,凡是可能出错的事就一定会出错。所以测试变得极为重要。在整个项目的测试中,功能测试端到端测试都发现了问题,所以不要放过可以发现问题的机会,不然上了生产再出现,成本可太高了。

所谓君子不立危墙之下,让我们看看都怎么测试。

3.1 单元测试

单元测试在开发阶段就要完成,特别要关注测试覆盖率、圈复杂度等指标。可以使用SonarFindbugs等工具进行检测,可以参考下面的文章:

Maven整合JaCoCo和Sonar,看看你的测试写够了没

Docker搭建代码检测平台SonarQube并检测maven项目

3.2 功能测试

根据业务定义测试场景,尽量全面。特别是基线用例,必须覆盖。可以增加异常场景的用例,保证服务不会受影响,依然保持可用;错误场景是否有合理的告警,也是很关键的。

3.3 性能与压力测试

测试出关键性能指标,看是否能满足现在的生产需求,要特别注意测试环境与生产环境的差异有多大,测试报告有多大的参考价值。压力测试可以分为两类,大请求和高并发,大请求是一个请求数据量很大,高并发是指多个请求同时产生。

3.4 端到端测试

联系其它相关团队(客户端,即请求端)进行端到端的测试,在测试环境发送正式的请求。

4 上线

领导说过,生产是最好的测试环境,哈哈,测试差不多了,就该上生产了。

但上生产不是那么容易的事,首先要确保发布的这个downtime没有客户端发请求过来,需要和其它团队约定好时间停服。更重要的是,因为希望只是自己做变更,不能要求别人做变更,所以域名不能变,就需要找网络团队更新DNS到新服务上。

为了缩短停服时间,提前把Springboot部署到新服务器上,并把新服务器配置在新的F5上,发布那天直接更新DNSF5上即可。DNS更新完成后,找客户端发送请求进行测试,没有问题即大功告成了!

虽然已经成功上线,但旧服务器还是要并行一段时间,万一新服务出问题,紧急情况难以修复,还可以回滚。

5 还能再做什么

虽然已经上线了,但还是有更多东西可以做的。

文档:人的记忆都是不可靠的,同时也要减少人员流动的风险,需要通过文档把相关内容记录下来,并分享到整个团队。主要内容有开发过程、架构原理、生产环境运维指南、测试环境使用、关键知识索引等。

灾备测试:做了灾备,但并没有测试。还好公司要求定期要做灾备测试,到时可以覆盖,现在没做会增大风险。

ELK:日志收集没有统一到日志平台,需要登陆到指定机器查看。幸好所用的机器不多。

Metric指标:可以收集JVM内存、CPU、GC等信息,以便定位问题,可以展示到Grafana上。

OpenTracing:可以记录每次请求的详细情况。可参考:实例讲解Springboot整合OpenTracing分布式链路追踪系统(Jaeger和Zipkin)

REST/RPC改造:现在的服务为XML格式的WebService,可改造为RESTful+JsongRPC

最后,并不是引入新技术就是好的,有时候需要KISS(Keep it simple and stupid),简单能用就是好的,不要想着搞些大新闻,这样有时间还是很naive的。

6 总结

小南独立完成了这次改造后,去了趟黄山修练内功,修仙成果如下:黄山徽州五日行-最美风景与攻略献给你

回来后,又开始新的征程,这次要改造整个旧系统:System Entire Rebuild (SER)。后续如何,请听下回粪解。


欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章!

欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。

用Springboot干掉IBM的WAS-为公司省点钱的更多相关文章

  1. liberty | 在IDEA整合Springboot与IBM liberty

    在IDEA整合Springboot与IBM liberty 简介 Liberty 是一款全新的轻量级应用服务器,它将用户的良好开发体验作为最主要的出发点.其主要特点和内容包括: 高模块化--该功能允许 ...

  2. SpringBoot 对IBM MQ进行数据监听接收以及数据发送

    一.需求介绍 后端使用Spring Boot2.0框架,要实现IBM MQ的实时数据JMS监听接收处理,并形成回执通过MQ队列发送. 二.引入依赖jar包 <dependency> < ...

  3. 【转帖】处理器的三国时代:DR公司盛气凌人,IBM转身成就微软

    处理器的三国时代:DR公司盛气凌人,IBM转身成就微软 https://www.eefocus.com/mcu-dsp/360555 <处理器史话>之五 2016-04-06 15:24  ...

  4. 杂项-公司:IBM

    ylbtech-杂项-公司:IBM IBM (IT公司-国际商业机器公司) IBM(国际商业机器公司)或万国商业机器公司,简称IBM(International Business Machines C ...

  5. REST API (from IBM)

    REST 本身是设计风格而不是标准.REST 谈论一件非常重要的事,如何正确地使用 Web标准,例如,HTTP 和 URI.想要了解 REST 最好的方式就是思索与了解 Web 及其工作方式.如果你设 ...

  6. 浪潮之巅——IT那点事之二—蓝色巨人IBM

    蓝色巨人IBM的全称是国际商用机器公司(International Business Machines Corporation),纵观IBM的发展历史,可以看出IBM与机器结缘,以商用为主的发展策略. ...

  7. IBM与麻省理工学院联合建立AI实验室 承诺投资2.4亿美元

         IBM和麻省理工学院将通过今天宣布的一个新的联合实验室共同努力,对人工智能进行广泛的研究.麻省理工学院IBM沃森AI实验室将重点关注四个研究支柱:开发AI算法,使用物理学来创建AI计算的新硬 ...

  8. springboot新增swagger2配置

    转自http://www.cnblogs.com/jtlgb/p/8532433.html SpringBoot整合Swagger2 相信各位在公司写API文档数量应该不少,当然如果你还处在自己一个人 ...

  9. ORACLE公司传奇历史

    ORACLE公司传奇 ORACLE公司之起源 很难想象,ORACLE 公司的这一段传奇居然要从 IBM 公司开始. 1970年的6月,IBM 公司的研究员埃德加·考特 (Edgar Frank Cod ...

随机推荐

  1. 机器学习决策树ID3算法,手把手教你用Python实现

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第21篇文章,我们一起来看一个新的模型--决策树. 决策树的定义 决策树是我本人非常喜欢的机器学习模型,非常直观容易理解 ...

  2. SpringBoot2.x快速入门指南(一)

    SpringBoot2.x快速入门指南(一) 准备工作 IDE: IntelliJ IDEA 2020.3 Java环境 jdk1.8 在官网快速创建SpringBoot项目 下面开始进入正题: 进入 ...

  3. MySQL知识-MySQL不同版本多实例

    一.不同版本多实例   0.软连接不同版本软件,修改环境变量 [root@db01 database]# ln -s mysql-5.6.46-linux-glibc2.12-x86_64 mysql ...

  4. ## 0521Day04内部类

    [重点] Math公式 静态导入 正则表达式 内部类 访问修饰符 [Math] Math包的相关方法: round:四舍五入:-10.9==>-11/-11.2==>-11 floor:向 ...

  5. Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/j..........

    如果你在执行 docker images 出现这样的问题 注意:把你的用户切到root下

  6. 【JUC】synchronizated和lock的区别&新lock的优势

    原始构成 synchronized是关键字,属于JVM层面 javap -c 的结果显示 synchronized是可重入锁 11:是正常退出 17:是异常退出[保证不产生死锁和底层故障] Lock是 ...

  7. C#网络编程入门之TCP

    目录: C#网络编程入门系列包括三篇文章: (一)C#网络编程入门之UDP (二)C#网络编程入门之TCP (三)C#网络编程入门之HTTP 一.概述 UDP和TCP是网络通讯常用的两个传输协议,C# ...

  8. 树链剖分 (求LCA,第K祖先,轻重链剖分、长链剖分)

      2020/4/30   15:55 树链剖分是一种十分实用的树的方法,用来处理LCA等祖先问题,以及对一棵树上的节点进行批量修改.权值和查询等有奇效. So, what is 树链剖分? 可以简单 ...

  9. centos7 在docker下安装mongodb

    第一步:安装 1.1 查找(查看)mongo相应的版本 [root@localhost ~]# docker search mongo INDEX NAME DESCRIPTION STARS OFF ...

  10. Rocket - diplomacy - AddressAdjuster分析

    https://mp.weixin.qq.com/s/UYVSO3XFJmhe5bUD_XbMLg   先介绍如何使用AddressAdjuster,然后分析UI参数的生成及使用.   ​​   1. ...