本文主要是介绍[ShardingSphere] sharding-proxy——MySQL伪装者(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文章基于最新版5.0.0-SNAPSHOT。
伪装这个词比较有意思。记得看过这么一个电影,电影名称不记得了,但是电影场景大概是讲的男主角为了盗宝,需要潜入一个全副武装的大楼。这个大楼有着非常先进的门禁系统,通过ID卡和人脸识别才能进入。男主角偷取到一个工作人员的ID卡,找到黑客帮他造了一张ID卡,完美的骗过门禁系统进入到大楼偷到秘宝。这里就需要伪装
,满足系统的某些协议才能通过验证系统。
sharding-proxy也做了类似的事情。和电影不同的是,做一个mysql的“黑客”需要先清楚它工作的原理,好在mysql官网中提供了很多相关资料,在sharding-proxy源码中对于MySQL相关的代码都有注释说明这么实现的原因,例如MySQL请求包类型:
接下来这篇文章站在代码的角度分析sharding-proxy是如何进行伪装的。
一、Netty
因为把更多的时间花在的研读sharding-proxy的内核方面,因此关于这块,我并没有进行详细的研究,只知道netty是一个高性能的客户端/服务器框架,它可以实现各种协议的服务端,而sharding-proxy就是以netty为基础实现网络交互。
网上搜了一些关于netty的简单的使用,对照sharding-proxy,大致对sharding-proxy的流程有了一个大概的思路。
开启服务
Sharding-Proxy 启动流程最核心的是通过 ServerHandlerInitializer 加载了 PacketCodec(编解码) 和 FrontendChannelInboundHandler(业务处理器) 两个处理器。这两个处理的具体工作都委托给了 DatabaseProtocolFrontendEngine 完成,有 MySQL 和 PostgreSQL 两个实现。
未完待续…
这篇关于[ShardingSphere] sharding-proxy——MySQL伪装者(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!