作者文章: Fenng

因为信任,所以简单 –专访支付宝架构师团队 (1)

这是前一段时间《程序员》杂志采访支付宝架构师团队的的稿件。篇幅较长,此为第一部分。。
本周支付宝架构师团队一部分成员将参加 CSDN 上海英雄会,欢迎做些技术或者业务方面的交流,
尤其是支付宝的一些合作伙伴公司和潜在合作伙伴公司。

Note:提问者:《程序员》杂志郑柯。回答者:支付宝架构师团队。

能否介绍下支付宝架构团队的构成以及各位的知识结构?

支付宝架构团队里的架构师角色可以划分为首席架构师、技术架构师、业务架构师、产品架构师等、数据库架构师等。

  • 首席架构师:制定公司的长期技术路线图。是公司技术方向和技术组合的重要决策者。
  • 技术架构师:关注整体网站系统架构。通过技术架构对业务架构提供支撑;(系统分析员不是技术架构师,但技术架构师能够胜任系统分析员的职责)
  • 业务架构师:关注业务架构。对公司战略、客户需求、内部需求进行抽象、组织、规划。关注业务的敏捷性,能够随着战略的变化而变化。
  • 数据架构师:负责数据库相关的架构,数据相关的技术研究、规划、评估等。

此外,我们支付宝架构团队里面还有搜索引擎专家专门负责搜索相关的技术,有业务流程专家制定业务流程制定,流程架构开发指引等,可谓藏龙卧虎。

支付宝的架构师中,一部分是从支付宝与淘宝网的内部一线研发人员中成长起来的,在多年的实战中积累了丰富的大规模分布式互联网系统的设计与开发经验,有扎实的 Java 开发功底,熟悉各种开源系统、框架与工具,熟悉主流的企业中间件。支付宝架构团队也有一部分是来自著名 IT 企业的架构师,他们分别在数据库、高性能计算、企业服务总线、工作流、开发工具等专业领域有多年的积累。

支付宝架构师对电子支付行业知识有相当深入的了解,尤其我们的业务架构师,他同时也是会计与支付行业应用的专家。另外,值得强调的是,每个架构师也都会定期带一到两名徒弟,把经验直接传递下去,满师之后徒弟也会承担比较关键的角色,这也让开发团队的同事有更好的上升空间。

支付宝架构团队对自己的具体定位是什么?

支付宝架构团队的日常工作定位在支付宝系统高层架构的设计与优化,其职责是保障系统与公司的愿景与业务体系一致,达到关键的业务敏捷、可伸缩、高可用、性能与安全指标,具备内在的统一性、协调性与可持续发展性,支持支付宝技术团队高效率地研发高质量的产品。

为了达成这一目标,我们会创建并持续优化支付宝的业务架构与系统架构蓝图与发展路线图、参与各类外部与内部标准与规范的制定、评估与指导重大项目与重大的系统变更、主持设计并实现支付宝系统开发框架与工具、以及辅导与培训支付宝技术团队成员等。

支付宝架构团队同时是支付宝未来发展所需的关键技术的孵化器。我们会根据公司的业务方向与趋势,结合行业与技术的发展状况,产出并维护支付宝的技术愿景、技术研究整体规划与发展路线图,并主持开展前瞻性技术的研究。

支付宝架构团队也是公司决策层的智囊团之一。我们会参与公司的发展决策,站在整体业务与技术架构、技术可行性与最佳技术途径的角度,对公司重要项目的决策提供专业性的参考意见。

补充一下,支付宝架构团队一直在招贤纳士,欢迎更多技术牛人加入(Fenng 补充:另外近期在上海会有招聘会)。

架构团队与开发团队之间的沟通多么?主要集中在哪些方面?

沟通是比较多的,一方面是在项目期间会有比较频繁的沟通,主要集中在产品的系统设计是否合理、技术难点支持等方面,有的时候,架构师也会临时”下放”到项目组,与开发工程师并肩战斗;另一方面在非项目时间经常会针对开发模式、新技术走向、如何做好设计和编码等技术角度做分享与交流。

架构团队内部的小范围沟通也不少,大家经常会就一些难点进行思维碰撞、分享、交流。
我们架构组后面的白板好像很少有干净的时候 – 经常是在讨论中拓扑图画满了整个白板。

支付宝架构团队是否经常与阿里巴巴旗下其他公司的架构团队进行沟通和交流?从其他团队哪里学到的最有价值的东西是什么?

为了促进阿里巴巴旗下的各个子公司之间的技术交流,我们成立了一个集团架构委员会。集团架构委员会每个月会有一次线上交流,每个季度会有一次线下的会议交流,而且每个月末各个子公司都会在邮件列表中报告各个子公司技术研究方向和成果。

如果大家都在研究同一种技术,会成立专门的研究小组,进行针对具体技术场景的研究。通过集团架构委员会,我们可以了解各个子公司的技术方向和研究成果,做到互相促进,互相学习,技术共享。

