自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

转载 彻底理解CPU Load-这一篇就够了

我们看下uptime~ $ uptime这是在双核CPU的系统上运行的,所以,我们的负载还有很大的空闲资源。在负载达到并保持在1.4左右之前,我不需要做处理。现在,那三个数字什么含义呢?0.65是最近一分钟的平均值,0.42是最近五分钟的平均值,而0.36是最近15分钟的平均值。我应该观察哪个平均值?1、5或15分钟?根据我们前面讨论过的处理规则(1.00 =进行处理,依此类推),您应该查看5或15分钟的平均值。坦白说,若一分钟的CPU 负载值达到1,还是可以的。

2023-10-24 18:00:14 484

原创 Pod hang住问题记录

(因为之前重写了logrus日志库的iowirter和formatter,所以这里的修改成本很低),想效仿logback日志库增加缓存队列,这样可以保证日志的顺序性,因为纯异步的写日志,可能会遇到日志收集无序的问题,但是每条日志中有时间戳,查看日志是从ES中搜索,所以日志的顺序性可以暂时忽略,另外就是加了队列,还是广义上的同步写日志,虽然可以把队列设置成很大,极端情况可能还是有问题,另外,增加队列增大了逻辑复杂度,线上业务使用期间暂时还是不要改动过多。服务断断续续使用,上游报错确实也会收到压力。

2023-08-02 17:12:59 326

原创 Golang go关键字原理

2. 如果没从gfree列表中取到g,则使用malg()函数创建一个新的g,分配的初始栈空间大小为2K。1. 首先,如果P本地的gfree列表不空,从gfree列表取出一个g返回,如果P的gfree列表为空,则从全局的gfree列表批量取一部分,返回一个g;3. 设置g的sched结构体,该gobuf类型的结构体包含SP、PC等goroutine调度的寄存器上下文信息;创建goroutine的go关键字被编译器翻译成对newproc()函数的调用。4. 把新g的状态更新为_Grunnable;

2023-03-18 21:45:25 122

转载 golang mcall()汇编函数

MOVQ BX, (g_sched+gobuf_pc)(AX) // 这句简单,AX存了g的地址,BX存了caller's PC,那这句就是把caller's PC 存到 g 结构体的 sched 的 gobuf 的 pc 字段。可能在debug的时候,有点用?MOVQ (g_sched+gobuf_sp)(SI), SP // sp = m->g0->sched.sp // 将g0的SP值,拿出来,交给寄存器SP,看见没,开始切换了,或者说,已经切完了,下面就是调用 fn (g)

2023-03-16 20:17:35 345

转载 Go time.Sleep()实现原理

Time.sleep(d duration)方法会阻塞一个协程的执行直到d时间结束。实现原理很简单,但内部代码实现却是大有文章,每个go版本的timer的实现都有所不同,本文基于go1.14,接下来分别从宏观和围观介绍一遍主要调度过程。下面介绍一种最简单的场景:首先存在多个goroutine,GT为有time.Sleep休眠的g,当GT被调度到m上执行时,场景如下图。

2023-03-16 15:58:09 941

原创 Golang goroutine调度

由于运行时间过长导致的抢占调度,可以看到go的抢占调度机制并非无条件的抢占。

2023-03-14 12:15:21 178

转载 MySQL 索引设计

在单表上对索引进行设计其实还是非常容易的,只需要遵循固定的套路就能设计出一个理想的三星索引,在这里强烈推荐数据库索引设计与优化这本书籍,其中包含了大量与索引设计与优化的相关内容;在之后的文章中读者也会分析介绍书中提供的几种估算方法,来帮助我们通过预估问题设计出更高效的索引。如果对文章内容的有疑问,可以在博客下面评论留言。

2023-03-13 19:55:40 177 1

转载 2022 春节抖音视频红包系统设计与实现

我们做了什么业务背景在春节活动期间,抖音将视频和春节红包相结合,用户可以通过拍视频发红包的方式来给粉丝和好友送祝福。业务玩法整个活动玩法分为 B2C 和 C2C 两种玩法,下面对这两个玩法的流程简单介绍下B2C 红包在 B2C 红包玩法中,用户需要先来抖音或者抖 Lite 参加春节红包雨活动,有一定概率在春节红包雨活动中获得红包补贴。用户可以在获得补贴后直接跳转到相机页面,或者在之后拍摄视频跳转到相机页面,在相机页面用户拍摄完视频后会看到一个红包挂件,在挂件中可以看到已发放补贴。用户选择补贴后点击下

