应一些小伙伴们的私信,希望可以介绍一下RocketMQ的基础,那么我们现在就从0开始,进入RocketMQ的基础学习及概念介绍,为学习和使用RocketMQ打好基础! RocketMQ的定位 RocketMQ是一款快速地.可靠地.分布式.容易使用的消息中间件,由Alibaba开发,其前身是 Metaq,Metaq 可以看成是linkedin的Kafka(scala)的java版本,并对其增加了事务的支持. RocketMQ的定义 RocketMQ为Metaq3.0,相比于原始kafka,其擅长点…
大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app ( 本文内容为melodyWxy原作,git地址:https://github.com/melodyWxy/twa-tf.js , 首发于博客园 散场丶丶:https://www.cnblogs.com/sanchang/p/11818604.html ) 什么是TWA 简单来讲,TWA(Trusted Web Activity 可信任的网络应用)即: 基于Chrome Custom Tabs,利用谷歌浏览…
前提概要 Java调式.热部署.JVM背后的支持者Java Agent: 各个 Java IDE 的调试功能,例如 eclipse.IntelliJ : 热部署功能,例如 JRebel.XRebel.spring-loaded: 各种线上诊断工具,例如 Btrace.Greys,还有阿里的 Arthas: 各种性能分析工具,例如 Visual VM.JConsole 等: Agent的介绍 Java Agent 直译过来叫做 Java 代理,还有另一种称呼叫做 Java 探针.首先说 Java…
背景 SMP(Symmetric Multi-Processor) 对称多处理器结构,它是相对非对称多处理技术而言的.应用十分广泛的并行技术. 在这种架构中,一台计算机由多个CPU组成,并共享内存和其他资源,所有的CPU都可以平等地访问内存.I/O和外部中断. 虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样. 操作系统将任务队列对称地分布于多个CPU之上,从而极大地提高了整个系统的数据处理能力. 但是随着CPU数量的增加,每个CPU都要访问相同的内存资源,共享资源可能会…
前提概要 在开发过程中在使用多线程进行并行处理一些事情的时候,大部分场景在处理多线程并行执行任务的时候,可以通过List添加Future来获取执行结果,有时候我们是不需要获取任务的执行结果的,方便后面引出ExecutorCompletionService. CompletionService的介绍 CompletionService 接口是一个独立的接口,并没有扩展ExecutorService . 其默认实现类是ExecutorCompletionService. 接口CompletionSe…
前提概要 在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明显的缺点,就是,没有返回值.这时候,大家可能会去尝试使用Callable中的call方法,然后用Future返回结果,如下: public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(); Fut…
延时队列前提 定时关闭空闲连接:服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之. 定时清除额外缓存:缓存中的对象,超过了空闲时间,需要从缓存中移出. 实现任务超时处理:在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求. 应用在session超时管理:网络应答通讯协议的请求超时处理. 痛点方案机制 一种比较暴力的办法就是,使用一个后台线程,遍历所有对象,挨个检查.这种笨笨的办法简单好用,但是对象数量过多时,可能存在性能问题,检查间隔时间不好设置,间隔时间过大,影响精确度,多小则存…
前言 在目前众多编程语言中,Java 语言的表现还是抢眼,不论是企业级服务端开发,还是 Andorid 客户端开发,都是作为开发语言的首选,甚至在大数据开发领域,Java 语言也能占有一席之地,如Hadoop,Spark,Flink 大数据等.而作为已经诞生 24 年的 Java 相比其他语言来说,编写起来略显得冗长和复杂,而为了能极大提升 Java 开发的效率和代码简洁性,一个 Java 库 Lombok 就这样诞生了. 首先我们还是看下 Lombok 官方的描述: Project Lombo…
前提概述 Java 7开始引入了一种新的Fork/Join线程池,它可以执行一种特殊的任务:把一个大任务拆成多个小任务并行执行. 我们举个例子:如果要计算一个超大数组的和,最简单的做法是用一个循环在一个线程内完成: 算法原理介绍 相信大家此前或多或少有了解到ForkJoin框架,ForkJoin框架其实就是一个线程池ExecutorService的实现,通过工作窃取(work-stealing)算法,获取其他线程中未完成的任务来执行.可以充分利用机器的多处理器优势,利用空闲的线程去并行快速完成一…
并发编程的三剑客 在开发高并发系统时有三剑客:缓存.降级和限流. 缓存 缓存的目的是提升系统访问速度和增大系统处理容量. 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开. 限流 限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务.排队或等待.降级等处理. 限流的思想 溢出思想: 就是用一个固定大小的队列.比如设置限流为5qps,1s可以接受5个请求:那我们就造一个大小为5的队列,如果队…
JPA的介绍分析 Java持久化API (JPA) 显著简化了Java Bean的持久性并提供了一个对象关系映射方法,该方法使您可以采用声明方式定义如何通过一种标准的可移植方式,将Java 对象映射到关系数据库表以及后续的一系列数据持久化行为. JPA可以将任何普通的Java 对象 (POJO) 类指定为 JPA 实体. JPA实体:一个应使用JPA实现程序的服务将其非临时字段持久保存到关系数据库(在 Java EE EJB 容器的内部或在简单 Java SE 应用程序中的 EJB 容器的外部)…
一.MYSQL储存过程简介(技术文): 储存过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以看做是对编程中面向对象方法的模拟.它允许控制数据的访问方式.存储过程通常有以下优点: 1)存储过程能实现较快的执行速度. 如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多.因为存储过程是预编…
目录(技术文) 多关于索引,分为以下几点来讲解: 一.索引的概述(什么是索引,索引的优缺点) 二.索引的基本使用(创建索引) 三.索引的基本原理(面试重点) 四.索引的数据结构(B树,hash) 五.创建索引的原则(重中之重,面试必问!敬请收藏!) 六.百万级别或以上的数据如何删除 一.索引的概述 1)什么是索引? 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,索引就相当于目录.当你在用新华字典时,帮你把目录撕掉了,…
优化,一直是面试最常问的一个问题.因为从优化的角度,优化的思路,完全可以看出一个人的技术积累.那么,关于系统优化,假设这么个场景,用户反映系统太卡(其实就是高并发),那么我们怎么优化? 如果请求过多,判定web服务器的压力过大,增加前端的web服务器,做负载均衡 如果请求静态界面不卡了,但是动态数据还是卡,说明MySQL处理的请求太多了,在应用层增加缓存. 数据库层其实是最脆弱的一层,一般在应用设计时在上游就需要把请求拦截掉,数据库层只承担"能力范围内"的访问请求,所以,我们通过在服务…
内容较多,可先收藏,目录如下: 一.什么是主从复制 二.主从复制的作用(重点) 三.主从复制的原理(重中之重) 四.三步轻松构建主从 五.必问面试题干货分析(最最重要的点) 一.什么是主从复制(技术文): 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是准实时的业务数据库. 二.主从复制的作用(好处,或者说为什么要做主从)重点!: 1.做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失. 2.架构的扩展.业务量越来越大,…
日志就跟人们写的日记一样,记录着过往的事情.但是人的日记是主观的(记自己想记的内容),而数据库的日志是客观的,根据记录内容分为以下好几种日志(技术文): a.错误日志:记录启动.运行或停止mysqld时出现的问题. b.通用日志:记录建立的客户端连接和执行的语句. c.更新日志:记录更改数据的语句.该日志在MySQL 5.1中已不再使用. d.二进制日志:记录所有更改数据的语句.还用于复制. e.慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询. f.…
注意:以下都是在MySQL目录下的my.ini文件中改写(技术文). 一.InnoDB内存优化 InnoDB用一块内存区域做I/O缓存池,该缓存池不仅用来缓存InnoDB的索引块,而且也用来缓存InnoDB的数据块. 1.innodb_log_buffer_size 决定了InnoDB重做日志缓存的大小,可以避免InnoDB在事务提交前就执行不必要的日志写入磁盘操作. 2.设置Innodb_buffer_pool_size 改变量决定了InnoDB存储引擎表数据和索引数据的最大缓存区大小. 二.…
一.视图概述(技术文): (1)什么是视图? 视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.视图并不在数据库中以存储的数据值集形式存在,而是存在于实际引用的数据库表中,视图的构成可以是单表查询,多表联合查询,分组查询以及计算(表达式)查询等.行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成. (2)视图的优点: a.简化查询语句(视图机制使用户可以将注意力集中在所关心地数据上.如果这些…
正文:表的设计及优化(真技术文) 优化①:创建规范化表,消除数据冗余 数据库范式是确保数据库结构合理,满足各种查询需要.避免数据库操作异常的数据库设计方式.满足范式要求的表,称为规范化表,范式产生于20世纪70年代初,一般表设计满足前三范式就可以,在这里简单介绍一下前三范式. 通俗的给大家解释一下(可能不是最科学.最准确的理解) 第一范式:属性(字段)的原子性约束,要求属性具有原子性,不可再分割: 第二范式:记录的惟一性约束,要求记录有惟一标识,每条记录需要有一个属性来做为实体的唯一标识. 第三…
一.多表查询连接的选择: 相信这内连接,左连接什么的大家都比较熟悉了,当然还有左外连接什么的,基本用不上我就不贴出来了.这图只是让大家回忆一下,各种连接查询. 然后要告诉大家的是,需要根据查询的情况,想好使用哪种连接方式效率更高.(这是技术文) 二.MySQL的JOIN实现原理 在MySQL 中,只有一种Join 算法,就是大名鼎鼎的Nested Loop Join,他没有其他很多数据库所提供的Hash Join,也没有Sort Merge Join.顾名思义,Nested Loop Join…
技术推荐 自定义Archetype Maven骨架/以当前项目为模板创建maven骨架,可以参考http://maven.apache.org/archetype/maven-archetype-plugin/advanced-usage.html,详细介绍了如何快速创建和使用Archetype. 技术背景 在工作过程中必然会遇到创建项目的蛋疼事,一个项目包含茫茫多的配置文件.例如:Spring.mybatis.log4j.pom.xml.git等,其他的还包括项目目录骨架.整个过程下来顺利的话…
一.为什么需要mysql集群? 一个庞大的分布式系统的性能瓶颈中,最脆弱的就是连接.连接有两个,一个是客户端与后端的连接,另一个是后端与数据库的连接.简单如图下两个蓝色框框(其实,这张图是我在悟空问答解答别人的时候用Windows的自带画板画的,勿喷啊..) 版权归作者所有,哈哈 在客户端与后端中可以利用类似nginx的负载均衡解决(本专题是mysql优化,后面出高并发专题再详细讲解连接1的负载均衡),而数据库层是最脆弱的一层,一般在应用设计时在上游就需要把请求拦截掉,数据库层只承担"能力范围内…
单表查询优化:(关于索引,后面再开单章讲解) (0)可以先使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的.这可以帮我们分析是查询语句或是表结构的性能瓶颈. (1)写sql要明确需要的字段,要多少就写多少字段,而不是滥用 select * (2)可以用使用连接(JOIN)来代替子查询 (3)使用分页语句:limit start , count 或者条件 where子句时,有什么可限制的条件尽量加上,查一条就limit一条.做到不滥用.比如说我之前做过的的p2p项目,只…
前提概要 最近我们项目越来越多了,然后我就在想如何才能把基础服务的打包方式统一起来,并且可以实现按照我们的要求来生成,通过研究,我们通过使用maven的assembly插件完美的实现了该需求,爽爆了有木有.本文分享该插件的配置以及微服务的统一打包方式. maven-assembly-plugin打包插件 配置步骤及其他事项 首先我们需要在pom.xml中配置maven的assembly插件 <build> <plugins> <plugin> <groupId&g…
设计背景 消息中间件的本身定义来考虑,应该尽量减少对于外部第三方中间件的依赖.一般来说依赖的外部系统越多,也会使得本身的设计越复杂,采用文件系统作为消息存储的方式. RocketMQ存储机制 消息中间件的存储一般都是利用磁盘,一般是使用机械硬盘,但机械硬盘的速度比访问内存慢了n个数量级,一款优秀的消息中间件必然会将硬件资源压榨到极致,接下来看看rocketMq是如何做到高效存储的. RocketMQ存储模型 CommitLog 消息主体以及元数据的存储媒介,存储Producer端写入的消息主体内…
前提背景 使用RocketMQ进行发消息时,一般我们是必须要指定topic,此外topic必须要提前建立,但是topic的创建(自动或者手动方式)的设置有一个开关autoCreateTopicEnable,此部分主要会在broker节点的配置文件的时候进行设置,运行环境中会使用默认设置autoCreateTopicEnable = true,但是这样就会导致topic的设置不容易规范管理,所以在生产环境中会在Broker设置参数autoCreateTopicEnable = false.那么如果…
如今,越来越多的公司开始 Docker 了,「三分之二的公司在尝试了 Docker 后最终使用了它」,也就是说 Docker 的转化率达到了 67%,同时转化时长也控制在 60 天内. 既然 Docker 这么火,Docker 监控是不是也该提上日程?或许具体问题要具体分析,但是似乎大家都在寻找新一代 Docker 监控的工具. 本次技术公开课将会给大家带来全方位的 Docker 实践,从监控之道到监控方案,让你了解到 Docker 实时性能状况,精准定位到性能薄弱的环节,从而优化应用,让监控之…
承接上文 (完结撒花1-52系列)[JVM技术指南]「JVM总结笔记」Java虚拟机垃圾回收认知和调优的"思南(司南)"[上部] 并行收集器 并行收集器(也称为吞吐量收集器)是类似于串行收集器的分代收集器. 串行和并行收集器之间的主要区别是,并行收集器有多个线程,用于加速垃圾回收. 通过命令行选项 -XX:+UseParallelGC 启用并行收集器. 默认情况下,使用此选项,次要(minor)和主要(Major GC)都将并行运行,以进一步减少垃圾回收开销. 并行垃圾收集器线程数 可…
导语 Apache Pulsar 是一个多租户.高性能的服务间消息传输解决方案,支持多租户.低延时.读写分离.跨地域复制.快速扩容.灵活容错等特性.腾讯云内部 Pulsar工作组对 Pulsar 做了深入调研以及大量的性能和稳定性方面优化,目前已经在腾讯内部业务TDBank落地上线.本文是Pulsar技术系列中的一篇,主要介绍Pulsar 的 Message Deduplication 特性,供大家参考,避免在使用过程中踩坑. Message Deduplication背景介绍 消息中间件产品设…
Java 加解密技术系列之 总结 Java 加解密技术系列之 DH Java 加解密技术系列之 RSA Java 加解密技术系列之 PBE Java 加解密技术系列之 AES Java 加解密技术系列之 3DES Java 加解密技术系列之 DES Java 加解密技术系列之 HMAC Java 加解密技术系列之 SHA Java 加解密技术系列之 MD5 Java 加解密技术系列之 BASE64 常用加密算法的Java实现(一)——单向加密算法MD5和SHA 常用加密算法的Java实现(二)—…