posts - 64,comments - 22,trackbacks - 0

基于云的应用与运行在私有数据中心的应用之间最大的差别就是可扩展性。云提供了按需扩展的能力,能够根据负载的波动对应用进行扩展和收缩。但是传统应用要充分发挥云的优势,并不是简单地将应用部署到云上就万事大吉,而是需要根据云的特点围绕可扩展性重新进行架构设计,近日AppDynamics的开发布道者Dustin.Whittle撰文阐述了适合云端部署的应用架构,对我们传统应用往云端部署有很大的启发和借鉴意义。

应用的架构

Dustin.Whittle给出了云应用的示例架构,它具有高度的可扩展性,如下图所示:

在这个图中,应用按照分层的理念进行了拆分,分别介绍如下:

客户端层:客户端层包含了针对目标平台的用户界面,可能会包括基于Web的、移动端的甚至是胖客户端的用户界面。一般来讲,这可能会是Web应用,包含诸如用户管理、会话管理、页面构建等功能,但是其他客户端所发起的交互都需要以RESTful服务的形式调用服务器。

服务:服务器包含了缓存服务以及聚合(aggregate)服务,其中缓存服务中持有记录系统(system of record)中最新的已知状态,而聚集服务会直接与记录系统交互,并且会执行一些破坏性的操作(会改变记录系统中的状态)。

记录系统:记录系统是领域特定的服务端,它会驱动业务功能,可能会包括客户管理系统、采购系统、预定系统等等,这些很可能是遗留系统,你的应用需要与其进行交互。聚集服务要负责将你的应用从这些特有的记录系统中抽象出来,并为你的应用提供一致的前端接口。

ESB当记录系统发生数据变化的时候,它需要触发到指定主题(topic)的事件,这就是事件驱动架构(event-driven architecture,EDA)能够影响应用的地方了:当记录系统进行了一项其他系统可能感兴趣的变更时,它会触发一个事件,任何关注记录系统的其他系统会监听到这个事件,并作出对应的响应。这也是使用使用主题(topic)而不是队列(queue)的原因:队列支持点对点(point-to-point)的消息,而主题支持发布-订阅(publish-subscribe)的消息或事件。当与遗留系统进行集成时,我们很期望这些遗留的系统能够免遭负载的影响。因此,我们实现了一个缓存系统,这个缓存系统维持了记录系统中所有最新的已知状态。缓存系统会使用EDA的规则监听记录系统的变化,它会更新自己所保存数据的版本,从而保证与记录系统中的数据相匹配。这是一个很强大的策略,不过会将一致性模型变为最终一致性,也就是说如果你在社交媒体上发布一条状态的话,你的朋友可能在几秒钟甚至几分钟之后才能看到,数据最终是一致的,但有时你所看到的与你的朋友所看到的并不一致。如果能接受这种一致性的话,就能在很大程度上实现可扩展性的收益。

NoSQL在数据存储方面,有很多的可选方案,但如果要存储大量数据的话,使用NoSQL存储能够更容易地扩展。有多种NoSQL存储可供选择,不过这要匹配所存储数据的特点,如MongoDB适合存储可搜索的数据,Neo4j适合存储高度互相关联的数据,而Cassandra适合存储键/值对,像Solr这样的搜索索引有利于加速对经常访问数据的查询。

将应用拆分为多个层的时候,最好的模式就是使用面向服务架构(service-oriented architecture,SOA)。要实现这一点,可以使用SOAP,也可以使用REST,但是REST更为合适,因为它可扩展性更强。作者接下来对REST的理念进行了深入的阐述,InfoQ上关于REST已有很多相关的文章,如这里这里,甚至包括Roy Fielding经典博士论文中译本,所以这里不再赘述。不过,作者在这里特别强调了RESTful Web服务能够保持无状态性(stateless)。无状态是实现可扩展性的关键需求,因为无状态,所以请求可以由任何一个服务器响应。如果你在服务层上需要更多的容量时,只需要为该层添加虚拟机即可,而不需关注客户端状态保持的问题,负载可以很容易地重新分配。

部署到云端

前面介绍了基于云的应用架构,接下来作者阐述了这样的应用该如何部署到云端。

