- 浏览: 159636 次
- 性别:
- 来自: 北京
最新评论
-
西巴拉古呀那:
Linux多线程并发服务器编程(线程池,FTP服务器)网盘地址 ...
多线程服务器的适用场合 -
somefuture:
第四题怎麼用位图法。写了半天没出来,用了下面的,速度很快pri ...
位图法应用 -
寂寞秋江:
系统,全面,条理清晰,由浅入深,简直是集大成之作。 特别是最后 ...
单个进程最大线程数 -
darkjune:
有点意思, 不错
单个进程最大线程数 -
kidding87:
谢谢啦,收藏着
google使用一点敲门分享
文章列表
nginx负载均衡和lvs负载均衡的比较分析
- 博客分类:
- 软负载
lvs和nginx都可以用作多机负载的方案,它们各有优缺,在生产环境中需要好好分析实际情况并加以利用。首先提醒,做技术切不可人云亦云,我云即你云;同时也不可太趋向保守,过于相信旧有方式而等别人来帮你做垫被测试。把所有即时听说到的好东西加以钻研,从而提高自己对技术的认知和水平,乃是一个好习惯。下面来分析一下两者:一、lvs的优势:1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的lvs,仅仅出过一次问题:在并发最高的一小段时间内均衡器出现丢包现象,据分析为网络问题,即网卡或linux2.4内核的承载能力已 ...
海量用户积分排名的几种算法
- 博客分类:
- interview
问题
某海量用户网站,用户拥有积分,积分可能会在使用过程中随时更新。现在要为该网站设计一种算法,在每次用户登录时显示其当前积分排名。用户最大规模为2亿;积分为非负整数,且小于100万。
PS: 据说这是迅雷的一道面试题,不过问题本身具有很强的真实性,所以本文打算按照真实场景来考虑,而不局限于面试题的理想环境。
存储结构
首先,我们用一张用户积分表user_score来保存用户的积分信息。
表结构:
示例数据:
下面的算法会基于这个基本的表结构来进行。
算法1:简单SQL查询
首先,我们很容易想到用一条简单的SQL语句查询出积分大于该用户积分的用户数量:
select ...
深度剖析CloudFoundry的架构设计(5)
- 博客分类:
- PaaS
二、源码导读
笔者一直觉得深入理解一个技术的最好方法就是读它的源码,而CloudFoundry是完全开源的PaaS平台,而因为刚发展起来,代码量不多,主要作者们的代码功力也相当不错,读起来很舒服,很适合研读。而不得不再次表扬一下它完全基于消息机制的架构设计,对组件扩展性,第三方接入等方面做得很好,读者可以从中学到不少思想性的东西。笔者很推荐大家去读一下它的源代码。你可以在Github上找到CloudFoundry的全部代码:https://github.com/cloudfoundry,你会看到几个不同的Repositories,它们分别是:
1、vcap: Cloud Foundry的Co ...
深度剖析CloudFoundry的架构设计(4)
- 博客分类:
- PaaS
CloudFoundry是一个多模块的分布式系统,支持模块自发现,错误自检,且模块间低耦合。其核心原理就是基于消息发布订阅机制。每个台服务器上的每个模块会根据自己的消息类别,向MessageBus发布多个消息主题;而同时也向自己需要交互的模块,按照需要的信息内容的消息主题订阅消息。譬如:一个DEA被加入CloudFoundry集群中,它需要向大家吼一下,以表明它已经准备好服务了,它会发布一个主题是”dea.start”的消息:
@ hello_message_json中包括DEA的UUID,ip, port, 版本信息等内容。
再例如,CloudController需要启动一个Dropl ...
深度剖析CloudFoundry的架构设计(3)
- 博客分类:
- PaaS
3、CloudController:CloudController是CloudFoundry的管理模块。主要工作包括:
a) 对apps的增删改读;
b) 启动、停止应用程序;
c) Staging apps(把apps打包成一个droplet);
d) 修改应用程序运行环境,包括instance、mem等等;
e) 管理service, ...
深度剖析CloudFoundry的架构设计(2)
- 博客分类:
- PaaS
2、DEA(Droplet Execution Agency): 首先要解析下什么叫做Droplet。Droplet在CloudFoundry的概念里面是指一个把你提交的源代码,以及CloudFoundry配套好的运行环境,再加上一些管理脚本,例如Start/Stop这些小脚本全部压缩好在一起的tar包。还有一个概念,叫做Stagingapp,就是指制作上面描述这个包,然后把它存储好的过程。CloudFoundry会自动保存这个Droplet,直到你start一个app的时候,一台部署了DEA模块的服务器会来拿一个Droplet的copy去运行。所以如果你扩展你的app到10个instances ...
深度剖析CloudFoundry的架构设计(1)
- 博客分类:
- PaaS
VMware在今年4月份突然发布了业内第一个开源的PaaS——CloudFoundry。发布至今的这几个月里,笔者一直关注它的演进,并从它的架构设计中获益良多,觉得有必要写出来与大家分享一下。
本文会分为两个部份:第一部份主要介绍CloudFoundry的架构设计,从它所包含的模块介绍起,到各部份的消息流向,各模块如何协调合作;第二部份会在第一部份的基础上,以如何在你的数据中心里面用CloudFoundry部署一个私有PaaS为目标,把第一部分介绍到的架构知识使用起来。
第一部份讲的很多内容,会引用Pat在10月12日的VMwareCloud Forum上面关于CloudFoundry ...
起到第一道安全保障作用的”双亲委派类加载模型”
双亲委派方式的类加载,指的是优先从顶层启动类加载器开始,自顶向下的方式加载类的模型(参见第一条类装载器体系结构)。
这种模型的好处是,底层的类装载器装载的 ...
ZooKeeper典型使用场景一览
- 博客分类:
- 分布式
ZooKeeper是一个高可用的分布式数据管理与系统协调框架。基于对Paxos算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得zookeeper能够应用于很多场景。网上对zk的使用场景也有不少介绍, ...
zookeeper代码解析
- 博客分类:
- 分布式
摘自:http://rdc.taobao.com/team/jm/archives/448
ZooKeeper是近期比较热门的一个类Paxos实现。也是一个逐渐得到广泛应用的开源的分布式锁服务实现。被认为是Chubby的开源版,虽然具体实现有很多差异。ZooKeeper概要的介绍可以看官方文档:http://hadoop.apache.org/zookeeper 这里我们重点来看下它的内部实现。
ZooKeeper集群中的每个server都要知道其他成员,通过在配置文件zoo.cfg中作如下配置实现:
tickTime=2000dataDir=/var/zookeeper/clien ...
分布式一致性Paxos算法学习笔记(二):算法详解
- 博客分类:
- 分布式
声明:Paxos算法学习笔记系列摘自:http://www.cnblogs.com/ychellboy
一、简介
1.1Paxos算法处理的问题
Paxos 算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如 ...
声明:Paxos算法学习笔记系列摘自:http://www.cnblogs.com/ychellboy
取名
Paxos(Greek: Παξοί, pronounced Paksi in English )又名Paxi是希腊西南部一个风景如画的小岛。而Paxos算法则是现在很火的分布式一致性算法,为何以一个希腊小岛名字算法?Lamport这样解释道:
I thought, and still think, that Paxos is an important algorithm. Inspired by my success at popularizing th ...
摘自 : http://www.kafka0102.com/2010/10/350.html
=======================================================================
Scalable System Design Patterns 一文概括了几种常见的系统设计模式。配图很漂亮,我就索性摘过来,推荐感兴趣的继续围观其博客。
1、Load Balancer
该模式中,一个分发器基于某种策略确定由哪个worker实例处理请求。应用最好是无状态的,以使任何一个worker实例都能同等处理请求。大量的 ...
一:问题描述:
编程珠玑第二章的第二个问题是字符串(或者理解为向量)旋转问题,具体描述如下:
rotate a one-dimensional vector of n elements left by i positions. eg: with n = 8; i = 3, the vector abcdefgh is rotated to defghabc.
这个问题在编程之美中也出现了,问题描述:
设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。
下面的内容主要参考了编程之美中的几个算法,编程珠玑中的思想,以及网上牛人的总结, ...
二分查找 -- 百度百科:http://baike.baidu.com/view/610605.htm
public static int binarySearch(int[] target,int key){ int low = 0; int high = target.length-1; while(low <= high){ int middle = (low + high)/2; if(target[middle] == key) return middle; else if(target[middle] > key) high = ...