自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 Spring Cloud简介,微服务架构,以及与Dubbo的详细比较

什么是Spring CloudSpring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量。为什么需要Spring CloudSpring Cloud 是整个 Spring 家族中新的成员,要致力于分布式系统、云服务的框架。Spring Cloud 为开发人...

2019-12-17 22:48:38 946

原创 Dubbo的详细介绍、设计思路、以及4大适用场景

Dubbo是什么?Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式...

2019-12-17 22:34:37 1015

原创 详解RocketMQ的架构设计、关键特性、与应用场景

内容大纲:RocketMQ的简介与演进RocketMQ的架构设计RocketMQ的关键特性RocketMQ的应用场景RocketMQ的简介RocketMQ一个纯java、分布式、队列模型的开源消息中间件,前身是MetaQ,是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。RocketM...

2019-12-17 22:22:05 982

原创 如何从零到一设计一个MQ消息队列

消息队列整体设计思路主要是设计一个整体的消息被消费的数据流。这里会涉及到:消息生产Producer、Broker(消息服务端)、消息消费者Consumer。1.Producer(消息生产者):发送消息到Broker。2.Broker(服务端):Broker这个概念主要来自于Apache的ActiveMQ,特指消息队列的服务端。主要功能就是:把消息从发送端传送到接收端,这里会涉及到消息的...

2019-12-17 22:07:33 1117

原创 详解RPC远程调用和消息队列MQ的区别

什么是RPCRPC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制。RPC服务框架有哪些知名度较高的有Thrift(FB的)、dubbo(阿里的)RPC的一般需要经历4个步骤:1、建立通信首先要解决通讯的问题:即A机器想要调用B机器,首先得建立起通信连接,主要是通过在客户端和服务器之间建立TCP连接。2、服务寻址要...

2019-12-17 21:30:37 900

原创 什么是流量削峰?如何解决秒杀业务的削峰场景

流量削峰的由来主要是还是来自于互联网的业务场景,例如,马上即将开始的春节火车票抢购,大量的用户需要同一时间去抢购;以及大家熟知的阿里双11秒杀,短时间上亿的用户涌入,瞬间流量巨大(高并发),比如:200万人准备在凌晨12:00准备抢购一件商品,但是商品的数量缺是有限的100-500件左右。这样真实能购买到该件商品的用户也只有几百人左右, 但是从业务上来说,秒杀活动是希望更多的人来参与,也就是抢...

2019-12-17 21:14:03 1750

原创 MQ消息队列的12点核心原理总结

1. 消息生产者、消息者、队列消息生产者Producer:发送消息到消息队列。消息消费者Consumer:从消息队列接收消息。Broker:概念来自与Apache ActiveMQ,指MQ的服务端,帮你把消息从发送端传送到接收端。消息队列Queue:一个先进先出的消息存储区域。消息按照顺序发送接收,一旦消息被消费处理,该消息将从队列中删除。2.设计Broker主要考虑1)消息的...

2019-12-17 20:55:47 421

原创 分布式之消息队列的特点、选型、及应用场景详解

什么是消息队列消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列。消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息发布者只管把消息发布到MQ中而不管谁来取,消息使用者...

2019-12-13 15:41:39 1062

原创 主流的消息队列MQ比较,详解MQ的4类应用场景

目前主流的MQ产品1.ZeroMQ号称最快的消息队列系统,尤其针对大吞吐量的需求场景。扩展性好,开发比较灵活,采用C语言实现,实际上只是一个socket库的重新封装,如果做为消息队列使用,需要开发大量的代码。ZeroMQ仅提供非持久性的队列,也就是说如果down机,数据将会丢失。其中,Twitter的Storm中使用ZeroMQ作为数据流的传输。2.RabbitMQ结合erlang语言...

2019-12-13 15:23:41 199

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

一、kafka1、不完全符合jms规范,注重吞吐量,类似udp 和 tcp2、一般做大数据吞吐的管道 我们现在的用途就是负责在各个idc之间通信3、量大对数据不是百分之百保证的,会有数据丢失,不是百分百送达(amq和rmq等有重发机制,而kafka没有);在吞吐量有提升 ,在这方面就得有牺牲, 所以kafka适合大数据量流转, 比如日志数据 比如用作统计的数据。二、activeMQAc...

