与冯大辉的交流,架构师接龙有点意思

冯大辉,技术名人,http://www.dbanotes.net/ 博主。

冯大辉:假设一家 C2C 网站,DB中某表存储买卖双方交易的数据信息,对于一条交易来说,买卖双方数据具有一定程度的耦合性,比如卖家的状态更新对应买家的状态也会更新,对于一 个中大规模的电子商务网站,架构师在设计中如何考虑数据分片的问题(假定该表随着数据的膨胀必须拆分)?

王速瑜:对于一个中大规模的电子商务网站,随着网站的不断发展,其相应的数据规模会不断膨胀。数据分片技术是使网站得于实现可扩展性的一种常用解决方案。对于C2C类型的网站,由于交易记录不容易进行水平的数据分割,因此对于这样的应用处理要在进行细分:

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

冯大辉:技术团队在开发过程中是否进行集成测试? 进行与否的理由各是什么? 对于集成测试你是否有其他补充?

王速瑜:有进行集成测试,因为集成测试对于产品版本的发布是一环重要的保证。但是由于互联网产品研发的敏捷性,很难建立一套大而全的集成测试平台,而更多还是在功能级和模块级别上的集成测试

互联网产品测试跟传统的软件测试不太一样,互联网产品的特性是短平快,因此敏捷开发的理念在互联网产品研发中非常适合,腾讯很多团队都采用敏捷开 发的实践,包括TDD,重构和持续集成。因此集成测试更多是体现在产品的每个小迭代和小发布中。互联网产品技术架构都是分层的,因此对于后台server 的集成测试也很重要,这个在迭代过程的测试中容易被忽略。这一块往往需要开发额外的工具来辅助进行,比如对于协议接口的测试,通常会有一些小工具来辅助进 行。

冯大辉:对于一个架构师来说,如何与冗杂的会议进行斗争? 你有哪些心得或者贵公司有哪些针对会议的策略呢?

王速瑜:对于 架构师,参加会议是必然的,架构师往往都需要深入到具体的项目中去,在项目的开展过程,大概会有几类会议是由架构师发起或重点参与的,包括迭代0的架构设 计讨论会、定期的架构和代码Review会等等,项目之外,架构师通常还会参加诸如行业级和公司级别的一些盛会和峰会。对于会议,更多还是抱着有益,高效 的态度去参加。在实际工作当中,我觉得有以下几点是可以参考的:

  1. 涉及架构发展和改进的会议一定要进行, 而且要在产品研发过程中阶段性进行。有利于保证架构工作的可持续发展;
  2. 由架构师主导的会议,要把握高效会议的原则,包括会议前的充分准备工作、会议进程的把握、会后的关键事项跟进等等;
  3. 架构师要积极参加产品的讨论会,了解产品发展的规划和细节,有很多架构工作是需要技术与业务相平衡的,参加这样的会议有利于架构师更好理解业务和它的发展,从而为架构的平衡做出更好的判断;
  4. 架构师要扩展视野和保持不断学习的态度,因此行业技术盛会、公司技术峰会、产品月会等等类型的会议架构师要主动选择性去参加,可以保证架构师能了解技术趋势,提升自己的能力。
  5. 不必要的会议尽量不参加,可以采取其他沟通手段,如邮件,IM工具来替代,提升沟通的效率。

冯大辉:架构师是否有必要关注用户体验? 如何从架构师的层面关注用户体验?

王速瑜:非常有必要。保证用户体验是所有软件最重要的目标,特别是互联网产品,如果该目标无法实现,再好的架构也没有存在的意义。因此如何在满足用户体验的前提下进行架构设计是架构师的必要素质。

产品的用户体验包括几个方面:产品的功能便利性、产品可用性、性能、安全性等等。例如:枪战类的游戏,需要优先保证其实时性。而在C2C订单交易中则优先保证其金钱的安全性。因此如何从架构层面就去关注用户体验非常重要。对于架构师来说,通常有以下几点是需要注意的:

  1. 用户体验表现在外表,但来源与内在。比如互联网服务的性能设计,能否让用户在1秒内使用你的产品,将是保证用户继续使用产品的关键所在。架构上如何做得在海量用户的前提下很高的性能,就应该是架构师首要关注的点;
  2. 用户体验与架构设计有时候会对立矛盾,架构师需要平衡。比如为了某个用户体验,可能需要架构上做出重点的调整,可能会带来巨大的运营成本。这个时候就需要架构师来Trade-Off了,柔性可用依然是可以采取的架构原则;
  3. 一切以用户体验和价值为核心是每个架构师在架构互联网服务的基本准则。互联网服务不同于传统软件,UGC型的互联网产品更是如此,没有用户参与,再好的架构都是无益的,因此架构设计需要围绕用户体验和价值来持续进行。

本次“架构师接龙”全文,请见2009年08期《程序员》杂志。


http://www.niftyadmin.cn/n/1737991.html

相关文章

7.3基础概念/文件、文件路径/batch_size,length,total/acc、loss计算/ect

一、 一些基础术语: util是utility的缩写,意思为实用工具。一般用于描述和业务逻辑没有关系的数据处理分析工具。 logger :日志 meter : 记录表 使用下划线 _ 表示不需要的变量是一种常见的开发者的约定,(Python 解释…

python中__len__()和 __getitem__()函数,__dict__属性学习小结

不管是__len__()还是__getitem__()函数都是针对类来进行操作 1. __len__(): 首先__len__()的作用是返回容器中元素的个数,要想针对类的对象实例使len()函数成功执行,必须要在类中定义__len__()。 class CountList:…

提高javascript函数的执行效率

为了测试javascript函数在执行的过程中,对局部变量的赋值开销以及缓存全局变量或者dom属性(方法)的开销,特别写了如下三个简单的测试函数: 函数一:正常使用,循环10000次调用document.getElemen…

c++中new和delete的默认赋值测试

为了测试c中对new操作符的运算规则是否调用默认对象的构造函数进行初始化&#xff0c;故写出如下的测试demo: #include <iostream>using namespace std;//using std::cout 或者using std::endltemplate <class eleType>void print_value(eleType *a, int size){if…

python中__call()__函数和TensorFlow中call()函数的区别

在使用python的时候&#xff0c;经常用到python中的特殊函数:__call()__函数&#xff0c;但是学习TensorFlow的时候&#xff0c;又会看到自定义模型的时候&#xff0c;经常用call&#xff08;&#xff09;函数&#xff0c;不懂他们之间的区别。 python中的__call()__函数和Ten…

C++ Virtual函数

虚函数是C中用于多态的机制。核心理念就是通过基类访问派生类定义的函数。基类的析构函数都必须是virtual的 虚函数只能借助于指针或者引用来达到多态的效果。前提B类继承于A类 且foo()为虚函数void bar(A *a){ a->foo();//被调用的是A::foo()还是B::foo() ?}如果a指向的…

python中yield的用法和生成器generator的联系

yield相当于return的使用&#xff0c;但是又保存当前状态&#xff0c;相当于迭代器的使用。但是我们一般把带有yield关键字的函数叫生成器&#xff08;generator&#xff09;。 首先&#xff0c;如果你还没有对yield有个初步分认识&#xff0c;那么你先把yield看做“return”&…

tensorflow环境安装常用网址

国内镜像网站&#xff1a; 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban) http://pypi.douban.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://py…