【未完待续】Kafka的那些事儿

消息队列在互联网领域里得到了广泛的应用,它多应用在异步处理,模块之间的解偶和高并发的消峰等场景,消息队列中表现最好的当属Apache开源项目Kafka,Kafka是使用Scala语言开发,利用操作系统的缓存原理达到高性能,而且有不同语言的客户端,使用起来非常的方便。 本篇文章主要介绍Kafka的工作原理,通用概念,架构设计……

一个框架的线程同步代码引起的思考

最近在review公司的前任架构师留下来的框架代码,其中,有一段代码实现的让人很confused,仔细阅读和分析后,发现可能存在一个隐含的bug,在进行了深入的分析和实践,通过一个简单的程序进行了最小化重现,证明了bug的存在,并且对框架进行改造,改正了这个bug,于是,在这个帖子中记录这个问题的来龙去脉,希望能够帮助……

团购中提货码的生成

公司在开发类似团购的业务,团购的商品下单后,会给买家提供一个提货码,有的团购网站叫团购密码,通过短信的形式发送给你的手机,其实这个提货码处于密码和明码之间,它涉及的商品并不是太贵,并不需要100%安全的保存,如果过多的安全保护降低了用户友好性,那就得不偿失了,所以,提货码仅仅需要具有下面3个特性: 1.……

永无休止的关于REST API设计风格的争论

记得几个月前,我们讨论过到底是重用HTTP CODE(400,500), 返回错误码还是仅仅重用HTTP CODE(200)并且使用自定义的业务CODE返回错误码,这个问题并没有唯一标准的答案,各有利弊,不同的大公司也是采用大相径庭的方案,只能说萝卜白菜,各有所爱,喜好不同导致产生了两大阵营,帖子如下:http://cloudate.net/?p=1062。 无……

有趣儿的SQL执行顺序

原文来自于互联网,具体出处已经无法考证,问题来自于和同事的讨论。 MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有最后一个虚拟的表才会被作为结……

浏览器自动代理脚本的配置

由于公司上网需要代理,在需要访问外网的应用中,例如:浏览器,包管理器,Eclipse开发工具,Maven等,做了代理的配置,然而,回到家里,由于这些代理设置,这些软件不能正常工作,每次回家后都需要手工的更改代理配置,非常麻烦,于是,研究了一下代理的自动配置脚本,总结如下: 代理的自动配置脚本使用JS语言,因此可……

吐槽JDK自带Math类关于对数API的设计

引言 今天在实现一个算法的时候,需要求对数,于是翻了一下Math类里面的API定义,确实有求对数的API,但是,看来看去总觉得这些API设计有些怪怪的,不符合常人的思维,API也没有自文档化,也就是看了API,不知道应该怎么用。 数学相关知识 为了吐槽吐得有理由据,提前和一个学数学的同事确认了一下对数相关知识: log(x,y……

构建可伸缩网站的架构模式和方法

昨天CTO分享美国硅谷的大牛的PPT,PPT覆盖了线上服务构建的方方面面,值得一读,对于里面每个主题都值得进行深入的学习和调研, PPT里推荐了一些相关技术书籍供参考。 PPT scalable-web-architectures-common-patterns-and-approaches-9562 相关书籍 Building Scalable Web Sites – C. Henderson – O’……

Mysql性能压测实践报告

这是一个很能干的同事做的性能压测报告,同事并没有使用jmeter和一些其他的如Sysbench, Mysqlslap等性能测试工具,而是根据测试特点单独开发了一个实用的测试工具,测试包括: 1. 最小包查询的响应时间分布,1K包查询响应时间分布,不同大小包的查询和插入的吞吐量/响应时间的分布。 结果:随着包大小的增大,吞吐量和……

内嵌Jetty打印HTTP请求日志

在互联网在线服务中, 使用内嵌Jetty是比较常见的, 内嵌的Jetty管理方便, 启动简单, 可以与你的Web应用无缝的结合, 需要的时候还可以做一些定制化, 在使用内嵌Jetty, 一个非常常见的需求就是打印HTTP请求日志, 类似Tomcat的存取日志一样, 由于Jetty的文档并不是很多, Google又不能使用, 因此, 把打印日志的代码总结在这里,……

对Redis变量原子递减到0的操作

在使用Redis缓存的业务场景的时候, 经常会有这样的需求, 需求要求递减一个变量, 如果递减后变量小于等于0, 然后返回一个标志, 如果成功, 则返回剩余值。 实现中需要注意服务器端的多线程问题以及客户端的多线程问题。服务器端可以利用服务器单线程执行LUA脚本来保证,或者通过WATCH, EXEC, DISCARD, EXEC来保证。客户端我……

Top/Free命令中的Buffer和Cache的区别

在对Linux系统分析的时候,少不了使用top/free等命令来查看内存的使用情况,内存的使用并不是简单的占用和空闲的状态,如果读者用过top/free命令,会发现里面有buffer和cache的数据,从字意上来讲,都是缓存,那么弄清楚缓存什么数据才能有效的区分这两种缓存。 12345robert@robert-ThinkPad-X200:~/working/cloudate-wor……

Ubuntu上为Firefox安装Flash Player

最近有点郁闷,发现我的Windows和Linux下的浏览器的Flash都不能播放,原因是Flash Player坏掉了,按照浏览器提示,更新失败,作为一个程序员,真的让我很不爽。几经周折,终于把两个浏览器都修好了。 Windows 在Windows下,IE是好用的,Chrome提示Flash Player过期,让我更新,每次点击更新到达Adobe主页,点击下载按钮都……