SpringCloud
SpringCloud相关概念架构的变化:
微服务:一种软件开发技术- 面向服务的体系结构(SOA)架构样式的一种变体,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。
Spring Cloud全家桶是Pivotal团队提供的一整套微服务开源解决方案,包括服务注册与发现、配置中心、全链路监控、服务网关、负载均衡、熔断器等组件。
基本架构:
技术落地(目前很多已经停更,后面会有替代技术):
注册中心Eureka、服务配置Config、服务总线Bus被Nacos替代
Ribbon、Feign被OpenFeign替代
Hystrix被Alibaba的Sentinel替代
Zuul被gateway替代
服务治理在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。
注册中心需要对各个服务进行 ...
Netty
Netty概述现在的互联网环境下,分布式系统大行其道,而分布式系统的根基在于网络编程,而Netty恰恰是Java领域网络编程的王者。如果要致力于开发高性能的服务器程序、高性能的客户端程序,必须掌握Netty。
Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。
地位Netty 在 Java 网络应用框架中的地位就好比:Spring 框架在 JavaEE 开发中的地位
以下的框架都使用了 Netty,因为它们有网络通信需求!
Cassandra - nosql 数据库
Spark - 大数据分布式计算框架
Hadoop - 大数据分布式存储框架
RocketMQ - ali 开源的消息队列
ElasticSearch - 搜索引擎
gRPC - rpc 框架
Dubbo - rpc 框架
Spring 5.x - flux api 完全抛弃了 tomcat ,使用 netty 作为服务器端
Zookeeper - 分布式协调框架
优势
Netty vs NIO:
NIO工作量大,bug 多
不需要自己构建协议
解决 TCP 传输问题 ...
NIO
NIOnon-blocking io 非阻塞 IO
三大组件Channel & Bufferchannel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层。
常用的 Channel 类有:FileChannel、DatagramChannel、ServerSocketChannel 和 SocketChannel
FileChannel :用于文件的数据读写
DatagramChannel :用于 UDP 的数据读写
ServerSocketChannel 和 SocketChannel: 用于 TCP 的数据读写
常用的Buffer类有:
ByteBuffer:存储字节数据到缓冲区
ShortBuffer:存储字符串数据到缓冲区
CharBuffer:存储字符数据到缓冲区
IntBuffer:存储整数数据到缓冲区
LongBuffer:存储长整型数据到缓冲区 ...
ELK日志平台搭建
ELK日志平台搭建概述ELK即Elasticsearch、Logstash、Kibana,组合起来可以搭建线上日志系统
Elasticsearch:用于存储收集到的日志信息。
Logstash:用于收集日志,SpringBoot应用整合了Logstash以后会把日志发送给Logstash,Logstash再把日志转发给Elasticsearch。
Kibana:通过Web端的可视化界面来查看日志。
搭建基本镜像环境
首先拉取ELK的镜像:
123docker pull elasticsearch:7.14.0docker pull logstash:7.14.0docker pull kibana:7.14.0
处理elasticsearch启动问题的配置:
需要设置系统内核参数,否则会因为内存不足无法启动
12sysctl -w vm.max_map_count=262144sysctl -p
给data文件权限:chmod 777 /opt/docker_app/elasticsearch/data
编写docker-compose.yml脚本:
123456789 ...
ElasticSearch
ElasticSearch简介Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎,建立在一个全文搜索引擎库 Apache Lucene™基础之上,是整个 ElasticStack 技术栈的核心。ES是采用java语言编写,提供了简单易用的RestFul API,开发者可以使用其简单的RestFul API,开发相关的搜索功能,从而避免lucene的复杂性。
优点:
一个分布式的实时文档存储,每个字段可以被索引与搜索
一个分布式实时分析搜索引擎
能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
ElasticStack :包括 Elasticsearch、 Kibana、 Beats 和 Logstash(也称为 ELK Stack)
安装Docker方式安装
获取镜像:docker pull elasticsearch:7.14.0
创建数据目录:
1234mkdir -p /opt/docker_app/elasticsearch/configmkdir -p /opt/docker_app/elasticsearch/logs ...
CICD
CI/CD相关概念什么是CICI:Continuous integration持续集成
开发人员通常使用称为CI Server的工具来进行构建和集成。CI要求自检代码。这是用于自我测试以确保其按预期工作的代码,这些测试通常称为单元测试。集成代码后,当所有单元测试通过时,将得一个最新的的代码版本。这表明他们已经验证了自己的更改已成功集成到一起,并且代码按测试期望的那样工作。
什么是CDCD:Continuous deployment持续部署
在这种实践中,团队负责人所做的每一项更改都通过了所有测试阶段,并自动投入生产。要实现连续部署,团队负责人首先需要进行连续交付,因此在开始练习连续部署之前,先决定哪个对您更合适,持续交付都是为了增强整个业务的能力,因此至少您应该参与确定是否应该使用持续部署。
CD还有个小号,叫持续交付,英文全称是Continuous delivery,缩写也是CD
为什么需要CI/CD持续集成(CI)是一种开发实践,其中开发人员经常(最好每天几次)将代码集成到共享存储库中。然后可以通过自动构建和自动测试来验证每个集成。尽管自动化测试不是严格意义上的CI的一部分,但 ...
RabbitMQ集群
RabbitMQ集群前言一般一台RabbitMQ 服务器,无法满足目前真实应用的要求;特别是在RabbitMQ 服务器遇到内存崩溃、机器掉电或者主板故障等情况,如果不使用集群消息队列功能就会完全失效,并且不能支持很高的吞吐量,所以搭建集群是很有必要的。
集群搭建大致结构:
步骤
准备三台服务器(可以克隆,可以利用docker创建三个容器)
配置各个服务器的host文件:vim /etc/hosts
要确保各个节点的 cookie 文件使用的是同一个值,在node1上进行远程复制:
scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/.erlang.cookie
重新启动 RabbitMQ 服务,顺带启动 Erlang 虚拟机和 RbbitMQ 应用服务(在三台节点上分别执行以下命令):rabbitmq-server -detached
...
消息队列
消息队列MQMQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。
功能
流量消峰:当系统到达请求极限时,为了让用户还能继续请求突破这个极限,就可以使用消息队列做缓冲,把一秒内请求分散成一段时间来处理。
应用解耦:可以使用消息队列将系统的某个模块从整个系统中解耦出来,这样就算该模块出现故障不会影响到整个系统。
异步处理:有些服务间调用是异步的,例如 A 调用 B,B 需要花费很长时间执行,但是 A 需要知道 B 什么时候可以执行完,使用消息总线,可以很方便解决这个问题, A 调用 B 服务后,只需要监听 B 处理完成的消息,当 B 处理完成后,会发送一条消息给 MQ,MQ 会将此消息转发给 A 服务。
具体实现RabbitMQ2007 年发布,是一个在**AMQP(高级消息队列协议)**基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。
优点:Rabbit ...
MongoDB
MongoDB简介MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最像关系型数据库(MySQL)的非关系型数据库。它支持的数据结构非常松散,是一种类似于 JSON 的 格式叫BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活。
MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB文档类似于JSON对象,即一个文档认为就是一个对象。字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档、普通数组和文档数组。
常见运用场景MongoDB常用于对数据操作具有“三高”需求的场景,可以理解为高性能版mysql主要解决海量数据的访问效率问题,不像redis用于处理数据量较小的高性能操作上。
场景的主要特点:
数据量大
写入操作频繁(读写都很频繁)
价值较低的数据,对事务性要求不高
解释:“三高”需求:• High performance - 对数据库高并发读写的需求。• Huge Storage - 对海量数据的高效率存储 ...
Docker高级
Docker高级DockerFileDockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
构建三部曲:
编写Dockerfile文件
docker build命令构建镜像
docker run依镜像运行容器实例
常用保留字指令
FROM:基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
MAINTAINER:镜像维护者的姓名和邮箱地址
RUN:容器构建时需要运行的命令
shell格式:
exec格式:
EXPOSE:当前容器对外暴露出的端口
WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
USER:指定该镜像以什么样的用户去执行,如果都不指定,默认是root
ENV:用来在构建镜像过程中设置环境变量
ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY:类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 < 源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置 ...