当前位置: 首页 > news >正文

java开发工程师碰到技术难题怎么办?我来聊聊我的做法

最近公司遇到了一个技术难题。这一周基本上都在加班解决这个问题,头发也掉了不少,但问题还没有解决。我写这篇文章,主要是想看看看我文章的同学们是否有类似的经验或者是自己的一些想法。让我们看一下这个问题的一个具体情况。

我们的公司是一个大型的互联网企业,每天都有海量的用户访问我们的网站。我们的网站是基于微服务架构的,其中一个业务系统是微服务加购的一个业务系统。这个业务系统的作用是为用户提供购物车和下单等服务。前端不断有请求过来,因为前端有请求过来嘛,然后这边的日志就会不断的去输出到我的这个中间这个卡不卡集群这里去,然后卡布卡集群下面呢是几个消费应用,然后消费卡布卡里面的消息,然后最终进行一些处理之后会把所有的日志都存在这个electricity中,这个就是基本的一个结构。

现在的问题是,一次请求一次,前端的这个请求会对应我这个微服务,400条日志也就对应400个卡不卡的消息,然后在几个小时之内,大约有1,000万次的请求进来,那么计算一下,可以大约产生40亿条这个卡不卡的消息。对,所以说我的卡不卡的这个集群上会有40亿条消息。然后目前的问题就是,我的这个消费应用的一个触点能力不足,导致我的这个卡不卡集群上会有大量的消息堆积。

针对这个问题,我们从下面5个方面去考虑了。

首先是增加这个并发处理能力,就是我们扩展的卡不卡的一个topic下面的一个分区数。与此同时,这个消费应用,我们最开始用3个应用消费,后面的话我们用呃再增加3个,用6个消费的,有6个消费者去消费。这种方式是有一定效果的。我们还考虑了gc的原因,因为我们是害怕gc的原因,所以我们统计了一下,用这个jsa的杠gcpid的这个命令,统计了一下100秒之内我们的这个消费应用它的一个gc的情况,发现gc只在1秒左右,这个还好。

第三个方面是数据库的一个原因,因为我们每一条卡不卡消息下来之后,我们都要跟数据库进行一个交互做一个业务处理。我们把能够做成加把缓存的这种数据库里面的数据全部已经做成了加把缓存,这样的也是比较有效果的。这种方式可以有效地减少对数据库的压力,提高消费的速度。

第四个方案是一个消息的一个异步处理,就是说我这个卡不卡,我下来之后,我不需要等到所有的这个业务处理完了并且落户之后我再告诉卡不卡我这个消息消费完了,他只要我这个消息被从卡不卡上拉下来之后,我立马就告诉卡不卡我已经消费到了,然后你可以去给我推下一个消息了。这种方式我们并没有采纳。

最后一个方案是扩展我们这个electric的一个集群的一个数量。然后electric的话,因为它的logo速度也会影响消费的速度。我们真正实施的话是从第一个方面增加了并发能力,对第三个方面的话,我把这个数据库跟数据库的交互做成呃加r缓存的形式。这两个方式对提升有一定的帮助,但这个性能还需要扩展。

Java开发工程师在面对难题时,需要掌握一些解决问题的技巧和方法。下面将详细介绍一些针对性能问题的解决方案,帮助开发工程师更好地应对挑战。

  1. 代码优化

优化代码逻辑是提高系统性能的关键一步,因为代码中的不必要的数据处理和数据库交互会对系统性能产生很大的影响。因此,Java开发工程师需要对代码进行优化,减少不必要的计算和数据交互。可以使用一些工具来查找代码中的性能瓶颈,并通过重构代码来提高性能。

1.多线程/异步处理

多线程和异步处理是提高系统性能的有效手段。通过使用多线程或异步处理方式,可以使系统能够更快地响应请求,提高系统吞吐量和并发能力。但是,需要注意线程安全和数据一致性问题,避免出现数据竞争和死锁问题。

2.缓存

对于频繁访问的数据可以使用缓存,减轻数据库负担。缓存可以大大提高系统的响应速度,减少对数据库的访问,但需要注意缓存的失效策略和缓存一致性问题。可以使用缓存框架(如Redis)提供的相关机制进行优化。

3.性能监控

使用一些性能监控工具可以对系统的性能进行实时监控和分析,可以及时发现性能问题,并通过优化来提高系统性能。但是,在使用性能监控工具时,需要注意监控的指标和方法的正确性和有效性,避免因为监控本身的问题导致优化失效。

4.提高并发能力

在提高系统并发能力的同时,需要考虑系统的稳定性和可靠性。可以使用负载均衡、容错机制等方式进行优化,避免单点故障和系统崩溃问题。同时,还需要注意系统的架构设计,合理分层和解耦,提高系统的可维护性和可扩展性。

综上所述,Java开发工程师需要掌握一些解决性能问题的技巧和方法,根据具体情况选择不同的解决方案进行优化,提高系统的性能和稳定性。需要注意的是,优化方案并非一成不变的,需要根据实际情况不断进行调整和优化,才能使系统达到最优性能状态。

http://www.lryc.cn/news/59089.html

相关文章:

  • 高比例可再生能源电力系统的调峰成本量化与分摊模型(Matlab代码实现)
  • Hive安装与操作
  • oracle centos7安装Oracle12(附oracle所有版本安装包)
  • ESP32学习二-更新Python版本(Ubuntu)
  • 【19】核心易中期刊推荐——人工智能 | 遥感信息处理
  • MySQL运维10-MySQL数据的导入导出
  • 全国计算机等级考试——二级JAVA完整大题题库【五十三道】
  • 【算法题解】24. 模拟机器人行走
  • PyTorch 深度学习实战 |用 TensorFlow 训练神经网络
  • 【进阶C语言】静态版通讯录的实现(详细讲解+全部源码)
  • 【JavaWeb】后端(Maven+SpringBoot+HTTP+Tomcat)
  • 面试官:准备了一些springboot相关的面试题,快来看看吧
  • 原子的波尔模型、能量量子化、光电效应、光谱实验、量子态、角动量
  • 【如何使用Arduino控制WS2812B可单独寻址的LED】
  • 计算机基本知识扫盲(持续更)
  • 学习大数据需要什么语言基础
  • ElasticSearch——详细看看ES集群的启动流程
  • 【教学类-30-01】5以内加法题不重复(一页两份)(包含1以内、2以内、3以内、4以内、5以内加法,抽取最大不重复数量)
  • 写博客8年与人生第一个502万
  • 【华为OD机试真题】日志采集系统(javapython)
  • epoll源码剖析
  • Linux驱动开发——高级I/O操作(一)
  • 适配器模式:C++设计模式中的瑞士军刀
  • 【三十天精通Vue 3】 第三天 Vue 3的组件详解
  • SqlServer实用系统视图,你了解多少?
  • NodeJS Cluster模块基础教程
  • [C++笔记]vector
  • Python 迁移学习实用指南:1~5
  • 【CSS重点知识】属性计算的过程
  • Java避免死锁的几个常见方法(有测试代码和分析过程)