四层和七层负载均衡的区别

(一)

  简单理解四层和七层负载均衡:

  ① 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址;三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址;四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器;七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器。

② 所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。 比如四层的负载均衡,就是通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。七层的负载均衡,就是在四层的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子,如果你的Web服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。
阅读全文

Linux下取代top的进程管理工具 htop

一、htop 简介

This is htop, an interactive process viewer for Linux. It is a text-mode application (for console or X terminals) and requires ncurses.

Comparison between htop and top

  • In ‘htop’ you can scroll the list vertically and horizontally to see all processes and complete command lines.
  • In ‘top’ you are subject to a delay for each unassigned key you press (especially annoying when multi-key escape sequences are triggered by accident).
  • ‘htop’ starts faster (‘top’ seems to collect data for a while before displaying anything).
  • In ‘htop’ you don’t need to type the process number to kill a process, in ‘top’ you do.
  • In ‘htop’ you don’t need to type the process number or the priority value to renice a process, in ‘top’ you do.
  • ‘htop’ supports mouse operation, ‘top’ doesn’t
  • ‘top’ is older, hence, more used and tested.

htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses。

与Linux传统的top相比,htop更加人性化。它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。
阅读全文

SAE月刊:第5期——掌上SAE(iOS客户端)来啦!

SAE月刊2014年第5期
Sina APP Engine 易用、可靠、高效、安全
本期特讯
新浪云计算公开课 掌上SAE(iOS版本)经过一段时间的内测后,于7月1日下午正式发布!掌上SAE是Sina App Engine推出的移动APP,目的是让用户更加便捷的管理应用,管理帐户信息,了解应用各项数据及应用服务状态。
掌上SAE(iOS版本)目前有四大功能:
1.应用管理;2.数据分析;
3.应用账单;4.通知提醒。
如果你已经使用过web版SAE创建过应用,可以通过掌上SAE更方便的实时监测管理应用。
安装下载掌上SAE后,即可获得1张2000云豆优惠卡!
Android版本还在开发中,敬请期待!
苹果官方下载地址,请点击
【详细】
前沿消息
2014可信云服务大会7月15日在京举办!

中国云计算的奥斯卡盛典来了!工信部、财政部、发改委、国采中心领导及各大云厂商领导将出席盛典,共话云计算未来。届时还将颁发“可信云年度云服务奖”。
新浪研发总经理@符庆明 先生、SAE总监丛磊先生@kobe 将发表主题演讲。
免费报名地址:
【详细】
深圳沙龙分享:《在云中移动–SAE》

7月5日下午,SAE团队中Web开发负责人朱明明@Lazypeople 为大家带来了主题为《Let’s run on SAE!》的精彩分享。在SAE平台上,应用程序易于构建和维护,并可根据访问量和数据存储需要的增长轻松扩展。目前还有开发者扶持政策,通过开发者认证后,每年最高可获得3600元的扶持额度。讲义下载:
【详细】
技术资源
SAE技术微博精选(最新)
1.《linux 信号量》
2.《用HTML5实现的各种排序算法的动画比较》
3.《从输入 URL 到页面加载完成的过程中都发生了什么事情?》
4.《《The best career advice I’ve received》
5.《MySQL在大型网站的应用架构演变》
6.《JavaScript Promise启示录》
7.《PHP程序的执行流程》
8.《免费学习工具:Online Python Tutor》
9.《XSS 前端防火墙》
10.《程序员必须知道的10大基础实用算法及其讲解》
11.《MySQL主从复制原理、主从复制(异步)、半同步复制、基于SSL复制》
12.《11 个很有用但鲜有人知的 Linux 命令》
13.《程序员必须进行的10项投资》
14.《Swift语言主流学习资源》
15.《在线学习Java免费资源推荐》
16.《10款效果惊艳的HTML5应用和源码》
17.《RESTful API 设计指南》
18.《Instagram的技术架构》
19.《JavaScript装逼指南》
20.《基于Java的简易缓存系统》
21.《如何写好CSS?》
22.《MySql注入科普》
23.《如何编写好的jQuery代码》
24.《优化临时表使用,SQL语句性能提升100倍》
访问SAE 扫描二维码 扫一扫,获取优质技术资源
关注微信:Sina APP Engine
关注新浪微博

