June 26, 2010
校内网CTO:校内网规模架构应用
"从20台服务器到5000台服务器,应该说,校内网的IT基础设施的变迁是与其自身的业务发展成 正比的,而每一次的业务突破实际上也是对数据中心的一个挑战。传统的IT基础建设模式,现在、将来又当如何适应SNS类网站的发展?从Csdn记者此次与 校内网技术总监黄晶的对话中,也许我们可以了解一二。 从20台到5000台服务器\n作为校内网的CTO,黄晶对过去几年校内网IT基础建设的过程历历在目。\n“如果要把这个历程分成几个阶段,那么在我看来,校内网的IT基础设施建设目前经历了三个阶段”。\n黄晶对Csdn记者谈到,第一个阶段是校内网创业的阶段,那时候,校内网的主要推广对象是国内比较好的一些高校,但数量很有限,用户数不太多,访问量也不 大,因此,当时选择了一个IDC并租赁了20台左右的服务器。\n“随着业务的发展,校内逐渐把业务覆盖到了全国,与此同时,数据量可以呈现几何式的增大,带宽与存储迎来了瓶颈,因此在那时候,公司开始寻找新的IT基础 架构解决方案,并因此而找到了世纪互联做服务器的托管,几年的时间,服务器的数量从几十台上升到了近5000台。”\n“但问题也随之出现,虽然带宽够大,但是找IDC托管的这种 …"
June 26, 2010
架构就是关注点分离
"要设计良好的架构,必须做到关注点分离,这样可以产生高内聚、低耦合的系统,这是美丽架构的终极原则。\n文 / 王海鹏\n什么是架构? 每个人可能都有自己对架构的定义。我比较喜欢的定义是:“架构是系统的组成部件及其之间的相互关系。”根据观察者的视角不同,架构 又可以分为业务架构和技术架构。一般来说, 功能性需求会对业务架构产生影响, 而非功能性需求会对技术架构产生影响。\n例如:“注册用户可以向自己的相册上传图片,并与好友分享”。这是一项功能性需求。它告诉了我们在系统的业务架构中,会出现“注册用户”“相册”、 “图片”、“好友”等组成部件,它们之间存在着相互关系。而“系统可以支持10万并发用户,并在需要时可以方便地伸缩,扩展到支持100万到1000万的 并发用户”,则是一项非功能性需求。它告诉了我们系统在性能、负载、吞吐量、可伸缩性方面的特性,目标系统的架构必须对这些特性提供支持。\n架构体现的是对复杂系统的分解设计。而如何进行分解,则是软件设计领域永恒的话题。实际上,架构体现的是关注点分离的原则和方法。经典的三层架构, 由展现层、业务逻辑层和持久层构成;其中体现了我们对用户界面、业务逻辑和数据持 …"
June 26, 2010
数据分片(Sharding)设计问题一例
"**Question:**假设一家 C2C 网站,数据库中某表存储买卖双方交易的数据信息,对于一条交易来说,买卖双方数据具有一定程度的耦合性,比如卖家的状态更新对应买家的状态也会更新,对于 一个中大规模的电子商务网站,架构师在设计中如何考虑数据分片的问题(假定该表随着数据的膨胀必须拆分)?\n**Answer:**对于一个中大规模的电子商务网站,随着网站的不断发展,其相应的数据规模会不断膨胀。 数据分片技术 是使网站得 于实现可扩展性的一种常用解决方案。对于 C2C 类型的网站,由于交易记录不容易进行水平的数据分割,因此对于这样的应用处理要再进行细分:\n买卖双方交易的信息,具备较高的时效性,即交易全部完成后就不会再有更新,因此这部分数据可以与正在交易中的数据区分开来,并可以单独分 表,定时归纳。具体的做法可以采用水平分割的数据分片技术,比如可以根据用户号码段范围进行切片,把不同的群体划分到不同的 DB 上,这样可以很好的进行横向水平扩展(Scale Out)。它可以很好的突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。 对于正在交易中的数据,主要根据时间进行分表。如果分 …"
June 26, 2010
转型:产品团队与架构师——金山WPS架构师手记
"与国外大型软件公司相比,在金山,架构师的发展还处于一个学习阶段,我们也正在实践中摸索适合我们的方法。借此机会,我想和大家分享一下WPS项目 中架构师的发展历程和经验教训,共同探讨适合中国软件业的架构师之路。\nWPS项目架构师发展回顾\nWPS项目架构师的发展是随着V6(内部代号,指WPS Office 2005即后续版本)开始的,在此之前,开发团队并没有明确的架构师角色,开发人员在自发的、简单的模块分工交流之后,即开始各自的编码。从2002年下 半年开始,由包括许式伟在内的一个团队开始V6的前期工作。通过半年的原型开发,确定了模块划分和接口。我觉得,这是我们第一次实施由架构师主导的软件开 发过程。\n我是在表格组成为架构师的。在此之前,我在表格组作为核心程序员,负责关键模块的开发。大约一年后,随着软件规模不断扩大,项目组成员不断增多,依 靠程序员自发协调的开发模式开始成为项目瓶颈。再加上我自己的兴趣,于是我开始向架构师方向发展。2004 年,系统架构组成立,正式确立了架构师岗位。大致上WPS的架构师与程序员的比例约为1:10,与管理人员相当。\n架构师的定位和职能\n虽然当前架构师岗位已经非常 …"
June 26, 2010
软件架构师应该知道的97件事
"软件架构师是个让人羡慕的职业,在市场经济成熟的国家,其薪酬已经达到医生、律师、注册会计师、建筑设计师的水平。但是薪酬高低与职业成熟度没有直 接的关系。重赏之下必有勇夫,高薪往往造成培养机制不健全的行业出现暂时的良莠不齐。目前我们还没有培养软件架构师的成熟机制,架构师大多是程序员自学成 材。程序员擅长和电脑打交道,却不善于处理工作中的人际关系。然而经验表明,除了技术特长,沟通协作的技巧、领导协调的能力、统筹取舍的经验在指挥开发项 目的过程中起着更重要的作用,而这些内容在计算机学院的课本里压根找不到。刚刚升任软件架构师的人,都有一段时间觉得茫然失措,因为有太多非技术问题困扰 着他们。\n****软件架构师是IT 行业里独一无二的职业,既要精通软件开发技术,又要掌握业务知识,还要周旋于公司不同部门之间,协调各种予盾。做到这些绝非易事, 博文视点 即将翻译出版的新书《软件 架构师应该知道的97 件事》( 97 Things Every Software Architect Should Know )探讨的就是这个主题。\n本书的编辑Richard Monson-Haefel 是畅销书《 …"
June 26, 2010
如何选择合适的MySQL存储引擎
"本文将讲述MySQL中多种存储引擎的特点,希望可以给你在选择 MySQL存储引擎时带来帮助。\nMySQL有多种存储引擎:\nMyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、 ARCHIVE、CSV、BLACKHOLE。\nMySQL支持数个存储引擎作为对不同表的类型的处理器。MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:\n◆ MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置 MySQL默认使用另外一个引擎。\n◆ MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样,MEMORY 和MERGE存储引擎处理非事务表,这两个引擎也都被默认包含在MySQL中。\n注释:MEMORY存储引擎正式地被确定为HEAP引擎。\n◆ InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分 …"
June 26, 2010
MySQL Cluster的常见问题
"MySQL Cluster是MySQL适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster存储引擎,允许在1个Cluster中运行多个MySQL服务器。\nMySQL Cluster是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的Cluster。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬 件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。\n总结了些移植到MySQL Cluster要注意的常见问题。\n关于连接\nMySQL集群适合用于高速带宽的环境中,采用TCP/IP方式 连接。它的性能跟主机间的连接速率有直接关系。集群中的最小速率要求是常规的100Mb以太网或者等同的网络。我们建议可能的话就采用G级网络。\n关于内存\nMySQL集群可以运行在任何启用NDB的平台上。显然,CPU 越快,内存越大,对集群性能提升越明显,64位的CPU也可能比32位的处理器更快。每个作为数据节点的机器都必须有足够的内存来保存共享数据库。\n在MySQL 5.0中,集群只能基于内存。意思是所有表的数据(包括索引)都保存在内存中。如果你的数据有1GB那么大, …"
June 26, 2010
关于 I/O 的五分钟法则(Five-Minute Rule)
"去年在对 SSD 做调查的时候就关注过这个五分钟法则,今天又发现了这 篇文章的修订版(为了纪念 Jim Gray),这个话题倒是可以简单介绍一下,对架构师衡量 I/O 能力、Cache 评估和做硬件选型还是会有一些帮助的。\n在 1987 年,Jim Gray 与 Gianfranco Putzolu 发表了这个”五分钟法则”的观点,简而言之,如果一条记录频繁被访问,就应该放到内存里,否则的话就应该待在硬盘上按需要再访问。这个临界点就是五分钟。 看上去像一条经验性的法则,实际上五分钟的评估标准是根据投入成本判断的,根据当时的硬件发展水准,在内存中保持 1KB 的数据成本相当于硬盘中存储同样大小数据 400 秒的开销(接近五分钟)。这个法则在 1997 年左右的时候进行过一次回顾,证实了五分钟法则依然有效(硬盘、内存实际上没有质的飞跃),而这次的回顾则是针对 SSD 这个”新的旧硬件”可能带来的影响。\n随着闪存时代的来临,五分钟法则一分为二:是把 SSD 当成较慢的内存(extended buffer pool )使用还是当成较快的硬盘(extended disk)使用。小内存页在内存和闪 …"
June 26, 2010
Memcached深度分析
"Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减 少数据库负载,提升性能。关于这个东西,相信很多人都用 过,本文意在通过对memcached的实现及代码分析,获得对这个出色的开源软件更深入的了解,并可以根据我们的需要对其进行更进一步的优化。末了将通 过对BSM_Memcache扩展的分析,加深对memcached的使用方式理解。\n本文的部分内容可能需要比较好的数学基础作为辅助。\n◎Memcached是什么\n在阐述这个问题之前,我们首先要清楚它“不是什么”。很多人把它当作和SharedMemory那种形式的存储载体来使用,虽然memcached使用了 同样的“Key=\u0026gt;Value”方式组织数据,但是它和共享内存、APC等本地缓存有非常大的区别。Memcached是分布式的,也就是说它不是 本地的。它基于网络连接(当然它也可以使用localhost)方式完 成服务,本身它是一个独立于应用的程序或守护进程(Daemon方式)。\nMemcached使用libevent库实现网络连接服务,理论上可以处理无限多 …"
June 25, 2010
MySQL 集群在Server1与Server2上如何安装MySQL
"我们今天主要向大家介绍的是MySQL 集群,其中包括对MySQL 集群的概念介绍,以及如何在Server1与Server2上正确对MySQL进行安装 ,还有对安装与配置管理节点服务器(Server3)的正确操作 ,配置集群服务器并启动MySQL 。\n一、介绍\n这篇文档旨在介绍如何安装配置基于2台服务器的MySQL集群。并且实现任意一台服务器出现问题或宕机时MySQL依然能够继续运行。\n注意!\n虽然这是基于2台服务器的MySQL集群,但也必须有额外的第三台服务器作为管理节点,但这台服务器可以在集群启动完成后关闭。同时需要注意的是并 不推荐在集群启动完成后关闭作为管理节点的服务器。尽管理论上可以建立基于只有2台服务器的MySQL集群,但是这样的架构,一旦一台服务器宕机之后集群 就无法继续正常工作了,这样也就失去了集群的意义了。出于这个原因,就需要有第三台服务器作为管理节点运行。\n另外,可能很多朋友都没有3台服务器的实际环境,可以考虑在VMWare或其他虚拟机中进行实验。\n下面假设这3台服务的情况:\nServer1: MySQL1.vmtest.net 192.168.0.1 …"