从代码到云的一种理解

偶然翻出很久之前的印象笔记,发现曾经听过百度架构师林士鼎的一席小规模讲座,虽然时间久远但回顾看来也正是那个时候有了想做架构师的最初萌芽,一则笔记分享出来。

 

分层至关重要

一个大型的系统分层非常重要,以设计一个数据密集型的任务作业最例,最上层的UI到表现层,可以涉及到节流阀,sql like描述的作用,中间层是模型层,负责数据流优化,控制流管理,例如现在最常用的map-reduce模型,最下面是执行层,负责资源分配,优先级,并发控制,隔离,安全等,最终才是我们实实在在的计算资源-机器。这里要说明的是每一层只关心自己的东西,接口明晰,系统扩展和升级够很方便,更有利于构建分布式系[……]

Read more

构建高性能网站的评估方法

 什么叫做高性能网站?用户,产品经理,研发人员,测试人员,运维人员看的角度各有不同,本文只从研发人员的角度来介绍评估网站性能的3个重要指标以及它们之间的关系。

1、响应延迟(Response Time)

通常是指服务器端接收到请求到处理完毕返回的平均时间。

影响的因素大致可以分为这几个方面:业务代码逻辑耗时、远程通信耗时(访问数据库或者其他RPC调用)、磁盘IO耗时(一次寻道时间4ms左右,多次随机IO会严重影响性能)。

2、并发数

系统能够同时处理的请求数量。

3、吞吐量(Throughput)

系统同时处理的业务数/事务数量,也可以理解为我们常说的QPS、TPS,详[……]

Read more

Architecting for high availability

下文是自己看完亚马逊一个关于高可用架构设计的总结帖,其中不乏一些经典实用的设计原则,为以后留存用,全文用英文表达 :)

This article depicts some simple principles or best practices about how to build a high availability web system. I get it from an experience share on QCon 2013 London by Amazon AWS solution architecture and mixed up of my own understanding[……]

Read more

为何要使用redis高版本的一封说服邮件

最近公司内和OP同学针对在生产环境中redis的版本存在分歧,写了一封邮件来说服OP。文中提及了为何要使用redis2.4版本而不是2.2,以及解决他人的concern,先阐述过人的feature,再娓娓道来他人的concern并提出解决方法,最终OP还是compromise了,算是胜仗,这里记录下。

 

Dear Operation System同学,

 
先感谢OP同学提供给RD使用Redis的支持工作。对于Redis使用2.4.14还是2.2版本,详设评审时存在分歧。RD在多方面权衡下还是坚持使用2.4版本,其带来的好处一一道来。
 
1. 快速[……]

Read more

PHP语言访问REST API上传图片的解决方案

最近在开发一个基于HTTPS协议的RESTFul API,在为客户写demo的时候遇到一小点问题,由于PHP的使用经验不足,在写PHP语言的客户端时卡壳了一会,主要遇到的问题是:

如何使用PHP语言访问REST API上传图片?

一般理解先将图片做base64编码,然后将请求json格式化,通过HTTPS POST到后端服务器,结果我的后端服务报错含有非法base64字符\,用PHP的stripslashes转义上传成功。
 
总结一下,其实技术上遇到问题会很多,为什么牛人、老手可以快速解决,而新人往往需要更多时间或请教别人。主要在于两点:
1、耐心。遇到问题先通过搜索引擎[……]

Read more

RTB竞价中的cookie mapping技术

首先通过一些关键词解释普及或者回顾一下背景,

ADX:Ad exchange的简称。一般特指Ad exchange平台模块
DMP:Data Management Platform的简称。DMP存储了流量、受众的各种特征信息。
DSP:Demand Side Platform的简称。可以看做流量的购买方,为广告主服务。广告主可以通过DSP购买流量,达到营销的目的。DSP可以接入ad exchange中,参与cpm竞价,购买所需要的受众流量。
SSP:Supply Side Platform的简称。可以看做流量的供应方,为网站主服务。网站主可以通过SSP实现其流量变现,达到流量变现的目的[……]

Read more

如何成长为一名项目经理

什么是项目经理?

简称PM。
 
PM通常可以有两种解释,分别是Project Manager项目经理,和Product Manager产品经理,而本文指的是前者,而且专指IT项目经理。
 
 
 

项目经理在公司所处的位置

项目是事业部乃至公司最基本的业务运作单位,是公司最重要的基层管理角色之一
 
 
 

项目经理要承担哪些角色?

简而言之,组织者+领导者
 
