这是我参与「第五届青训营 」笔记创作活动的的第10天
本节导航
- Redis
- RocketMQ
- OpenResty
- Jmeter
Redis
Nosql概念
NoSQL,泛指非关系型的数据库,它可以作为关系型数据库的良好补充。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
-
NoSQL数据库的四大分类
-
键值(Key-Value)存储数据库(Redis)
- 典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
- 数据模型: 一系列键值对
- 优势: 快速查询
- 劣势: 存储的数据缺少结构化
-
列存储数据库
-
列存储数据库
-
图形(Graph)数据库
-
Redis概念
redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求
-
Redis支持的键值数据类
- 字符串类型(string)
- 散列类型(hash)
- 列表类型(list)
- 集合类型(set)
- 有序集合类型(sortset)
redis的应用场景
- 缓存(数据查询、短连接、新闻内容、商品内容等等)
- 分布式集群架构中的session分离
- 任务队列(秒杀、抢购、12306等等)
RocketMQ
概念介绍
RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。
特点
- 支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型
- 在一个队列中可靠的先进先出(FIFO)和严格的顺序传递 (RocketMQ可以保证严格的消息顺序,而ActiveMQ无法保证)
- 支持拉(pull)和推(push)两种消息模式
- 单一队列百万消息的堆积能力 (RocketMQ提供亿级消息的堆积能力,这不是重点,重点是堆积了亿级的消息后,依然保持写入低延迟)
- 支持多种消息协议,如 JMS、MQTT 等
- 分布式高可用的部署架构,满足至少一次消息传递语义(RocketMQ原生就是支持分布式的,而ActiveMQ原生存在单点性)
- 提供 docker 镜像用于隔离测试和云集群部署
- 提供配置、指标和监控等功能丰富的 Dashboard
核心组成
- NameServer:相当于注册中心的角色,各个角色的机器都要定时向NameServer上报自己的状态,如果超时未上报,NameServer会认为某个机器出现故障不可用了,从而将这个机器从可用列表中删除。
- Broker:负责消息的存储和转发
- Producer:生产者通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递,投递的过程支持快速失败且低延迟,RocketMQ中的消息生产者都是以组的形式出现的。生产者组是同一类生产者的集合,这类生产者发送相同的Topic类型。
- Consumer:RocketMQ中的消息消费者都是以消费者组的形式出现的,消费者组是同一类消费者的集合,消费的是同一个Topic类型。消费者组使得消息消费实现了负载均衡和容错。
OpenResty
概念
OpenResty是一个成熟的网络平台,它集成了标准的Nginx核心,LuaJIT,许多精心编写的Lua库,许多高质量的第三方Nginx模块以及大多数外部依赖项。它旨在帮助开发人员轻松构建可伸缩的Web应用程序,Web服务和动态Web网关。
OpenResty运行原理
Nginx采用的是master-worker模型,也就是一个master进程管理多个worker进程,基本的时间处理都放在worker进程中,master进程负责全局初始化以及对worker进行的管理。
OpenResty中,每个worker进程使用一个LuaVM,当请求被分配到worker时,将在这个LuaVM中创建一个coroutine协程,协程之间数据隔离,每个协程都具有独立的全局变量。
Jmeter
jmeter:是Apche公司使用Java平台开发的一款测试工具。
功能
- 接口测试
- 性能测试
- 压力测试(优势)
- 数据库测试
- Java程序测试 (因为本身就是Java语言编写的)
优点
- 开源免费
- 支持多协议 (http,tcp...)
- 轻量级
- 功能强大
缺点
无法验证JS程序,也无法验证页面UI,所以必须要和 selenium 配合来完成web2.0应用的测试