自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

曦轩 技术茶话小屋

Linux后端底层开发、分布式{缓存|数据库}、中间件...

  • 博客(40)
  • 收藏
  • 关注

原创 K-Engine 高性能存储引擎

【代码】【无标题】

2023-05-26 14:25:58 153

原创 MongoDB 执行计划 & 优化器简介 (上)

最近,由于工作需求去了解一下Query是如何在MongoDB内部进行处理,从而丢给存储引擎的。里面涉及了Query执行计划和优化器的相关代码,MongoDB整体思路设计的干净利落,有些地方深入挖一下其实还是能有些优化点的。本文会涉及一条Query被parse之后一路走到引擎之前,都做了那些事情,分析基于MongoDB v3.4.6代码。由于篇幅过长,文章分为上下两篇,分别介绍执行计划 & ...

2018-09-28 18:24:28 1266

原创 RocksDB 事务及MVCC实现分析

RocksDB TransactionDB事务及MVCC实现原理浅析

2017-11-30 10:55:58 4480

原创 Golang scheduler调度器简介

Golang Scheduler

2017-06-17 16:31:24 2410

原创 Golang 在数据库Replication场景下的应用及GC算法

分享KeyNotes总结

2017-06-17 16:13:44 1070 1

原创 MongoDB WiredTiger 存储引擎cache_pool设计 (下) -- 实践篇

之前的文章《MongoDB WiredTiger 存储引擎cache_pool设计 (上) – 原理篇》和大家分享WiredTiger的整体架构和Cache Pool相关的设计,这篇来介绍下阿里云MongoDB线上出现的问题,及改进措施。

2017-02-17 14:07:52 3867 1

原创 MongoDB WiredTiger 存储引擎(1) cache_pool设计

0. 前言最近由于工作需要,阅读了WiredTiger部分代码,感觉有的地方还是很值得学习的,准备搞个系列文章,笔者不是精通WiredTiger的大神,国内对WiredTiger深入分析的人不多,只是想在这里跟大家一起讨论一起学习。笔者在Gitlab上建了一个WiredTiger代码注释版本,基于v2.8.1,如有问题大家可以在Gitlab留言,issue!1. MongoDB 多引擎体系 – Wi

2017-01-20 20:54:27 3460 2

转载 Pictures

图片如下

2016-04-22 12:13:22 760

原创 Nesty 高性能轻量级Http Restful Server

Nesty 轻量级Http Restful Server,通过Netty NIO非阻塞实现IO的高并发和异步,非侵入式编程。支持类SpringMVC的HTTP注解,可以平滑前移,开发成本低

2016-04-06 15:32:36 8807 3

原创 Java -- Class装载机制及ClassLoader

Java – Class装载机制及ClassLoader

2015-12-23 16:24:58 3253 2

原创 分布式系统设计系列 -- 基本原理及高可用策略

分布式系统设计系列之 -- 基本原理及高可用策略篇这篇文章主要介绍一些入门的概念和原理,后面带来一些高可用、数据分布的实践方法!

2014-07-03 21:16:47 37208 6

原创 分布式系统设计系列 -- 概要

在现在的“大数据”、“云平台”这些前沿技术的背景下,衍生了很多平台型技术点,Nosql、Hadoop、Storm等层出不穷。这些华丽的技术后面其实处处都离不开“分布式”这个虽然提出了很久,但是大数据、云计算带火了的技术。以致于开个玩笑说,如果不懂一些“分布式"下的技术和原理的,会有点不好意思说自己是后端开发 -- (玩笑而已!! ^_^)。

2014-07-03 19:22:50 3590

原创 Linux -- 内存控制之oom killer机制及代码分析

线上一些内存占用比较敏感的应用,在访问峰值的时候,偶尔会被kill掉,导致服务重启。发现是Linux的out-of-memory kiiler的机制触发的。

2014-04-18 15:04:29 40045 4

原创 Java -- ExecutorService线程池触发的Full GC问题排查

今天在线上Java代码里,处理了一个由ExecutorServicec线程池引发的问题,将处理过程和一些调试沉淀下来。分布式任务处理模块中,有一个Java daemon进程,通过队列接受Java代码描述的任务(jar),产生子进程(单独的JVM)class loader,处理定义的Java代码,并收集日志、处理结果等,子进程数量在百级。

2014-04-02 19:55:10 8956

转载 Linux -- Pagecache 文件缓存特性

