做药物研发的人上什么网站,华为外包一般能干多久,html网页基础代码,软件开发的模式#x1f47d;System.out.println(“#x1f44b;#x1f3fc;嗨#xff0c;大家好#xff0c;我是代码不会敲的小符#xff0c;目前工作于上海某电商服务公司…”); #x1f4da;System.out.println(“#x1f388;如果文章中有错误的地方#xff0c;恳请大家指正System.out.println(“嗨大家好我是代码不会敲的小符目前工作于上海某电商服务公司…”); System.out.println(“如果文章中有错误的地方恳请大家指正共同进步共同成长✊”); System.out.println(“如果文章对您有所帮助希望您可以三连支持一下博主噢”); System.out.println(正在完成计划中Java应届第一年规划 ); 文章目录 背景明确目标调研性能测试代码修改bug修改线上测试并评估最后 背景
完整的优化流程我做了什么工作这里以MQ序列化优化方案为例进行讲解。工作的第一个需求如何优化MQ提高性能减少落盘存储占用。
明确目标
最终目标在不加机器和不修改原配置的情况下提高性能。
排除机器和配置后影响性能的关键因素序列化后的大小网络带宽的占用、MQ刷盘磁盘占用、序列化的性能CPU资源占用。
目的对比响应时间及并发吞吐量选择更优的序列化方式。表现序列化和反序列化的性能、序列化之后的字节大小
具体目标
测量和比较序列化和反序列化的性能以及序列化后的字节大小。对比不同序列化方式的响应时间和并发吞吐量。是否支持跨语言异构系统的对接和开发语言切换。选择更优的序列化方式。
调研
首先对当前使用的FASTJSON序列化机制进行调研了解其工作原理、优缺点以及目前存在的性能瓶颈。调查其他主流的序列化方式如ProtoBuf、ProtoStuff 、Kryo、Hessian 、Avro、Fury 等比较其在性能、易用性和兼容性方面的差异。
Protobuf 解析性能高、序列化后数据量相对少。Protostuff 基于Protobuf实现但不涉及额外的IDL和编译步骤。对于小型消息 性能更加有竞争力。Kryo 跨语言很复杂、线程不安全。Hessian 序列化之后不如fastjson。Avro 非常适合动态类型语言。适用大数据场景未测试Fury 基于Unsafe的高性能内存操作实现了全自动的高性能的动态序列化能力但资料少且不是特别成熟。
性能测试
制定测试方案对不同的序列化方式进行基准测试收集性能数据包括序列化和反序列化的速度、占用内存、生成的消息大小等。 使用线上的真实数据进行多次测试确保测试结果的全面性和可靠性。对比测试结果选择最优的序列化方式。
比较数据在不同序列化方式序列化后的字节大小比较数据在不同序列化方式在单线程序列化/反序列化的吞吐量比较数据在不同序列化方式在多线程序列化/反序列化的吞吐量比较数据在不同序列化方式资源的使用情况Object.toString()和JSON.toJSONString(Object) 性能和大小对比封装成工具类模拟优化前后生产者和消费者使用的序列化方式的吞吐量对比
MQ消息序列化优化
MQ数据传递时支持多种序列化在配置中指定一种序列化方式粒度大小topic生产者传递消息时获取该topic的序列化方式消费者根据指定的方式反序列化
代码修改
根据调研和测试结果选择最优的序列化方案并对现有代码修改新增新的序列化方式并兼容原来的序列化方式。如有生产意外可以使用原来的序列化方式进行兜底先以最小影响修改项目代码优化序列化和反序列化逻辑确保新方案能够无缝集成到现有系统中。在修改代码时注意带来的影响并需要考虑是否可以接受。
bug修改
在代码修改和测试过程中发现并修复bug确保优化后的系统稳定运行。思考为什么会出现这些bug为什么没有考虑到。
线上测试并评估
在非生产环境中部署新的序列化方案进行不同序列化方式的测试确保新方案在真实环境中的性能表现。监控系统性能指标CPU使用率、内存占用、网络带宽等评估新方案的影响。评估通过后扩大修改范围最终实现全项目的兼容实现。
最后 慢慢的来别着急学会有质量的走过每一步 我是代码不会敲的小符希望认识更多有经验的大佬也在努力摸索出自己的道路 欢迎交流一起加油