中间件汇总——了解

服务器集群——HTTP服务器,FTP服务器,UDP服务器,RPC服务器,WebSocket服务器,Redis的Proxy服务器,MySQL的Proxy服务器

传统基于 Tomcat 等 Web 容器的垂直架构已经无法满足需求,需要拆分应用进行服务化,以提高开发和维护效率。从组网情况看,垂直的架构拆分之后,系统采用分布式部署,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。

--Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件

--消息中间件 RocketMQ 的消息生产者和消息消费者之间,也采用 Netty 进行高性能、异步通信

--手游服务端、还是大型的网络游戏:TCP/UDP 和 HTTP 协议栈,非常方便定制和开发私有协议栈。账号登陆服务器、地图服务器之间可以方便的通过 Netty 进行高性能的通信

--Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架

--企业和 IT 集成需要 ESB,Netty 对多协议支持、私有协议定制的简洁性和高性能是 ESB RPC 框架的首选通信组件

--通信行业:Netty 的异步高性能、高可靠性和高成熟度

传统HTTP服务器原理

统的HTTP服务器的原理

  1. 创建一个ServerSocket,监听并绑定一个端口
  2. 一系列客户端来请求这个端口
  3. 服务器使用Accept,获得一个来自客户端的Socket连接对象
  4. 启动一个新线程处理连接
    1. 读Socket,得到字节流
    2. 解码协议,得到Http请求对象
    3. 处理Http请求,得到一个结果,封装成一个HttpResponse对象
    4. 编码协议,将结果序列化字节流
    5. 写Socket,将字节流发给客户端
  5. 继续循环步骤3

HTTP服务器之所以称为HTTP服务器,是因为编码解码协议是HTTP协议,如果协议是Redis协议,那它就成了Redis服务器,如果协议是WebSocket,那它就成了WebSocket服务器!

Netty

1)本质:JBoss做的一个Jar包

2)目的:快速开发高性能、高可靠性的网络服务器和客户端程序

3)优点:提供异步的、事件驱动的网络应用程序框架和工具

========NIO&&BIO

NIO的全称是NoneBlocking IO,非阻塞IO,区别与BIO,BIO的全称是Blocking IO,阻塞IO。那这个阻塞是什么意思呢?

  1. Accept是阻塞的,只有新连接来了,Accept才会返回,主线程才能继
  2. Read是阻塞的,只有请求消息来了,Read才能返回,子线程才能继续处理
  3. Write是阻塞的,只有客户端把消息收了,Write才能返回,子线程才能继续读取下一个请求

Jetty:基于Java网页服务器Java Servlet容器【HTTP服务器组件】

使用范畴:

      Maven\Eclipse\spark\ ActiveMQApache软件基金会所研发的开放源码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。

      Hadoop:

  • NameNode和JobTracker使用Jetty呈现管理页面。
  • TaskTracker使用Jetty接收来自JobTracker的映射(Map),减少并洗牌(Shuffle)操作。

Redis:开源(BSD许可),内存存储的数据结构服务器【高速缓存

持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区

同类产品用途比较:

Redis是可以做为数据库来使用的,它可以看做一个key/value型数据库,因为Redis会根据配置定时将内存中的数据写入到硬盘中,这样即便重启以后依然可以恢复,但是有几个缺点需要考虑一下:

  • Redis只能存储key/value类型,虽然value的类型可以有多种,但是对于关联性的记录查询,没有Oracle/Mysql方便。
  • Redis内存数据写入硬盘有一定的时间间隔,在这个间隔内数据可能会丢失,虽然后续会介绍各种模式来保证数据丢失的可能性,但是依然会有可能,所以对数据有严格要求的不建议使用Redis做为数据库。

Ehcache

  • 是一个Java开源项目,使用的方式就是引入一个jar包,非常方便

Memcached

  • 如果开启多线程模式,读取速度将有极大的提高
  • 数据只会存储在内存中,挂掉后数据不可恢复

Redis

  • 数据结构非常丰富,字符串、hash列表、list、Set等等
  • 支持主从,Sentinal,分片等多种高级特性,用于负载均衡和容灾,具有高可用性
  • 几乎支持所有语言的客户端

Redis

  • 只能说具备发布订阅功能,一个或多个消费者订阅一个频道

Kafka

  • 高级特性一应俱全,集群、负载均衡、动态扩容、数据备份等

Nginx:轻量级的Web服务器、反向代理服务器【异步框架的网页服务器

-反向代理负载平衡器HTTP缓存

-Nginx在官方测试的结果中,能够支持五万个并行连接,而在实际的运作中,可以支持二万至四万个并行连接  //

  • 核心模块:nginx 最基本最核心的服务,如进程管理、权限控制、日志记录;
  • 标准 HTTP 模块:nginx 服务器的标准 HTTP 功能;
  • 可选 HTTP 模块:处理特殊的 HTTP 请求
  • 邮件服务模块:邮件服务
  • 第三方模块:作为扩展,完成特殊功能

JBOSS:缩短软件开发周期



Hibernate:持久化引擎



redis集群:多个Redis间节点间共享数据的程序集

Redis 集群没有使用一致性hash, 而是引入了 哈希槽的概念.

Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个节点负责一部分hash槽,



Docker:【环境配置】开放源代码软件,是一个开放平台,用于开发应用、交付应用、运行应用。 Docker允许用户将基础设施中的应用单独分割出来,形成更小的颗粒,从而提高交付软件的速度

-Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离

- Linux 容器的一种封装,提供简单易用的容器使用接口

主要用途,目前有三大类。

(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

软件把任务外包出去,让各种外部服务完成这些任务,软件本身只是底层服务的调度中心和组装层。

wordPress:open source software you can use to create a beautiful website, blog, or app.



ElasticSearch

posted @ 2020-08-30 11:39  小海_macro  阅读(564)  评论(0编辑  收藏  举报