chenyahui / chenyahui.github.io Goto Github PK
View Code? Open in Web Editor NEWMy blog
Home Page: http://www.cyhone.com
My blog
Home Page: http://www.cyhone.com
https://www.cyhone.com/articles/usage-of-filebeat-log-config/
本文主要介绍 Filebeat 7.5 版本中 Log 相关的各个配置项的含义以及其应用场景。 一般情况下,我们使用 log input 的方式如下,只需要指定一系列 paths 即可。 12345filebeat.inputs:- type: log paths: - /var/log/messages - /var/log/*.log 但其实除了基本的 paths 配置外,log
https://www.cyhone.com/articles/db-doc-generator/
最近我用 Golang 开发了一个可以将数据库每张表的各个列信息转化成文档的小工具。开发的缘由是因为写后端时,经常需要为数据库写说明文档,对于稍微有些规模的项目来说,就动辄几十张上百张数据表,开发人员在文档中不断的写各个列的列名、类型、描述实在是无聊、枯燥和苦不堪言。所以就有了这个小工具的诞生。 项目地址在 这里
http://cyhone.com/2019/08/17/optimization-of-websocket-push-system/
微信云支付Android 智能POS使用WebSocket实现了用户订单的实时推送。即,顾客在扫描了门店的付款码,客户端会随即进行语音播报和打印等动作。 客户端利用WebSocket与后端维持长连接,当后端收到该门店订单时,即将成功态的订单通过对应的连接中。 然而,商户网络环境的多样性会导致WebSocket链路出现各种异常,从而引发漏单问题。 我们根据实际的场景,对此订单推送系统在稳定性上进行了
http://cyhone.com/articles/optimization-of-websocket-push-system/
微信云支付Android 智能POS使用WebSocket实现了用户订单的实时推送。即,顾客在扫描了门店的付款码,客户端会随即进行语音播报和打印等动作。 客户端利用WebSocket与后端维持长连接,当后端收到该门店订单时,即将成功态的订单通过对应的连接中。 然而,商户网络环境的多样性会导致WebSocket链路出现各种异常,从而引发漏单问题。 我们根据实际的场景,对此订单推送系统在稳定性上进行了
https://www.cyhone.com/articles/optimization-of-websocket-push-system/
微信云支付 Android 智能 POS 使用 WebSocket 实现了用户订单的实时推送。即,顾客在扫描了门店的付款码,客户端会随即进行语音播报和打印等动作。 客户端利用 WebSocket 与后端维持长连接,当后端收到该门店订单时,即将成功态的订单通过对应的连接中。 然而,商户网络环境的多样性会导致 WebSocket 链路出现各种异常,从而引发漏单问题。 我们根据实际的场景,对此订单推送系
https://www.cyhone.com/articles/usage-of-golang-rate/#more
本主题为系列文章,分上下两篇。本文主要介绍 time/rate 的具体使用方法,另外一篇文章 《Golang 限流器 time/rate 实现剖析》 则着重介绍其内部实现原理。 限流器是后台服务中的非常重要的组件,可以用来限制请求速率,保护服务,以免服务过载。 限流器的实现方法有很多种,例如滑动窗口法、Token Bucket、Leaky Bucket 等。 其实 Golang 标准库中就自带
http://cyhone.com/2018/06/12/analysis-of-muduo/
muduo是陈硕大神个人开发的C++开源网络编程框架,其Github地址在https://github.com/chenshuo/muduo。muduo的定位是服务器端TCP网络编程库,整体基于Reactor模式实现。Reactor模式是目前大多数Linux端高性能网络编程框架和网络应用所选择的主要架构,例如Java的Netty、内存数据库Redis等。 在陈硕的《Linux多线程服务器端编程》一
https://www.cyhone.com/articles/analysis-of-uber-go-ratelimit/
uber 在 Github 上开源了一套用于服务限流的 go 语言库 ratelimit, 该组件基于 Leaky Bucket(漏桶) 实现。 我在之前写过 《Golang 限流器 time/rate 实现剖析》,讲了 Golang 标准库中提供的基于 Token Bucket 实现限流组件的 time/rate 原理,同时也讲了限流的一些背景。 相比于 TokenBucket,只要桶内还有剩余
http://cyhone.com/2016/09/25/whu-cs-network-auth/
前两天把实验室的一台旧台式机装上了Ubuntu Server,打算当作测试服务器使用着玩。装上之后意识到一个严重的问题:实验室电脑连接外网时候需要打开浏览器输入学号进行认证。
http://cyhone.com/2018/11/04/reunderstanding-of-non-blocking-io/
在进行Linux网络编程开发的时候,免不了会涉及到IO模型的讨论。《Unix网络编程》一书中提到的几种IO模型,我们在开发过程中,讨论最多的应该就是三种: 阻塞IO、非阻塞IO以及异步IO。 本文试图理清楚几种IO模型的根本性区别,同时分析了为什么在Linux网络编程中最好要用非阻塞式IO。
https://www.cyhone.com/articles/time-wheel-in-libco/#more
定时器是网络框架中非常重要的组成部分,往往可以利用定时器做一些超时事件的判断或者定时清理任务等。 定时器有许多经典高效的实现。例如,libevent 采用了小根堆实现定时器,redis 则结合自己场景直接使用了简单粗暴的双向链表。 时间轮也是一个非常经典的定时器实现,Linux 2.6 内核之前就采用了多级时间轮作为其低精度定时器的实现。而在微信的协程库 libco 中,也用了单级时间轮来处理其内
http://cyhone.com/2018/01/01/classviewer/#more
ClassViewer是我最近开发的一个用于展示jvm class字节码的小工具。它是一个单纯的静态网页,完全使用浏览器端的Javascript开发。之所以开发这款工具,是因为我在开发ToyJVM的时候,需要常常校验class文件某一部分的字节码, 所以如果一款工具能够很方便的显示class文件各个部分的信息和字节码,对于ToyJVM的开发将会是一个非常大的帮助。 在开始写代码之前调研了一些类似的
http://cyhone.com/2015/09/16/hello-world/
为什么会想到建立一个博客:在此博客之前,我其实也用过新浪博客、CSDN、博客园,作为个人博客的载体,但对每个博客都并不是特别的满意。原因大概有下面几条: 没有美观友好的支持代码。 广告多。 管理复杂,但可控性差。 目前该博客是使用hexo+Next主题+Github进行搭建。事实上,当开始接触使用hexo时,我觉得满足了我对博客的诸多要求。我对它的为程序员而生、高度可定制性非常喜欢。而且,如有
https://www.cyhone.com/articles/analysis-of-libco/
libco 是微信后台开发和使用的协程库,同时也是极少数的直接将 C/C++ 协程运用到如此大规模的生产环境中的案例。 在 《云风 coroutine 协程库源码分析》 中,介绍了有栈协程的实现原理。相比 coroutine,libco 在性能上号称可以调度千万级协程。 从使用上来说,不仅提供了一套类 pthread 的协程通信机制,同时可以零改造地将三方库的阻塞 IO 调用协程异步化。 本文将从
http://cyhone.com/2016/09/25/whu-cs-network-auth/
前两天把实验室的一台旧台式机装上了Ubuntu Server,打算当作测试服务器使用着玩。装上之后意识到一个严重的问题:实验室电脑连接外网时候需要打开浏览器输入学号进行认证。
https://www.cyhone.com/articles/introduction-of-bloomfilter/
介绍 BloomFilter(布隆过滤器)是一种可以高效地判断元素是否在某个集合中的算法。 在很多日常场景中,都大量存在着布隆过滤器的应用。例如:检查单词是否拼写正确、网络爬虫的 URL 去重、黑名单检验,微博中昵称不能重复的检测等。 在工业界中,Google 著名的分布式数据库 BigTable 也用了布隆过滤器来查找不存在的行或列,以减少磁盘查找的 IO 次数;Google Chrome
http://cyhone.com/2018/11/04/reunderstanding-of-non-blocking-io/#more
在进行Linux网络编程开发的时候,免不了会涉及到IO模型的讨论。《Unix网络编程》一书中讨论的几种IO模型,我们在开发过程中,讨论最多的应该就是三种: 阻塞IO、非阻塞IO以及异步IO。 本文试图理清楚几种IO模型的根本性区别,同时分析了为什么在Linux网络编程中最好要用非阻塞式IO?
https://www.cyhone.com/articles/analysis-of-cloudwu-coroutine/
随着 Golang 的兴起,协程尤其是有栈协程 (stackful coroutine) 越来越受到程序员的关注。协程几乎成了程序员的一套必备技能。 云风实现了一套 C 语言的协程库,整体背景可以参考其 博客。 这个协程库非常轻量级,一共也才 200 多行代码,使用上更贴近于 lua 的写法(众所周知,云风是知名的 lua 粉)。整体基于 ucontext 和共享栈模型实现了有栈协程,代码质量毋庸
https://www.cyhone.com/articles/why-move-no-work-in-lambda/
最近在写 C++ 时,有这样一个代码需求:在 lambda 中,将一个捕获参数 move 给另外一个变量。 看似一个很简单常规的操作,然而这个 move 动作却没有生效。 具体代码如下: 1234567std::vector<int> vec = {1,2,3};auto func = ={ auto vec2 = std::move(vec
http://cyhone.com/2017/02/07/Introduce-to-BloomFilter/
介绍BloomFilter(布隆过滤器)是一种可以高效地判断元素是否在某个集合中的算法。 在很多日常场景中,都大量存在着布隆过滤器的应用。例如:检查单词是否拼写正确、网络爬虫的URL去重、黑名单检验,微博中昵称不能重复的检测。在工业界中,Google著名的分布式数据库BigTable也用了布隆过滤器来查找不存在的行或列,以减少磁盘查找的IO次数;Google Chrome浏览器使用BloomFil
本博客主要是记录自己思考和总结的一些东西,包括不限于源码分析、读书总结以及技术方案等方面。 所有文章都会坚持原创,尽可能保持高质量,也会尽量做到文章清晰,避免自说自话。此外文章转载需要经过本人授权。 文章不免出错,为了保证正确性,同时也让文章表达的更加清楚,会经常对文章进行修改和调整。 只会在周末或者休息时间写文章,同时要最大限度保证文章质量。所以,发博客的时间和频率非常随机不固定,尽量会保持在一
http://cyhone.com/2018/06/12/analysis-of-muduo/
muduo是陈硕大神个人开发的C++开源网络编程框架,其Github地址在https://github.com/chenshuo/muduo。muduo的定位是服务器端TCP网络编程库,整体基于Reactor模式实现。Reactor模式是目前大多数Linux端高性能网络编程框架和网络应用所选择的主要架构,例如Java的Netty、内存数据库Redis等。 在陈硕的《Linux多线程服务器端编程》一
https://www.cyhone.com/articles/right-way-to-use-cpp-smart-pointer/
C++11 中推出了三种智能指针,unique_ptr、shared_ptr 和 weak_ptr,同时也将 auto_ptr 置为废弃 (deprecated)。 但是在实际的使用过程中,很多人都会有这样的问题: 不知道三种智能指针的具体使用场景 无脑只使用 shared_ptr 认为应该禁用 raw pointer(裸指针,即 Widget * 这种形式),全部使用智能指针 本文将从这几方
https://www.cyhone.com/articles/analysis-of-redis-ae/
Redis 作为一个单线程高性能的内存缓存 Server 而被人熟知。作为一个典型的 Reactor 式网络应用,Redis 能够达到如此高的性能,必然要依靠足够可靠的事件循环库。 Redis 内置了一个高性能事件循环器,叫做 AE。其定义和实现可以在 ae*.h/cpp 这些文件中找到。 AE 本身就是 Redis 的一部分,所以整体设计原则就是够用就行。也正因为这个背景,AE 的代码才可以简短
http://cyhone.com/2017/01/01/2016-summary/
2016年过去了。真的是转瞬即逝,一眨眼的功夫,365个日夜。总结2016年,平平凡凡但踏踏实实。
https://www.cyhone.com/articles/analysis-of-muduo/
muduo是 陈硕 大神个人开发的 C++ 的 TCP 网络编程库。muduo 基于 Reactor 模式实现。Reactor 模式也是目前大多数 Linux 端高性能网络编程框架和网络应用所选择的主要架构,例如内存数据库 Redis 和 Java 的 Netty 库等。 陈硕的《Linux 多线程服务器端编程》一书对 muduo 整个架构进行了非常详尽的介绍和分析,可以说是学习 muduo 源码
http://cyhone.com/2019/08/17/optimization-of-websocket-push-system/
微信云支付Android 智能POS使用WebSocket实现了用户订单的实时推送。即,顾客在扫描了门店的付款码,客户端会随即进行语音播报和打印等动作。 客户端利用WebSocket与后端维持长连接,当后端收到该门店订单时,即将成功态的订单通过对应的连接中。 然而,商户网络环境的多样性会导致WebSocket链路出现各种异常,从而引发漏单问题。 我们根据实际的场景,对此订单推送系统在稳定性上进行了
https://www.cyhone.com/articles/analisys-of-golang-rate/
限流器是微服务中必不缺少的一环,可以起到保护下游服务,防止服务过载等作用。上一篇文章 《Golang 限流器 time/rate 使用介绍》 简单介绍了 time/rate 的使用方法,本文则着重分析下其实现原理。建议在正式阅读本文之前,先阅读下上一篇文章。 上一篇文章讲到,time/rate 是基于 Token Bucket(令牌桶) 算法实现的限流。本文将会基于源码,深入剖析下 Golang
http://cyhone.com/2015/09/16/hello%20world/?123
为什么会想到建立一个博客:在此博客之前,我其实也用过新浪博客、CSDN、博客园,作为个人博客的载体,但对每个博客都并不是特别的满意。原因大概有下面几条: 没有美观友好的支持代码。 广告多。 管理复杂,但可控性差。 目前该博客是使用hexo+Next主题+Github进行搭建。事实上,当开始接触使用hexo时,我觉得满足了我对博客的诸多要求。我对它的为程序员而生、高度可定制性非常喜欢。而且,如有
http://cyhone.com/2019/08/17/optimization-of-websocket-push-system/#more
微信云支付Android 智能POS使用WebSocket实现了用户订单的实时推送。即,顾客在扫描了门店的付款码,客户端会随即进行语音播报和打印等动作。 客户端利用WebSocket与后端维持长连接,当后端收到该门店订单时,即将成功态的订单通过对应的连接中。 然而,商户网络环境的多样性会导致WebSocket链路出现各种异常,从而引发漏单问题。 我们根据实际的场景,对此订单推送系统在稳定性上进行了
https://www.cyhone.com/articles/analysis-of-filebeat/
Filebeat 是使用 Golang 实现的轻量型日志采集器,也是 Elasticsearch stack 里面的一员。本质上是一个 agent,可以安装在各个节点上,根据配置读取对应位置的日志,并上报到相应的地方去。 Filebeat 的可靠性很强,可以保证日志 At least once 的上报,同时也考虑了日志搜集中的各类问题,例如日志断点续读、文件名更改、日志 Truncated 等。
http://cyhone.com/2018/10/25/client-time-calibration/#more
在客户端开发中,往往会有一些功能对时间要求比较严格,客户端需要获取到当前最准确的时间。但由于客户端环境多种多样,我们无法保证直接在客户端设备上获取到的时间是最准确的时间。对于某些问题设备来说,设备时间与比当前实际的时间差了几个小时,甚至几天的情况都存在。倘若某功能依赖于当前时间,而客户端所提供的时间不准,就往往会给客户造成一些困扰。 那么,客户端如果能够获取到当前最准确的时间呢?
https://www.cyhone.com/articles/blog-tools/
本文整理和记录下自己在运营 个人博客 以及公众号常使用到的一些工具。主要包含以下方面: 中英文空格的自动排版 微信公众号如何使用 markdown 发布 绘图工具 图片压缩工具 如何测试网站的打开速度以及针对性优化
http://cyhone.com/2018/10/25/client-time-calibration/#more
在客户端开发中,往往会有一些功能对时间要求比较严格,客户端需要获取到当前最准确的时间。但由于客户端环境多种多样,我们无法保证直接在客户端设备上获取到的时间是最准确的时间。对于某些问题设备来说,设备时间与比当前实际的时间差了几个小时,甚至几天的情况都存在。倘若某功能依赖于当前时间,而客户端所提供的时间不准,就往往会给客户造成一些困扰。 那么,客户端如何能够获取到当前最准确的时间呢?
https://www.cyhone.com/articles/whu-cs-network-auth/#more
前两天把实验室的一台旧台式机装上了 Ubuntu Server,打算当作测试服务器使用着玩。 装上之后意识到一个严重的问题:实验室电脑连接外网时候需要打开浏览器输入学号进行认证。
https://www.cyhone.com/articles/introduction-of-elasticsearch/#valine-comments
Elasticsearch 是一个分布式搜索引擎,底层基于 Lucene 实现。Elasticsearch 屏蔽了 Lucene 的底层细节,提供了分布式特性,同时对外提供了 Restful API。Elasticsearch 以其易用性迅速赢得了许多用户,被用在网站搜索、日志分析等诸多方面。由于 ES 强大的横向扩展能力,甚至很多人也会直接把 ES 当做 NoSQL 来用。 本文主要记录了 ES
https://www.cyhone.com/articles/hello-world/
为什么会想到建立一个博客: 在此博客之前,我其实也用过新浪博客、CSDN、博客园,作为个人博客的载体,但对每个博客都并不是特别的满意。原因大概有下面几条: 没有美观友好的支持代码。 广告多。 管理复杂,但可控性差。 目前该博客是使用 hexo+Next 主题 + Github 进行搭建。 事实上,当开始接触使用 hexo 时,我觉得满足了我对博客的诸多要求。我对它的为程序员而生、高度可定制性
https://www.cyhone.com/articles/analysis-of-golang-channel/
channel是Golang中一个非常重要的特性,也是Golang CSP并发模型的一个重要体现。简单来说就是,goroutine之间可以通过channel进行通信。 channel在Golang如此重要,在代码中使用频率非常高,以至于不得不好奇其内部实现。本文将基于go 1.13的源码,分析channel的内部实现原理。
https://www.cyhone.com/articles/classviewer/
ClassViewer是我最近开发的一个用于展示 jvm class 字节码的小工具。它是一个单纯的静态网页,完全使用浏览器端的 Javascript 开发。之所以开发这款工具,是因为我在开发 ToyJVM 的时候,需要常常校验 class 文件某一部分的字节码, 所以如果一款工具能够很方便的显示 class 文件各个部分的信息和字节码,对于 ToyJVM 的开发将会是一个非常大的帮助。 在开始写
http://cyhone.com/2018/06/12/analysis-of-muduo/#more
muduo是陈硕大神个人开发的C++开源网络编程框架,其Github地址在https://github.com/chenshuo/muduo。muduo的定位是服务器端TCP网络编程库,整体基于Reactor模式实现。Reactor模式是目前大多数Linux端高性能网络编程框架和网络应用所选择的主要架构,例如Java的Netty、内存数据库Redis等。 在陈硕的《Linux多线程服务器端编程》一
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.