自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux - pthread

pthread(POSIX thread)库是个标准C/C++多线程API库,线程没有父子之分。与标准 fork() 相比,线程带来的开销很小。内核无需单独复制进程的内存空间或文件描述符等等。这就节省了大量的 CPU 时间,使得线程创建比新进程创建快上十到一百倍。因为这一点,可以大量使用线程而无需太过于担心带来的 CPU 或内存不足。1. 多线程基础线程的操作包括:创建、终止、同步、调度、...

2019-10-14 22:15:45 934

原创 TCP/IP协议

TCP是什么?TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。具体的关于TCP是什么,我不打算详细的说了;当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续。它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。首先来看看OSI的七层模型:...

2019-09-19 20:49:32 441

原创 NFS V3 Proc and V4 Opcode

Operations for NFSv4.1Reference:https://www.ietf.org/rfc/rfc3530.txt#define NFS4_FHSIZE 128#define NFS4_VERIFIER_SIZE 8#define NFS4_OPAQUE_LIMIT 1024#define NFS4_SESSIONID_SIZE 16#define NF...

2019-09-03 15:23:25 1110

原创 Python L2: String、Class、Json

Python中 Json Object, Json String, Dict之前的转换和关系

2023-06-30 11:59:53 389

原创 并发编程技术

阻塞式IO非阻塞式IOIO复用(select 和 poll)信号驱动式IO(SIGIO)异步IO(POSIX的aio_系列函数)linux 中最常用的 IO 模型是同步 IO,在这个模型中,请求发出后应用程序会阻塞直到满足条件(阻塞 IO),或在不满足条件的情况下立即返回出错(非阻塞 IO),这样做的好处是程序在等待 IO 请求完成时不会占用 CPU。POSIX 定义了异步 IO 应用程序接口(AIO API),linux 2.6 以上版本的内核也实现了内核级别的异步 IO 调用。...

2022-08-28 13:02:25 1305 1

原创 C++ 代码阅读 - 宏

C++ 代码宏

2022-07-17 08:59:05 378

原创 Linux Perf对进程进程CPU和内存分析

Linux 查看内存问题

2022-06-13 14:56:34 2332

转载 redis4.0之MEMORY命令详解

前言在过去,查看redis的内存使用状态只有info memory命令,并且也只有一些基础信息,想要获取全局信息就有些困难。4.0开始redis提供了MEMORY命令,一切都变得简单起来。redisMEMORY命令MEMORY命令一共有5个子命令,能够经过MEMORY HELP来查看:数据库127.0.0.1:6379> memory help1) "MEMORY DOCTOR - Outputs memory problems rep

2022-05-29 09:31:44 2475

转载 Thrift IDL

Thrift IDL基本语法简言:介绍Thrift的IDL基本语法,初次使用或多或少的会有很有"坑"要踩,但是我们要遇山挖山,遇海填海,在学习的道路上坚定的走下去,方可日后吹牛B!IDLThrift 采用IDL(Interface Definition Language)来定义通用的服务接口,然后通过Thrift提供的编译器,可以将服务接口编译成不同语言编写的代码,通过这个方式来实现跨语言的功能。基本类型bool: 布尔值 对应Java中的booleanbyte: 有符号.

2022-05-26 15:44:52 216

原创 C++ 11 并发编程

Bjarne Stroustrup's Homepagehttps://www.stroustrup.com/与 C++11 多线程相关的头文件C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是<atomic> ,<thread>,<mutex>,<condition_variable>和<future>。<atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_flag,

2022-05-23 17:56:33 489

原创 分布式系统

分布式技术的算法和基本理论

2022-01-09 17:17:47 257

原创 分布式文件存储(NAS)应用和设计

2022-01-09 17:13:43 1361

原创 Go Project and Makefile

Go Project工程化目录管理和make 编译

2021-09-20 23:33:15 236

转载 Go语言基础

Go基础1. Go 没有异常类型,只有错误类型(Error),通常使用返回值来表示异常状态。2.Goroutines 可以被认为是轻量级的线程。 与线程相比,创建 Goroutine 的开销很小。 Go应用程序同时运行数千个 Goroutine 是非常常见的做法。3.Go 语言中,字符串是只读的,也就意味着每次修改操作都会创建一个新的字符串。如果需要拼接多次,应使用strings.Builder,最小化内存拷贝次数。var str strings.Builderfor i := 0...

