mysql-proxy中间件,有哪些可以代替

mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差。下面介绍几款能代替其的mysql开源中间件产品,Atlas,cobar,tddl,让我们看看它们各自有些什么优点和新特性吧。

Atlas

Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。

Altas架构:

Atlas是一个位于应用程序与MySQL之间,它实现了MySQL的客户端与服务端协议,作为服务端与应用程序通讯,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。

以下是一个可以参考的整体架构,LVS前端做负载均衡,两个Altas做HA,防止单点故障。

Altas的一些新特性:

1.主库宕机不影响读

主库宕机,Atlas自动将宕机的主库摘除,写操作会失败,读操作不受影响。从库宕机,Atlas自动将宕机的从库摘除,对应用没有影响。在mysql官方的proxy中主库宕机,从库亦不可用。

2.通过管理接口,简化管理工作,DB的上下线对应用完全透明,同时可以手动上下线。

3.自己实现读写分离

(1)为了解决读写分离存在写完马上就想读而这时可能存在主从同步延迟的情况,Altas中可以在SQL语句前增加 /*master*/ 就可以将读请求强制发往主库。

主库可设置多项,用逗号分隔,从库可设置多项和权重,达到负载均衡。

4.自己实现分表

(1)需带有分表字段。

(2)支持SELECT、INSERT、UPDATE、DELETE、REPLACE语句。

(3)支持多个子表查询结果的合并和排序。

这里不得不吐槽Atlas的分表功能,不能实现分布式分表,所有的子表必须在同一台DB的同一个database里且所有的子表必须事先建好,Atlas没有自动建表的功能。

5.之前官方主要功能逻辑由使用lua脚本编写,效率低,Atlas用C改写,QPS提高,latency降低。

6.安全方面的提升

(1)通过配置文件中的pwds参数进行连接Atlas的用户的权限控制。

(2)通过client-ips参数对有权限连接Atlas的ip进行过滤。

(3)日志中记录所有通过Altas处理的SQL语句,包括客户端IP、实际执行该语句的DB、执行成功与否、执行所耗费的时间 ,如下面例子。

图4

7.平滑重启

通过配置文件中设置lvs-ips参数实现平滑重启功能,否则重启Altas的瞬间那些SQL请求都会失败。该参数前面挂接的lvs的物理网卡的ip,注意不是虚ip。平滑重启的条件是至少有两台配置相同的Atlas且挂在lvs之后。

source:github/Qihoo360/Atlas

alibaba.cobar

Cobar是阿里巴巴(B2B)部门开发的一种关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。那么具体说说我们为什么要用它,或说cobar--能干什么?以下是我们业务运行中会存在的一些问题:

1.随着业务的进行数据库的数据量和访问量的剧增,需要对数据进行水平拆分来降低单库的压力,而且需要高效且相对透明的来屏蔽掉水平拆分的细节。

2.为提高访问的可用性,数据源需要备份。

3.数据源可用性的检测和failover。

4.前台的高并发造成后台数据库连接数过多,降低了性能,怎么解决。

针对以上问题就有了cobar施展自己的空间了,cobar中间件以proxy的形式位于前台应用和实际数据库之间,对前台的开放的接口是mysql通信协议。将前台SQL语句变更并按照数据分布规则转发到合适的后台数据分库,再合并返回结果,模拟单库下的数据库行为。

Cobar应用举例

应用架构:

应用介绍:

1.通过Cobar提供一个名为test的数据库,其中包含t1,t2两张表。后台有3个MySQL实例(ip:port)为其提供服务,分别为:A,B,C。

2.期望t1表的数据放置在实例A中,t2表的数据水平拆成四份并在实例B和C中各自放两份。t2表的数据要具备HA功能,即B或者C实例其中一个出现故障,不影响使用且可提供完整的数据服务。

cabar优点总结:

1.数据和访问从集中式改变为分布:

(1)Cobar支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分

(2)Cobar也支持将不同的表放入不同的库

(3) 多数情况下,用户会将以上两种方式混合使用

