读书笔记-队列和Nginx

在系统中,不是所有的处理都必须实时处理,不是所有请求都必须实时反馈给用户。对于这样的业务,保证最终一致性,不需要强一致性。此时,更应该考虑使用队列来解决问题。
当然,也需要考虑是否需要保证消息处理的有序性及如何保证,是否保证能重复消费及如何保证重复消费的幂等性。

应用场景

  1. 异步处理,比如用户注册成功后的优惠券,积分,异步更新缓存,异步写日志
  2. 系统解藕:拆分系统后的进一步处理
  3. 数据同步:比如将MySQL变更的数据同步到Redis
  4. 流量削峰

主要队列类型:

  1. 缓冲队列
    典型入Log4j日志缓冲区,当使用log4j记录日志时,可以配置字节缓冲区,字节缓冲区满时,会立即同步到磁盘。此模式不是异步,如果需要异步,可以使用AsyncAppender,然后通过bufferSize控制日志事件缓冲区大小。
  2. 任务队列
  3. 消息队列
  4. 请求队列
  5. 数据总线队列
  6. 混合队列

基于Canal实现数据异构

在大型网站架构中,DB都会采用分库分表来解决容量和性能问题,但是会带来新问题,比如不同维度的查询或者聚合查询。一般使用数据异构解决。
比如,为了提升系统的接单能力,会对订单表进行分库分表,但是随之而来问题是,用户怎么查询到自己订单列表呢?

  1. 扫描所有表,然后进行聚合,但是这种方式在大流量架构中肯定不行
  2. 双鞋,但是双写由没法保证数据一致性。
  3. 订阅数据库变更日志,比如订阅MySQL的binlog日志模拟数据库的主从同步机制,然后解析日志讲数据写道订单列表(按用户分库分表),从而实现数据异构。
MySQL主从复制
  1. 首先MySQL客户端将数据写入到master数据库
  2. master数据库会将变更的记录写入二进制日志中,即binlog
  3. slave数据库会订阅master数据库的binlog日志,通过一个IO线程binlog的指定位置拉去进行主从同步。此时master数据库会有个Binlog Dump线程来读取binlog日志与slave IO线程进行同步
  4. slave IO线程读取到日志后会先写入relay log重放日志
  5. slave数据库会通过一个SQL线程读取relay log进行日志重放,这样就实现了主从数据库同步。
Canal

Canal是阿里开源的一款基于MySQL数据库binlog的增量订阅和消费组件,通过它可以订阅数据库的binlog日志(可以看作一个slave数据库),然后进行一些消费,如数据镜像、数据异构、数据索引、缓存更新等。相对于消息队列,通过这种机制可以实现数据的有序性和一致性。

Nginx

Nginx设计为一个主进程多个工作进程的工作模式,每个进程是单线程来处理多个连接,而且每个工作进程采用了非阻塞IO来处理多个连接,从而减少线程上下文切换,实现了公认的高性能、高并发。
Nginx更改配置后重启速度非常快,可以达到毫秒级,而且支持不停止Nginx进行升级Nginx版本,动态加载Nginx配置。
Nginx模块非常多,功能很强劲,不仅可以作为HTTP负载均衡,还支持TCP负载均衡,还可以实现内容缓存、Web服务器、反向代理、访问控制等功能。

Lua

Lua是一种轻量级,可嵌入的脚本语言

ngx_lua

是Nginx的一个模块,讲Lua嵌入到Nginx中,可以使用Lua来编写脚本,部署到Nginx中运行,即Nginx变成了一个Web容器,这样开发人员就可以使用Lua语言开发高性能Web应用了。

对于开发Web应用来说,如果接触过Servlet的话,就会发现其开发和Servlet类似,无外乎就是接受请求,参数解析,功能处理,返回相应。

使用OpenResty来搭建开发环境,OpenResty讲Nginx核心,LuaJIT,许多有用的Lua库和Nginx第三方模块打包在一起,这样开发人员只需要安装OpenResty,不需要了解Nginx核心和负载的C++就可以使用Lua进行Web应用开发。

基于OpenRESTY的常用架构模式

  1. 负载均衡,首先通过LVS+HAProxy将流量转发给核心Nginx 1和核心Nginx2,即实现流量负载均衡。此处可以使用如轮询、一致性哈希等调度算法实现负载的转发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值