2019-12-13 15:08:49 529

原创 NIO、BIO、AIO的区别,及NIO的应用和框架选型

AIO、BIO、NIO的区别IO模型主要分类:同步(synchronous) IO和异步(asynchronous) IO阻塞(blocking) IO和非阻塞(non-blocking)IO同步阻塞(blocking-IO)简称BIO同步非阻塞(non-blocking-IO)简称NIO异步非阻塞(synchronous-non-blocking-IO)简称AIO1.BI...

2019-12-13 15:00:43 939

原创 ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)

哈希表1.介绍哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更加复杂的类型的键。2.链式哈希表链式哈希表从根本上说是由一组链...

2019-12-12 22:37:41 979

原创 CountDownLatch、Semaphore等4大并发工具类详解

Java并发工具包1.并发工具类提供了比synchronized更加高级的各种同步结构:包括CountDownLatch、CyclicBarrier、Semaphore等,可以实现更加丰富的多线程操作。2.并发容器提供各种线程安全的容器:最常见的ConcurrentHashMap、有序的ConcurrentSkipListMap,实现线程安全的动态数组CopyOnWriteArrayLi...

2019-12-12 22:17:50 874

原创 并发容器的原理,七大并发容器详解、及使用场景

并发容器的由来在Java并发编程中,经常听到Java集合类,同步容器、并发容器,那么他们有哪些具体分类,以及各自之间的区别和优劣呢?只有把这些梳理清楚了,你才能真正掌握在高并发的环境下,正确使用好并发容器,我们先从Java集合类,同步容器谈起。1.什么是同步容器Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map,大家熟知的这些集合类ArrayList、Link...

2019-12-11 22:20:59 1086

原创 Java最全锁剖析:独享锁/共享锁 公平锁/非公平锁 乐观锁/悲观锁

乐观锁 VS 悲观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度,在Java和数据库中都有此概念对应的实际应用。1.乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,乐观锁在Java中是通过使用无锁编程来实现,最常采用的是CAS算法...

2019-12-11 21:17:44 892

原创 Java线程池的使用方式,核心运行原理、以及注意事项

为什么需要线程池java中为了提高并发度,可以使用多线程共同执行,但是如果有大量线程短时间之内被创建和销毁,会占用大量的系统时间,影响系统效率。为了解决上面的问题,java中引入了线程池,可以使创建好的线程在指定的时间内由系统统一管理,而不是在执行时创建,执行后就销毁,从而避免了频繁创建、销毁线程带来的系统开销。线程池如何使用,以及实现原理,处理步骤,有什么使用注意事项等,今天主要从这几个...

2019-12-11 20:27:43 903

原创 工作常用4种Java线程锁的特点,性能比较、使用场景

多线程的缘由在出现了进程之后,操作系统的性能得到了大大的提升。虽然进程的出现解决了操作系统的并发问题,但是人们仍然不满足,人们逐渐对实时性有了要求。使用多线程的理由之一是和进程相比,它是一种非常花销小,切换快,更”节俭”的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种”昂贵”的多任务工作方式。而在进程...

2019-12-11 20:13:01 407

原创 Redis的存储类型、集群架构、以及应用场景

什么是redisredis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存、事件发布或订阅、高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串、哈希、列表、队列、集合结构直接存取,基于内存,可持久化,支持多种开发语言。redis在高并发场景下的作用不言而喻,今天主要分享Redis大家比较关心的以下几个方面。redis的数据类型支持多种数据类型:1...

2019-12-10 22:32:07 897

原创 Redis面试题详解:哨兵 复制 事务 集群 持久化等

Redis主要有哪些功能?1.哨兵(Sentinel)和复制(Replication)Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制。Sentinel可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能,Replication则是负责让一个Redis服务器可以配备多个备份的服务器。Redis也是利用这两个功...

2019-12-10 22:09:05 902

原创 Redis为什么是单线程、及高并发快的3大原因详解

