应用系统常用性能指标

PV

PV是Page View的缩写。用户通过浏览器访问页面,对应用服务器产生的每一次请求,记为一个PV。可以将这个概念做了延伸,系统真实处理的一个请求,视为一个PV。即,PV的概念也适用于接口。PV的统计一般可以通过一些监控或者统计访问日志统计得出。说到PV还有个特殊的情况,叫PeakPV,指一天中 PV数达到的高峰PV值。
 
 

QPS/TPS

QPS是Queries Per Second的缩写,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。我的理解QPS更趋向于“读操作”。
&n[……]

Read more

Is memcached a dinosaur in comparison to Redis?

下面内容来自Redis作者在stackoverflow上的一个回答,对应的问题是《Is memcached a dinosaur in comparison to Redis?》(相比Redis,Memcached真的过时了吗?)
 
You should not care too much about performances. Redis is faster per core with small values, but memcached is able to use multiple cores with a single executable and TCP port[……]

Read more

[转]Redis几个认识误区

1. Redis介绍

这个问题的结果影响了我们怎么用Redis。如果你认为Redis是一个key value store, 那可能会用它来代替MySQL;如果认为它是一个可持久化的cache, 可能只是它保存一些频繁访问的临时数据。Redis是REmote DIctionary Server的缩写,在Redis在官方网站的的副标题是A persistent key-value database with built-in net interface written in ANSI-C for Posix systems,这个定义偏向key value store。还有一些看法则认为Redis[……]

Read more

Redis典型应用场景

毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。希望你喜欢这个比喻。

 

下面是一篇新鲜出炉的文章,其作者是Redis作者@antirez,他描述了Redis比较适合的一些应用场景:
 
1.取最新N个数据的操作
比如典型的取你网站的最新文章,通过下面方式,我们可以将最新的5000条评论的ID放在Redis的List集合中,并将超出集合部分从数据库获取
使用LPUSH latest.comment[……]

Read more

pymongo批量插入

通常我们可以用pymongo这个驱动来作为API操作mongodb,一个典型的需求就是批量插入大量的document(文档),我们知道mongodb是fire-and-forget的模型,即发送数据到mongdb-server后,客户端就认为数据已经保存,这种类似于非阻塞的方式,可以立刻返回。要保存的文档可以放在一个python的数据结构list中,那么如果这list过于庞大,那拍脑袋想想也不利于mongo-server插入内存,更何况内存碎片,网络IO等风险。所以批量操作吧,见下面的一段代码。

from pymongo import Connection
 
loadsplitsiz[......]

Read more

shell中输出从某一天起所有日期的方法

 最近在项目中有这么一个需求,导入历史所有日志到DB中,而导入的脚本usage如下:

./importApiaccessLog-main.py <date like 20120506>

因此需要从一个很早的时间点开始,依次调用该脚本,顺序传入日期。那么每年每个月的天数都会不同,怎么办,写了个shell脚本,以后面对这种需求,可以直接板砖了。不多说,上脚本:

#!/bin/bash
 
datefile="datefile"
echo > $datefile
 
function importOneMonthLog()
{
	s[......]

Read more

mongodb学习笔记

mongoDB介绍篇

mongodb由C++写就,其名字来自humongous这个单词的中间部分。最简洁描述为:scalable, high-performance, open source, schema-free, document-oriented database
 
mongoDB是一个基于分布式文件存储的数据库开源项目,旨在为WEB应用提供可护展的高性能数据存储解决方案。Mongodb由专门的公司来开发,公司名叫做10gen,2009年发行了以一个release版本。
 
跟mysqld一样,一个mongod服务可以有建立多个数据库,每个数据库可以有[……]

Read more

有关Python拼SQL操作数据库的故事

小白问:

我想用python操作数据库,我拼sql该怎么半?
 
PY控:
想想java吧
 
小白:
sql += name
sql += ‘, now(),’
 
PY控:
No No No
第一,拼string浪费内存,你这样不好于StringBuffer(‘123’+’ABC’)的错误。
 
第二,这样容易造成了sql注入,看看下面的笑话吧
一个家长接到电话: 
Teacher: Hi. This is your son’s school. We are having some computer[……]

Read more

利用spring的BeanNameAutoProxyCreator做事务管理配置

在项目开发时候,很多目标bean需要生成事务代理,可以为每一个目标bean配置一个 TransactionProxyFactoryBean  bean。这样做的话,可能最后变成配置地狱,此时可以考虑使用自动事务代理。 

 
applicationContext.xml配置可以加入如下,不解释:
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN&quo[......]

Read more

python脚本在crontab中无法执行解决

 今天在crontab里配置了一个python脚本定时执行,配置信息如下:

# crontab -l
35 9 * * * cd /home/work/test; ./test.py

 结果没有任何输出就是执行不了,利用下面命令观察crontab日志。

# su - root
# tail -f /var/log/cron

 发现任务按时运行了,问题就奇怪了。

后来想到是不是环境变量引起的,于是检查python脚本的头部,将python的执行命令加入进去就好了,例如:

#!/usr/local/bin/python
# cod[......]

Read more

HTTP Server简介

1. HTTP Server是干什么的?

    – 处理http请求,返回数据给浏览器
    – 负载均衡/反向代理/健康检查
    – 日志(access log)
    – URL Rewrite
    – gzip
    – cache-control(expire,etag,last-modified)
    – keep-alive(长连接[……]

Read more

分布式应用通信协议

1. 历史

第一轮:HTTP,带来了Internet与电子商务
第二轮:Java,cross-platform,最早的RMI
第三轮:XML,标准的数据封装技术,各种App之间交换数据不再是难事。
第四轮:RPC,Webservice、REST、高性能通信协议
 

2. What is RPC?

简单理解: 可互操作的Web服务

RPC(Remote Procedure Call)
–    在某种传输协议(TCP\HTTP等)上携带信息数据,通过网络从远程计算机程序上请求服务
– &[……]

Read more

跨平台通信中间件thrift学习【Java版本】

1. What is thrift?

Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。跨平台通信中thrift可以作为二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务。
 

2. thrift为我们做了什么?

首先我们需要先了解下任何RPC的解决方案都包含如下几层实现:
· 服务层(service):RPC接口定义与实现
· 协议层(protocol):RPC报文格式和数据编码格式
· 传输层(transport):实现底层的通信(如 s[……]

Read more

几种Java常用的通信协议比较

本文比较了RMI,Hessian,Burlap,Httpinvoker,Web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能。

 

1. 简介

RMI是java语言本身提供的远程通讯协议,稳定高效,是EJB的基础。但它只能用于JAVA程序之间的通讯。
Hessian和Burlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防火墙端口。协议的规范公开,可以用于任意语言。
Httpinvoker是SpringFramework提供的远程通讯协议,只能用于JAVA程序间的通讯,且服务端和客户端必须使用SpringFramework。

[……]

Read more

WEB小流量实验解决方案

最近在项目组里负责搭建WEB系统的小流量实验平台,这篇文章主要介绍了小流量实验的目的,方法原理,实现方案等。

 

1. 小流量实验的目的

业务上经常需要做一些小流量的实验,即抽取一部分客户,这部分客户使用系统,会看到一些小流量的新功能,而其他用户使用系统,仍然和原来一样。这样通过一些数据指标的对比,有助于我们评估小流量的价值,从而决策是否将其转成全流量。
 

2. 小流量实验方法论

小流量实验必须要区分实验组和对照组,实验组就是被小流量的请求或者用户,同理对照组就是全流量的。因此为了保证实验符合A-B原则,理论上需要先做A-A测试,即在全流量上寻找这样一组各项度[……]

Read more