光纤万兆网卡实际测试只有100MB/S

京东是国内专业的云网卡盟网上購物商城本频道提供云网卡盟型号、云网卡盟规格信息,为您选购云网卡盟型号规格提供全方位的价格参考提供愉悦的网上购物体验!

之前写的双十一mesh路由器选购和组網指南就有值友抱怨看不懂是什么意思。趁着最近值得买的千兆升级征文活动说说一些路由器的基本知识,以及为了升级千兆做出的准备

路由器涉及硬件、网络知识较多较杂主要面向的是家庭路由器,科普只会简单说说有不准确的地方求大家指出。

路由器本质是网絡进行互联的专用计算机具有输入和输出端口,其职能是收集网络拓扑信息对数据进行转发。

千兆宽带的组网策略基本是以上这些保证是光猫支持10G PON,网线挑选CAT5e以上路由器支持2.5G网口,NAS支持2.5G网口无线设备基本支持Wi-Fi6即可保证千兆体验。目前我使用GPON有双线聚合还是没能突破接口极限,晚点新猫和路由器到了再折腾一波

作者:邹建伟北京开科唯识技術有限公司 技术专家。

在经济和科技飞速发展的趋势下相比于以前传统的线下理财模式,互联网理财的模式因其入围门槛相对较低,選择范围广加上随时随地用电脑或者手机就能够进行理财,导致便捷性和灵活性的提升从而让越来越的人们开始接受理财、乐于理财,理财的意识和投入的形态也越来越多但随着监管制度的管控、用户规模、渠道规模、业务形态、高并发业务请求的不断增长和变化,傳统的理财 IT 基础设施建设已经无法满足用户的使用体验基于分布式系统建设新的业务系统必将破浪前行。

这次我们在中国某大型股份制銀行—— G 行的互联网理财系统建设中也是采用了分布式的数据库系统来取代传统 Oracle 数据库系统,在使用分布式数据库 TiDB 时遇到了新技术适配的一些问题,通过迁移、开发改造和联调优化积累了互联网理财场景中的一些分布式数据库 TiDB 的经验。本篇文章分享下在建设中遇到的問题和最终的解决方案希望对所有准备建设和正在建设互联网理财系统的的用户有所帮助。

二、互联网理财业务简介

互联网理财最早于 2003 姩就已经开展业务主要承载基金代销、理财销售等线上业务,2018 年 4 月随着“资管新规”的发布银行理财产品起售点由 5 万下调至 1 万,大大促进了银行资管理财业务的发展更加激发了客户购买理财产品的热情,部分明星热销产品更是吸引了大量客户集中抢购。G 行互联网理財系统主要涉及两大类业务场景:

  • 联机交易场景 :处理开户申请请求对单笔交易的响应时间有较高的要求;

  • 批量任务场景 :处理理财批量业务,属于计算密集型的工作对数据库大数据量下的吞吐能力要求较高。

互联网理财系统主要包含文件传输、实时开户、交易确认、份额登记、收益结转、产品管理、产品运营等功能拓扑图如下:

业务对数据库处理能力提出了明确的技术指标要求:

  • 批量任务:要求数據库提供在 2h 内对 5000w 笔交易记录,能够跑完夜间批量任务的能力

  • 联机任务:要求数据库提供事务平均响应延时不超过 100ms 的能力。


整套集群服务器使用接近 30 台物理服务器每台物理服务器均配置 4 块 NVMe 盘、2 个万兆网卡、2 个千兆网卡、72vcore、512G 内存,预期可以保留 3 个月的在线数据

在传统理财業务系统使用集中式的 IOE 架构,原有传统数据库 Oracle 数据库遇到支撑的瓶颈已无法适应互联网+理财业务模式的发展需求, 取而代之的是通过开源自主可控、分布式数据库的技术方案来支撑当下的互联网技术模式的系统建设现有 Oracle 主要遇到亟待解决的的问题如下:

  1. 容量上限不能扩展 (存不下、查不出来,索引优化已没有用)

  2. 分布式改造和适配如何取舍。

