大明哥 大明哥

程序员、死磕 Java 创始人

死磕 Java 大明哥精心打造的 Java 进阶类系列教程,希望大家少走弯路。 更多死磕系列

  • Java现在发布的版本很快,每年两个,但是真正会被大规模使用的是3年一个的LTS版本。每3年发布一个LTS(Long-TermSupport),长期维护版本。意味着只有Java8,Java11,Java17,Java21才可能被大规模使用。每年发布两个正式版本,分别是3月份和9月份。在Java版本中,一个特性的发布都会经历孵化阶段、预览阶段和正式版本。其中孵化和预览可能会跨越多个Java版本。所以大明哥在介绍Java新特性时采用如下这种策略:每个版本的新特性,大明哥都会做一个简单的概述。单独出文介绍跟编码相关的新特性,一些如JVM、性能优化的新特性不单独出文介绍。孵化阶段的新特性不出文介绍。首

    2023-12-24
    阅读(1421)
  • 又到年底了,又是好多小伙伴主动或者被动找工作的时候了,最近好多小伙伴,都问我有没有最新面试题,有!!肯定有!!我就把我看过的和整理过的面试题,以答案都整理好,整理了目前最新版的《互联网大厂面试题》,涵盖了所有的Java面试题,并且为了各位小伙伴更好地有针对性地刷题,大明哥按照技术类别将面试题分了类,包括:Java基础、Java并发、Spring、SpringBoot、设计模式、Redis、Kafka等等共25个分类,99个PDF文件。面试题:25个文件夹99个PDF,包括Java集合、JVM、多线程、并发编程、设计模式、Java、MyBatis、ZooKeeper、Dubbo、Elastics

    2023-12-06
    阅读(1002)
  • 上一个死磕Java专栏【死磕NIO】(当然写的不是很好,争取今年将它重写一遍)是**【死磕Netty】**的铺垫,对于我们Java程序员而言,我们在实际开发过程一般都不会直接使用JavaNIO作为我们的网络编程框架,因为写出一套高质量的JavaNIO程序并不是一件容易的事,除了JavaNIO固有的复杂性和bug之外,作为NIO服务端,我们要处理的事情太多了,如网络闪断、客户端认证、消息编解码、半包读写,客户端一样也有很多复杂的事情要处理,所以如果我们对JavaNIO没有足够了解,没有足够的网络编程经验的话,利用JavaNIO来编写一个高性能的稳定网络编程框架并不是一件容易的事。所以我们一般都不

    2023-10-06
    阅读(1508)
  • PrePKI-数字签名与数字证书PKI-借助Nginx实现Https服务端单向认证、服务端客户端双向认证发展历史HTTP(超文本传输协议)的发展历史:HTTP的起源可以追溯到1990年代早期,由蒂姆·伯纳斯-李(TimBerners-Lee)在CERN(欧洲核子研究组织)开发出来,最初被用于在客户端和服务器之间传输HTML文档。HTTP/0.9是最早的版本,只支持简单的GET请求,并且没有头部信息。随着互联网的发展,HTTP逐渐演进为HTTP/1.0和HTTP/1.1,引入了更多的请求方法、状态码、头部字段等功能,提高了性能和可靠性。近年来,HTTP/2和HTTP/3相继发布,引入了新的特性如

    2024-04-18
    阅读(41)
  • Pre计网-DNS域名解析系统引言在我们日常使用互联网时,经常会输入各种域名来访问网站、发送电子邮件或连接其他网络服务。然而,我们可能并没有意识到在背后默默运行着一项重要的技术,即域名系统(DNS)。本篇博客将深入探讨DNS的重要性、工作原理以及未来的发展趋势。1.DNS是什么DNS(DomainNameSystem,域名系统)是互联网中的一种分布式数据库系统,负责将易于记忆的域名转换为对应的IP地址。换句话说,它就像是互联网的地址簿,让我们能够通过简单的域名访问到全球范围内的网络资源。2.域名结构域名以层次结构组织,从右向左依次是顶级域名(TLD)、二级域名、三级域名,依次类推。比如,.co

    2024-04-18
    阅读(42)
  • Pre计网-传输层协议TCP:TCP为什么握手是3次、挥手是4次?计网-TCP三次握手原理全曝光:深度解析与实战演示计网-TCP四次挥手原理全曝光:深度解析与实战演示为什么需要设计重传机制TCP实现可靠传输的方式之一,是通过序列号与确认应答。在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息在复杂的网络环境中,数据包丢失是不可避免的。所以TCP针对数据包丢失的情况,会用重传机制解决。这些重传机制的引入旨在提高TCP协议在不同网络条件下的稳定性和性能。超时重传是基本的机制,但可能导致不必要的等待。快速重传通过更早地检测到冗余确认,加速了丢失数据的恢复。SA

    2024-04-18
    阅读(39)
  • Pre计网-传输层协议TCP:TCP为什么握手是3次、挥手是4次?计网-TCP三次握手原理全曝光:深度解析与实战演示导图过程分析客户端打算关闭连接,此时会发送一个TCP首部FIN标志位被置为1的报文,也即FIN报文,之后客户端进入FIN_WAIT_1状态。服务端收到该报文后,就向客户端发送ACK应答报文,接着服务端进入CLOSE_WAIT状态。客户端收到服务端的ACK应答报文后,之后进入FIN_WAIT_2状态。等待服务端处理完数据后,也向客户端发送FIN报文,之后服务端进入LAST_ACK状态。客户端收到服务端的FIN报文后,回一个ACK应答报文,之后进入TIME_WAIT状态服务端收到了A

    2024-04-18
    阅读(39)
  • Pre计网-传输层协议TCP:TCP为什么握手是3次、挥手是4次?导图过程分析第一次握手:客户端将请求报文标志位SYN置为1,请求报文的SequenceNumber字段(简称seq)中填入一个随机值J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。第二次握手:服务器端收到数据包后由请求报文标志位SYN=1知道客户端请求建立连接,服务器端将应答报文标志位SYN和ACK都置为1,应答报文的AcknowledgmentNumber字段(简称ack)中填入ack=J+1,应答报文的seq中填入一个随机值K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RC

    2024-04-18
    阅读(40)
  • Pre高性能网络编程-关于单台服务器并发TCP连接数理论值的讨论问题一台主机上只能保持最多65535个TCP连接,正确吗?先说结论:这个说法不对,我们分服务器和客户端分开讨论,以下的讨论都基于服务器和客户端都只有1个IP地址。分析操作系统是通过源IP地址、目标IP地址、协议号(协议类型)、源端口号以及目标端口号这五个元素唯一性的识别一个网络上的通信。我们已经知道网络通信五元组是由过源IP地址、目标IP地址、协议号(协议类型)、源端口号以及目标端口号构成。现在考察的是TCP连接,自然五元组中的协议号已经定下来了,于是网络通信五元组就变化为TCP四元组。那就是说TCP连接四元组是由源IP地址、源端

    2024-04-18
    阅读(46)
  • 概述Mac地址(MediaAccessControlAddress)和IP地址(InternetProtocolAddress)是计算机网络中两个不同的标识符,用于在网络中唯一标识设备。Mac地址(物理地址):Mac地址是网络设备(如计算机、路由器、交换机)在数据链路层(OSI模型中的第二层)中的唯一标识符。长度为48位,通常以十六进制表示,由厂商分配给每个网络设备。用于在局域网中定位设备,是数据帧在局域网中传输时使用的地址。IP地址(网络地址):IP地址是在网络层(OSI模型中的第三层)上标识设备的地址。IPv4地址是32位二进制数,通常以点分十进制表示(例如,192.168.1.1)。IP

    2024-04-18
    阅读(37)
  • 模型大致来说,可以这么理解(只是帮助我们理解,实际上肯定会有点出入),对于我们的PC机来说,物理层可以看成网卡,数据链路层可以看成网卡驱动程序,网络层和传输层由操作负责处理,应用层则是常用的一些网络应用程序和我们自己所编写的网络应用程序。我们一些常见的网络应用基本上都是基于TCP和UDP的,这两个协议又会使用网络层的IP协议。但是我们完全可以绕过传输层的TCP和UDP,直接使用IP,比如Linux内核中的LVS就可以直接基于IP层进行负载平衡调度;甚至还可以直接访问链路层,比如tcpdump程序就是直接和链路层进行通信的LVS的工作机制初探LVS(LinuxVirtualServer)是一个开

    2024-04-18
    阅读(42)
  • 知识点TCP头格式TCP头部包含多个字段,其中一些是必需的,而另一些是可选的。常见的字段包括源端口号、目标端口号、序列号、确认号、窗口大小、校验和等。每个字段都有特定的长度和作用,这些字段一起构成了TCP数据包的头部信息。TCP有限状态机(FSM)TCP连接在其生命周期内经历不同的状态,这些状态构成了TCP有限状态机。常见的状态包括CLOSED(连接未打开)LISTEN(等待连接请求)SYN_SENT(发起连接请求)SYN_RECEIVED(收到连接请求)ESTABLISHED(连接已建立)FIN_WAIT_1FIN_WAIT_2LAST-ACKTIME-WAITCLOSINGCLOSE-WA

    2024-04-18
    阅读(139)
  • 概述每一个抽象层建立在低一层提供的服务上,并且为高一层提供服务。我们需要知道TCP在网络OSI的七层模型中的第四层——Transport层---------------第四层的数据叫SegmentIP在第三层——Network层---------------在第三层上的数据叫PacketARP在第二层——DataLink层,在第二层上的数据叫Frame我们程序的数据首先会打到TCP的Segment中,然后TCP的Segment会打到IP的Packet中,然后再打到以太网Ethernet的Frame中,传到对端后,各个层解析自己的协议,然后把数据交给更高层的协议处理。网络中传输的数据包由两部分组

    2024-04-18
    阅读(38)
  • OSI七层模型OSI(开放系统互联模型,OpenSystemsInterconnectionModel)是一个用于理解和描述计算机网络体系结构的标准化框架,由国际标准化组织(ISO)于1984年制定。该模型将计算机网络通信划分为七个不同的层次,每个层次都执行特定的功能,并且每个层次都依赖于其下一层的服务。这种分层的方法使不同厂商和技术之间的互操作性更容易实现。以下是OSI模型的七个层次,从物理层到应用层:物理层(PhysicalLayer):物理层是网络通信的最底层,主要关注物理媒介和传输数据的硬件特性。它定义了数据传输的物理介质,如电缆、光纤、无线电波等。主要任务包括数据的编码、传输速率、电

    2024-04-18
    阅读(47)
  • Pre超文本传输协议(HyperTextTransferProtocol,HTTP)是目前使用最广泛的应用层协议。在网站、App、开放接口中都可以看到它。HTTP协议设计非常简单,但是涵盖的内容很多。1990年蒂姆·伯纳斯·李开发了第一个浏览器,书写了第一个Web服务器程序和第一张网页。网页用的语言后来被称作超文本标记语言(HTML),而在服务器和客户端之间传输网页的时候,伯纳斯·李没有直接使用传输层协议,而是在TCP的基础上构造了一个应用层协议,这个就是超文本传输协议HTTP。万维网(WorldWideWeb,WWW)是伯纳斯·李对这一系列发明,包括Web服务、HTTP协议、HTML语言等一

    2024-04-18
    阅读(37)
  • Pre我们使用的电商、直播、社交工具、视频网站中都含有大量的图片、视频、文档等,这些资源需要分发给用户。对于一些体量较大的应用来说,如果把大量资源集中到单一节点进行分发,恐怕很难有某个机房可以支撑得住这么大的流量。例如一个日活在100W的小型互联网产品,如果每次请求需要1M的数据,那就刚好是近1TB数据。对于这样的数据规模而言,完全由单一节点进行分发是不现实的。因此现在互联网应用在分发内容的时候,并不是从自己架设的服务器上直分发内容,而是走一个叫作内容分发网络(ContentDiliveryNetwork)的互联网底层建设。我们就以“CDN回源是如何工作的”为引,一起探索CDN的原理和场景。C

    2024-04-18
    阅读(38)
  • Pre在浏览器中输入一个URL,或者用curl请求一个网址……域名系统(DomainNameSystem)就开始工作了。作为互联网的一个重要成员,域名系统是将互联网资源和地址关联起来的一个分布式数据库。统一资源定位符(URL)域名系统本质是定位资源。互联网中有各种各样的资源,比如视频、图片、文件、网页……为了准确地定位资源,人们发明了统一资源定位符(URL,UniformResourceLocator),这样我们就可以通过字符串定位一个互联网的资源。下图是一个URL的示例:Scheme部分代表协议,不只有https,还有ftp、ssh等。不同协议代表着不同类型的应用在提供资源。Host部分代表

    2024-04-18
    阅读(137)
  • Pre随着微服务架构的盛行,远程调用成了开发微服务必不可少的能力,RPC框架作为微服务体系的底层支撑,也成了日常开发的必备工具。当下,RPC框架已经不仅是进行远程调用的基础工具,还需要提供路由、服务发现、负载均衡、容错等能力。那么今天,我们就以“怎样实现RPC框架”为引,从设计者角度看看如何设计一个RPC框架。基础能力设计RPC(RemoteProcedureCall)远程过程调用,顾名思义最基本的能力当然是远程调用一个过程。放到今天的面向对象的语言中,其实就是调用一个远程的方法。在远程我们必须先定义这个方法,然后才可以通过RPC框架调用该方法,远程调用不仅可以传参数、获取到返回值,还可以捕捉

    2024-04-18
    阅读(36)
  • Pre我们在处理网络问题时,经常是处理I/O问题——输入和输出。看上去很复杂,但说白了就是如何把网卡收到的数据给到指定的程序,然后程序如何将数据拷贝到网卡。在处理I/O的时候,要结合具体的场景来思考程序怎么写。从程序的API设计上,我们经常会看到3类设计:BIO、NIO和AIO。从本质上说,讨论BIO、NIO、AIO的区别,其实就是在讨论I/O的模型,我们可以从下面3个方面来思考。编程模型:合理设计API,让程序写得更舒服。数据的传输和转化成本:比如减少数据拷贝次数,合理压缩数据等。高效的数据结构:利用好缓冲区、红黑树等I/O的编程模型我们先从编程模型上讨论下BIO、NIO和AIO的区别。BI

    2024-04-18
    阅读(142)
  • Pre流和缓冲区都是用来描述数据的。计算机中,数据往往会被抽象成流,然后传输。比如读取一个文件,数据会被抽象成文件流;播放一个视频,视频被抽象成视频流。处理节点为了防止过载,又会使用缓冲区削峰(减少瞬间压力)。在传输层协议当中,应用往往先把数据放入缓冲区,然后再将缓冲区提供给发送数据的程序。发送数据的程序,从缓冲区读取出数据,然后进行发送。流流代表数据,具体来说是随着时间产生的数据,类比自然界的河流。你不知道一个流什么时候会完结,直到你将流中的数据都读完。读取文件的时候,文件被抽象成流。流的内部构造,决定了你每次能从文件中读取多少数据。从流中读取数据的操作,本质上是一种迭代器。流的内部构造决定

    2024-04-18
    阅读(45)
  • Pre我们平常做网络编程的时候都会碰到Socket对象,或者在配置代理的时候,碰到配置Socket地址。还经常会碰到I/O模型、异步编程、内存映射等概念。再往更深层次学习,还会碰到epoll/select等编程模型。有没有一种一团糟的感觉——其实学习好这些知识有一条主线,就是抓住操作系统对Socket文件的设计。Socket是什么?首先,Socket是一种编程的模型。下图中,从编程的角度来看,客户端将数据发送给在客户端侧的Socket对象,然后客户端侧的Socket对象将数据发送给服务端侧的Socket对象。Socket对象负责提供通信能力,并处理底层的TCP连接/UDP连接。对服务端而言,每

    2024-04-18
    阅读(42)
  • PreWireshark是世界上应用最广泛的网络协议分析器,它让我们在微观层面上看到整个网络正在发生的事情。Wireshark本身是一个开源项目,所以也得到了很多志愿者的支持。同时,Wireshark具有丰富的功能集,包括:深入检查数百个协议,并不断添加更多协议;实时捕获和离线分析;支持Windows、Linux、macOS、Solaris、FreeBSD、NetBSD,以及许多其他平台;提供GUI浏览,也可以通过TTY;支持VOIP;支持Gzip;支持IPSec。……Wireshark的主页:https://www.wireshark.org/download.html下载Wireshark

    2024-04-18
    阅读(38)
  • Pre广域网是由很多的局域网组成的,比如公司网络、家庭网络、校园网络等。之前我们一直在讨论广域网的设计,今天我们到微观层面,看看局域网是如何工作的。IPv4的地址不够,因此需要设计子网。当一个公司申请得到一个公网IP后,会在自己的公司内部设计一个局域网。这个局域网所有设备的IP地址,通常会以192.168开头。这个时候,假设小明,上班时间玩王者荣耀。当他用UDP协议向王者荣耀的服务器发送信息时,消息的源IP地址是一个内网IP地址,而王者荣耀的服务,是一个外网IP地址。先提一个问题,数据到王者荣耀服务器可以通过寻址和路由找到目的地,但是数据从王者荣耀服务器回来的时候,王者荣耀服务器如何知道192

    2024-04-18
    阅读(38)
  • Pre计网-IPv4协议:路由和寻址的区别是什么?IPv4用32位整数描述地址,最多只能支持43亿设备,显然是不够用的,这也被称作IP地址耗尽问题。为了解决这个问题,有一种可行的方法是拆分子网。拆分子网,会带来很多问题,比如说内外网数据交互,需要网络地址转换协议(NAT协议),增加传输成本。再比如说,多级网络会增加数据的路由和传输链路,降低网络的速度。理想的状态当然是所有设备在一个网络中,互相可以通过地址访问。为了解决这个问题,1998年互联网工程工作小组推出了全新款的IP协议——IPv6协议。但是目前IPv6的普及程度还不够高.既然不能做到完全普及,也就引出了关联的一道面试题目:什么是Tun

    2024-04-18
    阅读(33)
  • Pre如果说传输层协议,除了TCP/UDP,我们还可以有其他选择,比如Google开发的QUIC协议,帮助在传输层支持HTTP3.0传输。但是在网络层,IP协议几乎一统天下。IP协议目前主要有两个版本IPv4和IPv6。这一讲我们先介绍IPv4协议。IPv4使用范围很大,平时工作中很容易遇到,比如开发场景、网络优化场景、解决线上问题场景等。相信你经常会碰到一些和IP协议相关的名词,比如一道常见的面试题目:路由和寻址的区别是什么?因此,学习IPv4还是非常有意义的。接下来,就带着对上面的问题,开启今天的学习。什么是IP协议?IP协议(InternetProtocol)是一个处于垄断地位的网络层协

    2024-04-18
    阅读(37)
  • Question一台内存在8G左右的服务器,可以同时维护多少个连接?分析:连接是内存中的状态对象,从理论上分析,连接本身不太占用内存。不同语言连接对象大小不等,但是通常很小。下面提供一段Java程序publicclassServer{publicstaticvoidmain(String[]argv)throwsIOException{varserverSocket=newServerSocket();varaddr=newInetSocketAddress(3001);serverSocket.bind(addr);varlist=newLinkedList<>();while(

    2024-04-18
    阅读(36)
  • Pre计网-传输层协议TCP:TCP为什么握手是3次、挥手是4次?中提到了TCP和UDP是今天应用最广泛的传输层协议,拥有最核心的垄断地位。TCP最核心的价值是提供了可靠性,而UDP最核心的价值是灵活,你几乎可以用它来做任何事情。例如:HTTP协议1.1和2.0都基于TCP,而到了HTTP3.0就开始用UDP了。UDP在数据传输、网络控制、音视频、Web技术中,都有很重要的地位.设计系统时候,UDP经常拿来和TCP比较.那我们来粗略的看下TCP协议和UDP协议的优势和劣势吧UDP协议UDP(UserDatagramProtocol),目标是在传输层提供直接发送报文(Datagram)的能力。D

    2024-04-18
    阅读(34)
  • PreInternet-TCP的封包格式:TCP为什么要粘包和拆包?中提到了TCP利用发送字节数和接收字节数,这个二元组的唯一性保证顺序。那接着来看下保证顺序的具体算法以及TCP是如何实现的吧。——TCP的滑动窗口算法。TCP作为一个传输层协议,最核心的能力是传输。传输需要保证可靠性,还需要控制流速,这两个核心能力均由滑动窗口提供。而滑动窗口中解决的问题,我们在今后的工作中可以长期使用的,比如设计一个分布式的RPC框架、实现一个消息队列或者分布式的文件系统等。请求/响应模型TCP中每个发送的请求都需要响应。如果一个请求没有收到响应,发送方就会认为这次发送出现了故障,会触发重发。大体的模型,和下

    2024-04-18
    阅读(37)
  • Pre今天我们将从稳定性角度深挖TCP协议的运作机制。如今,大半个互联网都建立在TCP协议之上,我们使用的HTTP协议、消息队列、存储、缓存,都需要用到TCP协议——这是因为TCP协议提供了可靠性。简单来说,可靠性就是让数据无损送达。但若是考虑到成本,就会变得非常复杂——因为还需要尽可能地提升吞吐量、降低延迟、减少丢包率。TCP协议具有很强的实用性,而可靠性又是TCP最核心的能力。具体来说,从一个终端有序地发出多个数据包,经过一个复杂的网络环境,到达目的地的时候会变得无序,而可靠性要求数据恢复到原始的顺序。这里先提出两个问题:TCP协议是如何恢复数据的顺序的?拆包和粘包的作用是什么?那么带着这

    2024-04-18
    阅读(33)
  • PreTCP和UDP是今天应用最广泛的传输层协议,拥有最核心的垄断地位。今天互联网的整个传输层,几乎都是基于这两个协议打造的。无论是应用开发、框架设计选型、做底层和优化,还是定位线上问题,只要碰到网络,就逃不开TCP协议相关的知识。TCP协议为什么握手是3次,挥手却是4次?下面请你带着这个问题,开启今天的学习。TCP协议TCP(TransportControlProtocol)是一个传输层协议,提供Host-To-Host数据的可靠传输,支持全双工,是一个连接导向的协议。这里面牵涉很多概念,比如主机到主机、连接、会话、双工/单工及可靠性等,接下来逐一解释。主机到主机(Host-To-Host)

    2024-04-18
    阅读(39)
  • Pre不知道你有没有遇到过,因为TCP队头阻塞,没有预备方案,导致分布式集群中部分服务发生延迟,导致系统雪崩DDoSDNS劫持跨机房通信问题…网络是一种工作技能,比如很多候选人在回答“TCP为什么要3次握手”这样简单的问题时,就像背经文一样,没有自己的理解;当面对“HTTPS协议的TTFB传输时间”这类需要将TCP的原理和HTTPS结合起来思考的问题,就更加束手无策。此外,工作当中也经常要用到计算机网络的知识,而且一旦用错就容易造成灾难性的后果,给公司直接带来经济损失。但实际情况是,很多程序员对网络相关的知识一知半解,不足以应对日常的工作需求。遇到网络故障(如DNS故障)时,由于没有系统性地学

    2024-04-18
    阅读(43)
  • 概述NacosSync是⼀个支持多种注册中心的同步组件,基于Springboot开发框架,数据层采用SpringDataJPA,遵循了标准的JPA访问规范,支持多种数据源存储,默认使用Hibernate实现,更加方便的支持表的自动创建更新。使用了高效的事件异步驱动模型,支持多种自定义事件,使得同步任务处理的延时控制在3s,8C16G的单机能够支持6K的同步任务。NacosSync除了单机部署,也提供了高可用的集群部署模式,NacosSync是无状态设计,将任务等状态数据迁移到了数据库,使得集群扩展非常方便。抽象出了Sync组件核心接口,通过注解对同步类型进行区分,使得开发者可以很容易的根据自己

    2024-04-15
    阅读(168)
  • 背景Kubernetes实现自动化基础设施部署和资源管理,降低运维成本,增强业务弹性。Kubernetes在应用部署和弹性方面有巨大优势,但对服务治理、网关、认证鉴权和可观测支持不足。许多产品和传统中间件改革来弥补Kubernetes的不足,迁移到云原生和Kubernetes。服务网格是下一代微服务治理,下沉基础设施层进行通用治理,支持异构系统。服务网格从理论到实践依赖Kubernetes容器编排,得到广泛关注和生产使用。Istio是最流行的服务网格,提供标准的声明式API,像Kubernetes抽象基础设施。Nacos深度集成Spring生态和Dubbo,现在集成Istio,让用户各场景使用

    2024-04-15
    阅读(58)
  • 注册中心的健康检查机制想象发生地质灾害,被掩埋在废墟下,搜救队需定位才能施救。两种方法:大喊求救,告知位置与健康状况,让搜救队知晓搜救队使用专业设备探测到被埋者位置这两种方法可类比为服务探测方式:客户端主动上报,告知服务端自己健康状态。若一段时间无上报,判定服务不健康。服务端主动探测客户端,检查其是否可探测。总之,实际案例比喻说明两种服务健康检查方式:客户端主动上报状态,无上报判定异常服务端主动探测客户端前者依赖客户端自我报告,较易失效或延迟发现问题。后者由服务端定期检查,可更快准确发现客户端异常。但也增加服务端负载。两种方式各有优劣,实际选择根据系统需求定制或混合使用。要点是确保服务健康状态

    2024-04-15
    阅读(61)
  • 服务(Service)和服务实例(Instance)在服务发现中,服务是应用程序提供的软件功能抽象(如登录或支付)。服务与应用不同,应用范围更广,服务属应用包含关系,应用可提供多服务。为细粒度区分和控制服务,Nacos选择服务作为注册中心最基本概念。服务实例是服务的具体提供节点。实例只属一个服务,服务可包含一个或多个实例。在许多场景下,实例也称为服务提供者,使用服务的实例为服务消费者。Nacos将服务作为注册中心的基本单元,实例为服务的具体提供节点。一个实例只属一个服务,服务可包含多个实例。实例也称为服务提供者,使用实例的为服务消费者。定义服务命名空间(Namespace):Nacos数据模型

    2024-04-15
    阅读(172)
  • Pre目前的网络架构是每个主机都有⼀个独立的IP地址,那么服务发现基本上都是通过某种方式获取到服务所部署的IP地址。DNS协议是最早将⼀个网络名称翻译为网络IP的协议,在最初的架构选型中,DNS+LVS+Nginx基本可以满足所有的RESTful服务的发现,此时服务的IP列表通常配置在nginx或者LVS。后来出现了RPC服务,服务的上下线更加频繁,人们开始寻求⼀种能够支持动态上下线并且推送IP列表变化的注册中心产品。个人开发者或者中小型公司往往会将开源产品作为选型首选。Zookeeper是⼀款经典的服务注册中心产品(虽然它最初的定位并不在于此),在很长⼀段时间里,它是国人在提起RPC服务注册

    2024-04-15
    阅读(70)
  • 前提Nacos支持单机部署以及集群部署针对单机模式,Nacos只是自己和自己通信;对于集群模式,则集群内的每个Nacos成员都需要相互通信。因此这就带来⼀个问题,该以何种方式去管理集群内的Nacos成员节点信息,而这,就是Nacos内部的寻址机制。设计无论是单机模式,还是集群模式,其根本区别只是Nacos成员节点的个数是单个还是多个要能够感知到节点的变更情况:节点是增加了还是减少了;当前最新的成员列表信息是什么;以何种方式去管理成员列表信息;如何快速的支持新的、更优秀的成员列表管理模式等等。MemberLookup针对上述需求点,抽象出了⼀个MemberLookup接口packagecom.a

    2024-04-15
    阅读(167)
  • Nacos长链接⼀、现状背景Nacos1.x版本Config/Naming模块各自的推送通道都是按照自己的设计模型来实现的。配置和服务器模块的数据推送通道不统⼀,http短连接性能压力巨大,未来Nacos需要构建能够同时支持配置以及服务的长链接通道,以标准的通信模型重构推送通道。二、场景分析1.配置配置对连接的场景诉求分析SDK和Server之间客户端SDK需要感知服务节点列表,并按照某种策略选择其中⼀个节点进行连接;底层连接断开时,需要进行切换Server进行重连。客户端基于当前可用的长链接进行配置的查询,发布,删除,监听,取消监听等配置领域的RPC语意接口通信。感知配置变更消息,需要将配置

    2024-04-15
    阅读(175)
  • 背景Distro协议是Nacos社区自研的⼀种AP分布式协议,是面向临时实例设计的⼀种分布式协议,其保证了在某些Nacos节点宕机后,整个临时实例处理系统依旧可以正常工作。作为⼀种有状态的中间件应用的内嵌协议,Distro保证了各个Nacos节点对于海量注册请求的统⼀协调和存储。设计思想Distro协议的主要设计思想如下:每个节点是平等的都可以处理写请求,同时把新数据同步到其他节点。每个节点只负责部分数据,定时发送自己负责数据的校验值到其他节点来保持数据⼀致性。每个节点独立处理读请求,及时从本地发出响应。Distro协议工作原理下面几节将分为几个场景进行Distro协议工作原理的介绍。数据初始

    2024-04-15
    阅读(269)
  • 背景在单体架构的时候我们可以将配置写在配置文件中,但有⼀个缺点就是每次修改配置都需要重启服务才能生效。当应用程序实例比较少的时候还可以维护。如果转向微服务架构有成百上千个实例,每修改⼀次配置要将全部实例重启,不仅增加了系统的不稳定性,也提高了维护的成本。那么如何能够做到服务不重启就可以修改配置?所有就产生了四个基础诉求:需要支持动态修改配置需要动态变更有多实时变更快了之后如何管控控制变更风险,如灰度、回滚等敏感配置如何做安全配置概念介绍配置(Configuration)在系统开发过程中通常会将⼀些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的

    2024-04-15
    阅读(71)
  • Nacos起源Nacos在阿里巴巴起源于2008年五彩石项目(完成微服务拆分和业务中台建设),成长于十年双十⼀的洪峰考验,沉淀了简单易用、稳定可靠、性能卓越的核心竞争力。2018定将Nacos(阿里内部Configserver/Diamond/Vipserver内核)开源。Nacos定位Nacos(/nɑ:kəʊs/)是DynamicNamingandConfigurationService的首字母简称;⼀个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。官网:https://nacos.io/仓库:https://github.com/alibaba/nacosNacos优势易⽤

    2024-04-15
    阅读(86)
  • Git1、IDEA中配置Git选择File→Settings打开设置窗口,找到VersionControl下的Git选项,然后配置Git路径。如果Git安装在默认路径下,IDEA可以自动找到。选择路径后点击右侧Test,出现版本号提示即可【由于IDEA版本问题,提示的方式可能不一致】。2、将本地项目推送到远程仓库2.1、创建项目远程仓库这个使用GitHub位例,创建仓库spring_boot_test。如下图所示:2.2、初始化本地仓库创建完远程仓库之后,还要通过IDEA开发工具来初始化一个本地仓库,相比于GitBash这样的命令行来说,IDEA非常方便可以进行可视化的Git管理。如下图所示,

    2024-04-10
    阅读(66)
  • Git&GitHub1、将内容Push到GitHub上1.1、在GitHub上创建新项目要上传文件到GitHub,需要先在上面创建一个新的项目。首先在GitHub网站的右上角单击+按钮,在弹出的下拉列表中选择Newrepository选项:![202404102035343651.png][]接着填写项目名称:Repositoryname可任意填写,只要不重复即可可填写仓库描述存取权限选中Public单选按钮,可免费使用,选中Private则需交费$7/月可选是否添加readme文件可选根据语言的.gitignore忽略文件可选开源协议![202404102035347772.png]

    2024-04-10
    阅读(64)
  • Git标签1、概述1.1、标签是什么在Git中,标签(Tag)是一个指向某个Commit的指示标。这看起来好像与分支(Branch)一样,但又有一些不太一样的地方”。1.2、什么时候使用标签通常开发软件时会完成特定的“里程碑”,如软件版号1.0.0或beta-release之类的,这时就很适合使用标签做标记。1.3、标签的分类标签有两种:一种是轻量标签(lightweighttag)一种是有附注的标签(annotatedtag)不管是哪一种标签,都可以把它当作贴纸,贴在某个Commit上。”2、轻量标签(lightweighttag)轻量标签的使用方法相当简单,只需直接指定要贴上去的那个Com

    2024-04-10
    阅读(163)
  • Git1、修改历史信息要修改历史信息,可使用--amend参数来修改最后一次Commit的信息,但这仅限于最后一次,如果要改动其他更早的信息,就得使用其他方法了。前面介绍过的gitrebase指令有一种强大的互动模式,接下来的几节内容都是介绍怎样使用这种模式来改动过去的历史记录。首先看一下当前的状况:gitlog--oneline1.1、启动互动模式下面使用Rebase指令整理一下:gitrebase-i4cb958a-i参数是指要进入Rebase指令的“互动模式”,而后面的4cb958a是指这次Rebase指令的应用范围为“从现在到4cb958a这个Commit”,也就是最开始的那个Comm

    2024-04-10
    阅读(71)
  • Git分支1、开始使用分支在Git中使用分支很简单,只要使用gitbranch命令即可:gitbranch如果gitbranch后面没有接任何参数,它仅会输出当前在这个项目中有哪些分支。Git默认会设置一个名为master的分支,前面的星号(*)表示现在正在这个分支上。1.1、新增分支要增加一个分支,可在执行gitbranch命令时,在后面加上想要的分支的名称:gitbranchcat这样就新增了一个cat分支。再查看一下:gitbranch可以看出,的确多了一个分支,但当前分支还是在master上。1.2、更改分支名称如果觉得分支名取得不够响亮,可以随时更改,而且不会影响文件或目录。假设现在

    2024-04-10
    阅读(71)
  • Git1、开始版本控制1.1、初始化Repository新建一个目录,并使用gitinit命令初始化Repository:mkdirmygitgitinitgitinit命令会在mygit目录中创建一个.git目录。1.2、使目录脱离Git控制Git的版控很单纯,全都是靠.git目录在做事。如果这个目录不想被版控,或者只想给客户不含版控记录的内容,只要把.git目录移除,Git就对这个目录失去控制权了。2、把文件交给Git管控2.1、创建文件后交给Git创建一个内容为"hell,git"的文件,并命名为welcome.html:echo"hello,git&quo

    2024-04-10
    阅读(70)
  • IDEA创建项目并托管到GitHub步骤步骤1:创建项目步骤2:首先在github创建一个仓库步骤3:制定仓库名称步骤4:创建成功,得到git地址步骤5:接着在本地创建一个项目步骤6:建立本地仓库步骤7:把项目加入到本地仓库步骤8:提交项目步骤9:PushCommit步骤10:查看github1.创建项目2.在GitHub上创建一个仓库首先登陆github.com然后点击右上角账号左边的加号,点击Newrepository创建仓库。Git上仓库就相当于项目的意思3.指定仓库名称一般与项目名称相同4.创建成功,得到git地址得到github地址:https://github.com/how2j/

    2024-04-10
    阅读(267)