如果您有任何疑问或建议,请联系我们,欢迎发邮件到saemail@sina.cn,或到开发者论坛交流反馈。

 

基于HBase的消息队列:HQueue

1. HQueue简介

HQueue是一淘搜索网页抓取离线系统团队基于HBase开发的一套分布式、持久化消息队列。它利用HTable存储消息数据,借助HBase Coprocessor将原始的KeyValue数据封装成消息数据格式进行存储,并基于HBase Client API封装了HQueue Client API用于消息存取。

HQueue可以有效使用在需要存储时间序列数据、作为MapReduce Job和iStream等输入、输出供上下游共享数据等场合。

2. HQueue特性

由于HQueue是基于HBase进行消息存取的,因此站在HDFS和HBase的肩膀上,使得其具备如下特点:

(1)支持多Partitions,可根据需求设置Queue的规模,支持高并发访问(HBase的多Region);

(2)支持自动Failover,任何机器Down掉,Partition可自动迁移至其他机器(HBase的Failover机制);

(3)支持动态负载均衡,Partition可以动态被调度到最合理的机器上(HBase的LoadBalance机制,可动态调整);

(4)利用HBase进行消息的持久化存储,不丢失数据(HBase HLog和HDFS Append);

(5)队列的读写模式与HBase的存储特性天然切合,具备良好的并发读写性能(最新消息存储在MemStore中,写消息直接写入MemStore,通常场景下都是内存级操作);

(6)支持消息按Topic进行分类存取(HBase中的Qualifier);

(7)支持消息TTL,自动清理过期消息(HBase支持KeyValue级别的TTL);

(8)HQueue = HTable Schema Design + HQueue Coprocessor + HBase Client Wrapper,完全扩展开发,无任何Hack工作,可随HBase自动升级;

(9)HQueue Client API基于HBase Client Wrapper进行简单封装,HBase的ThriftServer使得其支持多语言API,因此HQueue也很容易封装出多语言API;
(10)HQueue Client API可以天然支持Hadoop MapReduce Job和iStream的InputFormat机制,利用Locality特性将计算调度到存储最近的机器;

(11)HQueue支持消息订阅机制(HQueue 0.3及后续版本)。

3. HQueue系统设计及处理流程

3.1. HQueue系统结构

HQueue系统结构如图(1)所示:

v

 

图(1):HQueue系统结构

(1)每个Queue对应一个HTable,创建Queue可以通过Presharding Table方式创建,有利于负载均衡。

(2)每个Queue可以有多个Partitions(HBase Regions),这些Partitions均匀分布在HBase集群中的多个Region Servers中。

(3)每个Partition可以在HBase集群的多个Region Servers中动态迁移。任何一台Region Server挂掉,运行在其上的HQueue Partition可以自动迁移到其他Region Server上,并且数据不会丢失。当集群负载不均衡时,HQueue Partition会自动被HMaster迁移到负载低的Region Server。

(4)每个Message对应一个HBase KeyValue Pair,按MessageID即时间顺序存储在HBase Region中。MessageID由Timestamp和同一Timestamp下自增的SequenceID构成,详细信息参见《Message存储 结构》部分。

3.2. Message存储结构

Message存储结构如图(2)所示:

a1

 

图(2):Message存储结构

其中:

(1)RowKey:由PartitionID和MessageID构成。

  • PartitionID:一个Queue可以有多个Partitions,目前最多支持Short.MAX_VALUE个 Partitions。Partition ID可以不在创建Message对象时指定,而是在发送消息时设定,或者不指定而使用一个随机Partition ID。
  • MessageID:即消息ID,它由Timestamp和SequenceID两部分组成。Timestamp是消息写入HQueue 时的时 间戳,单位为毫秒。SequenceID是同一Timestamp下消息的顺序编号,目前最多支持同一Timestamp下 Short.MAX_VALUE个Messages。

(2)Column:由Column Family和Message Topic构成。

  • Column Family:HBase Column Family,此处为固定值“message”。
  • Message Topic :HBase Column Qualifier,消息Topic名称。用户可以根据需要将Message存储在不同的Topics之下,也可以从Queue中获取感兴趣的Topics消息数据。

(3)Value:即消息内容。

