25_Design_Goals
备注:文章编写时间201904-201905期间,后续官方在github的更新没有被写入
~
~
设计目标[Design Goals]
ProxySQL的构建考虑了一些关键的设计选择。
一、最大正常运行时间[Maximum uptime]
由于ProxySQL是一个代理服务器,因此预计会尽可能接近100%的正常运行时间。
1、更改配置[configuration changes]
这通常通过更改配置文件并重新启动守护程序来完成。在ProxySQL中,通过设计,用户可以通过管理界面修改大多数配置变量,而无需重新启动服务器。
可以在运行时修改的配置示例:
1)ProxySQL正在侦听的接口;
2)ProxySQL连接的后端服务器;
3)ProxySQL执行的不同操作的超时时间;
2、崩溃[crashes]
ProxySQL有一套广泛的集成测试,使用Docker运行,以确保它不会崩溃。此外,每个主要版本都使用sysbench进行性能测试,并使用valgrind进行内存泄漏测试。
除此之外,还实现了一个 angel 进程,可在需要时监视并重新启动ProxySQL,以便在停机时将停机时间降至最低。
二、最大的可扩展性[Maximum scalability]
在与ProxySQL交互时,我们希望尽快运行几个关键任务:
1、尽快完成一个新的MySQL连接了:
这就是为什么ProxySQL有一个线程池,所有线程都通过系统调用 accept() 来接收新的连接。因此,增加了快速建立新TCP连接的可能性。
2、尽快连接到后端MySQL:
这就是为什么ProxySQL有一个后端连接池,根据配置,它可以在后端服务器中保持一些空闲连接。当需要将数据包发送到这些服务器时,大多数情况下连接是已经打开的。
3、多核可扩展性:
ProxySQL有一个多线程设计,其中所有线程都做同样的事情(在后端服务器和MySQL客户端连接之间来回传递消息),我们的测试表明它可以很好地扩展核心数量。
三、级联的可能性[Cascade possibilities]
ProxySQL可以根据需要级联到多层。
例如:
一种常见的情况是让ProxySQL实例尽可能靠近运行应用程序的服务器,此时,应用程序可能会指向ProxySQL集群中的另一个中间层,该中间层则将所有流量路由到后端MySQL服务器场。
譬如下面这样的级联模式:
A -> P1 -----> {P2, P3, P4 ..} ------> {B1, B2, B3, ..}
这种情况下的优点是,对于MySQL的访问是完全容错的,因为ProxySQL代理程序不是单点的。应用程序级别不需要做修改即可连接到代理群集而不是单个代理。如果来自中间层(P2那一层)的任何代理失败,则P1代理将检测到那个代理的异常并将路由流量通过其他代理。如果后端B1,B2,B3 ......中的任何一个失败,则中间层代理将以对P1透明的方式处理作业。
~
~
完毕!
来源:oschina
链接:https://my.oschina.net/u/4382774/blog/4258171