分布式
文章平均质量分 87
Java硬件工程师
中国科学技术大学毕业,原支付宝Java开发工程师,立志做一名资深全栈工程师
展开
-
分布式定时任务
本文引用了谷粒商城的课程。原创 2023-04-06 10:18:01 · 1161 阅读 · 1 评论 -
Redis分布式锁系列
分布式场景下,还需要用到读写锁、信号量等机制,使用上述方案只能实现简单的分布式锁,因此我们需要借助Redissson框架。完成我们所有的分布式功能。Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。原创 2023-04-04 21:49:57 · 1040 阅读 · 0 评论 -
分布式与微服务-基础概念
分布式基础概念微服务微服务架构风格,就像是把一个单独的应用程序开发成一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是 HTTP API 这些服务围绕业务能力来构建, 并通过完全自动化部署机制来独立部署,这些服务使用不同的编程语言书写,以及不同数据存储技术,并保持最低限度的集中式管理简而言之,拒绝大型单体应用,基于业务边界进行服务微化拆分,每个服务独立部署运行。集群&分布式&节点集群是个物理状态,分布式是个工作方式只要是一堆机器,也可以叫做集群,他们是不是一原创 2022-05-03 21:51:19 · 1145 阅读 · 0 评论 -
Springboot响应处理
数据响应与内容协商响应页面指的是我们如何原创 2021-07-01 21:03:17 · 953 阅读 · 1 评论 -
springboot请求处理
请求映射使用REST映射请求映射也就是我们编写一个controller,在每一个方法上使用requestMapping来声明我们这个方法能处理xxx请求。把这个过程称之为请求映射。@xxxMapping;@GetMapping@PostMapping@PutMapping@DeleteMappingRest风格支持(使用HTTP请求方式动词来表示对资源的操作)以前: /getUser 获取用户原创 2021-06-25 17:54:12 · 1186 阅读 · 1 评论 -
Springboot的web开发-静态资源
1.web开发简介SpringMVC自动配置概览Spring Boot provides auto-configuration for Spring MVC that works well with most applications.(大多场景我们都无需自定义配置)Springboot给springMVC配置了以下场景:The auto-configuration adds the following features on top of Spring’s defaults:Inclusion原创 2021-06-20 12:27:28 · 326 阅读 · 0 评论 -
Springboot配置文件
前面学的配置文件是properties,其实我们更常用的是yaml配置文件的方式。yaml的用法1.简介YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。非常适合用来做以数据为中心的配置文件。2.基本语法key: value;kv之间有空格大小写敏感使用缩进表示层级关系在xml中,使用标签包含来表示层级关系原创 2021-06-19 20:10:24 · 293 阅读 · 0 评论 -
Springboot自动配置原理入门
1.引导加载自动配置类@SpringBootApplication注解相当于@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan等多个注解的功能。我们挨个分析其中的功能。我们先点进去看其源码@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan( excludeFilters = {@Filter( type = FilterType.原创 2021-06-19 16:24:38 · 324 阅读 · 0 评论 -
Springboot底层注解(容器功能)
1.组件添加1.1.@Configuration我们在这里准备了两个组件,宠物类和用户类,用户类包含用户姓名和年龄,宠物类包含宠物名public class User { public String name; public int age; public User() { } public User(String name, int age) { this.name = name; this.age = age; }原创 2021-06-13 15:52:37 · 210 阅读 · 1 评论 -
Springboot基础入门
1.Spring生态圈:1.1.spring能做什么?比如我们spring做容器的IOC,做切面的AOP和用springMVC开发web应用,这些都是spring框架给我们带来的基本功能。我们可以浏览一下官网,看看能做什么Microservices:即微服务开发:在一些大型应用开发的时候,如果我们将所有模块代码写在一个项目里面,这样显然会不合适,如果我们将所有的模块代码全部写在一个项目里面,这样不合适,我们应该把这些模块拆分成一个一个微小的功能模块,我们称之为微服务,我们的spring就可以帮我们原创 2021-06-13 09:12:56 · 1909 阅读 · 1 评论 -
dubbo简介
前言一、什么是分布式框架分布式系统是若干独立系统的集合,但是用户使用起来像是在使用一套系统二、为什么需要分布式系统?规模的逐步扩大和业务的复杂,单台计算机扛不住双十一那样的流量,俗话说:三个臭皮匠抵一个诸葛亮。三、应用架构的发展演变(1) 单一架构 当网站流量很小的时候,我们将所有的应用(业务)放到一台服务器上,打包运行公司管理系统/超市收银系统优点:开发简单,部署简单缺点:扩展不容易(怎么处理日益增长的流量),谁都改一个,维护不容易,性能提升难(2) 垂直应用架构 将大应用拆分成为小应用原创 2021-06-01 21:51:30 · 164 阅读 · 1 评论 -
Netty 编解码器和 Handler 调用机制
基本说明1.Netty 的组件设计:Netty 的主要组件有 Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipe 等2.ChannelHandler 充当了处理入站和出站数据的应用程序逻辑的容器。例如,实现 ChannelInboundHandler 接口(或 ChannelInboundHandlerAdapter),你就可以接收入站事件和数据,这些数据会被业务逻辑处理。当要给客户端发送响应时,也可以从 ChannelInboundHa原创 2021-05-31 23:07:05 · 348 阅读 · 2 评论 -
TCP 粘包和拆包及解决方案
TCP 粘包和拆包基本介绍1.TCP 是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的 socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用了优化方法(Nagle 算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样做虽然提高了效率,但是接收端就难于分辨出完整的数据包了,因为面向流的通信是无消息保护边界的2.由于 TCP 无消息保护边界,需要在接收端处理消息边界问题,也就是我们所说的粘包、拆包问题,看一张图3.TC原创 2021-05-31 23:07:25 · 402 阅读 · 0 评论 -
Google Protobuf
编码和解码的基本介绍1.编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码[示意图]2.codec(编解码器)的组成部分有两个:decoder(解码器)和 encoder(编码器)。encoder 负责把业务数据转换成字节码数据,decoder 负责把字节码数据转换成业务数据Netty 本身的编码解码的机制和问题分析1.Netty 自身提供了一些 codec(编解码器)2.Netty 提供的编码器1.StringEncoder:对字符原创 2021-05-28 18:02:20 · 428 阅读 · 0 评论 -
Netty应用实例
群聊系统实例要求1.编写一个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)2.实现多人群聊3.服务器端:可以监测用户上线,离线,并实现消息转发功能4.客户端:通过 channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到)5.目的:进一步理解 Netty 非阻塞网络编程机制GroupChatServerimport io.netty.bootstrap.ServerBootstrap;import io.netty.ch原创 2021-05-27 14:28:57 · 971 阅读 · 2 评论 -
Netty核心模块组件
Bootstrap、ServerBootstrap1.Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类。2.常见的方法有public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup),该方法用原创 2021-05-26 16:29:59 · 127 阅读 · 1 评论 -
Netty 高性能架构设计
Netty 概述原生 NIO 存在的问题1.NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。2.需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。3.开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。4.J原创 2021-05-25 20:55:05 · 1048 阅读 · 4 评论 -
NIO与零拷贝和AIO
零拷贝基本介绍1.零拷贝是网络编程的关键,很多性能优化都离不开。2.在 Java 程序中,常用的零拷贝有 mmap(内存映射)和 sendFile。那么,他们在 OS 里,到底是怎么样的一个的设计?我们分析 mmap 和 sendFile 这两个零拷贝3.另外我们看下 NIO 中如何使用零拷贝传统 IO 数据读写Java 传统 IO 和网络编程的一段代码File file = new File("test.txt");RandomAccessFile raf = new RandomAcces原创 2021-05-23 12:27:25 · 327 阅读 · 2 评论 -
Java NIO群聊系统
实例要求:1.编写一个 NIO 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)2.实现多人群聊3.服务器端:可以监测用户上线,离线,并实现消息转发功能4.客户端:通过 Channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到)5.目的:进一步理解 NIO 非阻塞网络编程机制6.示意图分析和代码// 服务端:package com.atguigu.nio.groupchat;import java.io.IOException;i原创 2021-05-22 21:58:29 · 205 阅读 · 0 评论 -
Java NIO 非阻塞网络编程快速入门
NIO 非阻塞网络编程快速入门案例:编写一个 NIO 入门案例,实现服务器端和客户端之间的数据简单通讯(非阻塞)目的:理解 NIO 非阻塞网络编程机制import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketCha原创 2021-05-22 19:49:34 · 152 阅读 · 0 评论 -
Java NIO编程基础
Java NIO 基本介绍1.Java NIO 全称 Java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 NewIO),是同步非阻塞的。2.NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。【基本案例】3.NIO 有三大核心部分:Channel(通道)、Buffer(缓冲区)、Selector(选择器) 。Channel类似socke原创 2021-05-22 16:22:43 · 556 阅读 · 1 评论 -
Java BIO编程
I/O 模型1.I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。(比如客户端和服务器端进行通信用的是单通道还是双通道,异步通信还是同步通信,是阻塞的还是非阻塞的,有没有用到缓冲)2.Java 共支持 3 种网络编程模型 I/O 模式:BIO、NIO、AIO。3.Java BIO:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。【简单示意图原创 2021-05-20 19:52:00 · 188 阅读 · 2 评论 -
Netty简介
Netty 的介绍1.Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。2.Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。(异步:相对于同步而言,比如在传统同步模型中,浏览器向服务器发出一个请求,只有收到服务器的响应才能继续做其它的工作,对于异步而言,它不一定要等到响应回来。比如浏览器使用的ajax技术,发出了ajax请求之后,由于在ajax里面有一个回调函数,因此它可以在收到响应之前可以做其它的事情原创 2021-05-20 14:44:05 · 278 阅读 · 3 评论 -
kafka生产者
在文件存储机制中,我们了解到,通过二分查找法,找到是哪一个index,从index中找到,你要访问的消息的那条数据,然后根据这条消息的内容,然后再log文件中定位到数据的内容。1 分区策略1)分区的原因(1)方便在集群中扩展,每个 Partition 可以通过调整以适应它所在的机器,而一个 topic又可以有多个 Partition 组成,因此整个集群就可以适应任意大小的数据了; 提高负载能力(2)可以提高并发,因为可以以 Partition 为单位读写了。2)分区的原则我们需要将 produc原创 2021-04-20 22:41:37 · 391 阅读 · 3 评论 -
kafka工作流程及文件存储机制
1.kafka工作流程如图topicA有3个分区,每个分区有两个副本(包含一个leader,一个follower),发送消息可以一个一个的发送,也可以批量发送,0,1,2这种是offset偏移量,每一个分区里面都维护者一个从0开始的偏移量。作为follower,应该主动的从leader中备份过来。当然中间也可能丢失数据。消费者会找到leader拉取数据。Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic的。topic 是逻辑上的概念,而 partit原创 2021-04-20 16:02:33 · 123 阅读 · 0 评论 -
kafka快速入门
1 安装部署1.1 集群规划hadoop102 hadoop103 hadoop104zk zk zkkafka kafka kafka1.2 jar 包下载http://kafka.apache.org/downloads.html1.3 集群部署1)解压安装包[atguigu@hadoop102 software]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/原创 2021-04-20 15:17:33 · 84 阅读 · 2 评论 -
kafka概述
1 定义Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。2 消息队列2.1 传统消息队列的应用场景MQ传统应用场景之异步处理先进先出使用消息队列的好处1)解耦允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。2)可恢复性系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。3)缓冲有助于控制和优化数据原创 2021-04-14 12:11:37 · 159 阅读 · 0 评论 -
Zookeeper内部原理
1.选举机制(面试重点)1)半数机制:集群中半数以上机器存活,集群可用。所以 Zookeeper 适合安装奇数台服务器。 6台服务器挂掉3台无法工作,5台服务器挂掉3台也无法工作。2)Zookeeper 虽然在配置文件中并没有指定 Master 和 Slave。但是,Zookeeper 工作时,是有一个节点为 Leader,其他则为 Follower,Leader 是通过内部的选举机制临时产生的。3)以一个简单的例子来说明整个选举的过程。假设有五台服务器组成的 Zookeeper 集群,它们的 id原创 2021-04-13 18:51:00 · 360 阅读 · 1 评论 -
Zookeeper入门
1.概述Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目。提供协调服务,官方定义上zookeeper类似于一个动物管理员,管理apache上n多个框架。Zookeeper工作机制Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化, Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。zookeeper集群原创 2021-04-10 20:14:45 · 198 阅读 · 2 评论