在当前分布式数据库解决方案领域内可以聚焦的数据库选擇范围就剩下分库分表方案 和 NewSQL 原生分布式方案(顺带的说明下,这里我们不争论分库分表究竟算不算分布式架构我们相信技术是为场景存在的)。选型我们主要考虑三点:首先是数据库功能例如括高可用性、SQL 兼容、横向扩展、扩容等等;其次是技术架构的前瞻性、发展潛力、社区活跃度;最后是大数据量下的数据库性能最为看重。前期我们与候选的数据库厂家的工程师合作模拟了 daemon 业务程序来验证数据庫的性能,主要两个部分内容:

来自互联网渠道的理财数据预估每小时至少千万级别,在 1 个小时内我们有一系列的批量任务留给数据庫入库的时间最多 10 分钟。

理财业务具有多任务并存的特点大方向说包括联机交易任务和跑批任务两部分,跑批任务包括日间任务和夜间任务以及数仓 edw 任务联机任务要求事务平均响应延时不超过 100ms,批量任务即使并存时也不可以超过总体执行时间

经过多轮的测试、评审,汾库分表对业务设计上的不解决够优雅由于拆分字段的规则限制了业务实现的一些方式,不能灵活进行业务处理并且在批量的复杂逻輯SQL 处理上性能无法满足业务要求,最终我们选择 TiDB 来进行分布式数据库的建设验证下来,完全满足业务数据初始化效率、提升联机交易和批量处理响应能力、缩短批量处理时间周期而且也无需限制业务场景的处理逻辑,根据压力需求灵活的进行在线扩展和在线收缩上线湔的非功能测试中,联机交易部分:在并发用户 30 下数据库处理能力为 536 笔/s,响应时间为 0.0558s满足预期 200TPS。批量入库:64 并发下5kw 数据入库 9.7min,当然這并非极限值

这里说的水平扩展包括两方面:计算能力和存储能力。TiDB Server 负责处理 SQL 请求随着业务的增长,可以简单的添加 TiDB Server 节点提高整体嘚处理能力,提供更高的吞吐TiKV 负责存储数据,随着数据量的增长可以部署更多的 TiKV Server 节点解决数据 Scale 的问题。

TiDB 集群核心三大组件:TiDB/TiKV/PD 都能容忍蔀分实例失效不影响整个集群的可用性。TiDB 本身是无状态的支持动态的增加删除。TiKV/PD 采用 Raft 协议在大多数存活的前提集群便是可用的。

TiDB 的汾布式算法使用 Raft其事务可以跨分片、跨节点执行,并且强一致

这个特点应该毋庸置疑,说是“风口的猪”也不过分TiDB 分布式数据库从 2015 姩 4 月份开源以来,有来自社区的开发者、用户、布道师、设计师等不同角色的贡献者们的细心呵护也有来自 PingCAP 持续不断的资源投入,截止箌 2020 年 3 月TiDB 社区项目已经聚集了来自全球的 760 多位 Contributor,100 多位核心用户30000+ GitHub Stars 支持,TiDB 现已被近 1000 家不同行业的领先企业应用在实际生产环境TiDB 详细的架构囷原理可以。

四、开发改造中的思考&问题

G 行采用的 TiDB 版本是 3.0 早期版本仅提供乐观锁机制, 这个问题在 TiDB 3.0.8 后引入了悲观锁后得到了解决。作为一洺“重度”悲观锁使用者TiDB的乐观锁是我刚开始接触 TiDB,所认为的开发改造过程中最大“阻碍”但实际开发过程中,这里的碰到的问题其實很少更多是认知理解的过程。整个改造过程中主要遇到了以下几个方面的问题也都通过 TiDB 提供的最佳开发实践获得了很好的处理效果。

问题 1:热点账户更新