你们认为支付宝架构最令你们自豪的是什么?为什么?

在过去的三、四年里,随着支付宝业务领域的拓展与业务规模的增长,支付宝系统也一直处于快速的增长与变化中,从最初的单一应用迅速发展成由数十个自主系统构成的高度分布又充分协同的大系统。与此同时,支付宝研发团队的规模也从最初的数人发展到现在超过百人的研发团队。在快速奔跑中保持稳定与平衡,对架构提出了很高的挑战。

因此,我们很早就将支付宝系统建立在了面向服务架构(SOA)之上,确立了面向服务的整体业务架构,围绕着公司的基础业务建设了几大核心服务系统,并且搭建了以 ESB 为骨干、以服务框架为基础的面向服务基础设施。这些核心服务以及基础设施是支付宝系统健壮的后腰,它们的高可靠与高可用性是支付宝系统的整体稳定性的基础,它们的灵活性与可重用性支持前端业务有条不紊地创新、整合与优化,它们的可伸缩性保证了系统能够支撑持续的快速业务增长。

面向服务架构不仅是支付宝的运行系统的基础,而且已经渗透到了支付宝的研发与治理体系中,当前,这个领域仍然是支付宝架构团队的一个研究与应用的重点。

能够介绍一下支付宝的架构中用到了哪些 SOA 的思想?

支付宝从05年开始规划、研究SOA;在06年开始实施第一个SOA项目,同年引入ESB产品,对SOA相关的思想、技术进行验证和探索;经过几个项目的实施,我们完成了第一阶段的规划和目标,实现了几大核心业务的SOA化,构建了一套支撑SOA的技术平台。

从理论到实践上,都积累了丰富的经验,下一阶段,我们将会在深入业务SOA的同时,不断完善和发展我们的SOA技术平台。

在采用SOA思想的过程中,我们从下面2个方面入手:

首先,从业务层面入手,用SOA思想梳理业务架构。化解业务敏捷的要求,同时支撑支付宝的开放战略。在此之前,我们在进行业务架构分析的时候,更多的是关注业务的合理性,可行性等,在业务发展的初期,这种做法能够满足我们快速开发系统,及时占领市场的需要。在05年中,我们预见到现有的业务架构,将不能支撑我们公司快速发展的需要,例如:我们的注册会员飞速奔向1亿。此时,我们就开始探讨和规划SOA思想。因此在06年,我们果断的引入SOA思想,用SOA的思想不断重构我们的业务架构。在这个过程中,随着数次公司战略的调整,业务架构都能够灵活应对,达到了业务敏捷化的目的 — 这也是SOA思想的核心。

业务架构的SOA化,是我们开展技术SOA的一个充要条件,没有这一步,我们将会非常艰难,甚至无从下手。

接着,技术层面的SOA,构建一个适合支付宝的SOA技术平台,来支撑业务SOA化的需要。针对支付宝的业务特点和要求,我们优先考虑实现如下SOA要素:

A:以服务为基本单元。技术平台提供与之对应的组件编程模型,业务层面的每一个服务,都能够方便的封装位技术层面额一个组件,例如:客户系统中的注册、登录等,都对应一个组件,每个组件都是独立的,在部署的时候,我们可以灵活选择和组合,可以依据SLA的要求,做出多种部署策略。

B:基于统一标准。在此,我们选择了ESB产品提供支撑,对外提供SOAP、REST、Hessian等标准的支持;对内统一采用定制的标准。

C:分布的能力。所有的服务都能够透明的分布,为外部消费者使用。

D:鼓励扩展。技术平台提供扩展的能力,例如:客户注册后的业务扩展点,业务部门要求依据客户注册来源、客户所在省、客户年龄等,进行不同的业务处理,而且这些业务点有些要求在事务中,有些要求在事务之外。如果每次新的需求出现,都在原有系统直接进行修改,那么不但可能破坏原有的业务,而且可能导致系统可维护性变差。提供扩展点功能,将把扩展逻辑和主体业务逻辑进行有效的隔离,能够彻底解决上面的问题。

E:支撑业务敏捷。支付宝的交易流具有流程类型多,流程过程繁杂的特点,业务流程每个月都会提出多种新的交易业务,同时我们的业务从单一交易业务流向整合型业务流发展。因此,我们引入了BPM相关的技术和工具,帮助我们方便,灵活的组合服务,定制流程。

–待续–

Nginx 与 Awstats (FastCGI for Perl)

配置好 Nginx 后,可能有的朋友还想用 Awstats 分析日志。如果另外再起一个 Apache ,觉得费二遍事。如果在 Nginx 上跑 Awstats ,还需要 FASTCGI 支持。配置的方法有些山寨。Nginx 尽管提供 Perl 模块支持,毕竟还是实验性质的。

对比了一些文章,决定还是用 nginx-fcgi 这个脚本。作者是 Daniel Dominik Rudnicki 。这个脚本要比顺子文中提到的要好一点。

