基于Protobuf的分布式高性能RPC框架——Navi-Pbrpc

1 简介

Navi-pbrpc框架是一个高性能的远程调用RPC框架,使用netty4技术提供非阻塞、异步、全双工的信道,使用protobuf作为序列化协议,同时提供长、短连接模式,支持non-blocking和传统的blocking io,以及负载均衡,容错处理策略等,对于基于socket的分布式调用提供通信基础。

如果你的项目中需要高性能的RPC解决方案,那么navi-pbrpc可以帮助到你构建一个强大的远程调用系统。

Navi-pbrpc使用netty nio开发,全双工、异步、非阻塞的通信模型,保证了高性能和理想的QPS,了解详细性能测试报告见附录性能测试。

单测覆盖率见附录。

[……]

继续阅读

SpringMVC源码分析和一些常用最佳实践

前言

本文分两部分,第一部分剖析SpringMVC的源代码,看看一个请求响应是如何处理,第二部分主要介绍一些使用中的最佳实践,这些best practices有些比较common,有些比较tricky,旨在展示一个框架的活力以及一些能在日常项目中能够应用的技巧,这些技巧的线索都可以在第一部分的代码剖析中找到,所以读读源代码对于使用好任何框架都是非常有帮助的,正所谓“知其然,还要知其所以然”。[……]

继续阅读

从无重复大数组找TOP N元素的最优解说起

有一类面试题,既可以考察工程师算法、也可以兼顾实践应用、甚至创新思维,这些题目便是好的题目,有区分度表现为可以有一般解,也可以有最优解。最近就发现了一个这样的好题目,拿出来晒一晒。

1 题目

原文:

There is an array of 10000000 different int numbers. Find out its largest 100 elements. The implementation should be optimized for executing speed.

翻译:

有一个长度为1000万的int数组,各元素互不重复。如何以最快的速度找出其中最大的10[……]

继续阅读

半面创新的一些学习总结

有幸参与了周宏桥老师的半面创新两天的培训session,主题是关于创新突破性产品的实践体系,体会颇多,扩展自己的视野的同时,大有感觉在创新领域绝对是存在原则和方法论的,趁热记录下课程的重点内容。下面内容多是上课时的笔记,由于周老师通晓历史诗歌,所以有很多生动的故事也简单写在里面,了解更多可以搜索周老师的相关出版物

 

1. 创新成果五大原则

一命二正三出奇
四用地利五任势
 

1.1 一命

本质是一个时空绑定的生产关系场。可以理解为,新生产力能够匹配生产关系。生产力、生产关系涉及到马克思主义哲学,此处不做展开。
 
举例来说,过去的传统软件公司[……]

继续阅读

Java基础类型存储与运算知识

最近发现一个问题,面试者、甚至组员中,在被问及一些计算机基础类型存储知识的时候,也许是大家目前的工作都是比较偏业务,以至于基础知识不太扎实,感觉有必要在这里在夯实一下,以被后人和自己牢记——基础知识或许不是你现在工作最重要的,但却是你未来进步的基石。

 

1. Java中的原码、反码和补码

1.1 原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

[[……]

继续阅读

构建一个类timeline系统的架构设计

最近一直对微博、twitter、微信朋友圈这类软件所提供的类timeline系统架构很有兴趣,也可以叫做时间轴、news feed,或者status update,查阅了不少资料,也结合自己对于架构设计的一些积累认识,尝试着设计了一把。下图是一个简单tweets界面:
首先明确目标,要设计的系统是一个用户数、数据量、并发量足够大的平台,按照一般经验:
1M+ Active User,10T后台数据,3k QPS,peek 10k QPS
这里声明一点,业务需求决定技术演化路线,任何项目开始做要start from the bottom up,千万不要过度设计啊,下文都是尝试的思考)[……]

继续阅读

从代码到云的一种理解

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

 

分层至关重要

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

继续阅读

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

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

1、响应延迟(Response Time)

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

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

2、并发数

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

3、吞吐量(Throughput)

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

继续阅读

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[……]

继续阅读

为何要使用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. 快速[……]

继续阅读

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

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

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

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

继续阅读

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实现其流量变现,达到流量变现的目的[……]

继续阅读

如何成长为一名项目经理

什么是项目经理?

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

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

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

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

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

继续阅读

Mac OS X常用快捷键

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

 

chrome快捷键

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

继续阅读

利用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 ()[......]<p class="read-more"><a href="http://neoremind.com/2013/02/%e5%88%a9%e7%94%a8phantomjs%e5%b0%86html%e6%ba%90%e4%bb%a3%e7%a0%81%e8%bd%ac%e6%8d%a2%e6%88%90%e5%9b%be%e7%89%87/">继续阅读</a></p>