分享一次险象迭生的系统迁移【真实案例】,JAVA面试问的问题都要会嘛

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

4.2 云盘选择

只要是程序就必然会产生文件,现在因为采用ask无节点的容器服务,那日志就必须通过专门的盘来放置。对这个盘需要有如下几点要求:

  1. 有多种类型可供选择,像日志文件存储,不需要多强的性能,容量够用即可,像MQ的消息就要求吞吐量要足够高才可以。

  2. 可以设置过期自动删除策略,因为像日志文件不需要长时间保留,一般保留最近7天就可以。

  3. 要有完善的监控服务。

针对上诉要求,最终我们选择了NAS云盘服务。

4.3 监控选择

因为没有实际物理节点,很多报警指标都没办法设置,只能借助第三方的服务来进行监控和报警,这边我们选择了Prometheus作为监控和报警。

4.4 RabbitMQ选择

阿里云有MQ队列服务,可以直接购买使用,但是会有很多限制,所以MQ还是只能用原生的。

4.5 Redis选择

Redis直接买阿里云的Redis服务,直接和腾讯云进行对等购买就可以。

五、部署运行

因为阿里云采用ask容器服务,没有实际的物理节点,所以之前部署在节点上面的服务都要进行容器化才可以,例如Nginx、RabbitMQ。

创建镜像容器

第一步我们需要创建各个应用对应的镜像以及容器,这边需要注意的时候,镜像的命名空间最好以公司为主,容器的命名空间以类型为主。

虽然阿里云集成了k8s的功能,但是关键字、功能等还是采用原生的k8s,上面的命名空间就是k8s的命名空间。

导入测试数据

为了解决PolarDB-X的SQL兼容问题,需要将某一用户的数据从腾讯云的MYSQL导入到阿里云的PolarDB-X中,数据导入可以借助阿里云的DTS来实现。

回归测试

PolarDB-X测试数据准备完毕,所有的镜像和容器也都创建之后,就可以开始回归测试了。

如果有测试用例,那测试阶段就可以大大提高测试效率,这也是为什么我们平时最好要写测试用例的原因之一。

六、迁移前准备

PolarDB-X的SQL兼容性修改完毕之后,就可以全面迁移数据了,迁移数据还是采用阿里云的DTS来进行,迁移数据可以分多个组进行,同步进行迁移,这种情况可以避免某些表因为频繁的进行修改,导致bin-log日志数据量突增,导致迁移的速度小于数据产生的速度(生产大于消费模型)。

当数据全部迁移过来之后,就可以开始正式迁移云服务平台了,在迁移之前我们需要做如下准备:

  1. 阿里云对应的分支是否和腾讯云对应分支最新代码一致。

  2. 阿里云的HTTPS SSL证书配置是否正确。1. 阿里云各个容器的配置、JVM参数设置、端口是否和腾讯云一致。

  3. Redis、RabbitMQ脚本是否正确无误。

  4. 容器中各个服务配置(数据库、Redis、MQ等)是否正确。

  5. 腾讯云服务停止和阿里云服务启动顺序。

  6. Nginx配置修改。

我们系统服务可以分为四大类:

  1. API服务

  2. 监控服务

  3. 数据服务

  4. 分布式调度服务

除了API服务,其它三类短时间停止,不会有很大问题。

6.1 停止推送服务

第一步先将腾讯云数据推送服务停止,确定新的数据不会产生,将MQ中不可删除的消息,通过MQ脚本迁移到阿里云MQ中,确保MQ没有消息存在。

在停止服务之前,先要确定哪些服务在运行阶段是不可被打断的,如果被打断就会存在数据缺失的情况,这种任务就得特殊对待,等它执行完再停止。

6.2 迁移Redis

数据服务全部停止之后,迁移腾讯云的Redis数据到阿里云Redis中。

6.3 启动阿里云服务

将阿里云的API服务全部启动,保证阿里云平台的系统可用。

6.4 修改DNS转发

停止阿里云DTS数据迁移任务,将DNS解析修改为阿里云IP,将原本Nginx中转发也转到对应IP中(因为客户端可能存在DNS缓存,还是会走之前的IP)。

6.5 关闭腾讯云服务

关闭腾讯云剩余所有服务,启动阿里云所有服务,并检查各个服务健康状态。

至此腾讯云的服务就全部迁移到阿里云平台中来了,整个切换的过程没有发生很大的问题,但是切换过来之后,问题就频繁出现了。

七、迁移后遗症

7.1 带宽受限

迁移过来之后,系统页面可以打开,但是各个数据服务消费速度异常慢,检查错误发现基本都是网络连接错误,也就是丢包问题。容器本身CPU、内存、IO都是正常的,最终发现是网关连接数超标导致的丢包问题,升级网关配置,数据消费服务就正常了。(HTTP请求的TCP连接数过大,应该是应用程序出问题导致的,因为情况比较紧急,所以先升配置,具体问题后面再检查)。

网关配置升级不仅仅是连接数升级,还需要一起升级带宽,不然带宽达到上限也会导致丢包问题发生。

7.2 慢SQL问题

系统某些页面打开发现特别慢,检查之后发现是慢SQL导致的,有些是没有加分库键导致的,有些是因为复杂SQL连连表问题,这些慢SQL导致连接池的连接无法释放,最终导致连接池被耗尽,用户的请求无法被响应。

7.3 MQ非持久化

之前提到过,将MQ从Linux中变成一个容器服务,但是因为MQ的消息本身需要持久化,因为MQ的容器服务没有配置好持久化,导致容器重启之后队列丢失问题产生。

7.4 Nginx配置不对的

腾讯云的Nginx是Linux上面部署的,所有的环境都是写在同一份文件中,后面因为Nginx需要进行容器化,所以需要将Nginx和前端Vue项目进行结合,这样必不可少的需要对Nginx配置进行修改,如果漏掉其中某一个配置将会导致服务器不可用。

7.5 并发负载问题

测试环境没有进行全量用户的冒烟测试(用户不一样,SQL所涉及的数据量也不一样),导致服务迁移过来之后,流量瞬间上来,导致PolarDB-X的计算节点内存一度溢出,解决办法只能先升级,后面再修改具体的问题SQL。

7.6 文件读取异常

我们系统有一些服务是需要将文件下载到磁盘,然后再进行处理,这样就涉及到IO的下载和读取问题。云平台迁移之后,发现文件读取的速度特别慢,下载的速度赶不上读取的速度,导致文件一直堆积到NAS云盘中。之前腾讯云是采用节点模式集群,每个节点的硬盘都是高性能硬盘,所以IO的读取/写入速度非常快,现在变成NAS之后,IO操作方面相对会慢很多,不过通过NAS的监控显示,NAS的瓶颈并没有到,所以只需要加大读取的线程数就可以解决这个问题。

NAS分为:普通、高性能、超高性能三种,所以购买的时候就需要确定好自己的服务到底需要哪一种配置,一旦确定下来之后,后期需要修改的成本就非常高了,所以在开始阶段一定要调研确定清楚。

分享

1、算法大厂——字节跳动面试题

2、2000页互联网Java面试题大全

3、高阶必备,算法学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[外链图片转存中…(img-DWJtT0Dl-1713453179917)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-vImGuG1D-1713453179918)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值