今天看@褚霸的博客,看到了几篇关于pagecache、slab的几篇好文章,转一下!原创文章,转载请注明: 转载自系统技术非业余研究本文链接地址: Linux下谁在消耗我们的cacheLinux下对文件的访问和设备的访问通常会被cache起来加快访问速度,这个是系统的默认行为。 而cache需要耗费我们的内存,虽然这个内存最后可以通过echo 3>/proc

2013-09-30 13:05:54 10210

转载 MySQL性能优化的最佳20+条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。1. 为

2013-07-31 16:07:50 1737

原创 Java -- Hotspot虚拟机调优与GC垃圾回收策略

(先扯扯Java,热热身) 论坛上,经常看到有些人讨论c、c++、java哪个更快,哪个更主流等的口水贴,吵的乐此不疲。其实个人感觉Java 1.6之后性能和开发效率都提高了不少,虽然不像直接编译成机器码的语言一样,但是Java特有的JVM动态优化器、JIT即时编译器对热点代码都提供了动态编译和即时优化,而且开源的库也比较多,开发效率也比较高。不过,Java在高性能IO、大内存使用上还是有些自

2013-07-16 18:49:12 8233 3

原创 分布式选主 -- 利用Mysql ACID和Lease协议实现选主和高可用

在实际生产开发中,遇到一些多节点共存,需要选主,并且要实现HA自动容错的场景,思考了写方法拿出来和大家分享一下。Lease协议,Mysql ACID高可用选主方案设计适用场景Java语言实现描述进一步优化      系统中有很多应用场景要类似主从架构,主服务器(Master)对外提供服务,从服务器(Salve)热备份,不提供服务但随时活着,如果Master出现宕机或者网络问题,Sl

2013-05-23 18:13:00 10045 6

转载 Java如何实现多态性,基于itable, vtable源码分析

在Java实现中我们常使用多态性,在java里主要是通过itable, vtable来实现准确的跳转。Vtable: 虚拟函数表该类所有函数自有函数(除了static, final)和 父类的函数虚拟表。结构:vtableEntry | vtableEntry |vtableEntry...是以vtableEntry 结构体的数组顺序结构,在每个entry

2013-05-03 12:36:25 2285

原创 Java -- common基础类库Google Guava和Guice

很久没更新文章了,最近忙于系统上线,同时拾起来一年多没写过的Java,做一些平台化,系统组件的开发。之后准备通过拜读一下HBase的代码来提升自己对Java的认识。以前写c/c++时,可选的Base库并不是特别多,boost、libev、libaio取之可数。最近用到了写Java的基础框架的库(SSH之类的就不说了),比如MyBaties、DBCP、Guice、Guava等。准备拿出些比较经典的和

2013-03-21 15:35:48 7895 2

原创 C/C++ -- 编程中的内存屏障(Memory Barriers) (2)

在前面的文章里,主要介绍了一下内存屏障的基本认识,和基本原理。本文针对之前的思路继续聊一聊该如何处理相应的问题,以及一些多线程程序编程的技巧。      1.  Volatile关键字      2.  Linux pthread线程锁      3.  Linux gcc 4.2之后的__sync_fetch_and_add      4.  双Buffer实现Lock fr

2012-11-29 12:47:53 7429 3

原创 C/C++ -- Lib库文件nm调试之符号表

本文主要介绍了一下在Linux下开发c/c++时候,不可避免的会开发或者生成.o .a .so这种中间库状态的文件(可能是自己写了一个lib让别人调用,或者提供.c/.cpp文件嵌入别人的Makefile工程)。如何查看这些库文件的一些基本信息。有时候大家编译程序时候(确切的说是链接器链接的时候)很多错误例如"undefine reference",之类的常见错误,原因就是因为没有找到.o .a

2012-11-23 13:02:33 9549

原创 C/C++ -- 编程中的内存屏障(Memory Barriers) (1)

明天就要transfor去做检索引擎了,今天闲下来了,更新一下博客哈。之前 @高V 同学对本人之前《代码技巧及优化(c/c++)》的文章第六条,有关cache命中和cpu流水优化比较感兴趣,也提出了一些他的看法,今天,我就细化的说一下某些编程的点 -- 内存屏障,以及内存屏障对代码的影响。       OK,首先来说一下什么是"内存屏障",可以先看一下官方式的说法 http://www.ker

2012-11-21 14:45:19 14370 1

原创 UtilBox(ub)基础组件 -- ConfigureLoader文件配置读取模块

