1. Socket.io 和WebSocket 集群方案总结

    Socket.io 大概可以分为两种长连接的模式: polling 和 websocket. polling方式可以用在不支持websocket的浏览器中,比如IE7-IE9.

    2018/03/06 Server

  2. Golang io.Pipe 源码阅读

    最近在看Golang源码,看到了io模块,这是对Pipe模块的阅读记录

    2018/03/02 Golang

  3. Elasticsearch升级到5.x之后,线上遇到的问题小结

    请求耗时由5ms增长到了15ms左右

    2018/02/27 Elasticsearch

  4. 短网址、发号器 系统构建分析

    短网址的作用(来源知乎总结)

    2018/02/22 Server

  5. 从io.Writer进一步理解interface

    最近在阅读Golang源码时,有个地方没有看的很明白。认真思考了一下,本文作为记录总结。

    2018/02/15 Golang

  6. 百万并发连接、65536和Linux TCP/IP 性能优化

    65536

    2018/02/06 Server

  7. 最近工作总结(十二)

    SLB(LVS)探测 阿里云SLB(LVS)对代理的服务端口进行的探测是HEAD方法请求。所以,你要定义一个HEAD根目录域名的接口

    2018/01/07 Work

  8. Rails App之间的三种"通讯"方式实践

    三种方式 API接口通讯 Sidekiq gRPC

    2018/01/05 Rails

  9. 初识NewSQL

    NewSQL 被定义为新一代的数据库。

    2017/12/30 Database

  10. 认知OLTP、OLAP和HATP

    数据处理可以大致分为两类:

    2017/12/26 Database

  11. Build Distributed Unique Id System

    2017/12/24

  12. Redis 集群搭建及使用Golang示例

    Redis 在3.x版本之后,自身支持了集群模式。Redis的集群主要是 master-slave的形式。集群定义了 16384个hash slot。这些hash slot分布在所有master上。we simply take the CRC16 of the key modulo 16384 将key计算得到对应的hash slot的值,然后看这个hash slot在哪个redis服务上,这个key就会保存在对应的这个redis服务。和Elasticsearch、mongoDB不一样,redis通过这种方式进行sharding。不能不说这是一种简单,但对redis来说是有效的一种集群方式。能够最大限度的保留原有redis的属性。 [Document]

    2017/12/17 Database

  13. Who Are Channel Waitting For?

    2017/12/08

  14. 最近工作总结(十一)

    Go chan 类型需要初始化操作

    2017/12/07 Work

  15. 使用privoxy代理shadowsocks让Teminal命令行实现VPN

    最近买的云梯VPN挂了快两月了,现在还没好,也没发邮件通知等,提工单也不再有回复.

    2017/11/18 Tool

  16. Profling Go Example

    Tools Matrix

    2017/11/10 Golang

  17. Capistrano 部署Rails5 puma 项目小结

    项目目录名为: cap_puma

    2017/11/09 Rails

  18. 最近工作总结(十)

    rails find_by 别忘了查询条件 线上出现了一个诡异的bug。查了很久终于发现是find_by查询没有加条件。举个例子:

    2017/11/04 Work

  19. 为rails项目升级使用Elasticsearch 5.x版本

    最近为项目系统中使用的Elasticsearch进行了升级。从原来1.4版本的Elasticsearch升级到5.x版本。

    2017/10/15 Elasticsearch

  20. 最近工作总结(九)

    net/http in Golang

    2017/10/13 Work

  21. 安装配置elasticsearch-5.5.2+IK中文分词器

    最近的任务是将elasticsearch集群由低版本的1.4.2升级到5.5.2版本。由于跨的版本比较多,查看了一下elasticsearch文档,Breaking changes 非常多,所以这会是一次改动很大的升级。

    2017/09/14 Elasticsearch

  22. 最近工作总结(八)

    ActiveRecord reload reload方法:数据库更新不可能反馈到变更前创建的对象上。通过reload方法让对象重新加载数据库最新的变更。

    2017/09/07 Work

  23. ubuntu 解决 Problem with MergeList /var/lib/apt/lists/ 类似错误

    使用过ubuntu的人儿们可能都遇到过这类问题,明显这种问题是一个类型,而不是单一的由于某一个固定的因素引起的。

    2017/09/02 Tool

  24. 在Linux系统中监控系统TCP数量

    netstat

    2017/08/25 Tool

  25. 简记Rails中的logger实用技巧

    Gem lograge

    2017/08/23 Rails

  26. 用喜欢和舒服的方式在Golang中使用锁、使用channel自定义锁

    众所周知,我们能使用Golang轻松编写并发程序。Golang利用goroutine,让我们编写并发程序变得容易。并发程序中重要的问题之一就是如何正确的处理“竞争资源”或“共享资源”。Golang为我们提供了锁的机制。这篇文章,就简单介绍Golang中锁的使用方法。并且进行错误的使用方法和正确的使用方法的代码示例对比。文章的所以代码示例在:https://github.com/pathbox/learning-go/tree/master/src/lock

    2017/08/13 Golang

  27. 最近工作总结(七)

    使用正则快速获取括号内的字符串 result = file_name.match(/\A.((\S+)).\Z/) result1 = file_name.match(/\A.[(\S+)].\Z/) p $1 p result.to_a

    2017/08/03 Work

  28. 升级Elasticsearch集群数量实战记录

    现在线上有一个elasticsearch集群搜索服务有三台elasticsearch实例(es1、es2、es3),打算将其升级为5台(增加es4、es5)。这篇文章主要是对整个操作的过程记录,以及出现的问题总结,包括移动数据量所需要的时间。因为,一开始由于不知道线上数据量全部分配完需要多少时间,如果从凌晨开始操作,到早上8点都还没有同步完,这样会影响到白天线上业务的正常使用。

    2017/07/31 Elasticsearch

  29. 最近工作总结(六)

    如果调用第三方接口,请别忘了超时机制 周末的时候,线上出了问题。是由于IPIP服务商的服务器出了问题,我们调的接口迟迟没有返回值。 导致我们项目中,开了很多goroutine,每个goroutine中会请求IPIP的接口分析ip地址,由于IPIP的服务器没能及时相应, 导致大量的goroutine都阻塞在了那里。所以, 不要“信任”第三方服务,调用他们服务接口的时候,应该使用超时机制。

    2017/07/04 Work

  30. Callback order in controller of Rails

    在Rails controller中可以定义回调方法。回调方法是一个队列,满足先进先出的执行顺序。但我们知道,回调有before_action, after_action, around_action 这三种简单的类型。并且还有append_xxx_action、 prepend_xxx_action、和skip_xxx_action。 在RubyChina上有一篇精华帖讲了controller callback 源码的内容 详解 Rails Controller 中的 Callback 这里我们研究除了skip_xxx_action的其他类型的执行顺序。

    2017/06/17 Rails

  31. 最近工作总结(五)

    多个条件进行操作的时候,难免遇到冲突 比如触发器,不同的触发器的触发条件如果有冲突,顺序不同,影响不同。如果A触发器先执行更改记录,会导致B触发器条件不满足而无法执行。如果让B先执行,则两者都可以顺利执行。

    2017/06/01 Work

  32. 记一次Go websocket项目内存泄露排查 + 使用Go pprof定位内存泄露

    从同事接手了一个项目。这个项目是用了<go-socket.io>这个库,仿照socket.io的功能,和前端进行交互。因为之前是用socket.io做的后端,但是 觉得性能不够用了,就改用Go来进行重构。重构之后,发生内存泄露的现象。这个项目峰值大概维护1w-1.5w个socket长连接,一开始内存消耗量大概到2g-3g。 然而,当连接数没有增长的情况下,随着运行时间的增长,内存也在增长。并且大概一个多小时的时间,内存就涨到了10g,而且连接数才1w多,说好的支撑”百万连接呢”。如果不进行重启服务操作,内存会涨到14g(16g的内存)。所以,确定是有内存泄露。我需要做的就是找到内存泄露的原因,修复这个问题。

    2017/05/27 Golang

  33. 在Web application 中基本的安全防范小结

    CSRF攻击

    2017/05/23 Summary

  34. ssh in my work

    我喜欢在<hosts>文件里给ip地址定义域名名称。比如一台测试服务器的ip地址是<192.168.100.1>

    2017/05/19 Tool

  35. Ruby 的GIL 到底做了什么

    GIL 是 Global Interpreter Lock 也叫 GVL

    2017/05/13 Ruby

  36. 最近工作总结(四)

    在数据库层面建立唯一索引,是最好的防止数据重复的方法,即使是在高并发的情况下 在Rails model层使用validates 方法进行唯一性的验证逻辑,比如:

    2017/05/04 Work

  37. 用更好的Ruby code style 避免类型错误

    我们知道,Ruby是动态语言。 静态类型:编译的时候就知道每一个变量的类型,因为类型错误而不能做的事情是语法错误。

    2017/04/09 Ruby

  38. 最近工作总结(三)

    !!符号 !! 符号可以将nil转为true之后,再转为false。这样可以将false或nil都以false结果进行判断

    2017/04/07 Work

  39. Install Elasticsearch in Ubuntu and macOS

    Ubuntu 14.04环境

    2017/03/24 Elasticsearch

  40. simple examples make you be close to channel in Go

    example1

    2017/03/18 Golang