云烟计算-你是云儿我是烟
RSS 图标 Email 图标 首页图标
  • 架构那点事儿

    发表于 2010年02月26日 yejun 2 条评论

    系统越来越复杂,连发布都成了问题。

    A项目说,我是战略级的,这几天我要独占发布,别的项目都要等;

    B项目说,我也是战略级的,我可以让A先发,但A发完我就要发;我发的时候,别人也不能发;

    C项目说,我只是独立一个小需求,我不和你们有代码相关性,我自已不成吗?配置管理说,我们就这几个人,需要先支持A和B,你的C先等等;

    D项目说,我只是一个模板,让我先自已走UED发布流程行不行?A项目说,那不行,我们上的预发布上不能体现你的模板改动。到时候你还得再作一次发布;

    E项目说,我有个二方库要更新,发一下行不?大家都说,你千万别发,你一发我们全要回归测试;

    架构作到这种程度是比较常见的。一个作了十年的公司,系统错综复杂,这些现象很常见:内部包依赖由层次结构变成部份网状+部分层次;同一系统由不同团队维护;同一模块被多个不同系统调用;同一业务功能有多个模块实现;

    于是公司组织上成立架构部门,负责对共同依赖的二方库和配置文修的进行统一管理,所有修改由架构组专人负责。基础服务逐渐作成远程服务(RMI,REST,HTTP SIMPLE XML API, HESSION,ICE,COBRA等)。基础开发框架也由架构人员统一,大家用同样的配置管理工具和开发工具,开发框架。这正好比社区里的物业,所有基础的水电道路服务由物业提供和协调。

    在架构的支持下,发布时的问题还是无法彻底解决。于是深入服务化,代码模块独立成为一个更有效的解决之道。我推荐在公司内部也学习FACEBOOK这样的系统架构,FB里面每个应用由不同的公司团队研发和维护,这些应用只依赖FB最基础的远程服务。公司内的应用也可以作成这种型式,配置一个个独立的研发团队,减少编译时的包依赖。

    在阿里软件的时候,老板给了个机会让我负责PaaS平台。基于前人的成果,我负责的团队实施了阿里软件用户中心的服务化改造。改造过程是痛苦的,改造的结果我个人是满意的,这个用户中心没有在后续发挥作用是可惜的。这个架构中大量应用了REST OVER HTTP的远程接口,承担了1000TPS以上的高并发调用请求。

    alisoft-udb-arch1

  • 一个接口服务器配置引起性能问题经验[3]

    发表于 2009年08月21日 yejun 没有评论

    一次发布,我们的前端接口API服务器有18台,这18台全部连到后面的一个内网VIP上,这个VIP配置的域名指向6台机器,这6台机器各有三个进程,相当于18台服务器,由于3个进程一台机器能充分发挥物理机的性能,所以没有用虚拟机。

    发布第二天早上发现,18台机器的系统响应非常慢,但LOAD上升,连接数很大,并且大显的TIME_WAIT。后排查发现,NETSTAT的结果中,大量连接指向一台机器。这台机器竟然是预发布的机器,也就是说,原因18台服务器的请求由一台机器在承担,系统负责太高。

    经验:发布时要检查系统之间的内部调用IP,是否配置在生产环境的VIP上。

  • 一次阿里旺旺SNS应用接口问题解决的经验[2]

    发表于 2009年08月21日 yejun 1 条评论

    想到上回发布阿里旺旺上的一个SNS应用接口,这个应用就是传说中的阳光农场。应用需要调用阿里旺旺的用户资料,比如头像,昵称等属性。调用方式是HTTP接口,登录的时候应用会对当前用户所有好友调接口,获取头像URL。

    在用户量达到70万左右时,系统开始出现问题(每个人会有50个游戏好友,相当于早上登录每分钟5000人的话,会有250000HTTP请求),甚至影响了其它子网站的登录。基于一周的排查,验证,确认问题出在头像接口对头像HTTP服务器压力过大引起,并且由于头像URL大多不同,CACHE的命中不高。

    将头像改成一个固定的相同的URL后,问题解决,因为这个URL头像有缓存,并且命中率100%。

    之后用户量再上升,发现又出现问题。系统登录出现问题。后经排查发现,头像接口服务器LOAD很低,没超过1,连接数很大,全部TIME_WAIT。原来头像接口是通过HTTP调用内网另一台服务器B获取到URL,虽然URL已经成为固定值了,但是内网调用还是存在,并且这个内网调用没有走内部VIP的域名,走了公网的普通域名。而B服务器的VIP对公网HTTP请求有访问速率的控制,内网VIP走相对控制较少。系统改成内网VIP后这个问题缓冲。当然最后是去掉了这个内网的调用。

    经验就是:内网高频高并发调用HTTP最好走内网域名和IP,并要注意内网设备的一些限制。

  • 昨晚发布阿云的用户中心经验[1]

    发表于 2009年08月21日 yejun 没有评论

    MEMCACHE三个月没重起了,这次连上后,用户密码从MC中验证后发现,登录失败。。。经验是:以后发布计划上,要密上MC的重启检查。

  • 云计算的电力问题

    发表于 2009年08月1日 yejun 没有评论

    一台普通服务器一年耗电约在1000元。

    阿里巴巴这样的网站,如果服务器数据在5W台这个级别,那么一年的电费将是5000w。而沃尔玛、GOOGLE这样的企业服务器在几十万台,一年的电费开销是相当可观的个数字。

    云计算肯定是大规模的计算,涉及的机器数量一定是具大的,同时云计算一定是经济的。正是因为企业发展需要越来越多的服务器,让这些服务器集中在一起,可以提高计算资源的利用率,让单台服务器更加高效的工作,节省出大量的的电能。节省电能就意味着减少CO2的排放。所以,云计算是一个可能的终局。

  • 思考新阿里软件的新战略

    发表于 2009年07月25日 yejun 没有评论

    说阿里软件的战略前一定要看阿里巴巴的战略。

    围绕“让天下没有难作的生意”这句狂人狂语,david分析出几个关系词:

    1. 天下,指全球,不只是中国,外贸与进口类相关企业都是天下的企业
    2. 没,就是消除,干掉,解决;
    3. 难,就是要分析现在的困难和问题,然后去消除,解决;
    4. 生意,指中小企业的生意,大生意阿里巴巴帮不了,国有企业的很多事只需要国家一个批文就可以解决,但中小企业有3000W家以上,贡献了60%的GDP,国家不可能对每一家中小企业的生意都帮到每一个细节。所以我们的生意是指那些更需要帮助的中小企业的生意;

    为此阿里巴巴的战略是一个“达摩五指”:

    中小企业生意难问题

    中小企业生意难问题

    在阿里巴巴战略的基础上,可推出新阿里软件的战略。以前的阿软在作SAAS和阿里旺旺。两大产品线同时并行。新阿软将以电子商务基础信息技术服务为切入口,首先服务好阿里系的几家子公司,然后是更多的软件服务公司。新阿软要作云计算。

    云计算可以解决阿里巴巴战略中各环节的技术基础需求。比如:海量数据的存取,搜索,推荐;高效的即时聊天沟通技术;SaaS服务的托管;等等。

    如何将这些技术基础有机结合,形成一个新阿软的核心技术体系?如何解决技术需求方与新阿软之间准确的需求沟通,高效的服务实现,快速的业务变更?如何以技术驱动自我创新,以推动商业需求?这些都需要进一步的探索。

    路漫漫。

  • Writing hadoop mapreduce program in php

    发表于 2009年03月18日 admin 1 条评论

    最近在作营销效果分析的需求,需要处理大量网页访问日志(千万级PV以上),HADOOP在这方面正好有用武之地。PHP是一个简单实用的语言,我 很喜欢。影响我最大的计算机语言,除了LISP,就是PHP了(python这类的脚本语言学起来也很舒服)。于是我准备在我的D630本本上玩玩php in hadoop.

    • 先下载VMWARE PLAYER:

    The virtual machine image is designed to be used with the free VMware Player.

    VMware Player 2.5.1

    Latest Version: 2.5.1 | 2008/11/21 | Build: 126130

    http://www.vmware.com/download/player/

    • 下载hadoopvm

    Download the VMWare image here:

    http://code.google.com/intl/zh-CN/edu/parallel/tools/hadoopvm/index.html

    启动hadoopvm

    • 去掉原来的源;然后加入源,否则feisty不能升级包;:
    vi /etc/apt/sources.list

    deb http://ubuntu.cn99.com/ubuntu/ feisty main restricted universe multiverse

    deb http://ubuntu.cn99.com/ubuntu/ feisty-security main restricted universe multiverse

    deb http://ubuntu.cn99.com/ubuntu/ feisty-updates main restricted universe multiverse

    deb http://ubuntu.cn99.com/ubuntu/ feisty-proposed main restricted universe multiverse

    deb http://ubuntu.cn99.com/ubuntu/ feisty-backports main restricted universe multiverse

    deb-src http://ubuntu.cn99.com/ubuntu/ feisty main restricted universe multiverse

    deb-src http://ubuntu.cn99.com/ubuntu/ feisty-security main restricted universe multiverse

    deb-src http://ubuntu.cn99.com/ubuntu/ feisty-updates main restricted universe multiverse

    deb-src http://ubuntu.cn99.com/ubuntu/ feisty-proposed main restricted universe multiverse

    deb-src http://ubuntu.cn99.com/ubuntu/ feisty-backports main restricted universe multiverse

    • 执行apt-get update 更新包;
    • 确认当前用户是ROOT

    Login as user ‘root’ (password ‘root’),

    • run ‘apt-get install php5-cli’ to install PHP5.
    • Now switch to user ‘guest’ (password ‘guest’).
    • php -v查看当前PHP是否安装好

    (图1)

    • 生成两个程序:mapper.php和reducer.php

    #!/usr/bin/php

    <?

    $word2count = array();

    // input comes from STDIN (standard input)

    while (($line = fgets(STDIN)) !== false) {

    // remove leading and trailing whitespace and lowercase

    $line = strtolower(trim($line));

    // split the line into words while removing any empty string

    $words = preg_split(’/\W/’, $line, 0, PREG_SPLIT_NO_EMPTY);

    // increase counters

    foreach ($words as $word) {

    $word2count[$word] += 1;

    }

    }

    // write the results to STDOUT (standard output)

    // what we output here will be the input for the

    // Reduce step, i.e. the input for reducer.py

    foreach ($word2count as $word => $count) {

    // tab-delimited

    echo $word, chr(9), $count, PHP_EOL;

    }

    ?>

    reducer.php

    #!/usr/bin/php

    <?

    $word2count = array();

    // input comes from STDIN

    while (($line = fgets(STDIN)) !== false) {

    // remove leading and trailing whitespace

    $line = trim($line);

    // parse the input we got from mapper.php

    list($word, $count) = explode(chr(9), $line);

    // convert count (currently a string) to int

    $count = intval($count);

    // sum counts

    if ($count > 0) $word2count[$word] += $count;

    }

    // sort the words lexigraphically

    //

    // this set is NOT required, we just do it so that our

    // final output will look more like the official Hadoop

    // word count examples

    ksort($word2count);

    // write the results to STDOUT (standard output)

    foreach ($word2count as $word => $count) {

    echo $word, chr(9), $count, PHP_EOL;

    }

    ?>

    • chmod +x /home/guest/mapper.php /home/guest/reducer.php
    • 准备程序所需要的作为输入的文本文件的目录,

    mkdir /tmp/countfile

    • 下载远程的两个TXT文本作为输入

    wget http://pge.rastko.net/dirs/2/0/4/1/20417/20417-8.txt

    wget http://www.pg-news.org/nl_archives/2009/pgmonthly_2009_01_21.txt

    • 把文件放入HADOOP 的DFS中

    cd /home/guest/hadoop/

    bin/hadoop dfs -copyFromLocal /tmp/countfile countfile

    • 执行php程序处理这些文本

    bin/hadoop jar contrib/hadoop-streaming.jar -mapper /home/guest/mapper.php -reducer /home/guest/reducer.php -input countfile/* -output countfile-output


    • 查看输出的结果

    bin/hadoop dfs -ls countfile-output

    bin/hadoop dfs -cat countfile-output/part-00000

    参考:

    http://www.lunchpauze.com/2007/10/writing-hadoop-mapreduce-program-in-php.html

    http://hadoop.apache.org/core/docs/current/mapred_tutorial.html#Example%3A+WordCount+v1.0

  • 论阿里软件互联平台对软件开发者的价值[2]

    发表于 2008年07月26日 admin 没有评论

    08年1月,阿里软件启动软件超市战略。当时的互联网已经出现平台现象的征兆。
    从我的大量阅读互联网信息中明显感知到这块东西,在08年会很繁忙。

    08的大量平台出现,似乎是一场追星行动。各大主流博客和网站上一片“作平台,能发达;看到平台,看到希望”的呼声。

    平台有很多作法,有FB那种带有FBMA和FQL,以共同收益为导向的作法,校内那那种严格学习FB,以不准比校内早赚钱的作法,有阿里软件严格审查软件质量,以传经手段运营,接入一个算一个的作法。

    作平台从一种哲学上看,他是一种寻找事物的普遍规则,然后实现普编功能的作法。爱因期坦找到了牛顿普通力学的G和光迅最大之间有通用理论,然后又去找到电磁学与前者之前的关联,最终作出一个平台:“相对论”把这些都统一。现代的“弦理论”也是一个平台,她解决的是万事万物之内,最统一的一个公式,她认为一切事物都是由一小段一小段的弦组成,弦不同的扭曲方式造成了这么多元素和变化。正如前段时间我在BLOG上POST的一个贴,我也在找物理力学的平台,我认为一切的力学,都应统一到一个力学上。不管是经典力学,量子力学,万有引力,电磁力,强核力,都可终归于一个力。这个力现在看来与弦理论还有一些相象。当然,我的想法只是一种想法,只能证明人是有想象力,不能被实验证明的平台理论,那只是哲学层面的。互联网则不同。

    互联网平台是一种现实存在的东西,是实验层面的。可以证明对与不与。这个证明要因时间,互联网大气环境,作的具体SCOPE,作的人,作的工具等资源条件而不同。
    阿里软件软件互联平台也是在作平台。他的商业价值点,就是这个平台要实现的最基础功能。
    那么阿里软件平台有哪些商业价值?
    研究阿里88生态圈的,我看到了名牌的影响力,他可以比新网站更快带来用户。看到了SAAS模式对于C/S软件有防盗版的帮助。看到了软件可以用同一个账号登录。看到了阿里的20亿美金可以购买大量的服务器,服务器上可以部署SAAS软件;看到了阿里的技术团队很强,可以在变化中不段出成果。
    就以上这些资源条件,可以实现哪些商业价值?
    我认为是防盗版和软件之间的数据流集成。
    防盗版有两种方式,一是把C/S软件作成B/S,然后与平台合作。另一种是C/S软件代平台的功能实现防盗版,这样C/S软件开发者不需要自已处理防盗版问题。这个问题连MS都解决不了。我想因该是个大而普编的问题。
    软件之间数据流的集成并且所有数据的集成。有些软件还是独立功能比较安全和方便。
    我指的数据流是有定向和分类的:)

    阿里旺旺与阿里软件网站这两块平台都试着成为平台,两者之间是平行还是层次关系亦影响到平台商业价值点。