Redis的高并发和快速原因1.redis是基于内存的,内存的读写速度非常快;2.redis是单线程的,省去了很多上下文切换线程的时间;3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll 自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。为什么Redi...

2019-12-09 22:28:56 847

原创 Redis哨兵、复制、集群的设计原理,以及区别

谈到Redis服务器的高可用,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制。哨兵(Sentinel):可以管理多个Redis服务器,它提供了监控,提醒以及自动的故障转移的功能。复制(Replication):则是负责让一个Redis服务器可以配备多个备份的服务器。Redis正是利用这两个功能来保证Redis的高可用。哨兵(sentinal)哨兵是Redis...

2019-12-07 19:23:55 890

原创 Redis缓存和MySQL数据一致性方案详解

需求起因在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库。这个业务场景,主要是解决读数据从Redis缓存,一般都是按照下图的流程来进行业务操作。读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库(MySQL)间...

2019-12-07 18:46:52 879

原创 Redis并发竞争key的解决方案详解

Redis高并发的问题Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题:今天要谈到的Redis并发竞争问题,这里的并发指的是多个redis的client同时set key引起的并发问题。比如:多客户端同时并发写一个key,一个key的值是1,本来按顺序修改为2,3,4,最后是4,但是由于并发设置的原因,最后顺序变成了4,3,2,最后变成的key值成...

2019-12-07 17:00:18 916

原创 分布式锁的由来、特点、及Redis分布式锁的实现详解

什么是分布式锁要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。1.线程锁主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如Synchronized、Lock等。2.进程锁为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独立性,各个...

2019-12-07 16:54:18 919

原创 Redis的内存回收原理,及内存过期淘汰策略详解

Redis内存回收机制Redis的内存回收主要围绕以下两个方面:1.Redis过期策略:删除过期时间的key值2.Redis淘汰策略:内存使用到达maxmemory上限时触发内存淘汰数据Redis的过期策略和内存淘汰策略不是一件事,实际研发中不要弄混淆了,下面会完整的介绍两者。Redis过期策略过期策略通常有以下三种:1.定时过期每个设置过期时间的key都需要创建一个定时器,到过期...

2019-12-07 16:24:25 911

原创 Java 库:为 Java 程序员而生的 10 最佳库

众所周知,Java 的生态环境相当庞大,包含了数量相当可观的官方及第三方库。利用这些库,可以解决在用 Java 开发时遇到的各类问题,让开发效率得到显著提升。举些例子,最常用的官方库有 java.lang、java.util、java.io、java.sql、java.net 等;而至于目前最流行的第三方库,就有 Junit、SLF4J、Google Guava、XStream、JSoup、Gs...

2019-12-05 22:09:57 1049

原创 Java长存!12个Java长久占居主要地位的原因

我们很容易就会遗忘那些曾经在猿群中大热而又被各种新技术掩盖直至堙灭的技术的价值。就拿COBOL这个老猿们当年所用的神器来说,就跟条死鱼一样被现代猿基本这么形容:没价值,腥臭,过时了,对你没好处。Java 作为现代猿的中坚力量在这点上可能会成为下一个COBOL。有关JAVA的技术卖出多少本书已经是一个很久远的记忆了。现处中年时期的Java语言的用途已经不再出现在各种杂志的封面上了。JAVA从出生到...

2019-12-05 21:54:44 1327

原创 JAVA和JVM运行原理

JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。编译器负责把Java程序转成Class文件,方便Jvm来读取它.Jvm是java虚拟机,其实它就是解释器,把Class文件中的命令转成某种平台的命令,比如把Java命令转成Windows下的命令,然后Java程序就执行...

2019-12-05 21:43:50 1167

原创 为什么要有Spring?

*Spring核心技术原理(1)为什么要有Spring?*一、知史可以明鉴我们学习技术的时代赶上了最好的时代,跳过了很多前人经常踩的坑,前人在踩坑的过程中总结了很多经验和教训,而新时代的我们只是继承了前人的经验和教训,而忽略了这些采坑的过程,以至于我们面对很多新技术都不知道他是什么?他为什么存在?他为什么可以解决这个问题?更不知道如何掌握其原理!云里雾里一头雾水!交流群的很多小伙伴,常常私聊...