RESTful Web服务要部署到Web容器中,并且要位于数据存储之前。这些Web服务是没有状态的,只会反映其暴露的底层数据的状态,因此可以根据需要部署任意数量的服务器。在基于云的部署中,开始时可以开启足够的实例以应对日常的需求,然后配置弹性策略,从而根据负载增加或减少服务器的数量。衡量饱和度的最好指标就是服务的响应时间。另外还需要考虑这些服务所使用的底层数据存储的性能。示例的部署图如下所示:

如果在云部署时有EDA的需求,那么就需要部署ESB,作者给出的建议是根据功能对ESB进行分区(partitioning),这样一个segment的过大负载不会影响到其他的segment。如下图所示:

这种分离使System 1的负载与System 2的负载实现了隔离。如果System 1产生的负载拖慢了ESB,它只会影响到自己的segment,并不会影响到System 2的segment,因为它部署在其他硬件上。如果ESB产品支持的话,我们还可以给指定的segment添加服务器来实现扩展。

基于云的应用与传统应用有着很大的差别,因为它有着不同的扩展性需求。基于云的应用必须有足够的弹性以应对服务器的添加与移除,必须松耦合,必须尽可能的无状态,必须预先规划失败的情况,并且必须能够从几台服务器扩展到成千上万台服务器。

针对云应用并没有唯一正确的架构,但是本文所阐述的RESTful服务以及事件驱动架构却是经过实践检验有效的架构。作者认为REST和EDA是实现云端可扩展应用的基本工具。

目前,国内许多传统的软件厂商正在逐渐往云端迁移,希望本文所阐述的架构理念能够为读者提供一些借鉴。

posted @ 2014-03-25 09:18 hellxoul 阅读(350) | 评论 (0)编辑 收藏
from:http://www.douban.com/group/topic/35067110/
收集帖: 

node.js 中文api (开放版) :http://nodeapi.ucdok.com/ 
node.js 中文api :http://jsfuns.com/ebook/#30d25070-118c-11e3-bc83-47c9e4e1d529 
node.js入门中文版: http://nodebeginner.org/index-zh-cn.html 

express3.*中文API: http://expressjs.jser.us/ 
koa 中文文档:https://github.com/turingou/koa-guide //Express 原班人马打造的 比express更轻更富有表现力的web框架 

深入理解Express: http://xvfeng.me/posts/understanding-expressjs/ 
meteor中文文档:http://d0cs.meteor.com/ 
NodeJS 和 Socket.io 中文入门教程:http://t.cn/zOMwxCg 
jade中文文档: http://expressjs.jser.us/jade.html 
Juicer 中文文档:http://juicer.name/docs/docs_zh_cn.html 
Mongoose 基本功能使用:http://t.cn/zOIKPeB 

以下是一些blog教程系列: 

让我们基于Node.js创建一个Web应用系列(5篇):http://t.cn/z8JnzkA 
一周node.js系列(7篇) :http://t.cn/zOKuc9D 
从零开始nodejs系列: http://blog.fens.me/series-nodejs/ 
一起学node.js (荐): http://t.cn/zHxNXXt 
Node.js高级编程(荐): http://t.cn/zYmuqaH 
深入浅出Node.js http://www.infoq.com/cn/master-nodejs 
Node.js零起点开发:http://blog.csdn.net/kaosini/article/details/8084268 
node.js入门(共13篇)http://www.cnblogs.com/softlover/category/406516.html 
snoopyxdy的博客(大量node及express api的解读及进阶内容):http://t.cn/zQuKMKH 
用node.js写web框架系列:http://my.oschina.net/Jeky/blog?catalog=262655 
Luics的node.js系列: http://t.cn/zjATQlf 
使用node.js建博客:http://witcheryne.iteye.com/blog/1172069 


nodejs相关: 
用socket.io 搭建聊天室: https://github.com/nswbmw/N-chat/wiki/_pages 

nodejs实体中文图书: 

了不起的node.js: http://book.douban.com/subject/25767596/ 2014年1月 
node.js高级编程: http://book.douban.com/subject/25799431/ 2013年12月 
深入浅出nodejs: http://book.douban.com/subject/25768396/ 2013年12月 
node.js入门经典: http://book.douban.com/subject/23780706/ 2013年4月 
node.js开发指南: http://book.douban.com/subject/10789820/ 2012年7月 
Node Web开发: http://book.douban.com/subject/10586326/ 2012年4月 
posted @ 2014-02-25 15:13 hellxoul 阅读(1088) | 评论 (0)编辑 收藏