3.3. HQueue消息写入及Coprocessor处理流程

HQueue利用HQueue Client API写入消息数据,为保证消息唯一和有序,HQueue利用Coprocessor处理用户写入消息的MessageID,然后立即放入HBase MemStore中,使其可以被访问到,最后持久化的HLog中。具体的处理逻辑如图(3)所示:

a4
阅读全文

你不是书读得少,你是经典读得少

问题的由来

每次去方所,看着高高的书架,满眼的书,一方面很庆幸,这个时代对爱书的人来说,是幸福的,一方面也很难过,这些书都像一个个陷阱,很多人陷在其中,而不自知。这就像现在的互联网一样,信息通畅,人人都可以发出自己的声音,各种论调都可以看到,但有价值的东西也被隐藏的更深了,不练就一双火眼金睛很难发现他们,互联网像一湾深海,如果没有高超的游泳技术和掌控能力,不想被互联网淹死,就只能远离它。

有一个现象,自信息革命以来,整个世界范围内,在各自领域内取得瞩目成就的年轻人大多集中在互联网和商业领域,而人文科学几乎找不到年轻人的身影了。可能很多人会说,人文科学需要经历和积累,心智成熟之后才会有所成就。先不说什么叫心智成熟,有什么样的评判标准,先看看近代历史上的一些人在他们年轻的时候都干了些什么:

维特根斯坦写《逻辑笔记》的时候,24岁,尼采写《悲剧的诞生》时,28岁,写《查拉图斯特拉如是说》时39岁,卡夫卡写出《变形记》刚刚30,叔本华30岁就写出了《作为意志和表象的世界》完成自己的哲学使命,《共产党宣言》出版的时候,马克思也才刚刚30岁……

再看看国内的:

陈寅恪36岁,就与梁启超、王国维、赵元任并称“清华四大导师”,胡适26岁任北大教授,萧红去世时,也刚刚30多岁,却已经在中国现代文学史留下了几部耀眼的作品……

上面提到的这些人本身具有的某种超越常人的品质肯定是不容置疑的,但是光有品质是远远不够的,对人类来说,每个时代人的品质应该是差不多的,不存在有的时代人的品质高,有的时代人的品质低,如果只从生物进化的角度来说,现在的人的身体素质与大脑发育应该是超越过去的,但现实的情况是,在当代做出巨大成就的艺术家与思想家却乏善可陈。这当然跟环境有关,跟这个时代有关。

有位前辈说过:

你的问题是想得太多,而书读得太少

我想换个说法:你不是书读得少,你是经典读得少

我们这个时代,留给思考者的空间越来越小了,思考者要接受的挑战越来越难了。
阅读全文

打造你自己的程序员品牌

John SonmezSimple Programmer的创始人、作者与程序员,关注于如何让复杂的事情变得简单。他是一位专业的软件开发者、架构师与讲师,感兴趣的领域包括测试驱动开发、如何编写整洁的代码、敏捷方法学等。John坚信可以通过简单的方式来解决复杂的问题、大多数优雅的解决方案都是很简单的。近日,John撰写了一篇文章,谈到了如何打造程序员自己的品牌,在社区中引起了不小的反响。

你的职业是一位软件开发者,但这并不意味着你不用关注于品牌问题。事实上,如果你想让自己的职业生涯更上一层楼,那么你需要通过打造自己的个人品牌来积极地对其进行梳理。

本文将会帮助你打造属于自己的个人品牌,不过首先我需要对品牌的构成进行一个总体的介绍(品牌并不仅仅只是个Logo)。我还会介绍如何通过定义你的职业来打造出一个高效的个人品牌。最后,本文将会介绍打造你自己的个人品牌所要做的4件事。

何为品牌?

在打造自己的个人品牌前,我们需要清楚品牌到底是什么。大多数人都觉得品牌就是个Logo而已。虽然很多品牌都有Logo,不过品牌却并非仅仅是Logo而已。Logo只不过是品牌的一个小小的构成元素之一。品牌其实是一种承诺。品牌都与期望相关。在打造品牌时,你实际上是在构建关于你和你的公司的一些期望,你承诺要兑现这些期望。想想诸如星巴克这样的流行品牌吧。你觉得星巴克这个品牌所做出的承诺是什么?当你走进星巴克时,你会对菜单上有哪些东西、服务员招待你的方式、甚至是使用了哪种灯光抱有一些期望。星巴克这个品牌之所以如此成功并不是因为它的Logo。相反,星巴克对你和其他顾客所作出的承诺本身才是构成品牌的重要元素。