2022-08-03 11:40:01 607

转载 春节钱包大流量奖励系统入账及展示的设计与实现

系统设计

2022-08-02 14:29:19 227

转载 优雅的重试下游接口

目录重试治理的解决方案业务接入成本低动态配置能够在链路级别防重试风暴重试组件的功能退避策略限制单点重试限制链路重试重试请求不重试超时场景优化DDL服务调用链路中,经常会由于网络抖动等原因造成HTTP、RPC调用失败,这个时候失败重试机制可以提供请求的最终成功率,减少故障影响。但是这种重试机制会造成重试放大故障流量、链路放大的后果,所以一般大家不太敢重试,公司内部出现过多次因为重试而导致的事故,且出事故的时候还需要修改代码上线才能关闭重试,导致事...

2022-04-28 17:00:51 300

原创 Linux性能问题分析流程与优化思路

排查顺序整体情况: top/htop/atop命令查看进程/线程、CPU、内存使用情况,CPU使用情况; dstat 2查看CPU、磁盘IO、网络IO、换页、中断、切换,系统I/O状态; vmstat 2查看内存使用情况,内存状态; iostat -d -x 2查看所有磁盘的IO情况,系统I/O状态; iotop查看IO靠前的进程,系统的I/O状态; perf top查看占用CPU最多的函数,CPU使用情况; perf record ..

2022-04-28 10:21:20 122

转载 字节跳动--券系统设计方案

需求背景十万级的用户券系统需求,负责券建立、发放、核销、查询。需求分析首先对需求进行拆解,大致包含两部分:券的配置,即全批次(券模板)的创建,券模板的有效期和券的库存信息; 券的发放,即券记录的创建和管理(过期,状态流转);技术选型券模板、券记录都要持久化,同时还需要支持条件查询,因此选用通用的MySQL作为存储DB; 另外由于需要支持高并发的读写,所以引入Redis做缓存; 券模板、券记录都有过期时间、过期状态等状态流转,有必要引入延迟消息队列做相应的业务处理,Roc.

2022-04-25 19:39:17 683

转载 Linux socket编程中的阻塞和非阻塞

原文链接:http://blog.sina.com.cn/s/blog_4b029ef30100nxcb.html阻塞socket和非阻塞socket读操作对于阻塞的socket,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返回。当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数。当sockt的接收缓冲区中的

2022-04-25 11:35:20 1207 2

转载 乐观锁,悲观锁,CAS,自旋锁

原文链接:https://blog.csdn.net/qq_34337272/article/details/81252853何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每...

2019-07-03 03:06:34 689

转载 强一致性算法:Raft协议

原文链接:https://www.jianshu.com/p/8e4bbe7e276cRaft协议动画链接:http://thesecretlivesofdata.com/raft/#overview上篇讲到了「拜占庭将军问题」:多个拜占庭将军要如何在可能有叛徒、信使可能被策反或者暗杀的情况下达成是否要进攻的一致性决定?还不了解的先看看上一篇《拜占庭将军问题》。这篇主要是介绍简化版拜占庭将...

2019-06-04 16:29:51 843 1

转载 分布式事务以及解决方案

原文链接:https://blog.csdn.net/u010425776/article/details/79516298节选部分内容基于可靠消息服务的分布式事务这种实现分布式事务的方式需要通过消息中间件来实现。假设有A和B两个系统,分别可以处理任务A和任务B。此时系统A中存在一个业务流程,需要将任务A和任务B在同一个事务中处理。下面来介绍基于消息中间件来实现这种分布式事务。在...

2019-06-03 01:02:03 115

转载 ELK原理与介绍

原文链接:https://www.cnblogs.com/aresxin/p/8035137.html为什么用到ELK:一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式...

2019-06-01 19:37:52 117

转载 分布式系统CAP理论

原文链接:http://www.ruanyifeng.com/blog/2018/07/cap.html分布式系统(distributed system)正变得越来越重要,大型网站几乎都是分布式的。分布式系统的最大难点,就是各个节点的状态如何同步。CAP 定理是这方面的基本定理,也是理解分布式系统的起点。本文介绍该定理。它其实很好懂,而且是显而易见的。下面的内容主要参考了 Mic...

2019-06-01 02:35:43 102

转载 分布式架构的服务治理