mosquito 是一个MQTT 服务器。MQTT协议可用来做Android消息推送,服务器端采用mosquito+PhpMQTTClient(这个php用来做实验)

自己不会java,不会Android开发,推送的开发部分是同事做的。使用情况表明,单台服务器能满足几万的稳定的连接数,扩展起来也不难,加机器即可。

下载最新版的mosquitto
cd /usr/local/src
wget http://mosquitto.org/files/source/mosquitto-1.1.2.tar.gz
tar zxvf mosquitto-1.1.2.tar.gz
cd mosquitto-1.1.2
如果当前openssl版本低于1.0,修改config.mk中的WITH_TLS_PSK:=no
make
make install prefix=/usr/local/mosquitto
为方便管理,添加下面至/etc/profile
export PATH=”$PATH:/usr/local/mosquitto/bin”
export PATH=”$PATH:/usr/local/mosquitto/sbin”

source /etc/profile
[root@mysql230 mosquitto]# mosquitto #tab补全,四个命令
mosquitto mosquitto_passwd mosquitto_pub mosquitto_sub

mosquitto服务器主程序,实现了MQTT协议
mosquitto_pub mosquitto发布消息的命令行程序
mosquitto_sub mosquitto订阅消息的命令行程序
默认的配置文件在 /etc/mosquitto/里

将/usr/local/mosquitto/lib/添加至/etc/ld.so.conf
执行 ldconfig -f /etc/ld.so.conf 可能需要等待数秒

启动
mosquitto (-d后台启动)
可能提示没有用户 mosquitto,useradd mosquitto
终端测试
客户端 mosquitto_sub -h 192.168.1.230 -t test
另起命令行mosquitto_pub -t test -m ’123′
PhpMQTTClient安装
去https://github.com/tokudu/PhpMQTTClient 下载程序包,放置到服务器目录
可能需要结合实际情况,要修改的地方
index.php
$result = $conn->connect(SAM_MQTT, array(‘SAM_HOST’ => ’127.0.0.1′, ‘SAM_PORT’ => 1883));

SAM/MQTT/sam_mqtt.php
$this->port = 1883;

