amoeba

amoeba(变形虫)2008年开始发布的第一款,这个软件致力于mysql的分布式数据库前端代理层,它主要在应用层访问mysql的时候充当query(查询)路由功能。专注分布式数据库proxy开发。对客户透明,具有负载均衡,高可用性,query filter,读写分离,可路由相关的query到目标数据库,可并发请求多台数据库结果。在amoenba上面能够完成多数据源的高可用,负载均衡,数据切片的功能。

为什么使用amoeba 集中式数据库不足,集中式处理,势必造成性能瓶颈,应用程序集中在一台计算机上运行,一旦该计算机发生故障,则整个系统受到影响,可靠性不高;集中式处理引起系统的规模和配置都不够灵活,系统的可扩充性差。而amoenba的透明,简易配置和多个优点势必成为分布式数据库代理产品的优秀选择

分布式数据库代理的相关概念
amoeba在分布式数据库领域将致力解决数据切分,应付客户端集中式处理分布式数据库。

分布式数据库系统的优点:降低费用。分布式数据库在地理上可以分布的。允许用户在自己本地录用,查询,维护操作,实行局部控制,降低通信代价,避免集中式需要更高要求的硬件设备。而且分布式数据库在单台机器上面数据量较少,其响应速度明显提升。提高系统整体可用性,避免了因为单台数据库的故障而造成全部瘫痪的结果,易于扩展处理能力和系统规模,分布式数据库系统的结构可以很容易地扩展系统,在分布式数据库中增加一个新的节点,不影响现有系统的正常运行。这种方式比扩大集中式系统要灵活经济。在集中式系统中扩大系统和系统升级,由于有硬件不兼容和软件改变困难等缺点,升级的代价常常是昂贵和不可行的

amoeba能够完成多数据源的高可用,负载均衡,数据切片的功能。可以并发请求多台数据库合并结果。对于客户端程序来说,我们当它虚拟mysql,对外提供mysql协议。

与mysql-proxy比较  用mysql-proxy工作量大,目前没有现成lua脚本,mysql proxy根本没有配置文件,lua脚本就是它的全部,当然lua是相当方便的。需要编写大量的脚本才能完成一个复杂的配置。而amoeba只需要进行相关的配置就可以满足需求。

amoeba   dbserver配置文件中定义dbserver元素 分别定义mysql的端口号 数据库名 用户名  密码等  当abstractive属性为true 这意味着这是一个抽象的dbserver定义可以由其他dbserver扩展。
manager定义了dbserver选择的连接管理器(connectionmanager)。在poolconfig主要配置数据库的连接池。命名server1,这个server1是abstractserver的拓展 parent属性配置了拓展的抽象dbserver,它拓展了abstractserver的ipaddress属性来指名数据库的IP地址,而在端口,用户名和密码,连接池配置等属性沿用abstractserver的配置。当我们有一个数据库集群需要管理,这个数据库集群中节点的大部分信息可能是相同的,比如端口号,用户名,密码等等 因此通过归纳这些共性定义出的abstractserver极大简化了dbserver配置文件.service节点定义了需要启动的服务,defaulemanager中被引用作为dbserver的数据库服务器端连接管理器,连接管理器配置了用于网络处理的cpu核数,默认其processor属性为amoeba所在主机的cpu核数。queryrouter定义了规则配置及函数配置相关文件的位置。

将多个slave 组成数据库池 加上轮询策略来负载均衡
readThreadPoolSize------用于处理客户端连接发送过来的数据,跟数据库服务器返回的数据的线程数量这个可以根据客户端连接数来调整
clientSideThreadPoolSize在读完客户端请求数据包以后,这个线程会接受处理具体的业务逻辑(解析sql,sql路由)
serverSideThreadPoolSize ------在server端读取数据库返回的数据包,合并多数据库返回的数据,将数据包发送到客户端。
statementCacheSize----连接池缓存的Prepared Statement数量。
queryTimeout------语句执行超时时间设置
sendBufferSize-----属性设置在SocketChannel。Write 方法的调用中期望发送的字节数。这个属性的操作对象是为发送操作所分配的网络缓冲去空间。网络缓冲区应至少与应用程序缓冲区同样大小,这样才能确保一次操作中就能存储和发送所需的数据。
receiveBufferSize-----设置你希望在接受缓冲区中为每次读操作存储的字节数。实际上,此属性的操作对象为了接收传入数据所分配的网络缓冲区空间。网络缓冲区应至少与应用程序缓冲区同样大小,这样才能确保在调用SocketChannel。Read方法时所需的数据是可用的。
tcpNoDelay------如果禁用延迟,则直到tcpclient收集到相当数量的数出数据之后,它才会通过网络发送数据包,由于tcp段中系统开销的数量,发送少量数据时效率比较低。

amoeba高级功能  
水平切分:通过一系列的切分规则将数据水平分布到不同的DB或table中,在通过相应的DB路由或者tables路由规则找到需要查询的具体的DB或者table以进行query操作。比如根据用户ID将用户表切分到多台数据库上

垂直切分指的是按业务,产品切分,将不同类型的数据且分到不同的服务器上,通过数据库代理疏通程序与多个数据库的通讯,降低应用的复杂度。


你可能感兴趣的:(应用程序,数据库系统,代理产品)