原文链接:https://blog.csdn.net/simplemurrina/article/details/84102822上次被问到什么是服务治理平台?谈谈你对服务治理平台的理解?我觉得谈服务治理,首先要知道什么是微服务?微服务就是一些协同工作的小而自治的服务,两个特性简单连接,分散管理。Ø简单连接1、在连接通道方面,微服务很轻,一般采用轻量级的通讯协议(如HTT...

2019-05-31 16:26:35 2769

转载 OpenTracing在Go中的使用

原文链接:https://wu-sheng.gitbooks.io/opentracing-io/content/为什么需要Tracing?开发和工程团队因为系统组件水平扩展、开发团队小型化、敏捷开发、CD(持续集成)、解耦等各种需求,正在使用现代的微服务架构替换老旧的单片机系统。 也就是说,当一个生产系统面对真正的高并发,或者解耦成大量微服务时,以前很容易实现的重点任务变得困难了。...

2019-05-29 18:27:03 3430

转载 分布式监控系统zipkin介绍

原文链接:https://www.cnblogs.com/zhongpan/p/7506930.htmlzipkin是Twitter基于google的分布式监控系统Dapper(论文)的开发源实现,zipkin用于跟踪分布式服务之间的应用数据链路,分析处理延时,帮助我们改进系统的性能和定位故障。zipkin架构Instrumented client和Instrumented ...

2019-05-29 18:24:13 224

转载 基于gRPC-Go和etcdV3实现分布式框架中的服务发现&负载均衡

原文链接:https://segmentfault.com/a/1190000008672912gRPC服务发现&负载均衡构建高可用、高性能的通信服务,通常采用服务注册与发现、负载均衡和容错处理等机制实现。根据负载均衡实现所在的位置不同,通常可分为以下三种解决方案:1、集中式LB(Proxy Model)在服务消费者和服务提供者之间有一个独立的LB,通常是专门...

2019-05-26 03:22:02 2040

转载 MySQL的四种事务隔离级别

原文地址:http://www.cnblogs.com/huanongying/p/7021555.html本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB一、事务的基本要素(ACID)  1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有...

2019-04-22 22:53:02 93

原创 脚本程序批量处理MySQL数据

只是简单的update/insert/delete这种情况比较简单,不做过多讨论。如果是读取别的表的字段,然后更新目标表中的数据的话,不同的处理方式,性能差距很大,也是经验所得。1)单条读取字段然后更新目标表记录,这种方式很好理解,最容易被想到,但是执行起来,就算是mysql驱动使用了连接池,性能也很差;对于处理mysql数据,如果数据量大应该首先想到用批处理的方式。2)首先读取一批别的表中的数据...

2018-07-04 15:08:12 732

转载 Redis实现支持多优先级的消息队列

原文地址:http://www.cnblogs.com/happyday56/p/4142761.html用redis实现支持优先级的消息队列为什么需要消息队列系统中引入消息队列机制是对系统一个非常大的改善。例如一个web系统中,用户做了某项操作后需要发送邮件通知到用户邮箱中。你可以使用同步方式让用户等待邮件发送完成后反馈给用户,但是这样可能会因为网络的不确定性造成用户长时间的等待从而影响用户体验...

2018-04-03 00:32:39 1383

转载 Python多个装饰器的顺序

原文链接:http://www.cnblogs.com/nisen/p/6193426.html?utm_source=itdadao&utm_medium=referral装饰器是Python用于封装函数或代码的工具,网上可以搜到很多文章可以学习,我在这里要讨论的是多个装饰器执行顺序的一个迷思。疑问大部分涉及多个装饰器装饰的函数调用顺序时都会说明它们是自上而下

2017-01-20 02:51:48 6761 3

原创 STL中的优先级队列priority_queue

STL中priority_queue是一个容器适配器,本质是一个最大堆,也就是用vector实现的。#include #include #include using namespace std;templateclass priority_queue {public: priority_queue() {} virtual ~priority_queue() {} vo

2017-01-19 23:02:30 296

原创 socket网络编程中常用的SO_KEEPALIVE套接字选项

使用getsocketopt( )可以得到当前套接字的选项内容使用setsocketopt( )函数设置应用程序需要使用的套接字选项SO_KEEPALIVE选项:设置了这个选项后,如果TCP连接2小时内在任一方向都没有数据交换,那么TCP自动发送一个keep-alive probe(分节),这个分节对端必须回应,会出现三种情况:1)对端返回ACK,说明连接正常,应用进程不会

