消息中间件

蚂蚁消息中间件 (MsgBroker) 在 YGC 优化上的探索

拜拜、爱过 提交于 2019-12-14 18:35:04
GC 一直是 Java 应用中被讨论得最多的话题之一,尤其对于消息中间件这样的基础应用,GC 停顿产生的延迟会严重影响其在线服务能力,是开发和运维人员关注的重点。 关于 GC 优化,首先最容易想到的就是调整那些影响 GC 性能的 JVM 参数(如新生代与老年代的大小、晋升到老年代的年龄、甚至是 GC 回收器类型等),使得老年代中存活的对象数量尽可能的少,从而降低 GC 停顿时间。然而,除了少数较为通用的参数设置方法可以参照和遵循,在大部分场景下,由于不同应用所创建对象的大小与生命周期不尽相同,GC 参数调优实际上是个非常复杂且极具个性化的工作,并不存在万能的调优策略可以满足所有的场景。同时,由于虚拟机内部已经做了很多优化来尽量降低 GC 的停顿时间,GC 参数调优并不一定能达到预期的效果,甚至很可能适得其反。 抛开被老生常谈的 GC 参数调优,本文将通过讲述蚂蚁消息中间件(MsgBroker) 的 YGCT 从 120ms 优化到 30ms 的历程,并从中总结出较为通用的 YGC 优化策略。 背景 谈到 GC,很多人的第一反应是 JVM 长时间停顿或 FGC 导致服务长时间不可用,但对于 MsgBroker 这样的基础消息服务而言,对 GC 停顿会更加敏感,需要解决的 GC 问题也更加复杂: 对于普通应用,如果 YGC 耗时在 100ms 以内,一般是无需进行优化的。但对于

消息中间件介绍、典型使用场景、以及使用原则

ⅰ亾dé卋堺 提交于 2019-12-13 16:34:05
一、kafka 1、不完全符合jms规范,注重吞吐量,类似udp 和 tcp 2、一般做大数据吞吐的管道 我们现在的用途就是负责在各个idc之间通信 3、量大对数据不是百分之百保证的,会有数据丢失,不是百分百送达(amq和rmq等有重发机制,而kafka没有);在吞吐量有提升 ,在这方面就得有牺牲, 所以kafka适合大数据量流转, 比如日志数据 比如用作统计的数据。 二、activeMQ ActiveMQ居于两者之间,类似于ZemoMQ,它可以部署于代理模式和P2P模式。类似于RabbitMQ,它易于实现高级场景,而且只需付出低消耗。它被誉为消息中间件的“瑞士军刀”。 三:RocketMQ(阿里官方指定消息中间件) RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。 消息中间件使用的典型场景优四个 1.典型的异步处理 2.应用解耦 3.流量削锋 4.消息通讯四个场景 比如:今日头条的私信就是一个典型的消息通讯场景,因为消息通讯的数据不需要即使立即同步回来,不算是核心数据,可以延时通过异步的消息发送,这样可以降低系统的负荷。 所以,我们在架构设计的时候

消息中间件介绍、典型使用场景、以及使用原则

二次信任 提交于 2019-12-13 15:24:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、kafka 1、不完全符合jms规范,注重吞吐量,类似udp 和 tcp 2、一般做大数据吞吐的管道 我们现在的用途就是负责在各个idc之间通信 3、量大对数据不是百分之百保证的,会有数据丢失,不是百分百送达(amq和rmq等有重发机制,而kafka没有);在吞吐量有提升 ,在这方面就得有牺牲, 所以kafka适合大数据量流转, 比如日志数据 比如用作统计的数据。 二、activeMQ ActiveMQ居于两者之间,类似于ZemoMQ,它可以部署于代理模式和P2P模式。类似于RabbitMQ,它易于实现高级场景,而且只需付出低消耗。它被誉为消息中间件的“瑞士军刀”。 三:RocketMQ(阿里官方指定消息中间件) RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、移动应用、手游、视频、物联网、车联网等。 消息中间件使用的典型场景优四个 1.典型的异步处理 2.应用解耦 3.流量削锋 4.消息通讯四个场景 比如:今日头条的私信就是一个典型的消息通讯场景,因为消息通讯的数据不需要即使立即同步回来,不算是核心数据

消息中间件系列教程(04) -RabbitMQ -简介&安装

久未见 提交于 2019-12-13 08:12:40
1. 简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 Websphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Redhat、iMatix 等联合制定了 AMQP 的公开标准。 RabbitMQ是由RabbitMQ Technologies Ltd开发并且提供商业支持的。该公司在2010年4月被SpringSource(VMWare的一个部门)收购。在2013年5月被并入Pivotal。其实VMWare,Pivotal和EMC本质上是一家的。不同的是VMWare是独立上市子公司,而Pivotal是整合了EMC的某些资源,现在并没有上市。 RabbitMQ官网: http://www.rabbitmq.com AMQP协议介绍: https://baike.baidu.com/item/AMQP/8354716?fr=aladdin 注意:RabbitMQ是采用erlang语言开发的,所以必须有erlang环境才可以运行。

消息中间件系列教程(07) -RabbitMQ -案例代码(点对点队列模式)

孤者浪人 提交于 2019-12-10 17:16:13
引言 代码已上传至Github,有兴趣的同学可以下载看看: https://github.com/ylw-github/RabbitMQ-Demo 上一篇博客主要讲解了RabbitMQ的五种队列形式 《消息中间件系列教程(06) -RabbitMQ -五种队列形式》 ,主要讲解一下五种队列的代码实现。 主要分为: 点对点队列模式(简单) 工作队列模式(公平性) 发布订阅模式 路由模式Routing 通配符模式Topics 本文主要讲解点对点队列模式。 点对点队列模式 1.新建Maven项目RabbitMQ-Demo 2.添加Maven依赖: < dependencies > < dependency > < groupId > com.rabbitmq </ groupId > < artifactId > amqp-client </ artifactId > < version > 3.6.5 </ version > </ dependency > </ dependencies > 3.连接工具类 package com . ylw . rabbitmq ; import com . rabbitmq . client . Connection ; import com . rabbitmq . client . ConnectionFactory ; import