启动mosquitto在前台运行,以方便获取连接客户端的信息
mosquitto
在服务器另外一终端上启动订阅消息的进程,订阅所有tokudu开头topic
mosquitto_sub –t tokudu /+
注意,此处之所以要使用tokudu,可以看index.php的182行 var target = ‘tokudu/’ + $(‘#messageTarget’).val();
在mosquitto的终端获得mosquitto_sub客户端的id
1350006978: New client connected from 127.0.0.1 as mosqsub/8491-localhost..

访问http://host:port/ ,push notification target字段填写8491-localhost,push notification text填写需要推送的测试消息
在mosquitto的终端查看是否收到了推送的消息,如果收到,说明phpmqttclient已经安装配置成功

解决mosquitto占有cpu进程过高的问题 https://answers.launchpad.net/mosquitto/+question/189612
ulimit -u 4096
ulimit -n 4096

附:
配置文件
# =================================================================
# General configuration
# =================================================================

# 客户端心跳的间隔时间
#retry_interval 20

# 系统状态的刷新时间
#sys_interval 10

# 系统资源的回收时间,0表示尽快处理
#store_clean_interval 10

# 服务进程的PID
#pid_file /var/run/mosquitto.pid

# 服务进程的系统用户
#user mosquitto

# 客户端心跳消息的最大并发数
#max_inflight_messages 10

# 客户端心跳消息缓存队列
#max_queued_messages 100

# 用于设置客户端长连接的过期时间,默认永不过期
#persistent_client_expiration

# =================================================================
# Default listener
# =================================================================

# 服务绑定的IP地址
#bind_address

# 服务绑定的端口号
#port 1883

# 允许的最大连接数,-1表示没有限制
#max_connections -1

# cafile:CA证书文件
# capath:CA证书目录
# certfile:PEM证书文件
# keyfile:PEM密钥文件
#cafile
#capath
#certfile
#keyfile

# 必须提供证书以保证数据安全性
#require_certificate false

# 若require_certificate值为true,use_identity_as_username也必须为true
#use_identity_as_username false

# 启用PSK(Pre-shared-key)支持
#psk_hint

# SSL/TSL加密算法,可以使用“openssl ciphers”命令获取
# as the output of that command.
#ciphers

# =================================================================
# Persistence
# =================================================================

# 消息自动保存的间隔时间
#autosave_interval 1800

# 消息自动保存功能的开关
#autosave_on_changes false

# 持久化功能的开关
persistence true

# 持久化DB文件
#persistence_file mosquitto.db

# 持久化DB文件目录
#persistence_location /var/lib/mosquitto/

# =================================================================
# Logging
# =================================================================

# 4种日志模式:stdout、stderr、syslog、topic
# none 则表示不记日志,此配置可以提升些许性能
log_dest none

# 选择日志的级别(可设置多项)
#log_type error
#log_type warning
#log_type notice
#log_type information

# 是否记录客户端连接信息
#connection_messages true

# 是否记录日志时间
#log_timestamp true

# =================================================================
# Security
# =================================================================

# 客户端ID的前缀限制,可用于保证安全性
#clientid_prefixes

# 允许匿名用户
#allow_anonymous true

# 用户/密码文件,默认格式:username:password
#password_file

# PSK格式密码文件,默认格式:identity:key
#psk_file

# pattern write sensor/%u/data
# ACL权限配置,常用语法如下:
# 用户限制:user <username>
# 话题限制:topic [read|write] <topic>
# 正则限制:pattern write sensor/%u/data
#acl_file

# =================================================================
# Bridges
# =================================================================

# 允许服务之间使用“桥接”模式(可用于分布式部署)
#connection <name>
#address <host>[:<port>]
#topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix]

# 设置桥接的客户端ID
#clientid

# 桥接断开时,是否清除远程服务器中的消息
#cleansession false

# 是否发布桥接的状态信息
#notifications true

# 设置桥接模式下,消息将会发布到的话题地址
# $SYS/broker/connection/<clientid>/state
#notification_topic

# 设置桥接的keepalive数值
#keepalive_interval 60

# 桥接模式,目前有三种:automatic、lazy、once
#start_type automatic

# 桥接模式automatic的超时时间
#restart_timeout 30

# 桥接模式lazy的超时时间
#idle_timeout 60

# 桥接客户端的用户名
#username

# 桥接客户端的密码
#password

# bridge_cafile:桥接客户端的CA证书文件
# bridge_capath:桥接客户端的CA证书目录
# bridge_certfile:桥接客户端的PEM证书文件
# bridge_keyfile:桥接客户端的PEM密钥文件
#bridge_cafile
#bridge_capath
#bridge_certfile
#bridge_keyfile

# 自己的配置可以放到以下目录中
include_dir /etc/mosquitto/conf.d


本文出自 “Cooke Chen 我爱小贝” 博客,请务必保留此出处http://cswei.blog.51cto.com/3443978/1225617

posted @ 2013-12-12 21:54 hellxoul 阅读(8957) | 评论 (0)编辑 收藏
Sublime Text 2
---------------
非常好用的文本编辑器,虽是收费的,但是现在可以免费不限时间试用。

Shell代码  收藏代码
  1. sudo add-apt-repository ppa:webupd8team/sublime-text-2   
  2. sudo apt-get update  
  3. sudo apt-get install sublime-text-2  

将 sublime 作为默认的文本编辑器
sudo subl /usr/share/applications/defaults.list
把所有的 gedit.desktop 替换为 sublime-text-2.desktop

Jupiter
----------------
据说可以让 Ubuntu 不那么耗电.... 我的本子跑的时候比较烫,权且相信了。这个工具还可以关闭触摸屏,这点比较实用。
Shell代码  收藏代码
  1. sudo add-apt-repository ppa:webupd8team/jupiter  
  2. sudo apt-get update  
  3. sudo apt-get install jupiter  



Tweak
----------------
使用过后才发现确实比 MyUnity 要好用,功能也更多。
去官方网站下载吧:
网址代码  收藏代码
  1. http://ubuntu-tweak.com/  



MyUnity
----------------
自 Ubuntu 转用 Unity 后就一直褒贬不一,我个人还是比较喜欢这种设计的,比较前卫,很漂亮;还把菜单栏和顶部栏合为一体,比较节省本子本来已经很小的垂直视野;但是也有些东西 很恼人,比如左侧栏总是会弹出,非常影响体验。有了这个工具就可以很方便的定制界面了。比如我就把左侧栏缩小到 40,然后固定,还是比较 Nice 的。
Shell代码  收藏代码
  1. sudo add-apt-repository ppa:myunity/ppa  
  2. sudo apt-get update  
  3. sudo apt-get install myunity  



Guake
----------------------------------
非常好用的 Terminator,可以在 Ubuntu 软件中心安装。


Fish (Friendly Interactive Shell)
-----------------------------------
正如其名字,比默认的 shell terminate 更加友好,更加方便使用。添加的语法高亮,用下划线标出存在的地址,等等。
Shell代码  收藏代码
  1. sudo apt-get install fish  

如果你和我一样喜欢把他作为默认的 shell 的话,可以按下面方法做:
1. 确定 fish 安装路径:
Shell代码  收藏代码
  1. whereis fish  

2. 添加为默认:
Shell代码  收藏代码
  1. chsh -s /usr/local/bin/fish(注,这个地址由上面的命令得到)  



dnsmasq
-------------------------
DNS 缓存,加速访问网站
1. 安装
Shell代码  收藏代码
  1. sudo apt-get install dnsmasq  

2. 配置 dnsmasq.conf
Shell代码  收藏代码
  1. sudo vim /etc/dnsmasq.conf  
  2. 查找   #listen-address=  
  3. 修改为 listen-address=127.0.0.1  

3. 配置 dhclient.conf
有些网站修改的是 /etc/dhcp3/dhclient.conf,我用的是 ubuntu 11.10,没有找到这个文件,修改的是 /etc/dhcp/dhclient.conf
Shell代码  收藏代码
  1. sudo vim /etc/dhcp/dhclient.conf  
  2. 查找  #prepend domain-name-servers 127.0.0.1;  
  3. 删除注释符号 #  
  4. 变成  prepend domain-name-servers 127.0.0.1;  

4. 配置 resolv.conf
Shell代码  收藏代码
  1. sudo vim /etc/resolv.conf  
  2. 修改为:  
  3. # Local Cached DNS  
  4. nameserver 127.0.0.1  
  5. # Google DNS  
  6. nameserver 8.8.8.8  
  7. nameserver 8.8.4.4  
  8. # OpenDNS  
  9. nameserver 208.67.220.220  
  10. nameserver 208.67.222.222  

5. 重启 dnsmasq
Shell代码  收藏代码
  1. sudo /etc/init.d/networking restart 
posted @ 2013-11-19 20:53 hellxoul 阅读(239) | 评论 (0)编辑 收藏
     摘要: 【51CTO精选译文】Rsnapshot是一款开源本地/远程文件系统备份实用工具,它采用Perl语言编写而成,充分利用了Rsync和SSH程序的功能,可以针对Linux/Unix文件系统创建预定的增量备份,同时只占用了一套单个完全备份的空间(外加变化的数据),并将本地驱动器上的那些备份存放到不同的硬盘驱动器、外置USB驱动器、NFS挂载驱动器上,或者干脆经由SSH,通过网络存放到另一台机器上。安装...  阅读全文
posted @ 2013-11-15 09:34 hellxoul 阅读(627) | 评论 (0)编辑 收藏

TDDL动态数据源基本说明

总体描述

TDDL动态数据源主要分为2层,每一层都实现了jdbc规范,以方便地集成到各种orm框架或者直接使用.每一层都各司其职.

 

整体结构如上图,TGroupDataSource(tddl group ds)默认情况下依赖TAtomDataSource(tddl atom ds),但是可以扩展依赖普通数据源.这一层主要的职责是解决读写分离以及主备切换的问题,当然是在线执行这些动作,无需重启.一个TGroupDataSource底下会挂多个TAtomDataSource,每个TAtomDataSource都有相对应的读写权重.

TAtomDataSource(tddl atom ds)这一层并没有实现真正的数据源逻辑,而是依赖了一个近似第三方的包-我们jboss剥离出来的datasource,这一层的职责主要是将单个数据源的配置放置到diamond服务器中,实现数据源配置的集中管理和动态变更.减少运维成本. TAtomDataSource实际对应了一个真正的数据源.

Tddl动态数据源暂时支持mysql和oracle ,但是因为每一层都是jdbc的实现,所以很容易扩展支持其他实现jdbc规范的数据源.

TGroupDataSource

  1. 基本功能

(1)     主备数据库动态容灾切换

支持进行主备的对调切换,状态对调后备库变为主库,主库变为备库

(2)     相同数据分片读写分离

针对mysql replication机制进行的数据主备复制,可以直接使用group datasource来支持读写分离。读写分离支持权重设置,允许对不同库使用不同的权重。

(3)     读重试

一台数据库挂掉后,如果是个fatal exception(有定义),那么会进入读重试,以确保尽可能多的数据访问可以在正常数据库中访问。

(4)     数据库挂掉排除,单线程重试

使用try – lock机制来进行线程保护,在第一次捕捉到fatal exception以后,只允许一个线程进入数据库进行数据访问,直到数据库可以正常的工作为止

(5)     流量控制,数据库保护

  1. 延展性功能

(1)     指定数据库访问(ThreadLocal)

一组对等数据库中,写库一般只配置一个,其余数据库都为备库,因为通过复制机制,所以主备主键有延迟,对于各种类型的读(实时读和延迟读),可以使用GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(int dataSourceIndex)指定需要访问的数据库.

(2)     指定数据库访问(Hint)

这是指定数据库访问的另外一种方式. 这种方式是在sql之前加注释,告知tddl动态数据源该选择第几个数据库.类似: /*+TDDL_GROUP({groupIndex:0})*/select * from normaltbl_0001 where pk = ? 变幻groupIndex的数字即可指定具体的第几个库,从0开始.

TAtomDataSource

  1. 基本功能

(1)     数据源配置集中管控

(2)     定期密码变更

(3)     Jboss数据源连接池的配置管理和推送

  1. 延展性功能

(1)  动态创建,添加,减少数据源

(2)  数据库R,W,NA状态通知,以及读写访问控制,如置为NA则数据库所有访问会直接抛出SQLException

(3)  数据库保护

Diamond中配置说明.

Tddl的动态数据源配置都放置在diamond配置中心,而一条diamond配置包括一个全局唯一的dataId和GROUP, tddl的配置数据也不例外,以下主要说明tddl动态数据源的dataId拼写以及每一个dataId下数据的内容.(详细示例请参考示例使用说明文档)

  1. 1.       TGroupDataSource的配置

Group中的配置主要是配置一组对等的数据的读写权重

dataId组成规范:“com.taobao.tddl.jdbc.group_V2.4.1_”+dbGroupKey

配置内容(示例):tddl_sample_0:r10w10p0,tddl_sample_0_bac:r10w0p0

其中tddl_sample_0和tddl_sample_0_bak就是下一层需要的dbKey,后面r为读权重,w为写权重

  1. 2.       TAtomDataSource的配置

atom ds中的配置分为了3部分(global,app,user),配置内容全部为java的properties格式

Global

dataId组成规范: “com.taobao.tddl.atom.global.”+dbKey

配置内容:

属性key说明
ip数据实例的ip
port数据实例的端口
dbname数据库名称
dbTypeMYSQL,ORACLE
dbStatusRW,NA

App

dataId组成规范: “com.taobao.tddl.atom.app.”+appName+”.”+dbKey

配置内容:

属性key说明
username该应用使用的用户名
oracleConTypeoci,thin,如果db为mysql,则不用理会
minPoolSize最小连接池
maxPoolSize最大连接池
idleTimeout连接的最大空闲时间
blockingTimeout等待连接的最大时间
preparedStatementCacheSizeOracle专用
writeRestrictTimes单位timeSliceInMillis写限制,默认空不限制
readRestrictTimes单位timeSliceInMillis读限制,默认空不限制
threadCountRestrict并发线程限制,默认空不限制
timeSliceInMillis限制的时间单位
connectionProperties连接参数

User

dataId组成规范: “com.taobao.tddl.atom.passwd.”+dbName+”.”+dbType+”.”+userName

配置内容:

属性key说明
encPasswd密码
encKey密钥
posted @ 2013-11-10 11:13 hellxoul 阅读(1725) | 评论 (0)编辑 收藏

Facebook 正式宣布开源 Presto —— 数据查询引擎,可对250PB以上的数据进行快速地交互式分析。该项目始于 2012 年秋季开始开发,目前该项目已经在超过 1000 名 Facebook 雇员中使用,运行超过 30000 个查询,每日数据在 1PB 级别。Facebook 称 Presto 的性能比诸如 Hive 和 Map*Reduce 要好上 10 倍有多。

Presto 当前支持 ANSI SQL 的大多数特效,包括联合查询、左右联接、子查询以及一些聚合和计算函数;支持近似截然不同的计数(DISTINCT COUNT)等。

你可以通过下面地址了解该项目详情和获取代码:

Documentation | Code

原文链接:http://www.oschina.net/news/45706/facebook-open-sources-presto-homegrown-sql-query-engine

posted @ 2013-11-07 23:15 hellxoul 阅读(360) | 评论 (1)编辑 收藏
     摘要: 一款功能强大且实用的开发工具可以为开发者简化开发流程,提高工作效率,允许开发者在应用开发本身投入更多的时间和精力,从而提高作品质量。本文就为大家分享4款实用的Android应用架构工具。  阅读全文
posted @ 2013-11-07 23:09 hellxoul 阅读(268) | 评论 (0)编辑 收藏
     摘要: 首先先介绍一款知名的网站压力测试工具:webbench.Webbench能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webbench的标准测试可以向我们展示服务器的两项内容:每分钟相应请求数和每秒钟传输数据量。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,JAVA,CGI)进 行测试的能力。还有就是他支持对含有SSL的安全网站例如电子...  阅读全文