2017-01-18 23:28:24 1582

转载 Linux socket编程中阻塞和非阻塞

原文链接:http://blog.sina.com.cn/s/blog_4b029ef30100nxcb.html阻塞socket和非阻塞socket读操作对于阻塞的socket,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返回。当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数。当sockt的接收缓冲区中的数据大于

2017-01-18 18:28:23 781

转载 并查集教程

原文链接:https://segmentfault.com/a/1190000004023326#articleHeader5其实并查集顾名思义就是有“合并集合”和“查找集合”两种操作的关于数据结构的一种算法。概述性质并查集算法不支持分割一个集合。算法用集合中的某个元素来代表这个集合,该元素称为集合的代表元。一个集合内的所有元素组织成

2017-01-07 01:46:35 250

转载 使用Libevent的程序demo

原文链接:http://blog.csdn.net/feitianxuxue/article/details/9372535libevent默认情况下是单线程,每个线程有且仅有一个event_base,对应一个struct event_base结构体,以及赋予其上的事件管理器,用来安排托管给它的一系列的事件。当有一个事件发生的时候,event_base会在合适的时间

2016-11-18 03:35:06 554

转载 同步IO,异步IO,IO阻塞,IO非阻塞

同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不

2016-11-16 02:02:40 188

转载 epoll的水平触发和边缘触发

原文链接:http://www.w2bc.com/Article/78029EPOLL事件有两种模型:Edge Triggered (ET) 边缘触发只有数据到来,才触发,不管缓存区中是否还有数据。Level Triggered (LT) 水平触发只要有数据都会触发。 首先介绍一下LT工作模式:LT(level triggered)是缺省的工作方式,并且同时

2016-11-16 01:35:48 979

转载 进程与线程的一个形象的解释

原文:http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html  原作者:阮一峰的网络日志进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发

2016-10-22 18:10:35 256

原创 Mac安装MySQL

Mysql安装安装后进入 系统偏好设置进行启动 编辑  /etc/bashrc   添加   export   PATH=$PATH:/usr/local/mysql/binsource /etc/bashrccp  /usr/local/mysql/support-file/my-default.cnf  /etc/my.cnf如果密码忘了

2016-06-24 10:56:07 261

原创 C++已经失势,起码在互联网是这样

将我在拉勾上的目标职位改成C++开发以后,翻出来的公司一天就投完了,那些出来的职位还有好多是拿C++做界面的。其中有比较知名的大互联网公司招C++,但是我非名校毕业,也没有互联网公司经验,人家看不上。今天下午经历了异常的烦躁,绝望。没错,C++已经失势了,起码在互联网领域是这样,剩下的只有搜索引擎,推荐系统几个屈指可数的领域。(遥想几天前拒了乐视的推荐系统offer,真是脑残,天真!)我现在才

2016-03-09 18:26:29 587

转载 c++编译器对多态的实现原理总结

原文地址    http://developer.51cto.com/art/201503/469316.htm多态在编译器里怎么实现的?C++编译器发现类中有虚函数,就为该类型建立一个虚函数表(存储类成员函数指针的数据结构),类的每个实例中包含一个vptr指针。对象创建时,编译器根据对象的类型初始化vptr指针,从而让vptr正确的指向所属类的虚函数表。程序运行到动态绑定时,

2016-03-07 18:56:35 358

转载 Bloom Filter 布隆过滤器

原文转自 http://www.cnblogs.com/heaad/archive/2011/01/02/1924195.htmlBloomFilter——大规模数据处理利器Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。

2016-03-01 17:39:02 820

转载 网络编程中的序列化和反序列化

原创:美图技术团队 http://tech.meituan.com/serialization_vs_deserialization.html个人总结:protobuf序列化后的数据更小,是xml的1/3~1/10;而且性能更好,解析速度快,比xml快20~100倍;使用非常简洁,反序列化只需要一行代码。缺点就是序列化后的数据不可读,不方便调试。json大部分场景下可以取代xml,

2016-03-01 00:19:02 1909

转载 Linux下的多线程调试

1.采样输出2.gdb调试(attach, sleep等)3.利用信号处理函数4.strace跟踪系统调用和收到的信号5.core文件6.log文件原处:http://www.spongeliu.com/86.html多线程程序可能存在很多潜在的bug,如data race,dead lock,信号bug等,而这些bug一向很难调试,现在有很多论

2016-01-26 22:27:38 1479

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除