我认为一个品牌要具备如下4个组成部分:

  • 信息——品牌代表什么?
  • 视觉效果——品牌的视觉表现是怎样的?
  • 一致性——品牌所传递的信息是不是一样的,我能否信赖?
  • 重复曝光——品牌是否经常出现,我能够认出来?

缺乏这4个方面的品牌注定要失败。一个品牌必须要有一个清晰一致的信息、从视觉上能够被人所识别,这样才能达到效果。

后面将会对这4个组成部分进行深入的分析,不过现在我们来谈谈何为个人品牌。

个人品牌

如果能从卖方的角度来看待问题,那就能更容易地理解何为个人品牌了。

先不将你的职业看作是你现有的这份工作,试着将自己当作提供软件开发服务的卖方。如果你现在为某人工作,那么你目前就只有一个客户。如果从卖方的角度来思考,那么个人品牌就显得更具意义了。个人品牌指的是关于你提供的服务所做出的承诺与期望。为了打造一个良好的个人品牌,你需要选择好合适的职业。比如说,你可能会选择NoSQL数据库这个领域。也许你希望自己成为一名NoSQL数据库专家。或许你是一位测试驱动的JavaScript开发专家,精于向JavaScript开发者传授如何为其代码编写高效的测试。你的职业与市场的契合度越好,你的品牌在这个特定的市场中就会越响亮。当垃圾处理机坏了,你打电话叫修理工时,你是不是会叫ABC Plumbing或是Garbage Disposal Fix-it Man呢?如果专业技能良好,那么通过打造个人品牌你会取得更大的成功。

信息的打造

品牌的一个主要构成就是信息了,信息是品牌所要表达的东西。没有信息的品牌什么也不是,因为它无法沟通。信息应该传达出品牌的内涵以及品牌所要表达的期望与承诺。如果实在想不出个人品牌的信息是什么,那么可以先看看你会提供什么价值。作为一名软件开发者或是软件开发公司,你会提供什么价值。为什么会有人雇佣你呢?信息背后就是你所提供的价值。你是金钱能够买到的最棒的前端开发者么?你学习新技术的速度比其他人快么?你能提供哪些独特的价值使得雇主会雇佣你而不是其他人?

视觉效果

虽然说Logo并不是构成品牌的唯一元素,不过显然它是大多数品牌的一个重要组成部分。一个好的品牌都有很好的视觉效果,你也不例外。显然,首先你应该创建自己的Logo。既可以使用公司名,也可以使用自己的名字。这两种方式都很有效。比如说,我使用Simple Programmer作为自己的品牌,同时也为这个品牌创建了一个Logo。

没必要花很多钱来设计Logo,可以在Fiverr网站上花5美元就能搞定一个,效果还非常不错。还可以在oDesk上找人帮你做一个,都非常便宜。你的品牌还应该有一个一直使用的不错的颜色主题,我建议在你的在线资料与博客上都使用相同的颜色主题。

保持一致性

信息与Logo的事情搞定后,你需要坚持不断地使用他们从而打造真正的品牌。一致性是构建个人品牌的一个非常重要的组成部分。想想那些你熟知的个人品牌,这些品牌会成天变化么?在访问喜欢的技术站点时,你是不是知道要看什么以及何时会看到新的内容呢?

曝光

如果缺乏频繁的曝光,那么你就无法树立品牌。如果你只看到或听到一两次某个品牌,那么它是不会在你的脑海中留下印记的,也不会有任何效果。为了树立自己的品牌,你需要频繁地向同样的人曝光你的信息与视觉效果。有很多方式可以曝光你的品牌,比如说:

  • 创建并维护一个活跃的博客
  • 为杂志撰写文章或是在其他博客上发表文章
  • 在用户组与会议上发表演讲
  • 在播客或其他媒介上出现
  • 写书,自己写或是按照传统的出版流程来
  • 为开源做贡献
  • 创建YouTube视频或教程