2021-09-20 10:59:58 293

原创 Kubernetes集群管理常用命令

集群信息的各种查看基本上是在Master节点操作0、查看集群信息kubectl cluster-info1、查看 Node状态kubectl get nodeskubectl get node [IP] //节点IP可以用空格隔开写多个kubectl describe node [IP]kubectl delete node [IP]2、查看 Service 信息kubectl get service3、查看PODkubectl get pods --all..

2021-09-11 19:35:25 144

转载 Database

发展前沿 · NewSQL数据库概述传统的关系型数据库有着悠久的历史,从上世纪60年代开始就已经在航空领域发挥作用。因为其严谨的强一致保证以及通用的关系型数据模型接口,获得了越来越多的应用,大有一统天下的气势。这期间,涌现出了一批佼佼者,其中有优秀的商业化数据库如Oracle,DB2,SQL Server等,也有我们耳熟能详的开源数据库MySQL及PostgreSQL。这里不严谨的将这类传统数据库统称为SQL数据库。SQL to NoSQL2000年以后,随着互联网应用的出现,很多场景下,并不需

2021-06-29 19:02:45 241

转载 Redis事件和事件循环

Reids 是采用单线程和IO多路复用是处理来之客户端的请求的,其中主要用到了evport,epoll,kqueue,select四种多路复用(按优先顺序)。其中evport应该是Solaris上的,epoll是Linux上,kqueue则是FreeBSD上,而最后的select则是兼容性的选择,很多系统都支持。// ae.c/* Include the best multiplexing layer supported by this system. * The following sho

2021-05-28 08:43:09 293

原创 Python RedisCluster

检查Python 的redis库pip3 list | grep redisredis 3.5.3redis-py-cluster 2.1.0连接Redis集群示例:2.1.0的版本没有StrictRedisCluster#!/home/deploy/.pyenv/shims/python3#coding = utf-8from rediscluster import RedisClusterimport randomdef random_str(.

2021-05-17 17:18:01 2239

原创 C++工具库

1.fmtlib/fmt:is an open-source formatting library providing a fast and safe alternative to C stdio and C++ iostreams

2021-04-01 14:37:21 172

原创 Linux SIGNAL

#include <machine/signal.h> /* sigcontext; codes for SIGILL, SIGFPE */#define SIGHUP 1 /* hangup */#define SIGINT 2 /* interrupt */#define SIGQUIT 3 /* quit */#define SIGILL 4 /* illegal instruction (not reset whe.

2021-03-27 15:38:54 90

转载 redis基于binlog的主从同步

1. 背景上半年我们使用RocksDB做存储引擎,实施了Redis数据实时落地的项目,实现了在兼容redis协议的前提下,管理超出内存大小的数据集。在主从同步方面,我们沿用了Redis原有的方案,该方案在实际运营中应对不良的网络状况显得很无力,因此我们在数据落地的基础上,为Redis开发了一套新的主从同步机制。2. Redis原生同步方式主从数据同步分一般两步走:同步已有的全量数据,和同步增量数据。同步的全量数据必须是master数据集的point-in-time的快照;增量数据则从快照完成

2021-03-24 20:22:06 2433

转载 Redis原理

一、Redis的线程模型Redis作为一个高效的KV数据库。它的高效除了在内存存储、巧妙的数据结构外,还有就是它的线程模型。大家都知道Redis是单线程的。这里说的单线程其实是指处理客户端的请求是单线程的,可以把它叫做主线程。从4.0的版本之后,还引入了一些线程处理其他的事情,比如处理脏数据、bigkey的删除等等。然而把处理请求设置成单线程有什么好处呢?这样岂不是不能很好地利用CPU的多核的优势了?那是因为Redis中单线程已经够用了, CPU不是Redis的瓶颈,它的瓶颈是在内存或者网络带宽。

2021-03-16 17:04:29 307

转载 Python多线程的原理与实现

目的:了解python线程执行原理 掌握多线程编程与线程同步 了解线程池的使用1 线程基本概念1.1 线程是什么?线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1) 地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3) 线程是处理器调度的基本单位,但进程不是.(4) 二者均可并发执行.简而言之,一个程序至少有一个进程

