中间件汇总——了解
服务器集群——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服务器的原理
- 创建一个ServerSocket,监听并绑定一个端口
- 一系列客户端来请求这个端口
- 服务器使用Accept,获得一个来自客户端的Socket连接对象
- 启动一个新线程处理连接
- 读Socket,得到字节流
- 解码协议,得到Http请求对象
- 处理Http请求,得到一个结果,封装成一个HttpResponse对象
- 编码协议,将结果序列化字节流
- 写Socket,将字节流发给客户端
- 继续循环步骤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。那这个阻塞是什么意思呢?
- Accept是阻塞的,只有新连接来了,Accept才会返回,主线程才能继
- Read是阻塞的,只有请求消息来了,Read才能返回,子线程才能继续处理
- Write是阻塞的,只有客户端把消息收了,Write才能返回,子线程才能继续读取下一个请求
Jetty:基于Java的网页服务器和Java Servlet容器【HTTP服务器组件】
使用范畴:
Maven\Eclipse\spark\ ActiveMQ是Apache软件基金会所研发的开放源码消息中间件;由于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服务器、反向代理服务器【异步框架的网页服务器】
-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