好久没更新博客了哈,今天抽空把之前写了一部分的东西拿出来继续分享。      linux的getopt()和getopt_long()大家都用过,读取命令行参数,比如./test -h 127.0.0.1 -c 100 --port 8080类似这样的。好多脚本语言python,shell这样获取比较简单直接sh就可以了(比如echo "./server --start --port 8080

2012-11-13 17:45:53 2077

原创 大数据过滤及判断算法 -- Bitmap / Bloomfilter

今天,有个同学向我咨询大数据的一些面试题,其中一类比较有代表性比如判断是否在集合内,比如10个url,判断一个url是否在集合内,还比如有个1~100万个连续无序数字,随机取出里面的N个,求这N个数字等等。这类问题都需要一个大的数据集合,而且每个数据单元都很小,比如一个int 。很大程度上,这类问题可以用Bitmap或者Bloomfilter来做,基本思想就是开辟一块大内存,然后利用一个byte里

2012-09-24 15:48:01 17788

原创 UtilBox(ub)基础组件 -- 并发任务队列Taskqueue/TaskDispatcher (一)

Task dispatcher, 任务分发队列,也可以叫做Taskqueue。之前好多同学看到这篇文章内容是“.....”,我是想做一个标记,想写这篇文章,但是没填内容,看的同学还挺多的,以为我是标题党,这里首先表示一下歉意。下次不会了哈。        1. Taskqueue模型简介        2. Taskqueue的用处和优势        3. Taskqueue

2012-09-04 17:46:57 2818

原创 UtilBox(ub)基础组件 -- EasyCurl 发送http请求(2)

EasyCurl简单封装了一下libcurl调用,对外的提供抽象化的接口,下面就把源码分享出来,此源码和接口还带进一步完善优化,尤其是一些curl_set_opt()的上层封装。大家可以自己写哈,最后写一个满足自己需求的Curl。       ubplus_curl.h : EasyCurl的类定义和接口,还有一些宏/** ================================

2012-08-19 15:40:27 2089

原创 UtilBox(ub)基础组件 -- EasyCurl 发送http请求(1)

昨天晚上锻炼身体,好久没激烈与动了,爽快!回到家,赶紧把之前写好的curl组件分享出来,EasyCurl其实就是对libcurl的一个封装,libcurl如果没用过的可以百度之。        curl其实很简单理解,socket大家都用过,其实http请求也是个socket短链接,只是通信的字段会按着HTTP字段来组包,而且都是明文的。比如在浏览器里输入www.baidu.com,就能开

2012-08-17 14:22:50 2323

原创 UtilBox(ub)基础组件 -- Log日志(2)

文章内容和代码为作者原创,转载请说明 ^_^        之前的文章把Log的大体设计和框架展示出来了,还有根据时间和大小进行分割,目前实现还不支持direct_io模式。但是接口以留出,之后还会对Log进行一次升级,因为有的业务可能存在日志量很大的问题,所以提供一个ub_log_set_buffer(char* buf,size_t size)的函数,来使用用户的buffer,这样可以类似

2012-08-17 13:34:53 1988

原创 UtilBox基础组件

最近写了一些构建c、c++用的基础组件库,比如基础的log日志、通用数据结构、内部缓存等应用或者工具,拿出来分享(之后还会有java和php的),随想了一个UtilBox的名字(简称ub)。这些基础组件都是平时写程序都会用到的,为了可以复用,就剥离出来成lib了,方便以后统一使用。如果大家有什么觉得基础组件平时用的很多,在互联网公司也有应用,也可以写出来分享哈。

2012-08-04 13:34:04 1399

原创 UtilBox(ub)基础组件 -- Log日志(1)

文章内容和代码为作者原创,转载请说明 ^_^      这篇文章主要介绍一下log组件,平时大家调试程序和记录程序异常,这是最常用的。比如调试小程序的正确性,有些同学就在代码里放一堆的printf,可是这样带来的后果就是想去掉这写debug用的printf很麻烦(这个可以用宏来代替,比如类似ASSERT,通过开关来控制)。还有,如果程序写成了daemon,放到后台,printf的作用就没了。所

2012-08-04 13:32:03 2180 2

原创 内存使用技巧及内存池实现(二)

本文所有内容包括源码均是作者原创,出于尊重,如果转载请表明出处 ^_^                上一章节,提到了内存池的使用。其实内存池的作用看名字也能猜到,"池"意味着资源是同一管理和创建释放的,就像数据库的连接池、系统的线程池。主要就是为了避免创建、销毁资源的代价。c标准的malloc/free会造成大量的内存碎片以至于影响效率,所以“内存池”的技术某种程度上避免了这种消耗和影响。

2012-05-08 18:04:35 3402 4

原创 内存使用技巧及内存池实现(一)

本文只是展示了一些基本的内存管理技巧,处于篇幅没有更深入的讲解,有兴趣可回复一起探讨^_^        在当前的软件开发环境下,主要分为两大类:客户端和服务端。软件部署在客户端的情况逐渐被Web应用和服务端的网络应用所替代(游戏客户端例外),并且随着硬件的不断升级和成本的降低,各种计算资源和存储资源被程序随意使用,基本不用考虑一个进程多占了几个Byte,多消耗了CPU几个毫秒。不过,某些场合

2012-05-07 22:10:07 4979 1

原创 C/C++ -- 代码技巧及优化

本人总结了一些平时编程的小技巧和非算法类的优化,希望各位一起讨论,也分享自己的技巧     1、inline/define适量的代码冗余 :        "代码冗余"是一件很令人讨厌的事情,如果你在两个地方看到了同样的代码,第一反应就应该是"重构"他们,不过类似define这种代码"本地替换"的适当冗余,可以加速代码执行,省去了函数调用的事件,让CPU顺序执行。所以适当的define和i

2012-05-03 00:14:09 6605 3

转载 Android -- 应用自动检测更新代码

由于Android项目开源所致,市面上出现了N多安卓软件市场。为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量。因此我们有必要给我们的Android应用增加自动更新的功能。既然实现自动更新,我们首先必须让我们的应用知道是否存在新版本的软件,因此我们可以在自己的网站上放置配置文件,存放软件的版本信息:

2012-05-02 17:20:57 4576 9

原创 Android -- Log日志调试(android.utl.log类)

Android调试要通过模拟器运行,或者直接USB远程连接到一部手机调试。即使在不关闭模拟进行调试时候,也要经过编译、apk打包、上传apk、运行apk的过程,时间也不短,所以应该在程序固定一次运行中,产生更多我们需要关注的信息,来更清楚的了解程序的运行和逻辑,以便减少上述较长的过程(以前开发用过最土的做法,为了check某个变量的值,使用Toast.makeText()然后show出来,很麻烦)

2012-04-29 14:57:09 7626

原创 Android 手势的识别和控制 GestureDetecor

为了加强鼠标响应事件,Android提供了GestureDetector手势识别类。通过GestureDetector.OnGestureListener来获取当前被触发的操作手势(Single Tap Up、Show Press、Long Press、Scroll、Down、Fling),具体包括以下几种:       boolean onDoubleTap(MotionEvent e)

2012-04-29 13:50:27 2928

转载 Linux内核--网络栈数据包的传递过程

本文转自 : http://blog.csdn.net/yming0221/article/details/7492423上一篇博文中我们从宏观上分析了Linux内核中网络栈的初始化过程,这里我们再从宏观上分析一下一个数据包在各网络层的传递的过程。我们知道网络的OSI模型和TCP/IP模型层次结构如下:上文中我们看到了网络栈的层次结构:我

2012-04-25 22:10:48 1897

原创 UtilBox(ub)基础组件 -- epoll_server网络事件模型

今天事情比较少,突然在在网上看到了一篇关于网络同步异步IO的帖子,正好想起了前几天分析过的Redis的代码。Redis的代码很精练也很轻巧,基本没有第三方以来的库(最新版本中加入了jemalloc,但已集成在了redis的src里,所以依旧可以直接make),并实现一套轻量型的非阻塞半异步框架-aeEvent(很少有大型互联网后台应用采用全异步框架,一是逻辑和IO都是异步的这样即时性较低,二是编程

2012-04-25 21:45:04 2226

原创 Cloud App -- Baidu App Engine爬虫应用开发

今天试用了一下百度云平台(http://yun.baidu.com/)的云环境Baidu App Engine(以下简称BAE),整体感觉还不错(毕竟是互联网巨头的产品啊)。整体使用类似Google的GAE和Sina的SAE,但是也做了依托搜索平台和海量数据过滤检索的特性。        本人使用其中的Mysql-分布式数据库服务,FetchUrl-Url抓取服务,Taskqueue-分布式队

2012-04-22 09:53:03 3380 2

空空如也

空空如也

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

TA关注的人

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