注意!:Cobar不支持将一张表,例如test表拆分成test_1,test_2, test_3.....放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。

2.解决连接数过大的问题。

3.对业务代码侵入性少。

4.提供数据节点的failover,HA:

(1)Cobar的主备切换有两种触发方式,一种是用户手动触发,一种是Cobar的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。

(2)Cobar只检查MySQL主备异常,不关心主备之间的数据同步,因此用户需要在使用Cobar之前在MySQL主备上配置双向同步。

cobar缺点:

开源版本中数据库只支持mysql,并且不支持读写分离。

source:code.alibabatech/wiki/display/cobar/Home

TDDL

淘宝根据自己的业务特点开发了TDDL(Taobao Distributed Data Layer 外号:头都大了 ©_Ob)框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource实现,具有主备,读写分离,动态数据库配置等功能。

TDDL所处的位置(tddl通用数据访问层,部署在客户端的jar包,用于将用户的SQL路由到指定的数据库中):

淘宝很早就对数据进行过分库的处理, 上层系统连接多个数据库,中间有一个叫做DBRoute的路由来对数据进行统一访问。DBRoute对数据进行多库的操作、数据的整合,让上层系统像操作一个数据库一样操作多个库。但是随着数据量的增长,对于库表的分法有了更高的要求,例如,你的商品数据到了百亿级别的时候,任何一个库都无法存放了,于是分成2个、4个、8个、16个、32个直到1024个、2048个。好,分成这么多,数据能够存放了,那怎么查询它?这时候,数据查询的中间件就要能够承担这个重任了,它对上层来说,必须像查询一个数据库一样来查询数据,还要像查询一个数据库一样快(每条查询在几毫秒内完成),TDDL就承担了这样一个工作。在外面有些系统也用DAL(数据访问层) 这个概念来命名这个中间件。

下图展示了一个简单的分库分表数据查询策略:

主要优点:

1.数据库主备和动态切换

2.带权重的读写分离

3.单线程读重试

4.集中式数据源信息管理和动态变更

5.剥离的稳定jboss数据源

6.支持mysql和oracle数据库

7.基于jdbc规范,很容易扩展支持实现jdbc规范的数据源

8.无server,client-jar形式存在,应用直连数据库

9.读写次数,并发度流程控制,动态变更

