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

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

    2017/07/31 Elasticsearch

  2. 最近工作总结(六)

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

    2017/07/04 Work

  3. 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

  4. 最近工作总结(五)

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

    2017/06/01 Work

  5. 记一次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

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

    CSRF攻击

    2017/05/23 Summary

  7. ssh in my work

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

    2017/05/19 Tool

  8. Ruby 的GIL 到底做了什么

    GIL 是 Global Interpreter Lock 也叫 GVL

    2017/05/13 Ruby

  9. 最近工作总结(四)

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

    2017/05/04 Work

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

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

    2017/04/09 Ruby

  11. 最近工作总结(三)

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

    2017/04/07 Work

  12. Install Elasticsearch in Ubuntu and macOS

    Ubuntu 14.04环境

    2017/03/24 Elasticsearch

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

    example1

    2017/03/18 Golang

  14. 最近工作总结(二)

    serialize Hash 在serialize Hash 有个小坑。 普通的hash和ActionController::Parameters 或 Hashie::Mash 等类型都能存。这就会导致了,如果代码中原本使用symbol方式取值正确的逻辑,当该字段值用hash类型,并且hash对应的key用字符串形式存了,原本原本使用symbol方式取值正确的逻辑取值就变为空了。所以,推荐当取值的时候都用字符串形式。第二个是,如果数据库存了ActionController::Parameters类型的值,在rails 5中取这个值的时候就报错,,直接导致用这个model的时候就报错。因为ActionController::Parameters 在rails 5不再继承于Hash,而进行 serialize hash 的时候就不行了。在rails 4 中把这个数据用普通hash更改一下,在rails 5 项目中就恢复正常

    2017/03/09 Work

  15. Manage and custom your elasticsearch index in Rails project

    这周对Rails项目中的ElasticSearch进行了总结并写成了文档,觉得有一些内容值得记录和分享。 这篇文章主要是在Rails项目中对索引,mapping的设置、管理操作的总结,不涉及搜索方面的内容。 源数据是存在MySQL中,ES的数据是MySQL写操作的时候进行了回调同步到ES中,这个应该和很多人的使用同步策略一样。

    2017/03/02 Elasticsearch

  16. Background job is awesome for your application

    What is the background job? It is simple that is running in the background.

    2017/02/17 Thought

  17. Pointer in Go

    Go有指针类型含义和作用和C语言的指针是一样的,指向类型的地址,而且用途很广,但是你不能对指针进行运算。 比如C语言中的对指针的++ 运算或移位运算在Go中是没有的。

    2017/02/10 Golang

  18. More about OOP in Go

    面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程范型,同时也是一种程序开发的方法。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。Go语言也是一种面向对象编程的语言,但是和传统的编程语言有一些不同。但是Go也有很多传统OOP语言的特点:

    2017/01/22 Golang

  19. CSV operation in Go

    简单的读取

    2017/01/20 Golang

  20. Nice Conferences In The World

    Ruby Rails

    2017/01/16 Nice

  21. 最近工作总结(一)

    ES 慢查询优化 对搜索客户手机号码的ES慢查询进行优化。由于表的记录已经达到一定数量级,对手机号码进行char_split 的分词方法, 会产生性能问题,因为该分词方法会把手机号码进行拆分组合,这里很耗时。 优化方法:用正则表达式检验出传的参数是手机号码,不使用char_split分词查询,而是使用完全匹配的方式进行过滤

    2017/01/10 Work

  22. Range In Go

    iteration variable重用

    2016/12/31 Golang

  23. go方法

    methods on value or pointer

    2016/12/29 Golang

  24. supervisor 安装、配置和使用

    简介

    2016/12/20 Tool

  25. Elasticsearch 聚合搜索

    这次掉了这个坑里。

    2016/12/13 Elasticsearch

  26. 如何更可控、稳定地写Rails脚本操作线上数据库的记录

    描述:某个功能需要为数据库增加相关数据。大概逻辑是:根据表Company,根据某些条件往Department和DepartmentsUser表中插入数据。 然后将User表中满足筛选条件的status字段进行更改。

    2016/11/08 Rails

  27. Hash struct in rails

    最近遇到了一个坑,关于rails中的hash struct。问题不难,但非常容易让人忽略。

    2016/09/25 Rails

  28. Rails 项目的数据库慢查询优化

    最近项目中出现了很多MySQL的慢查询,平均耗时10s钟。运维小哥把慢查询找了出来,交给我们进行优化。本文就是本次MySQL慢查询优化的总结。

    2016/09/14 Database

  29. Seek the amazing Git

    Git is amazing! 本文是对git的进一步的学习和掌握总结。

    2016/08/30 Tool

  30. Delegation in Ruby and Rails

    这是一篇在Ruby和Rails中使用代理模式各种方法的总结文章。

    2016/08/20 Rails

  31. Ruby Concurrency and Parallelism A Practical Tutorial(翻译)

    特别的,Ruby并发指的是:两个任务可以在重叠的时间段启动、运行和完成。 不过,这并不意味着他们都是运行在同一瞬间(比如:多个线程在单核机上运行) 与此形成鲜明对比的是,并行是指:两个任务运行在相同的时间。(比如:多线程运行在多核心的处理器上)

    2016/08/03 Ruby

  32. include extend prepend ActiveSupport::Concern(Mixin)

    该总结的还是要总结的

    2016/07/25 Ruby

  33. 如何为一个千万级以上的表新建一个字段

    MySQL中有一张表A,有十几个字段,字段中有索引,大概是1千万条记录。并且这个表是线上服务的表,随时有读写操作。 现在,根据需求,你需要为这张表新建一个字段。你会怎么做?

    2016/07/22 Database

  34. RVM Gemset Bundler Rbenv Rack Capistrano原理总结

    RVM

    2016/07/18 Ruby

  35. Go语言中的OOP

    学习Golang差不多五个多月了,从一开始的“不习惯”(作为一名Ruby程序员,Go的语法和Ruby还是有较大不同),到现在逐渐能接受Go语言的整体架构的思想。 这篇文章是对Golang语言中OOP思想的个人总结。将会用Ruby中的OOP内容进行一个对比。

    2016/07/15 Golang

  36. The encryption in ruby and rails

    在一个项目中会有很多数据是需要加密的,以保证数据不会泄露。 比如: 密码的保存。登入时,cookie保存的值。做支付接口的时候,对参数进行加密后传递等待。 加密的作用就是为了防止他人得到真实的数据,从而进行一些操作,避免用户或项目受到损失。

    2016/07/05 Rails

  37. rails中快速插入简单总结

    ActiveRecord makes interface to the DB very easy, but it doesn’t necessarily make it fast.

    2016/07/01 Rails

  38. MySQL百万以上记录表分页优化

    我们知道,当MySQL表的数据达到百万以上甚至千万的时候,整个表的查询性能是会下降的。如果遇到更大的数据时,有一些解决方案,比如分表分库。 看了一些文章有讲“关于百万以上记录表的分页优化”,所以今天实际操作总结一下。

    2016/06/26 Database

  39. 基本排序的总结

    ```ruby

    2016/06/22 Algorithm

  40. Hash Sort

    今天有个需求,将存在redis hash结构中的数据进行排序(热门搜索词,存于redis hash中) 所以就涉及到了hash排序。看下面的示例,很简单,主要是有被一个问题”坑”到了,所以写此文记录

    2016/06/14 Ruby