一、关键词1:
(1)RPC:远程过程调用(Remote Procedure Call)的缩写形式。远程调用的时候让人们觉得是本地调用。
(2)HTTP:超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。
(3)TCP/IP:传输控制协议/网际协议(Transmission Control Protocol/Internet Protocol)是指能够在多个不同网络间实现信息传输的协议簇。
(4)UDP:用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。比如秋秋接发消息
(4)MQ:消息队列 Message Queue,简称 MQ
(5)IO:I/O输入/输出(Input/Output),IO指的就是读入/写出数据的过程,和等待读入/写出数据的过程。一旦拿到数据后就变成了数据操作了,就不是IO了。
(6)Netty:是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
(7)Websokcet:是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
(8)BIO,NIO和AIO
(8.1)Java网络编程的三种模型:
BIO:同步并阻塞,服务实现模式为一个连接对应一个线程,即客户端发送一个连接,服务端要有一个线程来处理。如果连接多了,线程数量不够,就只能等待,即会发生阻塞。
NIO:同步非阻塞,服务实现模式是一个线程可以处理多个连接,即客户端发送的连接都会注册到多路复用器上,然后进行轮询连接,有I/O请求就处理
AIO:异步非阻塞,引入了异步通道,采用的是proactor模式,特点是:有效的请求才启动线程,先有操作系统完成在通知服务端
(8.2)应用场景:
BIO:适用连接数目比较小且固定的架构,对服务器要求比较高,并发局限于应用中
NIO:适用连接数目多且连接比较短的架构,如:聊天服务器,弹幕系统等,编程比较复杂
AIO:适用连接数目多且连接长的架构,如相册服务器
(8.3)BIO和NIO的区别:
1.BIO主要是以I/O流的形式处理数据;NIO以I/O块(buffer)的形式处理数据,效率:块>流
2.BIO是阻塞的,NIO是非阻塞的
3.BIO主要是以字节流和字符流操作,NIO是基于channel(通道)、buffer(缓冲区)操作的;selector(选择器)是用来监听channel的
4.BIO是单向的,要么是输入流要么是输出流,NIO是双向的,可以从channel往buffer读写数据,同时buffer也可以向channel读写数据
二、关键词2:
(1)Eureka:Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。【个人读音:尤里卡,SpringCloud官方自带,个人看法:它跟Naocs干类似的事】
(2)Zookeeper:Zookeeper 就是经典的分布式数据一致性解决方案,致力于为分布式 应用提供高性能、高可用,并且具有严格顺序访问控制能力的分布式协调服务。 它底层通过基于 Paxos 算法演化而来的 ZAB 协议实现。常用于3个地方:集群管理、分布式锁、Master 选举。【个人读音:露Keep】
(3)Nacos:音标 /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
(4)Feign:Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign整合了Ribbon和Hystrix,可以让我们不再需要显式地使用这两个组件。【个人读音:废可,个人看法:跟Dubbo有干类似的事】
(5)Dubbo:(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
(6)Hystrix:隔离、熔断以及降级的一个框架,说白了就是Hystrix会搞很多小线程池然后让这些小线程池去请求服务,返回结果,Hystrix相当于是个中间过滤区,如果我们的积分服务挂了,那我们请求积分服务直接就返回了,不需要等待超时时间结束抛出异常,这就是所谓的熔断。
(7)Ribbon:是一套客户端负载均衡工具,供一系列的完善的配置,如超时,重试等。通过Load Balancer获取到服务提供的所有机器实例, Ribbon会自动基于某种规则(轮询,随机)去调用这些服务。Ribbon也可以实现我们自己的负载均衡算法。【个人看法:类似Nginx做的事,nginx外网,ribbon是内外】
(8)Sentinel:Sentinel是一个以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性的框架。
(9)Gateway:Spring Cloud Gateway提供了一个建立在Spring生态系统之上的API网关,能够简单而有效的方式来路由到API,并基于 Filter 的方式提供一些功能,如:安全、监控。Spring Cloud Gateway是由Spring Boot 2.x、Spring WebFlux和Reactor实现的,需要Spring Boot和Spring Webflux提供的Netty运行环境。它不能在传统的Servlet容器中工作,也不能在以WAR形式构建时工作。【个人看法:它目标是替代 Zuul】
(10)Zuul:路由是微服务架构的一个组成部分。例如,/可映射到您的 Web 应用程序、/api/users映射到用户服务和/api/shop映射到商店服务。 Zuul是来自 Netflix 基于 JVM 的路由器和服务器端负载均衡器。
(11)Netflix:是一家做视频的网站,由于做视频的原因,访问量非常的大,从而促使其技术快速的发展在背后支撑着,也正是如此,Netflix开始把整体的系统往微服务上迁移。
三、关键词3:
(1)JDK:JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
(2)JRE:Java运行环境(Java Runtime Environment,简称JRE)是一个软件,由太阳微系统所研发,JRE可以让计算机系统运行Java应用程序(Java Application)。JRE的内部有一个Java虚拟机(JVM)以及一些标准的类别函数库(Class Library)。
(3)JVM:Java虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最具吸引力的特性之一。
(4)OOM:内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。
(5)a-arthas:阿里云开源工具a-arthas(读音:阿尔萨斯)(官网:https://alibaba.github.io/arthas/)
四、关键词4:
(1)AOP :(Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。
(2) IOC:(Inversion of Control) ,即控制反转,不是具体的技术,而是一种思想,IOC意味着将你设计好的对象交给Spring容器来管理,而不是传统的在你的对象内部直接控制。对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。举个例子:我们是如何找女朋友的呢,一般都是自己看到一个漂亮的mm,然后打听微信、电话。追求的过程中是复杂的。那么IOC是怎么做的呢,IOC就像一个婚姻介绍所,男人需要多高,身材怎么样的对象,直接把需求告诉婚姻介绍所(IOC),你只需要和她恋爱,结婚就行了,Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
(3)DI:(Dependency Injection,依赖注入)那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。