当前位置: 首页 > 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开发工程师需要掌握一些解决性能问题的技巧和方法,根据具体情况选择不同的解决方案进行优化,提高系统的性能和稳定性。需要注意的是,优化方案并非一成不变的,需要根据实际情况不断进行调整和优化,才能使系统达到最优性能状态。

相关文章:

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

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

高比例可再生能源电力系统的调峰成本量化与分摊模型(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Hive安装与操作

目录 环境 数据 实验步骤与结果 (1)环境启动 (2)Hive基本操作 环境 Hadoop集群开发环境、mysql、Hive环境 数据 course.txt、sc.txt、student.txt 实验步骤与结果 (1)环境启动 ①执行命令&#xf…...

oracle centos7安装Oracle12(附oracle所有版本安装包)

环境: centos 7 Oracle12c jdk1.8 一.配置环境 (1)安装依赖 yum -y install binutils.x86_64 compat-libcap1.x86_64 gcc.x86_64 gcc-c++.x86_64 glibc.i686 glibc.x86_64 glibc-devel.i686 glibc-devel.x86_64 ksh compat-libstdc++-33 libaio.i686 libaio.x86_64 libaio-…...

ESP32学习二-更新Python版本(Ubuntu)

一、简介 在一些场景里边,因为Python的版本过低,导致一些环境无法安装。这里来介绍以下,如何升级自己已安装的Python版本。例如如下情况: 二、实操 1.查看本地版本 python --version 2.添加源 sudo add-apt-repository ppa:jona…...

【19】核心易中期刊推荐——人工智能 | 遥感信息处理

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…...

MySQL运维10-MySQL数据的导入导出

文章目录0、概述1、mysqldump导出数据mysql导入数据1.1、使用mysqldump导出数据1.1.1、使用--tables导出指定表1.1.2、使用--tab选项将表定义文件和数据文件分开导出1.1.3、使用--fields-terminated-by选项定义数据分隔符1.1.4、使用--databases选项导出整个库或多个库1.1.5、使…...

全国计算机等级考试——二级JAVA完整大题题库【五十三道】

全国计算机等级考试二级 JAVA 题目内容 编写于2023.04.10 分为40道选择题和3道大题(大题是程序填空类型) 其中选择题只能进去做一次,一旦退出来则不可再进(注意!)。大题可以重复进入,重复做。…...

【算法题解】24. 模拟机器人行走

这是一道 中等难度 的题 https://leetcode.cn/problems/walking-robot-simulation/description/ 题目 机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands : -2 &am…...

PyTorch 深度学习实战 |用 TensorFlow 训练神经网络

为了更好地理解神经网络如何解决现实世界中的问题,同时也为了熟悉 TensorFlow 的 API,本篇我们将会做一个有关如何训练神经网络的练习,并以此为例,训练一个类似的神经网络。我们即将看到的神经网络,是一个预训练好的用…...

【进阶C语言】静态版通讯录的实现(详细讲解+全部源码)

前言 📕作者简介:热爱跑步的恒川,正在学习C/C、Java、Python等。 📗本文收录于C语言进阶系列,本专栏主要内容为数据的存储、指针的进阶、字符串和内存函数的介绍、自定义类型结构、动态内存管理、文件操作等&#xff0…...

【JavaWeb】后端(Maven+SpringBoot+HTTP+Tomcat)

目录一、Maven1.什么是Maven?2.Maven的作用?3.介绍4.安装5.IDEA集成Maven6.IDEA创建Maven项目7.IDEA导入Maven项目8.依赖配置9.依赖传递10.依赖范围11.生命周期二、SpringBoot1.Spring2.SpringBoot3.SpringBootWeb快速入门二、HTTP1.HTTP-概述2.HTTP-请求协议3.HTTP-响应协议…...

面试官:准备了一些springboot相关的面试题,快来看看吧

文章目录摘要Spring Boot 中的注解 RestController 和 Controller 有什么区别?Spring Boot 中如何处理异常?使用 ExceptionHandler 注解处理特定类型的异常:使用 ExceptionHandler 注解可以将特定类型的异常映射到一个处理方法上,…...

原子的波尔模型、能量量子化、光电效应、光谱实验、量子态、角动量

一. 卢瑟福模型 1908年,卢瑟福用α粒子继续轰击金箔,发现有极少数粒子,发生了非常大的偏移。而这对于当时主流的葡萄干面包模型理论分析是相悖的。 原子可看成由带正电的原子核和围绕核运动的一些电子组成,原子中心的原子核带正…...

【如何使用Arduino控制WS2812B可单独寻址的LED】

【如何使用Arduino控制WS2812B可单独寻址的LED】 1. 概述2. WS2812B 发光二极管的工作原理3. Arduino 和 WS2812B LED 示例3.1 例 13.2 例 24. 使用 WS2812B LED 的交互式 LED 咖啡桌4.1 原理图4.2 源代码在本教程中,我们将学习如何使用 Arduino 控制可单独寻址的 RGB LED 或 …...

计算机基本知识扫盲(持续更)

计算机基本知识扫盲Q:硬盘和磁盘有什么区别?A:硬盘和磁盘都是存储数据的设备。磁盘指的是存储数据的圆形或者是方形的光盘,但是硬盘则是指机械式硬盘和固态硬盘。磁盘一般用于存储少量数据,例如软件安装文件、音乐和电…...

学习大数据需要什么语言基础

Python易学,人人都可以掌握,如果零基础入门数据开发行业的小伙伴,可以从Python语言入手。 Python语言简单易懂,适合零基础入门,在编程语言排名上升最快,能完成数据挖掘、机器学习、实时计算在内的各种大数…...

ElasticSearch——详细看看ES集群的启动流程

参考:一起看看ES集群的启动流程 本文主要从流程上介绍整个集群是如何启动的,集群状态如何从Red变成Green,然后分析其他模块的流程。 这里的集群启动过程指集群完全重启时的启动过程,期间要经历选举主节点、主分片、数据恢复等重…...

【教学类-30-01】5以内加法题不重复(一页两份)(包含1以内、2以内、3以内、4以内、5以内加法,抽取最大不重复数量)

作品样式: 背景需求: 虽然学前阶段就对幼儿训练加减法列式题遭到诟病,但是从不少幼儿(特别是二胎)在家中已经开始适应加减法题型了。 结合中班年龄特点,我从5以内的不重复加法题开始实验(雪花…...

写博客8年与人生第一个502万

题记:我们并非生来强大,但依然可以不负青春。 原本想好好写一下如何制定一个目标并通过一点一滴的努力去实现,这三年反思发现其实写自己的经历并不重要。 很多人都听过一句话:榜样的力量是无穷的。 更现实和实际的情况是&#x…...

龙虎榜——20250610

上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

C++ 基础特性深度解析

目录 引言 一、命名空间(namespace) C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用(reference)​ C 中的引用​ 与 C 语言的对比​ 四、inline(内联函数…...

如何为服务器生成TLS证书

TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...