select for update 语句是悲观锁机制下热点账户更新场景常被利用的机制Oracle 数据库中,这个语句的作用是:

也就是说利用它可以实现數据行的锁定阻塞其它事务对该行数据的 DML 操作。TiDB 也支持这个语句不过在乐观锁机制下,这个语句不会在事务开启就锁住数据而是其怹事务在提交的时候进行冲突检查,如有冲突会进行回滚。

悲观锁机制下显式事务每条 DML 语句执行完成后数据库会返回影响行数:affect rows,业務会利用 affect rows 实际值不同进行不同的逻辑处理这个是没问题的。不过 TiDB 乐观锁机制显示事务每条 SQL 执行完成后返回的 affect rows 是不可信,究其根本原因悲观锁是先加锁再更新,而乐观锁机制下行冲突检测和数据上锁是放在事务提交时检测的,这里举一个例子:

对于事务 B 来说update 语句执荇后数据库返回 1 row affected,不过显而易见这个语句提交时并没有发生更新,也即此时的 Affected rows 是不可信的如果业务还希望使用 affected rows 来做程序执行逻辑的判斷条件,可行的方式是:显示事务下先判断事务成功的条件,然后再根据 affected rows 进行逻辑处理而隐示事务下,可以直接使用

熟悉 MySQL 的同学会对倳务大小设计比较熟悉开发规范中会尽可能拆分大事务为多个小事务。TiDB 对大事务也有类似的要求并给出了限定具体限定标准:

  • 每个事務内的 SQL 数量不超过 5000 条(可配置)。

  • 每个键值对不超过 6MB

  • 键值对的总大小不超过 100MB。

  • 键值对的总数不超过 300,000

开发使用过程中,体会最多的限制昰键值对的总数不超过 300,000老系统稍不注意就超出了这个限制,造成处理失败这里要着重说明,键值对数与行数不等价举例说明:一行數据是一个键值对,一行索引也是一个键值对当一张表只有 9 个索引时,每 insert 一行数据会写入 10 个键值对这里的原因涉及到 TiKV 使用的存储格式,感兴趣的同学可以搜索 TiDB 相关文章进一步阅读

WRITE CONFLICT 是开发中碰到的频率最多的问题之一,报错示例信息:


问题的成因这里不赘述感兴趣的哃学可以搜索相关文档查看。TiDB 默认针对这个错误不会进行事务重试由参数 tidb_disable_txn_auto_retry 控制,3.0 版本默认值是 1而在更早的 2.1 版本里没有这个参数,默认荇为是会自动重试默认值更改的原因是优化事务处理逻辑,适应更多场景

目前互联网理财业务系统稳定的运行在 TiDB 3.0 版本乐观锁下,TiDB 4.0 马上偠 GA 了我们当初能赶上基于 4.0 的改造该有多好啊,据说

让后续迁移到 TiDB 数据库的同学会更加的通用、易用。比如:

对于开发人员说TiDB 4.0 以前事務的限制始终有点「达摩克利斯之剑」的意味,总是担心一个不留心就撞墙4.0 版本开始,对事务的限制松绑很多键值对的总大小允许 10GB 以內。

相比大事务带来的别扭悲观锁个人觉得是最期待的特性。最早在 TiDB 3.0.8 版本引入4.0 版本开始默认开启悲观锁。悲观事务模型是对于金融场景非常重要的一个特性有了悲观锁我相信 TiDB 才会走的更高更远。

TiDB 4.0 GA 版本即将发布除了本文涉及的大事务、等等还有很多新特性,例如 Sequence、、等等有兴趣的同学可以官网查看相关文章。

更多 TiDB 实践案例阅读:

关于 TiDB 使用上的问题可以登录可以在 TiDB 用户论坛 交流探讨~

无线速度本来就比不上有线的鼡你的两台笔记本无线互联测试下拷贝速度。这样就可以判断是无线网卡的问题还是无线路由器的问题

我要回帖

 

随机推荐