摘要:
【背景】 XXX服务,前后使用了两个redis cluster集群:集群A(2018.1.23前使用,在1.23之后没有流量,但是服务没停),集群B(2018.1.23后使用)。 【原因】 根本原因:两个集群使用相同的实例,导致两个集群的拓扑信息互相伤害拓扑乱掉 诱因:老集群下线流程有误,服务未停, 阅读全文
摘要:
【背景】 公司在海外的业务没有自建机房,而是使用了aws的服务,型号是r4.4xlarge。 但是,部署在aws上的redis集群,经常遇到某个实例耗时抖动比其他实例厉害,但是cpu、mem、网络等指标都较低的情况。 于是开启了一场漫长的问题定位之路。 【现象】 集群中某些redis实例有较明显的抖 阅读全文
摘要:
(一)关键问题 1.读写分离 2.分库分表 3.类别 lib库 1)业务直接到数据库,少一层proxy效率更高 2)没有proxy的lvs的单点问题 proxy 1)统一管理所有到数据库的连接,连接复用 2)基础查询功能抽象,减少代码耦合 3)易于实现监控、数据迁移、连接管理等功能 (二)shard 阅读全文
摘要:
(一)简介 tcmalloc是与glibc、malloc同一级别的内存管理库,tcmalloc会hack所有glibc提供的接口,为调用者提供透明的内存分配。 (二)总体结构 PageHeap 内存管理单位:span(连续的page的内存) CentralCache 内存管理单位:object(由s 阅读全文
摘要:
(一)关键问题 数据分布 对于存储系统,最重要的问题就是数据分布,即什么样的数据放置在什么样的节点上。数据分布时需要考虑数据是否均衡、以后是否容易扩容等一系列问题。不同的数据分布方式也存在不同的优缺点,需要根据自身数据特点进行选择。 1)哈希分布 => 随机读取 取模直接哈希:将不同哈希值的数据分布 阅读全文
摘要:
(一)功能 使用已存在的连接与rpc-server端通信,发送请求 连接复用 并发请求 (二)设计思路 对每个要通信的server端维持一个连接池,存放已经建立的连接,需要与server通信时直接从连接池取连接,不用重新创建 动态连接池 连接池中连接的数量是动态变化的,如果上一时刻请求多,现在请求少 阅读全文
摘要:
(一)功能 rpc(远程函数调用)提供client端通过网络调用远程server端的函数的服务。 rpc-server端需要提供较高的吞吐能力,支持较大的并发连接。 (二)设计思路 epoll监听多个连接fd,实现IO复用 1)epoll没有最大并发连接的限制,上限是最大可以打开文件的数目,一般远大 阅读全文
摘要:
【问题背景】 某天早上做活动,流量大量增长,导致大量更新库存操作失败。 操作mysql返回的错误均为“Lost Connection to mysql server”,即mysql服务端主动断开了连接,导致update操作失败。 都是在sql执行过程中返回的“Lost”,且都是update操作返回“ 阅读全文
摘要:
【背景】 该项目是用C++实现的一个处于数据库和应用服务之间的分库分表路由服务的组件。 层次结构 主要功能 1)与数据库维持长连接 2)根据不同分库分表规则选择sql路由,为上游提供透明的sql查询服务and定制化接口 3)sql执行的检查,防sql注入、防全表扫描等 问题 在对服务性能进行评估时发 阅读全文
摘要:
【现象&背景】 本服务是个为数据库的分库分表提供路由规则计算,sql过滤执行的中间服务。即上游将请求发给本服务,本服务根据分库分表规则将相应的sql执行发送给对应的分库、分表去执行,并整理结果返回给上游。 2016-07-14下午,上游流量切换后,mysql大量报出"<!--?xml version 阅读全文