ASP.NET Core 3.0 入门

a 夏天 提交于 2019-12-09 12:45:24
原文: ASP.NET Core 3.0 入门 课程简介 与2.x相比发生的一些变化,项目结构、Blazor、SignalR、gRPC等 课程预计结构 ASP.NET Core 3.0项目架构简介 ASP.NET Core MVC 简介 Blazor SignalR Web API gRPC 发布 一. 创建项目 dotnet core 本质上是控制台应用 1. DI 依赖注入(Dependency Injection) IoC 容器(Inversion of Control)控制反转 注册(服务) 请求实例 实例的生命周期 生命周期 Transient(每次被请求都会生成一个新的实例,最短) Scoped(一次 Web 请求产生一次实例,较长) Singleton(从应用程序启动到停止,只创建一次,最长) 2. ConfigureServices services.AddControllersWithViews(); services.AddControllers(); // 别的类每次请求 IClock 这个接口时,都会返回一个 ChinaClock 类的实例 // services.AddSingleton<IClock, ChinaClock>(); services.AddSingleton<IClock, UtcClock>(); 当需要更改接口的实现类的时候

spring cloud : 消息中间件kafka

风格不统一 提交于 2019-12-06 21:43:14
1. 安装Kafka 1. 下载JDK 、kafka(自带Zookeeper) http://mirrors.hust.edu.cn/apache/kafka/1.0.0/kafka_2.11-1.0.0.tgz 下载 ,解压到 D:\STS_ENV\kafka_2.11-1.0.0 (执行 bin 下的脚本,此处使用 windows 所以使用 windows/ 下的 bat 脚本) 2. 下载 SecureCRT 连接 查看服务器系统版本 cat /proc/version [root@T-mysql ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.4 (Maipo) 1. 安装jdk 1.8.0_121 : =》上传到/opt目录 =》解压jdk ( tar-zxvf jdk-8u121-linux-x64.tar ) =》配置环境变量:vi /etc/profile添 加如下参数: export JAVA_HOME=/opt/jdk1.8.0_121 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar =》生效 source/etc

制造业项目概念

这一生的挚爱 提交于 2019-12-06 11:46:33
由于最近入职了一家新公司,接触到了一些比较新的东西,新的概念,记录下: MoM (Manager of Managers) 模式,即管理人的管理人基金模式,也被称为精选多元管理人,通过优中选优的方法,筛选基金管理人 或资产管理人,让这些最顶尖的专业人士来管理资产,而自身则通过动态地跟踪、监督、管理他们,及时调整资产配置方案,来收获利益。 简而言之,MoM是找最优秀的投顾组成团队、分配资金、操盘投资,既发挥团队力量,又不限制个人风格。MoM模式是一种较为新兴的 资产管理策略,始于上个世纪80年代,美国罗素是MoM的创始机构。 MES [manufacturing execution system](制造企业生产过程执行管理系统) MES系统是一套面向制造企业车间执行层的生产信息化管理系统。MES可以为企业提供包括制造数据管理、计划排程管理、生产调度管理、 库存管理、质量管理、人力资源管理、工作中心/设备管理、工具工装管理、采购管理、成本管理、项目看板管理、生产过程控制、 底层数据集成分析、上层数据集成分解等管理模块,为企业打造一个扎实、可靠、全面、可行的制造协同管理平台。 APS[Advanced Planning and Scheduling](高级计划与排程) 是对所有资源具有同步的,实时的,具有约束能力的,模拟能力,不论是物料,机器设备,人员,供应,客户需求,运输等影响计划因素

为什么使用中间件下载时总是收到警告消息Object is in status Wait

瘦欲@ 提交于 2019-12-06 10:04:34
在使用中间件从ERP下载对象时,正常情况下应该看到如下提示消息: 然而有时遇到的是黄色的警告消息:Object is in status Wait. 如何自己排错呢?在函数SMOF0_INIT_DNL_START里设置断点。 使用SMOF0_READ_SMOFPARSFA查询系统参数MAX_PARALLEL_PROCESSES,在我使用的系统上配置为5,意味着最大只允许有5个工作进程用于中间件下载。 下列代码107到115行负责计算还剩余多少可用的工作进程用于中间件下载。计算结果存储于第115行的变量gv_open_processes. 在我上述的例子里,可用工作进程的数目gv_open_processes为5 - 5 = 0, 因此抛出文章题目的警告消息。 解决方案:要么停掉长时间处于running状态的其他下载任务以释放出占用的工作进程。 要么在表SMOFPARSFA里为参数MAX_PARALLEL_PROCESSES配置更大的数值。 来源: https://www.cnblogs.com/jlfw/p/11975905.html

Celery详解(3)

北慕城南 提交于 2019-12-06 08:31:12
1.什么是Celery? Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列, 同时也支持任务调度 2.Celery架构 Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。 消息中间件 Celery本身不提供消息服务,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等 任务执行单元 Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。 任务结果存储 Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等 执行流程: user相当于提交任务的人,提交给broker也就是消息中间件,worker相当于工人,broker里面有了用户也就是程序提交的任务,worker就去取出来执行类似于生产者消费者模型,store说简单点就是worker执行结束后的返回结果 版本支持情况 Celery version 4.0 runs on Python ❨2.7, 3.4, 3.5❩ PyPy ❨5.4, 5.5❩ This is the last version to support