- 博客(39)
- 资源 (6)
- 收藏
- 关注
原创 一篇文章彻底搞懂TiDB集群各种容量计算方式
背景TiDB 集群的监控面板里面有两个非常重要、且非常常用的指标,相信用了 TiDB 的都见过:Storage capacity:集群的总容量Current storage size:集群当前已经使用的空间大小当你准备了一堆服务器,经过各种思考设计部署了一个 TiDB 集群,有没有想过这两个指标和服务器磁盘之间到底是啥关系?反正我们经常被客户问这个问题,以前虽然能说出个大概,总体...
2024-01-11 21:08:00 905
原创 TiDB故障处理之让人迷惑的Region is Unavailable
背景最近某集群扩容了一批物理机,其中 TiKV 节点有6台机器12个实例,同时调整了 label 设置增加了一层机柜级容灾。因为前期做了比较充分的准备工作,到了变更窗口只等着执行scale-out就行,操作过程也很顺利,很快就把所有节点都扩进去了,检查完各实例的运行状态,确保region已经开始正常调度,就放心去睡觉了(半夜变更,结束时凌晨1点左右)。第二天一大早还在上班路上,业务方反馈数据...
2023-12-28 12:53:00 873
原创 TiDB binlog故障处理之drainer周期性罢工
背景前段时间用户反馈某生产环境 TiDB 集群 drainer 频繁发生故障,要么服务崩溃无法启动,要么数据跑着跑着就丢失了,很是折磨人。该集群跑的是离线分析业务,数据量20T ,v4版本,有多个 drainer 往下游同步数据,目标端包括kafka、file、tidb多种形态。两天前刚恢复过一次,这会又故障重现,不得不来一次根因排查。故障现象接业务端反馈,某下游kafka几个小时没收到...
2023-11-16 16:44:00 69
原创 TiDB在科捷物流神州金库核心系统的应用与实践
导读:在经过了近半年的测试验证和迁移准备之后,神州金库3.0核心系统 WMS 正式从 MySQL 迁移到了分布式 HTAP 数据库 TiDB,上线后不久即经历了第一次双11的考验,TiDB的性能和稳定性表现远超预期,给后续的全平台迁移计划打下了坚实的基础。神州数码 TiDB 交付团队与科捷物流技术、业务团队紧密配合,完全自主化地实施了整个迁移过程,成为团队在又一新行业成功交付的典型案例。业务背...
2023-04-19 18:46:00 208
原创 TiDB SQL调优案例之避免TiFlash帮倒忙
背景早上收到某系统的告警tidb节点挂掉无法访问,情况十万火急。登录中控机查了一下display信息,4个TiDB、Prometheus、Grafana全挂了,某台机器hang死无法连接,经过快速重启后集群恢复,经排查后是昨天上线的某个SQL导致频繁OOM。于是开始亡羊补牢,来一波近期慢SQL巡检 #手动狗头#。。。随便找了一个出现频率比较高的慢SQL,经过优化后竟然性能提升了1500倍...
2023-03-28 18:41:00 330
原创 一次TiDB GC阻塞引发的性能问题分析
背景前不久从项目一线同学得到某集群的告警信息,某个时间段 TiDB duration 突然异常升高,持续时间6小时左右,需要定位到具体原因。分析过程第一招,初步判断由于项目条件苛刻,历经苦难才拿到监控,在此之前只能靠现场同学的口述排查,oncall人太难了。。既然是duration升高,那就先看看集群的心电图,试图找出一点线索。一般来说,duration升高会有以下两种情况。第一...
2022-12-20 17:58:00 132
原创 TiDB Lightning导入超大型txt文件实践
背景TiDB 提供了很多种数据迁移的方式,但这些工具/方案普遍对MySQL比较友好,一旦涉及到异构数据迁移,就不得不另寻出路,借助各种开源或商业的数据同步工具。其实数据在不同系统的流转当中,有一种格式是比较通用的,那就是txt/csv这类文件,把数据用约定好的分隔符换行符等标记存放在一起,比如最常见的逗号分隔:aa,11,a1bb,22,b2这个文件可以保存为data.txt或者data...
2022-10-18 12:41:00 512
原创 用一个性能提升了666倍的小案例说明在TiDB中正确使用索引的重要性
背景最近在给一个物流系统做TiDB POC测试,这个系统是基于MySQL开发的,本次投入测试的业务数据大概10个库约900张表,最大单表6千多万行。这个规模不算大,测试数据以及库表结构是用Dumpling从MySQL导出,再用Lightning导入到TiDB中,整个过程非常顺利。系统在TiDB上跑起来后,通过Dashboard观察到有一条SQL非常规律性地出现在慢查询页面中,打开SQL一看...
2022-06-10 18:46:00 536
原创 探索TiDB Lightning的源码来解决发现的bug
背景上一篇《记一次简单的Oracle离线数据迁移至TiDB过程》说到在使用Lightning导入csv文件到TiDB的时候发现了一个bug,是这样一个过程。Oracle源库中表名都是大写,经过前文所述的方法导入到TiDB后表名也是保持全大写,数据同步过程非常顺利。第二天我把整套操作流程教给一位新手朋友,他就挑了一张表用来做实验,结果死活都不行。各种分析和重试都没有效果,就在快要懵逼的时候想...
2022-03-11 23:00:00 172
原创 多种方式告诉你如何计算DM同步数据到TiDB的延时时间
背景用户在做技术选型的过程中,总是会对一些数据指标比较关心,特别是在和竞品相比较的时候,更加需要一些有说服力的数据。基于MySQL开发的项目在迁移到TiDB的时候,使用DM同步数据是必不可少的一个环节,我在最近的一次POC中就碰到了这样一个需求,需要评估一个具体的延时时间参考值,因为用户在迁移前期的过渡阶段是把TiDB作为MySQL的从库,有些场景对这个延时很敏感,如果延时太大会直接影响业务。...
2022-02-09 11:53:00 331
原创 记一次简单的Oracle离线数据迁移至TiDB过程
背景最近在支持一个从Oracle转TiDB的项目,为方便应用端兼容性测试需要把Oracle测试环境的库表结构和数据同步到TiDB中,由于数据量并不大,所以怎么方便怎么来,这里使用CSV导出导入的方式来实现。整个过程可以分为三个步骤:库表结构转换源数据导出导入目标库库表结构转换众所周知TiDB是兼容MySQL协议的,所以Oracle的表结构定义在TIDB不一定能完全使用,这时候就...
2022-01-19 21:35:00 534
原创 从一个简单的Delete删数据场景谈TiDB数据库开发规范的重要性
故事背景前段时间上线了一个从Oracle迁移到TiDB的项目,某一天应用端反馈有一个诡异的现象,就是有张小表做全表delete的时候执行比较慢,而且有越来越慢的迹象。这个表每次删除的数据不超过20行,那为啥删20行数据会这么慢呢,我们来一探究竟。问题排查根据应用端提供的表名去慢查询里面搜索,确实发现了大量全表删除的SQL:从列表中找一条来看看具体的时间分布:可以发现绝大部分时间都花了C...
2021-12-02 18:15:00 170
原创 这么多TiDB负载均衡方案总有一款适合你
【是否原创】是【首发渠道】TiDB 社区前言分布式关系型数据库TiDB是一种计算和存储分离的架构,每一层都可以独立地进行水平扩展,这样就可以做到有的放矢,对症下药。从TiDB整体架构图可以看到,计算层(图中的TiDB Cluster)负责与外部应用使用MySQL协议通信,每一个TiDB Server是一个无状态节点彼此独立,应用端连接任何一个TiDB节点都可以正常访问数据库。这样做的好处...
2021-10-18 11:51:00 208
原创 TiDB在X86和ARM混合平台下的离线部署和升级
【是否原创】是【首发渠道】TiDB 社区背景在之前我们团队发布了TiDB基于X86和ARM混合部署架构的文章:TiDB 5.0 异步事务特性体验——基于X86和ARM混合部署架构,最近有朋友问到离线模式下如何对混合部署的TiDB集群进行升级,因此用本文来做一个梳理总结。部署的本质TiDB从4.0版本开始推出了自己的集群运维和包管理工具TiUP,这个工具的诞生极大地降低了上手TiDB...
2021-09-19 19:45:00 349
原创 以TiDB热点问题来谈Region的调度流程
什么是热点问题说这个话题之前我们先回顾一下TiDB的主要结构和概念。TiDB的核心架构分为TiDB、TiKV、PD三个部分,其中TiKV是一个分布式数据存储引擎用来存储真实的数据,在TiKV中又对存储区域进行了一系列的逻辑划分也就是Region,它是被PD调度的最小单元。熟悉TiDB的读者对这个结构应该了然于胸。正是由于这种设计,TiDB在碰到短时间内的大流量时就会碰到数据热点问题,大量的...
2021-08-13 18:48:00 554
原创 在Golang中如何正确地使用database/sql包访问数据库
本文记录了我在实际工作中关于数据库操作上一些小经验,也是新手入门golang时我认为一定会碰到问题,没有什么高大上的东西,所以希望能抛砖引玉,也算是对这个问题的一次总结。其实我也是一个新手,机缘巧合几个月前开始做golang开发,以前一直是以.NET技术栈为主,文章如有错误不吝指正。访问数据库相信大家第一次碰到这个问题的时候应该和我一样,去网上找个例子参考一下。没错,这样的例子...
2021-01-29 16:15:00 4277 1
原创 .NET Core开源任务调度平台ScheduleMaster上新了
ScheduleMaster上一次比较大的更新还是在6月份,转眼已经快过去4个月了,这段时间比较忙,中间只更新过一次修复了几个小bug。要总结这次更新的话,必须要用“千呼万唤始出来”了,因为这次不仅经历的时间比较久,还带来了大家期待已久的功能-多数据库支持,再就是对.NET Framework的支持。不熟悉的朋友可以先参考以往的介绍文章:https://www.cnblogs.co...
2020-10-19 22:46:00 566 2
原创 从源码角度分析ScheduleMaster的节点管理流程
ScheduleMaster是一个开源的分布式任务调度系统,它基于.NET Core 3.1平台构建,支持跨平台多节点部署运行。项目主页:https://github.com/hey-hoho/ScheduleMasterCore本篇从源码角度分析一下节点控制的核心流程。生命周期事件生命周期事件增强了整个应用进程的控制能力,由于节点状态与之关系密切,所以必须要首先了解下生命周期事...
2020-10-19 21:53:00 269
原创 ScheduleMaster新特性之延时任务初体验
ScheduleMaster在上个月底更新到了2.0版本,在功能和代码以及文档上都往前跨了很大一步,详细信息可以参考这篇文章:https://www.cnblogs.com/hohoa/p/12772945.html对ScheduleMaster还不熟悉的朋友可以先移步作者的系列文章:https://www.cnblogs.com/hohoa/category/1628282.html...
2020-05-18 21:16:00 415
原创 .NET Core下的开源分布式任务调度系统ScheduleMaster-v2.0低调发布
从1月份首次公开介绍这个项目到现在也快4个月了,期间做了一些修修补补整体没什么大的改动。2.0算是发布之后第一个大的版本更新,带来了许多新功能新特性,也修复了一些已知的bug,在此感谢在博客、Issue和QQ群中提出各种意见的朋友,以及指导过我的前辈大佬们。在我看来,这个项目没有使用任何高深的技术和架构,甚至有些代码写的自己都不满意不敢拿出来给大家观赏,和社区中其他一些开源项目的大佬们...
2020-04-26 21:56:00 599
原创 [一起读源码]走进C#并发队列ConcurrentQueue的内部世界 — .NET Core篇
在上一篇《走进C#并发队列ConcurrentQueue的内部世界》中解析了Framework下的ConcurrentQueue实现原理,经过抛砖引玉,得到了一众大佬的指点,找到了.NET Core版本下的ConcurrentQueue源码,位于以下地址:https://github.com/dotnet/runtime/blob/master/src/libraries/Syste...
2020-04-19 20:27:00 575
原创 [一起读源码]走进C#并发队列ConcurrentQueue的内部世界
决定从这篇文章开始,开一个读源码系列,不限制平台语言或工具,任何自己感兴趣的都会写。前几天碰到一个小问题又读了一遍ConcurrentQueue的源码,那就拿C#中比较常用的并发队列ConcurrentQueue作为开篇来聊一聊它的实现原理。话不多说,直奔主题。要提前说明下的是,本文解析的源码是基于.NET Framework 4.8版本,地址是:https://reference...
2020-04-07 09:02:00 308
原创 .NET Core下的开源分布式任务调度平台ScheduleMaster—快速上手
概述ScheduleMaster是一个开源的分布式任务调度系统,它基于Asp.Net Core平台构建,支持跨平台多节点部署运行。它的项目主页在这里:https://github.com/hey-hoho/ScheduleMasterCore关于它的简单介绍可以看这里:https://www.cnblogs.com/hohoa/p/12162581.html本地部署...
2020-01-15 17:06:00 433
原创 .NET Core下的开源分布式任务调度平台ScheduleMaster-我的首个开源项目
从何说起2017年初的时候,由于当时项目需要做了一个乞丐版定时调度系统,那时候只在单机上实现了核心的调度功能。做这个玩意之前也调研了社区中开源的解决方案,找了几个实地部署试跑了一下,其实都很不错。但那时候我们有个问题就是应用都是基于Azure WebApp去部署,不太想为了这个东西搞一台虚拟机来跑windows服务,所以最后决定重新开发一个,哪怕功能简单点能满足需要就行。很快这个东西...
2020-01-09 16:30:00 328
原创 在C#中使用二叉树实时计算海量用户积分排名的实现
从何说起前些天和朋友讨论一个问题,他们的应用有几十万会员然后对应有积分,现在想做积分排名的需求,问有没有什么好方案。这个问题也算常见,很多地方都能看到,常规做法一般是数据定时跑批把计算结果到中间表然后直接查表就行,或者只显示个TOP N的排行榜,名次高的计算真实名次,名次比较低的直接显示在xxx名开外这种。但是出于探索问题的角度,我还是想找一下有没有实时计算的办法,并且效率能够接受。...
2020-01-06 08:50:00 336
原创 在Asp.Net Core中使用ModelConvention实现全局过滤器隔离
从何说起这来自于我把项目迁移到Asp.Net Core的过程中碰到一个问题。在一个web程序中同时包含了MVC和WebAPI,现在需要给WebAPI部分单独添加一个接口验证过滤器IActionFilter,常规做法一般是写好过滤器后给需要的控制器挂上这个标签,高级点的做法是注册一个全局过滤器,这样可以避免每次手动添加同时代码也更好管理。注册全局过滤器的方式为: services.Ad...
2020-01-02 20:00:00 646 2
原创 从EFCore上下文的使用到深入剖析DI的生命周期最后实现自动属性注入
故事背景 最近在把自己的一个老项目从Framework迁移到.Net Core 3.0,数据访问这块选择的是EFCore+Mysql。使用EF的话不可避免要和DbContext打交道,在Core中的常规用法一般是:创建一个XXXContext类继承自DbContext,实现一个拥有DbContextOptions参数的构造器,在启动类StartUp中的ConfigureServ...
2019-11-18 20:24:00 494
原创 【实践总结】给Centos和Ubuntu设置静态网络IP以及配置ssh功能
作为一名以Windows平台为主的开发者,在接触和使用Linux系统的过程中总会遇到一系列的问题。每当这时候,我相信大部分人是和我一样的处理办法,就是网上各种搜索尝试直到问题解决为止,而有些问题,前后不止会遇到一次 ,每次遇到每次搜索。因为在Linux上基本都是使用命令行操作,各种命令、工具、配置、路径等等不可能完全记得住,借助搜索引擎也是可以理解,但是网上的东西杂乱无章,开放性的问题(...
2019-08-25 22:56:00 236
原创 【工具篇】在.Net中实现HTML生成图片或PDF的几种方式
前段时间由于项目上的需求,要在.Net平台下实现把HTML内容生成图片或PDF文件的功能,特意在网上研究了几种方案,这里记录一下以备日后再次使用。当时想着找一种开发部署都比较清爽并且运行稳定的方案,但实际上两者同时满足基本不可能,只能做一个自己觉得合适的取舍,下面从两个维度(清爽指数和功能指数)逐一对比。 1.WebBrows...
2019-06-25 23:11:00 496
原创 .NetCore&Linux&Docker&Portainer踩坑历险记
最近有一个云服务器和数据库的迁移任务,踩坑爬坑无数次,觉得必须要记录一下。大家瓜子花生准备好,听我慢慢讲故事#手动笑哭#。 故事背景 公司是做电商业务的,在天猫有几家旗舰店数据量也很大。阿里有一个称为聚石塔的平台,专门给这些ISV提供各种云资源,强制绑定了一些业务,原本我们在聚石塔中有一台ECS和一台RDS部署在华东杭州节点,本月初突然收到阿里的邮件说是...
2019-04-21 23:38:00 590
原创 采用简易的环形延时队列处理秒级定时任务的解决方案
业务背景 在稍微复杂点业务系统中,不可避免会碰到做定时任务的需求,比如淘宝的交易超时自动关闭订单、超时自动确认收货等等。对于一些定时作业比较多的系统,通常都会搭建专门的调度平台来管理,通过创建定时器来周期性执行任务。如刚才所说的场景,我们可以给订单创建一个专门的任务来处理交易状态,每秒轮询一次订单表,找出那些符合超时条件的订单然后标记状态。这是最简单粗暴的做法,但明显也很lo...
2017-10-29 16:00:00 292
原创 分布式web架构中对session同步的常用处理方法以及优缺点
写在前面 最近在读一本来自淘宝技术团队大牛的书,名字叫《大型网站系统与Java中间件实践》。开篇的章节详细地介绍了一个网站架构由小变大不断演进的过程,其中从单机架构升级到集群架构的过程中着重介绍了关于session同步问题, 这也是很多人在聊到分布式时绕不过去的话题。下面就整理下书中的内容,也算是做个读书笔记,方便以后参考。 问题从哪来 ...
2017-08-06 10:10:00 108
原创 【小试插件开发】给Visual Studio装上自己定制的功能来提高代码调试效率
背后的故事 随着项目需求的逐步增加,后端开发框架在我手上也慢慢重构为组件开发模式,整体结构类似于NopCommence。在这种结构中,每个组件所在的类库项目其实是生成到网站项目里指定的一个目录的,然后随之而来的就有一个不痛不痒的问题一直挥之不去。那就是每次在组件内修改代码后都要清理解决方案,然后重新生成一下才能开始调试。如果不重新生成的话,修改...
2017-03-25 20:52:00 107
原创 在Parallel中使用DbSet.Add()发现的一系列多线程问题和解决过程
发现问题 需求很简单,大致就是要批量往数据库写数据,于是打算用Parallel并行的方式写入,希望能利用计算机多核特性加快程序执行速度。想的很美好,于是快速撸了类似下面的一串代码: using (var db = new SmsEntities()) { ...
2016-11-13 23:36:00 130
原创 在Centos中部署redis运行状态图形化监控工具 — RedisLive
写在前面 前两天看到张善友老师的一篇文章《先定个小目标, 使用C# 开发的千万级应用》,里面给出了一张腾讯OA基础服务中redis运行情况的一张监控图,然后想到自己的项目中前不久也上了redis缓存,所以也想找个监控工具。搜索一番,决定使用RedisLive来做监控。 和RedisLive有关的信息 RedisLiv...
2016-09-12 11:31:00 104
原创 再说表单验证,在Web Api中使用ModelState进行接口参数验证
写在前面 上篇文章中说到了表单验证的问题,然后尝试了一下用扩展方法实现链式编程,评论区大家讨论的非常激烈也推荐了一些很强大的验证插件。其中一位园友提到了说可以使用MVC的ModelState,因为之前通常都在Web项目中用没在Api项目用过,想想Api方法接收的多参数都封装成了一个实体类,独立于数据Model层,这样其实很方便用ModelState做验证,于是尝试了一下。...
2016-09-04 23:59:00 236
原创 由表单验证说起,关于在C#中尝试链式编程的实践
在web开发中必不可少的会遇到表单验证的问题,为避免数据在写入到数据库时出现异常,一般比较安全的做法是前端会先做一次验证,通过后把数据提交到后端再验证一次,因为仅仅靠前端验证是不安全的,有太多的http请求工具可以轻松绕过你的前端验证把危险数据提交到后端,所以,之前不做后端参数验证的同学赶快检查一下你的代码~别中招了 那么,故事就是有关于后端验证。 这里...
2016-08-26 09:10:00 119
原创 【新手总结】在.Net项目中使用Redis作为缓存服务
最近由于项目需要,在系统缓存服务部分上了redis,终于有机会在实际开发中玩一下,之前都是自己随便看看写写,很零碎也没沉淀下来什么,这次算是一个系统学习和实践过程的总结。 和Redis有关的基础知识 Redis是一个开源的分布式NoSql数据库,可以用来做缓存服务、消息队列、数据存储等等,数据类型之丰富,效率之高,简直逆天!没有了解过的可以移步去问度娘~...
2016-08-14 23:19:00 939
原创 【新手出发】从搭虚拟机开始,一步一步在CentOS上跑起来.Net Core程序
文章背景 微软6月26号发布core 1.0版本后,园子里关于这方面的文章就更加火爆了,不管是从文章数量还是大家互动的热情来看,绝对是最热门的技术NO.1。我从去年底开始接触.net core到现在也大半年了,一直停留在浏览各种帖子上,偶尔新建个项目敲几行代码练习一下。可是对于core最大的卖点——跨平台,一直没法实际体验一回,因为压根没接触过Linux,完全不会...
2016-07-21 11:36:00 83
2016架构师特刊:揭秘京东 618 背后的技术力量
2016-08-12
京东技术解密
2016-05-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人