2020-12-21 11:57:10 129

原创 Python版本管理之Pyenv

安装git clone https://github.com/pyenv/pyenv.git ~/.pyenv配置环境echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrcecho 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrcecho -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval

2020-12-13 17:52:58 104

转载 NFS协议的解析

庖丁解牛20世纪80年代初,一家神奇的公司在硅谷诞生了,它就是Sun Microsystems。这个名字与太阳无关,而是源自互联网的伊甸园—Stanford University Network的首字母。在不到30年的时间里,SUN公司创造了无数传世作品。其中,Java、Solaris和基于SPARC的服务器至今还闻名遐迩。后来,人们总结SUN公司衰落的原因时,有一条竟然是技术过剩。Network File System(NFS)协议也是SUN公司设计的。顾名思义,NFS就是网络上的文件系统。它的应

2020-12-10 21:00:56 4537 2

原创 高效编程100条

1._n&7 在功能上等价于 _n%8, 但是位操作更快。

2020-11-14 11:37:42 108

原创 分布式专题 - Rocksdb

1.RocksDB 简介RocksDB 是由 Facebook 基于 LevelDB 开发的一款提供键值存储与读写功能的数据库软件,旨在充分实现快存上存储数据的服务能力。 RocksDB是一个c++库,可以用来存储keys和values,且keys和values可以是任意的字节流,支持原子的读和写; RocksDB是一个基于LSM-Tree 存储引擎实现的数据库架构,LSM 通过 将磁盘的随机写转化为顺序写来提高写性能,而付出的代价就是牺牲部分读性能 、 写放大; RocksDB 所有的数据在引.

2020-11-06 20:12:02 1883

转载 memtier_benchmark:一种用于Redis和Memcached的高吞吐量基准测试工具

memtier_benchmark是Redis Labs推出的一款命令行工具,它能够产生各种各样的流量模式,可以对Memcached和Redis实例进行基准测试。这个工具提供了丰富的自定义选项和报表功能,通过命令行界面就能够轻松地使用。这个工具的一些优点如下所述: memtier_benchmark同时支持Redis和Memcached(二进制和文本)协议,因此你可以对这两种NoSQL系统进行基准测试,甚至可以比较它们在不同场景中的性能。 memtier_benchmark能够启动多个工作线

2020-10-28 10:12:29 3629

转载 mac中使用docker搭建linux开发服

在mac下开发C或C++后台服务器时,由于mac没有epoll等网络库,编译时需要把代码上传到远程linux服务器,非常不方便且效率低下。使用docker在mac上搭建linux服务,可以将本地源码路径映射到linux服务中,实现在mac中编辑,在linux容器中编译运行及调试,提升开发效率。1. 下载安装dockerdocker的下载地址为:https://download.docker.com/mac/stable/Docker.dmg,和其他macOS软件一样,安装非常简单,双击下载的 .dm

2020-10-27 11:10:40 1516

转载 Redis中的数据结构

1. 底层数据结构, 与Redis Value Type之间的关系对于Redis的使用者来说, Redis作为Key-Value型的内存数据库, 其Value有多种类型.String Hash List Set ZSet这些Value的类型, 只是"Redis的用户认为的, Value存储数据的方式". 而在具体实现上, 各个Type的Value到底如何存储, 这对于Redis的使用者来说是不公开的.举个粟子: 使用下面的命令创建一个Key-Value$ SET "Hello"

2020-10-27 10:09:29 427

转载 服务端高并发分布式架构演进之路

1、概述本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。2、基本概念在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍。1)什么是分布式?系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上。2)什么是高可

2020-10-27 09:55:01 447

转载 P2P 网络核心技术:Gossip 协议

背景Gossip protocol 也叫 Epidemic Protocol (流行病协议),实际上它还有很多别名,比如:“流言算法”、“疫情传播算法”等。这个协议的作用就像其名字表示的意思一样,非常容易理解,它的方式其实在我们日常生活中也很常见,比如电脑病毒的传播,森林大火,细胞扩散等等。Gossip protocol 最早是在 1987 年发表在 ACM 上的论文 《Epidemic Algorithms for Replicated Database Maintenance》中..

2020-10-26 23:36:28 278

转载 一致性Hash原理与实现