posted @ 2013-11-07 23:06 hellxoul 阅读(3508) | 评论 (0)编辑 收藏

转自:http://elf8848.iteye.com/blog/455676

如何修改Centos yum源

--------------------------------------
国内yum源: 163和搜狐的yum源。
本文章介绍的yum源支持的版本是CentOS 5系列,理论上支持RHEL5系列。

更新方法如下:

先进入yum源配置目录
cd /etc/yum.repos.d

备份系统自带的yum源
mv CentOS-Base.repo CentOS-Base.repo.save

下载其他更快的yum源
中科大的yum源:(现在打不开了 )
wget http://centos.ustc.edu.cn/CentOS-Base.repo

163的yum源:
wget http://mirrors.163.com/.help/CentOS-Base-163.repo
修改CentOS-Base.repo (不修改会报错),下载到本地把“$releasever”,替换成“5”

sohu的yum源
wget http://mirrors.sohu.com/help/CentOS-Base-sohu.repo

更新玩yum源后,建议更新一下,使操作立即生效
yum makecache




RedHat5.6使用CentOS yum源更新的方法
================================================================================

由于RedHat的yum在线更新是收费的,我们的RedHat没有注册,不能在线更新下载rpm包。
需将RedHat的yum卸载后,重启安装Centos的yum,再配置其他yum源。



