MyBatis解析(一)
一、引言1.JDBC在没有ORM框架的时候,对数据库的操作都是直接通过jdbc来完成的,假如有一张t_user表,那操作流程如下
12345678910111213141516171819202122232425// 注册 JDBC 驱动Class.forName("com.mysql.cj.jdbc.Driver");// 打开连接conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatisdb?characterEncoding=utf-8&serverTimezone=UTC","root","123456");// 执行查询stmt = conn.createStatement();String sql = "SELECT id,user_name,real_name,password,age,d_id from t_user where id = 1";ResultSet rs = stm ...
MQ比较
一、引言前面已经分析过不同MQ的实现原理,本文则对他们进行一个横向的对比,以便加深记忆,更加深刻的掌握不同消息队列的特性
1.起源RabbitMQ
RabbitMQ起源于AMQP(Advanced Message Queuing Protocol,高级消息队列协议)标准
AMQP最初是由金融行业的一些公司共同制定的,旨在解决在金融系统中异步通信的需求
RabbitMQ是基于AMQP标准实现的消息队列中间件,最初由LShift开发,并在2007年成为开源项目
RabbitMQ使用Erlang语言开发,其设计目标是实现高可用、高可靠、高性能的分布式消息队列系统
RocketMQ
淘宝原来有一 个自研的 MQ 叫 Notify,Kafka 开源以后,就参考 Kafka 用 Java 语言写了 MetaQ, 所以在涉及思想上有很多跟 Kafka 相似的地方。后来改名字叫 RocketMQ,2012 年开源
Kafka
Kafka 是由 LinkedIn 公司开发的一种分布式、可扩展、高吞吐量的消息系统
它的设计灵感来自于 LinkedIn 在处理大规模实时数据处理和数据流的挑战中的经验和教训
...
Netty(一)netty基础
一、网络IO1.同步阻塞IO(BIO)
如图所示,客户端向服务端发起一个数据读取请求,客户端在收到服务端返回数据之前,一直处于阻塞状态,直到服务端返回数据后完成本次会话,这个过程就叫同步阻塞IO
在BIO模型中如果想实现异步操作,就只能使用多线程模型,也就是一个请求对应一个线程,这样就能够避免服务端的链接被一 个客户端占用导致连接数无法提高
同步阻塞IO主要体现在两个阻塞点
服务端接收客户端连接时的阻塞
客户端和服务端的IO通信时,数据未就绪的情况下的阻塞
2.非阻塞IO(NIO)非阻塞IO,就是客户端向服务端发起请求时,如果服务端的数据未就绪的情况下, 客户端请求不会被阻塞,而是直接返回
但是有可能服务端的数据还未准备好的时候,客户端收到的返回是一个空的, 那客户端怎么拿到最终的数据呢?
如图所示,客户端只能通过轮询的方式来获得请求结果
NIO相比BIO来说,少了阻塞的过程在性能和连接数上都会有明显提高,但是轮询过程中会有很多空轮询,而这个轮询会存在大量的系统调用(发起内核指令从网卡缓冲区中加载数据,用户空间到内核空间的切换),随着连接数量的增加,会导致性能问题(注意这个问 ...
消息中间件之Kafka
一、引言1.起源Kafka是如何诞生的呢?
Kafka 是由 LinkedIn 公司开发的一种分布式、可扩展、高吞吐量的消息系统。它的设计灵感来自于 LinkedIn 在处理大规模实时数据处理和数据流的挑战中的经验和教训
在过去,LinkedIn 使用了一些传统的消息系统来处理数据流和实时数据处理,但是这些系统的性能和可扩展性无法满足 LinkedIn 处理大规模实时数据流的需求。为了解决这个问题,LinkedIn 在 2008 年开始设计和开发 Kafka
Kafka 的设计目标是支持高吞吐量、低延迟的数据流处理,同时能够处理海量的数据。Kafka 借鉴了消息队列的概念,但与传统的消息系统不同的是,Kafka 的设计重点放在了可扩展性和高吞吐量上。它使用了一些优秀的设计和算法来实现高效的消息传输和存储,比如消息分区和批量传输等
在 Kafka 的发展历程中,LinkedIn 逐步将它开源,并加入了更多的特性和功能,使得 Kafka 成为了一种非常受欢迎的分布式消息系统。现在 Kafka 已经成为了 Apache 基金会的顶级项目,被广泛应用于实时数据处理、流处理、日志处理等场景
2. ...
消息中间件之RocketMQ
一、架构最开始叫 MetaQ(Meta-morphosis [ˌmetəˈmɔːfəsɪs]变形)
淘宝原来有一 个自研的 MQ 叫 Notify,Kafka 开源以后,就参考 Kafka 用 Java 语言写了 MetaQ, 所以在涉及思想上有很多跟 Kafka 相似的地方。后来改名字叫 RocketMQ,2012 年开源
1.整体架构
首先分析一下RocketMQ的整体架构图,它的构成也和其他MQ类似,生产者,Broker和消费者
与Kafka不同的是,RocketMQ不需要ZK的配合使用,它自身便有NameServer来负责类似ZK的功能
2.BrokerRocketMQ 的服务,或者说一个进程,叫做 Broker,Broker 的作用是存储和转发消息RocketMQ 单机大约能承受 10 万 QPS 的请求
为了提升 Broker 的可用性(防止单点故障),以及提升服务器的性能(实现负载), 通常会做集群的部署跟 Kafka 或者 Redis Cluster 一样,RocketMQ 集群的每个 Broker 节点保存总数据的一部分,因此可以实现横向扩展
而为了提升数据的可 ...