10.可分析的日志打印,日志流控,动态变更



  • php閫氳繃浠涔涓棿浠涓mysql閾炬帴(php鍜屾暟鎹簱鎬庝箞杩炴帴鐨)
    绛旓細搴曞眰鑰岃█锛岄渶瑕mysql搴撴瘮濡俵ibmysql.dll PHP鏈韩锛岄渶瑕乵ysql鎵╁睍锛屾瘮濡俻hp_mysqli.dll,pdo_mysql.dll 浠g爜绠鍗曠骇鍒紝鎴栨湁涓浜涙暟鎹簱绫诲簱锛屾瘮濡俛dodb锛宔zSQL锛孼ebra_Database涔嬬被鐨勶紝涓嶈繃浠栦滑閮藉彲鑳芥敮鎸佸鏁版嵁搴 澶嶆潅搴旂敤绾у埆锛屼竴鑸細鏈夋煇绉嶆鏋剁粨鏋勶紝鑷甫鏈夌被浼糄AO灞傜殑涓滆タ 寰堟娊璞$骇鍒紝灏变細鐢∣RM姣斿Doctrine...
  • MySQL鐨璇诲啓鍒嗙鐢ㄤ粈涔堣蒋浠舵瘮杈冨ソ?
    绛旓細鍦ㄥ鎵MySQL鐨楂樻晥璇诲啓鍒嗙瑙e喅鏂规鏃讹紝浼楀涓棿浠舵棤鐤戞槸涓澶ч夋嫨銆傛垝璐ゆ暣鐞嗙殑涓棿浠跺垪琛ㄤ腑锛岃濡倂itess銆丮ango鍜孲harding-JDBC锛屽敖绠℃垜浠洟闃燂紙UCloud鐨刄DDB灏忓垎闃燂級瀵瑰叾浠栦竴浜涘mycat绛変腑闂翠欢涔熸湁娣卞叆鐮旂┒锛屼絾MySQL router鐢变簬鍏跺眬闄愭э紝鎴戜滑骞朵笉鎺ㄨ崘銆傚叾浠栧嚑娆涓棿浠讹紝灏界MySQL router涓嶅湪鍏朵腑锛屼絾濡侱RDS...
  • 鐢熶骇鐜閮戒娇鐢ㄤ粈涔Mysql涓棿浠
    绛旓細Amoeba銆丆obar銆丮yCAT 寤鸿MyCAT
  • 鏁版嵁搴撴灦鏋勯夊瀷涓庤惤鍦,鐪嬭繖绡囧氨澶熶簡
    绛旓細浜屻佷腑闂村眰浠g悊绫(Proxy) 杩欑被鍒嗗簱鍒嗚〃涓棿浠鐨勬牳蹇冨師鐞嗘槸鍦ㄥ簲鐢ㄥ拰鏁版嵁搴撶殑杩炴帴涔嬮棿鎼捣涓涓 浠g悊灞 ,涓婂眰搴旂敤浠 鏍囧噯鐨MySQL鍗忚 鏉ヨ繛鎺ヤ唬鐞嗗眰,鐒跺悗浠g悊灞傝礋璐 杞彂璇锋眰 鍒板簳灞傜殑MySQL鐗╃悊瀹炰緥,杩欑鏂瑰紡瀵瑰簲鐢ㄥ彧鏈変竴涓姹,灏辨槸鍙鐢∕ySQL鍗忚鏉ラ氫俊鍗冲彲銆 鎵浠ョ敤MySQL Navicat杩欑绾殑瀹㈡埛绔兘鍙互鐩存帴杩炴帴浣犵殑...
  • egg.js鍦涓棿浠涓庝箞浣跨敤mysql杩炴帴
    绛旓細锛氬缓璁娇鐢涓棿浠杩炴帴锛屾搷浣滄暟鎹簱鐨勪唬鐮佹洿鍔犵畝鍗曘傛垜浠殑鍚庡彴鎺ュ彛灏辨槸鐢ㄧ殑涓棿浠惰繛鎺ャ俷odejs鐨勮璁$壒鐐癸紝浣垮緱浠栨湰韬氨寰堝揩锛屽嵆浣挎槸璇诲啓鏁版嵁搴撹繖鏍疯楁椂鐨勬搷浣溿傜敤杩炴帴姹犵殑鐩殑鍏跺疄灏辨槸鎯冲氨鍔犲揩鏁版嵁搴撶殑IO閫熷害銆傚洜姝ゅ鏋滅敤nodejs锛屼娇鐢ㄦ櫘閫氳繛鎺ヨ冻鐭 ...
  • nodejs 浣跨敤node-mysql 涓棿浠鐨勬櫘閫氳繛鎺ヤ笌杩炴帴姹犺繛鎺ュ摢涓ソ_鐧惧害鐭 ...
    绛旓細寤鸿浣跨敤涓棿浠杩炴帴锛屾搷浣滄暟鎹簱鐨勪唬鐮佹洿鍔犵畝鍗曘傛垜浠殑鍚庡彴鎺ュ彛灏辨槸鐢ㄧ殑涓棿浠惰繛鎺ャ俷odejs鐨勮璁$壒鐐癸紝浣垮緱浠栨湰韬氨寰堝揩锛屽嵆浣挎槸璇诲啓鏁版嵁搴撹繖鏍疯楁椂鐨勬搷浣溿傜敤杩炴帴姹犵殑鐩殑鍏跺疄灏辨槸鎯冲氨鍔犲揩鏁版嵁搴撶殑IO閫熷害銆傚洜姝ゅ鏋滅敤nodejs锛屼娇鐢ㄦ櫘閫氳繛鎺ヨ冻鐭o紒
  • php閫氳繃浠涔涓棿浠涓mysql閾炬帴
    绛旓細搴曞眰鑰岃█锛岄渶瑕mysql搴撴瘮濡俵ibmysql.dll PHP鏈韩锛岄渶瑕乵ysql鎵╁睍锛屾瘮濡俻hp_mysqli.dll,pdo_mysql.dll 浠g爜绠鍗曠骇鍒紝鎴栨湁涓浜涙暟鎹簱绫诲簱锛屾瘮濡俛dodb锛宔zSQL锛孼ebra_Database涔嬬被鐨勶紝涓嶈繃浠栦滑閮藉彲鑳芥敮鎸佸鏁版嵁搴 澶嶆潅搴旂敤绾у埆锛屼竴鑸細鏈夋煇绉嶆鏋剁粨鏋勶紝鑷甫鏈夌被浼糄AO灞傜殑涓滆タ 寰堟娊璞$骇鍒紝灏变細鐢∣RM姣斿Doctrine...
  • 鍒嗗簱鍒嗚〃鎶鏈強鎶鏈柟妗
    绛旓細锛4锛MySQL鐨鍒嗗簱鍒嗚〃锛氬浣跨敤mysql,姝ょ鏂规涓轰富娴佹柟寮忋2銆涓棿浠 瑙e喅姝ょ被闂鐨勪腑闂翠欢涓昏涓猴細Proxy妯″紡銆丆lient妯″紡銆傦紙1锛塒roxy妯″紡 锛2锛塁lient妯″紡 鎶婂垎搴撳垎琛ㄧ浉鍏抽昏緫瀛樻斁鍦ㄥ鎴风锛屼竴鐗堝鎴风鐨勫簲鐢ㄤ細寮曠敤涓涓猨ar锛岀劧鍚庡啀jar涓鐞哠QL缁勫悎銆佹暟鎹簱璺敱銆佹墽琛岀粨鏋滃悎骞剁瓑鐩稿叧鍔熻兘銆傦紙3锛変腑闂翠欢...
  • MySQL濡備綍瀹炵幇楂樺彲鐢?
    绛旓細Galera Cluster銆丳ercona XtraDB Cluster绛夎秺鏉ヨ秺澶氱殑琚ぇ瑙勬ā浣跨敤銆傞殢鐫瀹樻柟MySQL Group Replication鐨凣A锛屼娇鐢ㄥ垎甯冨紡鍗忚鏉ヨВ鍐虫暟鎹竴鑷存ч棶棰樺凡缁忔垚涓轰簡涓绘祦鐨勬柟鍚戙傛湡鏈涜秺鏉ヨ秺澶氫紭绉鐨勮В鍐虫柟妗堣鎻愬嚭锛孧ySQL楂樺彲鐢ㄩ棶棰樺彲浠ヨ鏇村ソ鐨勮В鍐炽傚垎甯冨紡瑙e喅鏂规 tidb 澶氫富 澶氬 master lvs鍋歷ip 璇诲啓鍒嗙涓棿浠 ...
  • mysql閫氳繃amoeba鎻掑叆鏁版嵁,浠庢暟鎹簱涓嶅悓姝,鐩存帴涓嶇粡杩嘺moeba鎻掑叆,浠庡簱姝 ...
    绛旓細鍦╩aster鏈嶅姟鍣ㄤ笂鎵ц濡備笅鍛戒护:mysql 鈥搖root 鈥損test mysql> grant replication slave,file on *.* to 'sxit'@'10.10.0.77' identified by '123456';mysql> flush privileges;mysql> exit;//淇敼master鐨刴y.cnf鐨勯厤缃 log-bin=mysql-bin //鎵撳紑mysql浜岃繘鍒舵棩蹇 server-id = 1 //璁剧疆...
  • 扩展阅读:www.sony.com.cn ... 常见的4种web中间件 ... matebook14 ... 售后好的中间件 ... java python ... java开发的中间件 ... java常见的中间件 ... 认可放心的中间件 ... 品质好的中间件 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网