该脚本中用到如下的 Perl 模块。所以使用前要确保相关 Perl 模块已经存在。要不,手工下载安装一下。

  • perl-FCGI
  • perl-Getopt
  • perl-IO
  • perl-Socket

使用命令示意:

/usr/local/nginx/nginx-fcgi -S /tmp/fastcgi.sock -l /var/log/nginx/nginx-fcgi.log
-pid /var/run/nginx-fcgi.pid

网上常见的那个脚本必须要显示的指定最为后台进程跑。不是很完善的方法。

注意事项:不能用 root 用户执行(会提示). 要用与 Nginx 相同身份的用户执行。否则可能会在 Nginx Log 中提示 Permision Denied 。

Nginx 中配置好 Log 格式:

log_format  main          '$remote_addr - [$time_local] "$request" ' 
'$status $body_bytes_sent "$http_referer"'
'"$http_user_agent" $http_x_forwarded_for';

相对应的 Awstats 中 Log 格式为:

LogFormat = "%host - %time1 %methodurl %code %bytesd %refererquot %uaquot" 

其他的配置参考一下Sunnyu 的 “为了Awstats给Nginx添加FastCGI方式的Perl支持” 应该就成了。

BTW: 应该说,Nginx 能够有效抵挡搜索引擎爬虫对网站的影响。对于 Apache 来说,这是个很大的进步。

EOF

更新:如果手工写脚本做 Nginx 日志 logrotate 的话,注意不要简单的用 mv 命令, cp 然后 echo ”> 的方式更好。

推荐: Sina 张宴的 Nginx 0.7.x + PHP 5.2.6(FastCGI)搭建胜过Apache十倍的Web服务器(第4版),这是目前关于 Nginx 最详细的实践文章。

看片会与 Sun 用户组活动归来

上午先在公司解决了一下 Nginx 上跑 Awststs 的问题。然后出门了。计划中我的分享从 3 点开始,先绕道去看一下王晓峰导的 DV 看片会。赶到凡人咖啡馆,都已经没位置了,只好在前面水管上坐着。不得不说,这个咖啡馆在这个下午成了全杭州小资的密集聚集地。

王小峰导演(在字幕上用”小”而不是”晓”)简单的做了致辞,告诉大家做字幕的小伙子很辛苦,同时现在的这个版本配音效果有点问题。然后就开演啦。片名《你丫真狠》,讲的是狗仔队的事儿。编剧很见功力,导演水平也明显比前面的《小强历险记》和《十面埋妇》有进步。可惜因为时间关系,我只看了一半就走了,还不知道后半部剧情如何发展的。

在预定的时间前赶到了青藤茶馆,参加活动的人来得不少,大家对技术的热情可见一斑,只是杭州的技术活动相对比较少。今天美中不足的是场地有点小,多少有点局限。中场休息了一会儿,开始我的分享,基本上讲一小段会回答一到两次提问,这种交互式的交流我还是比较喜欢的。如果完全对着 PPT 对很多人讲,其实效果不那么好的。整个 PPT 主要部分在这几个实践点:

  • 建立基准测试(IO层、网络、Cache、App 等)
  • 持久性 Connection(“连接风暴”问题)
  • 选取合适的数据类型
  • 非关系型数据的存储选择
  • 分区与 Sharding
  • 反范式(Denormalization)
  • 抛弃存储过程封装业务逻辑的思路

没有内容只有骨架,在这里看起来好像干巴巴的。希望有时间能就这个话题写一篇文稿出来。今天同行的还有同事简朝阳,他最近在 MySQL 方面做了不少研究。

这次活动的视频

EOF

明天将参加杭州 OpenSolaris 用户组活动

os_hangzhou_350.jpg明天下午将去参加 InfoQ 中文站主办的 体验基于OpenSolaris的Web/企业应用 活动,这也是杭州 OpenSolaris/OpenSource 用户组的第一次活动。

我应邀将在活动上做个关于数据库的分享,主题为 “设计可扩展的面向互联网应用的MySQL数据库” ,欢迎感兴趣的朋友光临指导。具体时间和地点 ? 就在上面的链接里 …

自从 Sun 把 MySQL 收购了之后,好像关于数据库的市场活动并不大,相反,倒是对操作系统做了一些不遗余力的推广。当然,现在的 Solaris 倒也并非没有长处,ZFSDtrace 就是两个很有趣的东西,而这两者对 MySQL 都是很好的互补,对 Linux 其实也是很好的互补,尤其是 ZFS ,最近一段时间,越来越觉得 Linux 的 EXT 文件系统在某些场景多少还有点短板。期待明天能听到关于 ZFS 和 Dtrace 的一些内容。

补充:听说 Sina 有一部分机器用了 OpenSolaris,但也应该是试水性质的吧。国内其他网站有没有用 OpenSolaris 的?

EOF