一、确认RedHat的版本
cat /etc/redhat-release
uname -m

二、删除redhat原有的yum源
rpm -aq|grep yum|xargs rpm -e --nodeps

三、下载CentOS的yum安装包(163源) (可以在这里手工找rpm包:http://mirrors.163.com/centos/)
32位系统:
wget http://mirrors.163.com/centos/5/os/i386/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm
wget http://mirrors.163.com/centos/5/os/i386/CentOS/yum-3.2.22-39.el5.centos.noarch.rpm
wget http://mirrors.163.com/centos/5/os/i386/CentOS/yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm
64位系统:
wget http://mirrors.163.com/centos/5/os/x86_64/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.x86_64.rpm
wget http://mirrors.163.com/centos/5/os/x86_64/CentOS/yum-3.2.22-39.el5.centos.noarch.rpm
wget http://mirrors.163.com/centos/5/os/x86_64/CentOS/yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm

还依赖python-iniparse-0.2.3-4.el5.noarch.rpm,
但我的系统里已安装了,是系统默认Python2.4中自带的。
如果你的系统没有安装,请安装吧。

四、安装yum软件包
32位系统:
rpm -ivh yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm
rpm -ivh yum-3.2.22-39.el5.centos.noarch.rpm yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm
注意:最后两个安装包要放在一起同时安装,否则会提示相互依赖,安装失败。

64位系统:
rpm -ivh yum-metadata-parser-1.1.2-3.el5.centos.x86_64.rpm
rpm -ivh yum-3.2.22-39.el5.centos.noarch.rpm yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm
注意:最后两个安装包要放在一起同时安装,否则会提示相互依赖,安装失败。


五、更改yum源 #我们使用网易的CentOS镜像源
cd /etc/yum.repos.d/
vi CentOS6-Base-163.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-5 - Base - 163.com
mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=os
baseurl=http://mirrors.163.com/centos/5/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#released updates
[updates]
name=CentOS-5 - Updates - 163.com
mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=updates
baseurl=http://mirrors.163.com/centos/5/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#packages used/produced in the build but not released
[addons]
name=CentOS-5 - Addons - 163.com
mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=addons
baseurl=http://mirrors.163.com/centos/5/addons/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#additional packages that may be useful
[extras]
name=CentOS-5 - Extras - 163.com
mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=extras
baseurl=http://mirrors.163.com/centos/5/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-5 - Plus - 163.com
mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=centosplus
baseurl=http://mirrors.163.com/centos/5/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#contrib - packages by Centos Users
[contrib]
name=CentOS-5 - Contrib - 163.com
mirrorlist=http://mirrorlist.centos.org/?release=5&arch=$basearch&repo=contrib
baseurl=http://mirrors.163.com/centos/5/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5



六、清理
yum clean all
yum makecache

如果报错:imary.sqlite.bz2 from base: [Errno 256] No more mirrors to try.
执行:yum makecache







七、更新

cd /etc/pki/rpm-gpg
wget http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

yum update



很长时间的下载后,报错:

warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID e8562897
GPG key retrieval failed: [Errno 5] OSError: [Errno 2] No such file or directory: '/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5'
这是因为:指定的文件/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5在本地不存在导致的。

解决:
去官网http://mirror.centos.org/centos/下载相应文件
cd /etc/pki/rpm-gpg
wget http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5

================================================================================




RedHat6.0使用CentOS yum源更新的方法
--------------------------------------------------------------------

由于RedHat的yum在线更新是收费的,我们的RedHat没有注册,不能在线更新下载rpm包。
需将RedHat的yum卸载后,重启安装Centos的yum,再配置其他yum源。


一、确认RedHat的版本
cat /etc/redhat-release
uname -m

二、删除redhat原有的yum源
rpm -aq|grep yum|xargs rpm -e --nodeps

三、下载CentOS的yum安装包(163源)
32位系统 :
wget http://mirrors.163.com/centos/6/os/i386/Packages/yum-3.2.29-22.el6.centos.noarch.rpm
wget http://mirrors.163.com/centos/6/os/i386/Packages/yum-metadata-parser-1.1.2-16.el6.i686.rpm
wget http://mirrors.163.com/centos/6/os/i386/Packages/yum-plugin-fastestmirror-1.1.30-10.el6.noarch.rpm
wget http://mirrors.163.com/centos/6/os/i386/Packages/python-iniparse-0.3.1-2.1.el6.noarch.rpm

四、安装yum软件包
rpm -ivh python-iniparse-0.3.1-2.1.el6.noarch.rpm
rpm -ivh yum-metadata-parser-1.1.2-16.el6.i686.rpm
rpm -ivh yum-3.2.29-22.el6.centos.noarch.rpm yum-plugin-fastestmirror-1.1.30-10.el6.noarch.rpm
注意:最后两个安装包要放在一起同时安装,否则会提示相互依赖,安装失败。

五、更改yum源 #我们使用网易的CentOS镜像源
cd /etc/yum.repos.d/
vi CentOS6-Base-163.repo
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.&nbsp; You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-6 - Base - 163.com
baseurl=http://mirrors.163.com/centos/6/os/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=os
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-6 - Updates - 163.com
baseurl=http://mirrors.163.com/centos/6/updates/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=updates
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-6 - Extras - 163.com
baseurl=http://mirrors.163.com/centos/6/extras/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=extras
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-6 - Plus - 163.com
baseurl=http://mirrors.163.com/centos/6/centosplus/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=centosplus
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-6 - Contrib - 163.com
baseurl=http://mirrors.163.com/centos/6/contrib/$basearch/
#mirrorlist=http://mirrorlist.centos.org/?release=6&arch=$basearch&repo=contrib
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-6


六、清理
yum clean all
yum makecache

如果报错:imary.sqlite.bz2 from base: [Errno 256] No more mirrors to try.
执行:yum makecache

至此,Redhat6可以使用CentOS的yum源在线安装软件了!
posted @ 2013-10-23 13:39 hellxoul 阅读(1002) | 评论 (0)编辑 收藏
仅列出标题
共7页: 上一页 1 2 3 4 5 6 7 下一页