2019-12-05 21:07:21 1179

原创 Java分布式开发不得不知的Dubbo技术详细介绍

1 dubbox简介随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。垂直应用架构当访问量逐渐增大,单一应用增加机器带来的加...

2019-11-30 16:32:51 1022

原创 服务发现的基本原理以及如何实现?

一、什么是服务发现?服务发现并没有怎样的高深莫测,它的原理再简单不过。只是市面上太多文章将服务发现的难度妖魔化,读者被绕的云里雾里,顿觉自己智商低下不敢高攀。服务提供者是什么,简单点说就是一个HTTP服务器,提供了API服务,有一个IP端口作为服务地址。服务消费者是什么,它就是一个简单的进程,想要访问服务提供者提供的服务来干一些事情。一个HTTP服务器既可以是服务提供者对外提供服务,也可以是消...

2019-11-30 15:40:10 740

原创 微服务设计我们需要考虑哪些要点?

微服务生态微服务有哪些要点呢?先看下图是 SpringCloud 的整个生态。设计要点一:API 网关在实施微服务的过程中,不免要面临服务的聚合与拆分,当后端服务的拆分相对比较频繁的时候,作为手机 App 来讲,往往需要一个统一的入口,将不同的请求路由到不同的服务,无论后面如何拆分与聚合,对于手机端来讲都是透明的。有了 API 网关以后,简单的数据聚合可以在网关层完成,这样就不用在手机...

2019-11-30 15:21:09 315

原创 为什么不用原生的spring cloud config!

引言近几年传统应用架构已经逐渐朝着微服务架构演进。那么随着业务的发展,微服务越来越庞大,此时服务配置的管理变得会复杂起来。为了方便服务配置文件统一管理,实时更新,配置中心应运而生。其实,所谓配置中心,就是将配置的数据放在某种存储介质中,该介质可以是File(例如Git、Svn)Database(例如mysql、oracle)nosql Database(例如Redis、Memacache...

2019-11-30 14:54:43 946

原创 微服务为什么一定要选spring cloud?

现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性。同时,支持微服务的技术栈也是多种多样的,本系列文章主要介绍这些技术中的翘楚——Spring Cloud。这是序篇,主要讲述我们为什么选择Spring Cloud和它的技术概要。1 为什么微服务架构需要Spring Cloud简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基...

2019-11-29 17:00:54 520

原创 Spring Cloud概述

1 传统的应用1.1 单体应用在此之前,笔者所在公司开发Java程序,大都使用SSM等技术框架,每一个项目都会发布一个单体应用。例如开发一个进销存系统,将会开发一个war包部署到Tomcat中,每一次需要开发新的模块或添加新功能时,都会在原来的基础上不断的添加。若干年后,这个war包不断的膨胀,程序员在进行调试时,服务器也可能需要启动半天,维护这个系统的效率极为低下。这样一个war包,涵盖了库...

2019-11-29 15:36:12 973

原创 Spring Cloud微服务全家桶主要组件及简要介绍

一、微服务简介微服务是最近的一两年的时间里是很火的一个概念。感觉不学习一下都快跟不上时代的步伐了,下边做一下简单的总结和介绍。何为微服务?简而言之,微服务架构风格这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的。其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这样轻量的机制来相互通信。这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。这些...

2019-11-29 15:21:50 862

原创 Java 多态的实现机制

是父类或接口定义的引用变量可以指向子类或实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实现对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。浅谈多态机制的意义及实现在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP。这...

2019-11-27 18:51:08 880

原创 Java 微服务框架新选择:Spring 5

在这篇文章中,我们将讨论即将发布的第五代 Spring 框架中的新概念—— “Functional Web Framework”,来看看它如何帮助我们构建轻量级的微服务。你可能会对标题中出现的 “Spring” 和 “微服务框架”感到惊讶。但是确实如此,Spring 5非常适合成为你 Java Web 微服务框架的新选择。首先,为了避免混淆让我们来对“微服务”中的“微”达成共识:简洁 - 无...

2019-11-26 21:26:14 854

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除