支付宝架构师对话腾讯研发总监畅谈架构

不久前,我们发表了支付宝架构师冯大辉提出的问题,并邀请了腾讯的研发总监王速瑜先生做出回答,下面登出本次问答的节选,希望广大网友和读者们积极参与,提出你们想要问的问题。
王速瑜,腾讯 R&D研发总监,从事产品研发和管理工作,对互联网产品发展趋势、管理理念、技术架构有浓厚的兴趣和深入研究实践。目前主要关注敏捷开发、大规模应用架构、企业SAAS、Web2.0产品的相关技术和趋势。) q( m$ k. _2 J" n# x
: \. v2 y2 P+ ~
冯大辉:假设一家C2C 网站,DB中某表存储买卖双方交易的数据信息,对于一条交易来说,买卖双方数据具有一定程度的耦合性,比如卖家的状态更新对应买家的状态也会更新,对于一个中大规模的电子商务网站,架构师在设计中如何考虑数据分片的问题(假定该表随着数据的膨胀必须拆分)?
王速瑜:对于一个中大规模的电子商务网站,随着网站的不断发展,其相应的数据规模会不断膨胀。数据分片技术是使网站得于实现可扩展性的一种常用解决方案。对于C2C类型的网站,由于交易记录不容易进行水平的数据分割,因此对于这样的应用处理要在进行细分:: f8 i! N+ T7 s5 o, W9 N5 X

买卖双方交易的信息,具备较高的时效性,即交易全部完成后就不会再有更新,因此这部分数据可以与正在交易中的数据区分开来,并可以单独分表,定时归纳。具体的做法可以采用水平分割的数据分片技术,比如可以根据用户号码段范围进行切片,把不同的群体划分到不同的 DB 上,这样可以很好的进行横向水平扩展(Scale Out)。它可以很好的突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。
对于正在交易中的数据,主要根据时间进行分表。如果分的更细,则可以分三个表,但是这样在事务保证方面则要复杂很多,不建议这样做

冯大辉:技术团队在开发过程中是否进行集成测试? 进行与否的理由各是什么? 对于集成测试你是否有其他补充?# q4 y$ V" a" [7 s: ]
% P1 x5 I- P  {* [$ T4 s
王速瑜:有进行集成测试,因为集成测试对于产品版本的发布是一环重要的保证。但是由于互联网产品研发的敏捷性,很难建立一套大而全的集成测试平台,而更多还是在功能级和模块级别上的集成测试。% V4 D6 ^; |. E  N1 O
互联网产品的测试跟传统的软件测试不太一样,互联网产品的特性是短平快,因此敏捷开发的理念在互联网产品研发中非常适合,腾讯很多团队都采用敏捷开发的实践,包括TDD,重构和持续集成。因此集成测试更多是体现在产品的每个小迭代和小发布中。互联网产品技术架构都是分层的,因此对于后台server的集成测试也很重要,这个在迭代过程的测试中容易被忽略。这一块往往需要开发额外的工具来辅助进行,比如对于协议接口的测试,通常会有一些小工具来辅助进行。
- q: ?, [% [# F4 _, D
冯大辉:对于一个架构师来说,如何与冗杂的会议进行斗争? 你有哪些心得或者贵公司有哪些针对会议的策略呢?, F" W; K" w! c. G! Y: A
$ b9 o; G# {8 d6 r! l
王速瑜:对于架构师,参加会议是必然的,架构师往往都需要深入到具体的项目中去,在项目的开展过程,大概会有几类会议是由架构师发起或重点参与的,包括迭代0的架构设计讨论会、定期的架构和代码Review会等等,项目之外,架构师通常还会参加诸如行业级和公司级别的一些盛会和峰会。对于会议,更多还是抱着有益,高效的态度去参加。在实际工作当中,我觉得有以下几点是可以参考的:
7 B0 G% U* i: t. W. J

涉及架构发展和改进的会议一定要进行, 而且要在产品研发过程中阶段性进行。有利于保证架构工作的可持续发展;
由架构师主导的会议,要把握高效会议的原则,包括会议前的充分准备工作、会议进程的把握、会后的关键事项跟进等等;
架构师要积极参加产品的讨论会,了解产品发展的规划和细节,有很多架构工作是需要技术与业务相平衡的,参加这样的会议有利于架构师更好理解业务和它的发展,从而为架构的平衡做出更好的判断;
架构师要扩展视野和保持不断学习的态度,因此行业技术盛会、公司技术峰会、产品月会等等类型的会议架构师要主动选择性去参加,可以保证架构师能了解技术趋势,提升自己的能力。
不必要的会议尽量不参加,可以采取其他沟通手段,如邮件,IM工具来替代,提升沟通的效率。
4 S5 q3 P. K: ^3 C8 d! O2 n+ B
3 h% ?0 F; t' p6 L" ?: R
冯大辉:架构师是否有必要关注用户体验? 如何从架构师的层面关注用户体验?
王速瑜:非常有必要。保证用户体验是所有软件最重要的目标,特别是互联网产品,如果该目标无法实现,再好的架构也没有存在的意义。因此如何在满足用户体验的前提下进行架构设计是架构师的必要素质。
产品的用户体验包括几个方面:产品的功能便利性、产品可用性、性能、安全性等等。例如:枪战类的游戏,需要优先保证其实时性。而在C2C订单交易中则优先保证其金钱的安全性。因此如何从架构层面就去关注用户体验非常重要。对于架构师来说,通常有以下几点是需要注意的:
) m, Y' b" n" @9 ~3 m
$ V: W7 k0 Z3 N7 ~
用户体验表现在外表,但来源与内在。比如互联网服务的性能设计,能否让用户在1秒内使用你的产品,将是保证用户继续使用产品的关键所在。架构上如何做得在海量用户的前提下很高的性能,就应该是架构师首要关注的点;
用户体验与架构设计有时候会对立矛盾,架构师需要平衡。比如为了某个用户体验,可能需要架构上做出重点的调整,可能会带来巨大的运营成本。这个时候就需要架构师来Trade-Off了,柔性可用依然是可以采取的架构原则;
一切以用户体验和价值为核心是每个架构师在架构互联网服务的基本准则。互联网服务不同于传统软件,UGC型的互联网产品更是如此,没有用户参与,再好的架构都是无益的,因此架构设计需要围绕用户体验和价值来持续进行。

你可能感兴趣的:(互联网,腾讯,敏捷开发,软件测试,电子商务)