具体来说就是,
项目经理是公司委派的负责实现项目目标的个人,是公司授权的项目负责人,是项目的直接组织者和领导者。项目[……]

Read more

Mac OS X常用快捷键

最近接触了mac os,对于其华丽的界面,便捷的操控非常喜欢,多任务手势使用极其便捷,实属工程师工作之舒心必备良品,但是不用鼠标的后果就是多了很多的touchpad单击操作,随自己搜寻了一些常用的快捷键,快捷键不在多,而在于自己使用的得心应手,提高工作效率为目标,总结一些常用的操作,下面的操作均是基于Mac OS X Mountain Lion下的。

 

chrome快捷键

command+T  增加窗口    command+N 增加打开
command+W 关闭当前窗口
command+R 刷新    command+.[……]

Read more

利用phantomjs将HTML源代码转换成图片

通常我们的需求是将网页渲染成图片保存,那么也会有这样的情况,将HTML源代码转换成图片,下面的代码将满足需求: 

var page = require("webpage").create();
page.viewportSize = { width: 200, height : 200 };
page.content =  "This Text will be converted to Image";
page.setContent(page.content,page);
window.setTimeout(function ()[......]

Read more

一些Java代码编程规范

1. 命名

驼峰命名

class命名尽量表达含义,尽量使用常用单词

非static的方法和变量,使用驼峰命名

static的方法,使用驼峰命名

static的变量,尽量使用大写,以下划线区分单词

 

2. 代码格式化

统一代码格式化,导入格式文件

每次写一部分代码后按ctrl+shift+f格式化代码,ctrl+shift+o重新组织import。

尽量不自己进行格式化,而是用eclipse的自动格式化。

code template和code style的xml格式文件可以网络上搜索下载。

 

3. 注释

类注释,写清楚作者,类的大致作用

方法[……]

Read more

如何用phantomjs操作修改DOM并截图

前一篇初步学会了如何使用phantomjs实现基本的网页截图,跟进上一篇的TODO,如何操作网页的DOM后再进行截图呢?That is to say, how to use phantomjs to manipulate DOM and render image?

 

参考phantomjs的API Reference,我们主要要利用的就是这个函数,它的usage如下:

evaluate(function, arg1, arg2, ...) {object}

Evaluates the given function in the context of the we[……]

Read more

使用Jakarta Commons Pool对象池技术

1. 为什么使用对象池技术

创建新的对象并初始化,可能会消耗很多时间。在这种对象的初始化工作中如果依赖一些rpc远程调用来创建对象,例如通过socket或者http连接远程服务资源,最典型的就是数据库服务以及远程队列(Remote Queue),建立连接 -> 发送数据 -> 接收连接 -> 释放连接的过程无疑对于客服端来说相当繁重。在需要大量或者频繁生成这样的对象的时候,就可能会对性能造成一些不可忽略的影响。要解决这个问题在软件层面上可以使用对象池技术(Object Pooling),而Jakarta Commons Pool框架则是处理对象池化的有力外援。
&nbsp[……]

Read more

判断Redis运行状况是否正常的Python监控脚本

import commands
 
'''
    execute system command
'''
def execSysCmd(cmd):
    (status,output) = commands.getstatusoutput(cmd)
    return (status,output)
 
CHECK_REDIS_OK_CMD = "(echo -en \"PING\r\nset pivot damnit\r\nget pivot\r\n\"; sleep 1) | nc 10.81.31.95 16381"
(st[......]

Read more

memcache关于键值的一些限制

memcached的key最大长度

key的最大长度是250个字符。推荐使用使用较短的key,因为可以节省内存和带宽。
 

memcached的最长过期时间

过期时间最大可以达到30天。memcached把传入的过期时间(时间段)解释成时间点后,一旦到了这个时间点,memcached就把item置为失效状态。
 

memcached最大存储数据大小

1MB。如果你的数据大于1MB,可以考虑在客户端压缩或拆分到多个key中。
 
为什么单个item的大小被限制在1M byte之内? 
简单的回答:因为内存分配器的算法就是这样的。
详细[……]

Read more

统计全年的一个shell脚本

有时候需要做一些统计操作,例如统计今年以来分天的某个操作,可以写出一个伪调用

for everyday in this year

    process_program everyday

其中everyday为参数。

 

问题来了,假定现在有一个脚本process_program可以接受一天的参数,如果计算今年的呢?

尝试用下面的shell脚本吧,全手工雕琢,作为自己的统计利器了。

#!/bin/bash
 
datefile="datefile"
rm -f $datefile
 
function importOne[......]

Read more