自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringCloud-08-Alibaba Nacos服务注册与发现

1. Spring Cloud Alibaba 介绍下图是 Spring Cloud 官网给出的架构图,可以看到这个图中间就是各个微服务的实现,周边是去围绕这些微服务进行治理的支持性功能,例如分布式追踪、服务注册、配置服务等。Spring Cloud 是以微服务为核心的分布式系统的一个构建标准,而Spring Cloud Alibaba是 Spring Cloud 标准的实现,目前 Spring Cloud Alibaba 成为了 Spring Cloud 家族中最受关注的框架。上图中深色的部分,

2021-06-10 17:48:11 468

原创 SpringCloud-07-sleuth+zipkin

Spring Cloud Sleuth是Spring Cloud提供的分布式跟踪解决方案,它借用了Google的Dapper组件的术语,并且兼容Twitter的Zipkin。Spring Cloud Sleuth官网:https://docs.spring.io/spring-cloud-sleuth/docs/2.2.8.RELEASE/reference/html/#terminologyzipkin官网:https://zipkin.io/1. 分布式场景链路跟踪问题在复杂的微服务架构系统

2021-06-02 22:07:39 534 2

原创 SpringCloud-06-Gateway

Spring Cloud 体系内的网关技术主要有 Zuul 和 Spring Cloud Gateway。Zuul 是 Netflix 公司开源的产品,也是 Spring Cloud F版本 之前默认使用的服务网关组件,但是随着 Netflix 公司一系列的停更事件,在 Spring Cloud G版本后已经不建议采用 Zuul 技术,官方建议使用 Spring Cloud Gateway 作为默认的网关技术。微服务架构中网关在哪里?[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(

2021-05-31 21:48:51 378 5

原创 SpringCloud-05-OpenFeign

1. openFeign简介Feign是一个声明式的Web Service客户端,简单可以理解为封装了Ribbon+RestTemplate的模板代码。在Spring Cloud中使用Feign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。Spring Cloud Open Feign对Feign进行增强支持Spring MVC注解,可以像Spring Web一样使用HttpMessageConverters等。Op

2021-05-21 17:17:19 170

原创 SpringCloud-04-Hystrix

服务雪崩:如果扇出的链路上某个微服务的响应超时或者不可用,对微服务调用方的调用会占用越来越多的系统资源,进而引起系统崩溃,这就是"雪崩效应"。对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和,比失败更糟糕的是,导致整个系统发生更多的级联故障,这些都表示需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不会导致整个应用程序或系统崩溃。Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,H

2021-05-19 22:26:30 181 1

原创 SpringCloud-03-Zookeeper

在前面介绍SpringCloud Eureka已经停止更新,如果担心Eureka技术过时,可以选用Zookeeper作为注册中心,作为服务注册与发现。其实了解Dubbo的朋友应该知道。在Dubbo中,也是推荐使用Zookeeper作为注册中心,Dubbo是一门RPC框架,用于远程过程调用,在这里就不对Dubbo进行介绍。ZooKeeper 是一个开放源代码的分布式协调服务,在之前,我已经写过几篇关于Zookeeper的文章,在系列文章中讲解了Zookeeper的作用,原理,安装和简单使用。不了解Zoo..

2021-05-14 18:19:46 258 8

原创 SpringCloud-02-Ribbon

Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将NetFlix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等.简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器.我们也很容易使用Ribbon实现自定义的负载均衡算法.1. 负载均衡1.1 服务端负载均衡服务端负载均衡一般是指 Nginx 或者 F5 之类的..

2021-05-12 20:11:49 1189 6

原创 SpringCloud-01-Eureka

1. 前言1.1 什么是微服务架构2014 年 3 月,Martin Fowler 写的一篇文章 《Microservices》以通俗易懂的形式为大家定义了什么是微服务架构。文章连接https://martinfowler.com/articles/microservices.html微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协.

2021-05-11 15:01:21 94

原创 mongo-07-备份和恢复

生产环境中,我们一般会使用副本集来进行冗余备份、容灾恢复,但一般地,也都会为了数据安全留一手,使用定时任务对MongoDB的数据进行备份,万一所有Mongo节点宕机后,可以用以恢复。我这里使用的是 mongo4.4.3 版本,默认安装不带mongoDB的备份工具 mongodump 和恢复工具 mongorerstore。MongoDB 工具下载:MongoDB DataBase Tools我下载的是 mongodb-database-tools-rhel70-x86_64-100.2.1.tgz,

2021-01-21 11:32:39 492

原创 mongo-06-数据库安全

数据库安全涉及到两个方面,一是身份认证,二是鉴权。mongodb安装完后默认是不开启auth安全模块的,直接通过 mongo工具或者其他工具不需要身份认证就可以成功连接mongo服务。1 开启安全模式 --auth为了安全起见,我们需要开启安全模式 --auth[root@docker01 ~]# /usr/local/mongodb-4.4.3/bin/mongod -f /usr/local/mongodb-4.4.3/mongodb.conf --authabout to fork chil

2021-01-20 21:28:37 294 2

原创 mongo-05-聚合操作和索引

1. 聚合操作db.<collection>.aggregate(<pipeline>,<options>)<pipeline> 文档定义了操作中使用的聚合管道阶段和聚合操作符<options> 文档声明了一些聚合操作的参数介绍几种常见的表达式:字段路径表达式$<field> : 使用 $ 来指示字段路径,例如:name表示用户名字段‘name 表示用户名字段`name表示用户名字段‘.` : 使用 $ 和 . 来指示

2021-01-19 15:10:35 212

原创 mongo-04-更新和删除

1. 更新文档1.1 update()db.<collection>.update(<query>, <update> ,<options>)<query> 文档筛选条件<update> 更新内容<options> 文档声明了一些更新操作的参数1.1.1 文档替换如果 <update> 文档不包含任何更新操作符, db.<collection>.update() 将会使用 <u

2021-01-18 17:28:46 372 1

原创 mongo-03-查询文档

1. find 读取文档db.<collection>.find(<query>,<projection>)query : 定义了读取操作时筛选文档的条件projection : 定义了对读取结果进行的投射,也就是只返回某些字段1.1 读取文档不进行筛选和投射> db.user.find(){ "_id" : "1", "money" : 1000, "name" : "刘一" }{ "_id" : "2", "money" : 1000, "n

2021-01-17 10:45:31 150

原创 mongo-02-创建文档和ObjectId

MongoDB 是一个面向文档(document-oriented)的数据库,而不是关系型数据库。不采用关系模型主要是为了获得更好的扩展性。与关系型数据库相比,面向文档的数据库不再有“行”(row)的概念,取而代之的是更为灵活的“文档”(document)模型。通过在文档中嵌入文档和数组,面向文档的方法能够仅使用一条记录来表现复杂的层次关系,另外,不再有预定义模式(predefined schema):文档的键(key)和值(value)不再是固定的类型和大小。由于没有固定的模式,根据需要添加或删除字段变

2021-01-16 09:58:14 252

原创 mongo-01-linux安装MongoServer

MongoDB Community Server 下载MongoDB官网地址:https://www.mongodb.com/try/download/community我下载的是:mongodb-linux-x86_64-rhel70-4.4.3.tgz机器准备:Centos71. 安装 mongodb1.1 解压解压mongodb-linux-x86_64-rhel70-4.4.3.tgz到/usr/local,然后将解压目录重命名为mongodb-4.4.3。[...

2021-01-14 20:53:08 315 2

原创 kafka-08-SpringBoot Kafka实战

注意:当前的 Kafka 版本无法保证每个消息“只被保存一次”。现实中的很多应用程序在消息里加入唯一标识符,用于检测重复消息,消费者在读取消息时可以对它们进行清理。应用程序需要可以做到消息的“幂等”,也就是说,即使出现了重复消息,也不会对处理结果的正确性造成负面影响。整合SpringBoot kafka,加入依赖 <dependency> <groupId>org.springframework.boot</groupId&gt

2021-01-13 20:24:37 1232

原创 kafka-07-可靠的消息传递

1 可靠性保证在讨论可靠性时,我们一般会使用“保证”这个词,它是指确保系统在各种不同的环境下能够发生一致的行为。了解系统的保证机制对于构建可靠的应用程序来说至关重要,这也是能够在不同条件下解释系统行为的前提。那么 Kafka 可以在哪些方面作出保证呢?Kafka 可以保证分区消息的顺序。如果使用同一个生产者往同一个分区写入消息,而且消息 B 在消息 A 之后写入,那么 Kafka 可以保证消息 B 的偏移量比消息 A 的偏移量大,而且消费者会先读取消息 A 再读取消息 B 。 只有当消息被写入

2021-01-08 16:28:07 142

原创 kafka-06-控制器、复制、元数据请求,生产请求和消费请求

Kafka 使用 Zookeeper 来维护集群成员的信息。每个 broker 都有一个唯一标识符,这个标识符可以在配置文件里指定 ,也可以自动生成。在 broker 启动的时候,它通过在/brokers/ids路径创建临时节点把自己的 ID 注册到 Zookeeper 。 Kafka 组件订阅 Zookeeper 的/brokers/ids路径(broker 在 Zookeeper 上的注册路径),当有 broker 加入集群或退出集群时,这些组件就可以获得通知。如果你要启动另一个具有相同...

2021-01-08 13:06:17 256

原创 kafka-05-消费者

1. 消费者和消费者群组消费者从属于消费者群组,一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息。可以增加更多的消费者,让它们分担负载,每个消费者只处理部分分区的消息,这就是横向伸缩的主要手段。我们有必要为主题创建大量的分区,在负载增长时可以加入更多的消费者。要注意,不要让消费者的数量超过主题分区的数量,多余的消费者只会被闲置。1 个消费者收到 4 个分区的消息假设主题 T1 有 4 个分区,我们创建了消费者 C1 ,它是群组 G1 里唯一的消费者,群组 G1 订阅主题

2021-01-07 20:22:01 339 1

原创 kafka-04-生产者

1 生产者概览往 Kafka 写入消息的场景 :记录用户的活动(用于审计和分析)、 记录度量指标、 保存日志消息、 记录智能家电的信息、 与其他应用程序进行异步通信、 缓冲即将写入到数据库的数据,等等。多样的使用场景意味着多样的需求:是否每个消息都很重要? 是否允许丢失一小部分消息? 偶尔出现重复消息是否可以接受? 是否有严格的延迟和吞吐量要求?场景举例:在之前提到的信用卡事务处理系统里,消息丢失或消息重复是不允许的,可以接受的延迟最大为 500ms ,对吞吐量要求较高我

2021-01-07 14:27:45 137

原创 kafka-03-主题的操作和动态配置变更

1 主题操作使用kafka-topics.sh工具可以执行主题的大部分操作(配置变更部分已经被移动到kafka-configs.sh工具当中)。我们可以用kafka-topics.sh创建、修改、 删除和查看集群里的主题。要使用该工具的全部功能,需要通过--bootstrap-server参数提供 Kafka broker 的连接字符串 。1.1 创建主题--create在集群里创建一个主题需要用到 3 个参数。这些参数是必须提供的,尽管有些已经有了 broker 级别的默认值...

2021-01-06 23:39:16 1003

原创 kafka-02-Kafka安装运行

1、安装Java 7或以上版本省略...2、安装 ZookeeperKafka 使用 Zookeeper 保存集群的元数据信息和消费者信息。可以到 apache 官网下载zookeeper:https://zookeeper.apache.org/releases.html。更详细的zookeeper安装操作,可参考前面的文章[zk-03-Zookeeper部署和运行]https://blog.csdn.net/qq_20633779/article/details/11177...

2021-01-01 00:12:13 166

原创 kafka-01-Kafka简介

1、Kafka 基本概念Kafka 是一款基于发布与订阅的梢息系统。它一般被称为“分布式提交日志”或者“分布式流平台”。1.1、消息和批次消息:Kafka 的数据单元被称为消息。可以把消息看成是数据库里的一个“数据行”或一条“记录”。消息由字节数组组成,所以对于 Kafka 来说,消息里的数据没有特别的格式或含义。键:消息可以有一个可选的元数据 ,也就是键。键也是一个字节数组,与消息一样,对于 Kafka 来说也没有特殊的含义。 当消息以一种可控的方式写入不同的分区时,...

2020-12-30 19:41:07 184

原创 zk-04-zookeeper客户端操作

1、zkCli客户端操作1.1 连接服务器通过sh zkCli.sh命令连接 zookeeper 客户端服务器。当出现WatchedEvent state:SyncConnected type:None path:null表示成功连接上了zookeeper服务器[root@k8smaster bin]# pwd/opt/zookeeper-3.5.5/bin[root@k8smaster bin]# sh zkCli.sh...WatchedEvent state:SyncC...

2020-12-29 16:29:28 4007

原创 zk-03-Zookeeper部署和运行

环境准备:准备Java运行环境,确保你已经安装了 java7 或者更高的版本; 下载 ZooKeeper 安装包:https://zookeeper.apache.org/releases.html 我这里准备的是3.5.5版本的 apache-zookeeper-3.5.5-bin.tar机器准备:3台 CentOS7 的机器主机名:k8smaster,IP:192.168.43.81 主机名:k8snode1, IP:192.168.43.91 主机名:k8snode2, IP:19

2020-12-26 23:47:36 413

原创 zk-02-ZAB协议

1、ZAB 协议简述在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各副本之间数据的一致性。ZAB 协议 即 ZooKeeper Atomic Broadcast (ZooKeeper原子消息广播协议)。ZooKeeper 使用一个单一的主进程来接收并处理客户端的所有事务请求,并采用 ZAB 的原子广播协议,将服务器数据的状态变更以事务 Proposal (提议)的形式广播到所有的副本进程上去...

2020-12-23 18:53:26 192

原创 zk-01-Zookeeper简介

1、 ZooKeeper是什么ZooKeeper 是一个开放源代码的分布式协调服务,由知名互联网公司雅虎创建,是Google Chubby的开源实现。Zookeeper 是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。1.1、ZooKeeper可以保证如下分布式一致性特性:顺序一致性 从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到Zoo

2020-12-22 21:01:18 291

原创 juc-12-线程池2-线程池的使用

这是线程池第二篇文章,上一篇文章写了如何创建线程池,这篇文章用代码来演示通过 ThreadPoolExecutor 和 Executors的静态工厂方法创建线程池,以及这些线程池的基本使用,然后重点讲解 ThreadPoolExecutor 的实现接口 ExecutorService 中的常用API,如何通过这些API来管理线程池。1、ThreadPoolExecutor 创建线程池从上篇文章《juc-12-线程池2-线程池的使用》中,我们学习到 ThreadPoolExecutor 几个重载的构造

2020-12-01 23:37:06 340

原创 juc-11-线程池1-如何创建线程池

1、为什么要用线程池?下面先看看不使用线程池的程序,每个任务都新开一个线程处理。public class NoPool { public static void main(String[] args) { // 模拟程序需要执行1000个任务 for (int i = 0; i < 1000; i++) { // 每个任务启动一条线程去处理 new Thread(new Task(), "Thread

2020-12-01 00:00:16 161 1

原创 juc-10-阻塞队列

也许你以前学习数据结构时,接触过Queue(队列),它具有先进先出的特性。什么是阻塞队列 BlockingQueue ?顾名思义它一个队列,具有阻塞功能。为什么要学习阻塞队列?很多朋友可能有些陌生,其实只要使用过线程池,就表示你已经间接地使用过阻塞队列了,阻塞队列是线程池的重要组成部分,后面文章会详细介绍线程池。 阻塞队列是线程安全的,所以阻塞队列可以用作线程安全的并发容器,比如生产者消费者模式。1、常见的阻塞队列阻塞队列关系图1.1 ArrayBlockingQueue由数组

2020-11-28 18:02:30 211 1

原创 juc-09-控制并发流程工具类

这篇文章,介绍一些比较常用的控制并发流程的工具类:CountDownLatch、CyclicBarrier、Semaphore、Exchange、Condition。通过这些工具类,我们可以更好地控制并发流程,多线程之间更好地协同工作。常用的控制并发流程的工具类简介:类 描述 CountDownLatch 倒数门闩 是一个或一组线程等待其他的线程完成工作以后再执行。 CyclicBarrier 循环栅栏 让一组线程达到某个屏障,被阻塞,等到指定数量的线程都达到

2020-11-24 19:51:43 158

原创 juc-08-ConcurrentHashMap2-java8

在上篇文章juc-07-ConcurrentHashMap1-java7中介绍了同步容器 Vector 、 Hashtable 、SynchronizedList 与 SynchronizedMap 它们通过对每一个方法加synchronized锁来实现线程安全,但在线程竞争激烈的情况下,效率非常低下。以HashTable举例:因为当一个线程访问HashTable的同步方法,其他线程也访问HashTable的同步方法时,会进入阻塞或轮询状态。如线程1使用put进行元素添加,线程2不但不...

2020-11-19 20:27:43 94

原创 juc-07-ConcurrentHashMap1-java7

很多朋友在工作或者面试的时候,经常会碰到关于并发容器的问题:并发容器选择问题,Java中有各式各样的并发容器,我应该选择哪一个?碰到字典类型的数据结构选型时,我应该选择 HashMap 还是 ConcurrentHashMap?面试中也经常会问到,Vector 是线程安全的吗?你在工作中会用到吗?为什么?高并发场景下,可以使用 HashMap吗?有没有看过JDK中 ConcurrentHashMap 的源码?说说它的实现原理?Java8中的实现和Java8之前的实现有什么不同?这篇文章,学习

2020-11-17 20:50:31 117 2

原创 juc-06-CAS与Atomic原子类

这篇文章,说说 CAS,还有Java java.util.concurrent.atomic 包下的 Atomic 原子类。1、什么是CASCAS:Compare and Swap,即比较再交换。cpu的特殊指令,指令级别保证这是一个原子操作。CAS 需要有3个操作数:内存值V,旧的预期值A,即将要更新的目标值B。 CAS指令执行时,当且仅当内存值V的值与预期值A相等时,将内存值V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。通常在自旋(死循环)中不断地进行 CAS 操作。

2020-11-13 16:07:43 114

原创 juc-05-Lock与锁分类

这篇文章,我们一起来学习Lock接口以及它的核心方法,以及锁的分类,介绍各种锁是什么,什么特点,怎么玩。1Lock和synchronized的比较锁是一种工具,用于控制对共享资源的访问。Lock和synchronized,这两个是最常见的锁,都可以达到线程安全的目的,但是在使用上和功能上又有较大的不同。在前面文章juc-03-synchronized、notify、notifyAll、wait、volatile中,我们学习了synchronized关键字创建一把内置锁。...

2020-11-13 00:28:59 228

原创 juc-04-ThreadLocal

工作中,相信很多朋友都听过或者用过ThreadLocal。这篇文章就来说说它是什么?具体怎么玩?还有分析ThreadLocal常用API对应的源码。1 场景案例:演示身份认证到业务处理在生产环境中,通常是多个请求并发请求到服务器,一般会经过“身份认证与鉴权”和“业务处理”两个步骤。下面我们来模拟一下大概的实现逻辑,相信大多数朋友的项目中,代码逻辑类似下面的代码:public class NoThreadLocalTest { /** * 用 map 模拟数据源 ...

2020-11-11 20:04:43 117

原创 juc-03-synchronized、notify、notifyAll、wait、volatile

这篇文章,给大家介绍一下几个与线程间同步相关的关键字:synchronized、notify、notifyAll、wait、volatile。1 synchronized 内置锁synchronized 是Java提供的一个并发控制的关键字。synchronized 内置锁分两种:对象锁:锁的是类的对象实例。作用在实例方法,或者实例代码块上。 类锁:锁的是类的Class对象,每个类的的Class对象在一个JVM中只有一个,所以类锁也只有一个。作用在 static 方法,或者 static

2020-09-21 11:19:46 118

原创 juc-02-interrupt()、join()、yield()和守护线程

这篇文章,给大家介绍一下 Thread 类的进阶知识,介绍并演示 interrupt()、join()、yield()的作用,还有守护线程的特点。1 Thread 常用API方法 描述 void start() 启动此线程,JVM将会执行这个线程的 run() 方法 void interrupt() 将线程置为中断状态,中断标识设置为true。 boolean isInterrupted() 判断此线程是否已处于中断状态,此方法不影响线程的中断状态。 stat

2020-09-18 12:03:50 218

原创 juc-01-创建线程

这一系列文章开始讲解java多线程相关知识,下面这篇文章简单地介绍下新建线程的3种方式。1 浅谈进程和线程1.1 进程进程是正在运行的程序的实例,是系统进行资源分配的基本单位。进程的3个基本状态就绪(Ready)当进程已分配到除CPU以外的所有必要的资源,只要获得CPU便可立即执行。运行(Running)当进程已获得CPU,其程序正在CPU上执行。阻塞(Blocked)正在执行的进程,由于等待某个事件发生而无法执行时,便放弃CPU而处于阻塞状态。引起进程阻塞的

2020-09-17 14:26:00 110

原创 06-Stream API 操作篇

这篇文章写Stream API 的使用,各个用例中会大量结合lambda表达式,如果函数式接口和lambda表达式玩得不熟的朋友先看看01-函数式接口和 lambda 表达式,如果对 Stream API 的创建、中间操作、终止操作相关接口不熟悉的朋友先看看05-Stream API 第一篇。提示:表格的排版在手机端阅读可能有点乱,表格内容可以尝试手机横屏阅读或者电脑端阅读。Java常用的内置函数式接口:函数式接口 参数类型 返回类型 用途 Consum...

2020-09-11 15:12:44 116

空空如也

空空如也

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

TA关注的人

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