[ShardingSphere] sharding-proxy——MySQL伪装者(一)

本文章基于最新版5.0.0-SNAPSHOT。

伪装这个词比较有意思。记得看过这么一个电影,电影名称不记得了,但是电影场景大概是讲的男主角为了盗宝,需要潜入一个全副武装的大楼。这个大楼有着非常先进的门禁系统,通过ID卡和人脸识别才能进入。男主角偷取到一个工作人员的ID卡,找到黑客帮他造了一张ID卡,完美的骗过门禁系统进入到大楼偷到秘宝。这里就需要伪装,满足系统的某些协议才能通过验证系统。

sharding-proxy也做了类似的事情。和电影不同的是,做一个mysql的“黑客”需要先清楚它工作的原理,好在mysql官网中提供了很多相关资料,在sharding-proxy源码中对于MySQL相关的代码都有注释说明这么实现的原因,例如MySQL请求包类型:
[ShardingSphere] sharding-proxy——MySQL伪装者(一)
接下来这篇文章站在代码的角度分析sharding-proxy是如何进行伪装的。

一、Netty

因为把更多的时间花在的研读sharding-proxy的内核方面,因此关于这块,我并没有进行详细的研究,只知道netty是一个高性能的客户端/服务器框架,它可以实现各种协议的服务端,而sharding-proxy就是以netty为基础实现网络交互。

网上搜了一些关于netty的简单的使用,对照sharding-proxy,大致对sharding-proxy的流程有了一个大概的思路。

开启服务

[ShardingSphere] sharding-proxy——MySQL伪装者(一)
Sharding-Proxy 启动流程最核心的是通过 ServerHandlerInitializer 加载了 PacketCodec(编解码) 和 FrontendChannelInboundHandler(业务处理器) 两个处理器。这两个处理的具体工作都委托给了 DatabaseProtocolFrontendEngine 完成,有 MySQL 和 PostgreSQL 两个实现。

未完待续…