前言互联网公司中,绝大部分都没有马爸爸系列的公司那样财大气粗,他们即没有强劲的服务器、也没有钱去购买昂贵的海量数据库。那他们是怎么应对大数据量高并发的业务场景的呢?这个和当前的开源技术、海量数据架构都有着不可分割的关系。比如通过mysql、nginx等开源软件,通过架构和低成本的服务器搭建千万级别的用户访问系统。怎么样搭建一个好的系统架构,这个话题我们能聊上个七天七夜。这里我主要结合Redis集群来讲一下一致性Hash的相关问题。Redis集群的使用我们在使用Redis的过程中,为了保证Re

2020-10-26 23:10:42 113

原创 Linux MySQL安装和实践

Linux MySQL安装第一步:安装从网上下载文件的wget命令[root@master ~]# yum -y install wget第二步:下载mysql的repo源[root@master ~]# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 第三步:安装mysql-community-release-el7-5.noarch.rpm包[root@master ~]# rpm -i

2020-10-15 10:38:17 70

转载 前后端UI框架

最近有个项目需要,维护优化以前一个外包的项目,由于项目比较早所以UI不太美观,想做重构。想满足的条件应该达到如下几个:1、美观、大方、简洁2、兼容IE8、不考虑兼容IE6/IE7,因为现在还有很多公司在使用Win7系统,系统内置了IE83、能通过选项卡打开多个页面,不想做单页,iframe也没关系4、性能好,不要太笨重5、最好以Bootstrap为基础6、还希望在以后别的系统中能够复用。一次次反复纠结的选择开始了,给大家介绍下我考虑过的UI,也给大家一个参考。一、Easy

2020-10-15 08:26:16 1007 1

原创 云服务器及其存储性能测试方法

1、整体性能做任何的业务计算都需要占用大量CPU的运算能力,比如直播等视频编解码等,业务高峰期CPU的利用率经常会达到90%以上。测试工具:我们选择了评测工具SPEC CPU。SPEC CPU是标准性能评价机构 (Standard Performance Evaluation Corporation,简称SPEC)开发的用于评测CPU性能的基准程序测试组,是一套CPU子系统测试工具。处理器、内存和编译器都会影响最终的测试结果,而I/O(磁盘)、网络、操作系统和图形子系统对SPEC CPU2000的影

2020-10-14 10:00:14 1416

原创 KV引擎的数据库回放

基于KV的数据库现状:BerkeleyDB SQLite KyotoTreeDB LevelDB Redis性能对比:LevelDB只是提出了一种基于LSM的DB架构,提供了Get/Put/Scan的接口以及正向和反向遍历的算法,明显的缺陷:2MB/s写吞吐很低,只用了一个CPU(单线程Compaction) P99的延时在数10秒以上,单线程flush数据,和compaction 冲突 写放大严重达到70倍,读放大严重(没有用blooms 扫描) read-write...

2020-09-25 15:08:15 159 1

转载 NFS协议介绍(NAS)

第一次使用分布式客户端服务器模式的计算的其中一个领域是分布式文件系统。在这样一个环境中,有许多客户机和一个服务器(服务器或者更多),服务器将数据保存在它的本地磁盘上,客户机通过组织良好的协议消息来获取数据。正如上面图片中看到的,服务器有磁盘,客户机发送消息来获取它们需要的目录和文件。为什么我们要使用这种很麻烦的布局呢?(比如,为什么不直接使用客户机的本地磁盘呢?)主要的原因是这种布局使得在客户机之间的数据共享更加容易。比如,如果你访问Client 0上的一个文件,然后你使用Client 2,你会看到

2020-09-15 11:07:16 3913

转载 Introduction to the Storage Performance Development Kit (SPDK)

IntroductionSolid-state storage media is in the process of taking over the data center. Current- generation flash storage enjoys significant advantages in performance, power consumption, and rack density over rotational media. These advantages will conti

2020-08-31 12:04:54 703

原创 算法:链表相关

题目把2个有序单调递增的链表 合并到一个链表倒序输出。要求不产生dummy node解法涉及链表的插入操作,要考虑当前的node 和前一个node#include <iostream>using namespace std;struct ListNode { int _data; ListNode* _next; ListNode(int data):_data(data) { _next = NULL; }};cl

2020-08-20 18:25:05 113

空空如也

空空如也

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

TA关注的人

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