一开始,你也许只能完成上面列出的一小部分,不过在打造了品牌后,你会得到更多的机会,做更多的事情,甚至还能做一些上面没有列出来的事情。重要的是你真的要为他人提供价值才行。如果提供了价值并且以一致的方式利用好你的信息与品牌,那么你就会打造出良好的品牌认知度并为自己创造出更多、更棒的机会。

文章来自:infoq

为什么程序员跟其他人比起来应该喝更多的水

我们都不止一次的听到人们说:“你至少一天要喝8杯水。”

可问题是,几乎没有人做到了每天喝那么多水。从事编程职业这么多年来,我发现,尤其是程序员,饮水量明显不足。

程序员需要比常人喝更多的水。我在下棋时突然意识到了这一点。连续一个小时的下棋后,我就开始感到口渴。

看起来,是当我的大脑高速运转时,我们需要更多的水。

2

 

缺水状态下我的感受

我通常是早上起来喝一杯咖啡。咖啡有利尿作用——也就是它会导致小便更多。

在编程的时候,我会全神贯注,根本想不起、也感觉不到要喝水。

工作日里,我有时候会在午餐的时间喝一杯水,或者再加一杯咖啡。

到了晚上,我会在晚饭后再喝一杯。
阅读全文

ZeroMQ的学习和研究

ZeroMQ,史上最快的消息队列

—– ZMQ的学习和研究

一、ZeroMQ的背景介绍

引用官方的说法: “ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ的明确目标是“成为标准网络协议栈的一部分,之后进入Linux内核”。现在还未看到它们的成功。但是,它无疑是极具前景的、并且是人们更加需要的“传统”BSD套接字之上的一 层封装。ZMQ让编写高性能网络应用程序极为简单和有趣。”

近几年有关”Message Queue”的项目层出不穷,知名的就有十几种,这主要是因为后摩尔定律时代,分布式处理逐渐成为主流,业界需要一套标准来解决分布式计算环境中节点之间的消息通信。几年的竞争下来,Apache基金会旗下的符合AMQP/1.0标准的RabbitMQ已经得到了广泛的认可,成为领先的MQ项目。
阅读全文

PEP8 Python 编码规范整理

决定开始Python之路了,利用业余时间,争取更深入学习Python。编程语言不是艺术,而是工作或者说是工具,所以整理并遵循一套编码规范是十分必要的。所以今天下午我根据PEP 8整理了一份,以后都照此编码了,还会持续更新。

PEP8 Python 编码规范

一 代码编排
1 缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。
3 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。

二 文档编排
1 模块内容的顺序:模块说明和docstring—import—globals&constants—其他定义。其中import部分,又按标准、三方和自己编写顺序依次排放,之间空一行。
2 不要在一句import中多个库,比如import os, sys不推荐。
3 如果采用from XX import XX引用库,可以省略‘module.’,都是可能出现命名冲突,这时就要采用import XX。

三 空格的使用
总体原则,避免不必要的空格。
1 各种右括号前不要加空格。
2 逗号、冒号、分号前不要加空格。
3 函数的左括号前不要加空格。如Func(1)。
4 序列的左括号前不要加空格。如list[2]。
5 操作符左右各加一个空格,不要为了对齐增加空格。
6 函数默认参数使用的赋值符左右省略空格。
7 不要将多句语句写在同一行,尽管使用‘;’允许。
8 if/for/while语句中,即使执行语句只有一句,也必须另起一行。
阅读全文

当客户说:你们先开发出来我再提需求

小鱼儿(注:Pilot Fish,本文主角的名字)接到了一个软件项目,项目的要求是能够处理公司客服中心收到的各种服务请求,内容包括服务调度,设备跟踪,工程师的服务请求以及一些设计问题。

“我非常尽心尽责,拿着纸笔一个一个地跟各个部门的头头谈话,想把他们的需求或者意见记录下来。”小鱼儿苦恼的说。“他们给我的答复却千篇一律:’我不知道,你先大概弄一下,然后我们再看看了。‘”

小鱼儿并没有气馁,他跑到各个部门的潜在用户那里去征求意见。可这些家伙跟他们的老板们如出一辙。他们给小鱼儿的答复是:“大致搞一下,然后我们再给建议。”
阅读全文