资深架构师如何看待大型网站系统架构
目前,网络上关于讨论网站系统架构实操(术)的文章较多,讨论架构理念(道)的较少,本文基于几位资深架构师在大型电商网站系统架构方面的一些实践和思考,和大家聊聊架构理念性的东西,希望能够抛砖引玉,推进大家对架构的认识。
什么是道,什么是术?道是事物发展的本质规律,术是事物发展的具体途径。规律只有一个,途径很多,条条大路通罗马,罗马是道,大路是术。道为本,术为途,如果事先知道罗马在哪里,那么遍地是路,路路相通。架构也是如此,如果能领悟架构的本质,就不会拘泥于现有的实践和理论框框,而以最直接的方式解决问题,无招胜有招。
1、架构的本质
任何系统,自然情况下,都是从有序到无序,这是有科学依据的,按照热力学第二定律,自然界的一切自发过程都有方向性,一个孤立系统会由有序变为无序,即它的熵会不断增加,最终寂灭,但生物可以通过和外界交互,主动进行新陈代谢,制造“负熵”来保证自身有序,继续生存。
同样,一个软件系统随着功能越来越多,调用量急剧增长,整个系统逐渐碎片化,越来越无序,最终无法维护和扩展,所以系统在一段时间的野蛮生长后,也需要及时干预,避免越来越无序。
架构的本质就是对系统进行有序化重构,不断减少系统的“熵”,使系统不断进化。
那架构是如何实现无序到有序的呢?基本的手段就是分和合,先把系统打散,然后重新组合。
分的过程是把系统拆分为各个子系统/模块/组件,拆的时候,首先要解决每个组件的定位问题,然后才能划分彼此的边界,实现合理的拆分,合就是根据最终要求,把各个分离的组件有机整合在一起,相对来说,第一步的拆分更难。
拆分的结果使开发人员能够做到业务聚焦、技能聚焦,实现开发敏捷,合的结果是系统变得柔性,可以因需而变,实现业务敏捷。
举个例子,在Web 1.0时代,一个ASP或JSP页面里,HTML和脚本代码混在一起,此时脚本代码越多,系统越混乱(即熵增加),最终连开发者自己都无法理解,此时就需要对系统重新架构,办法是引入view helper模式,分离HTML和脚本,HTML成为view,脚本成为帮助类,然后再简单整合在一起。
通过重新分和合,整个系统层次清晰,职责明确,系统的无序度降低,容易扩展,同时不同技能的开发人员,如UED和程序员,可以负责不同部分,有效提高开发效率。
好的架构就像一篇优美的散文,形散神不散,表面看无序,实则高度有序。
2、架构分类和服务对象
架构一般可分业务架构、应用架构、技术架构,那么它们分别解决什么问题,服务于谁呢?我们首先看一个系统落地过程:
对于负责开发的人来说,怕的是业务太复杂,代码逻辑太乱,超出他能理解的范畴,系统无法维护,因此开发的需求是系统整体概念清晰,容易理解,方便扩展。
对于负责运行的机器来说,怕的是业务并发量太大,系统核心资源不够用(如数据库连接),它希望在业务量增加时,系统能够支持水平扩展,支持硬件容错(如避免单点故障)。
开发的痛点主要由业务架构和应用架构解决,业务架构从概念层面帮助开发理解系统(动态的包括业务流程/节点/输入输出,静态的包括业务域/业务模块/单据模型)。
应用架构从逻辑层面帮助开发落地系统(应用种类/应用形式/数据交互关系/交互方式等),整个系统逻辑上容易理解,最近大家谈的比较多的 SOA 即属于应用架构的范畴。
机器的痛点主要由技术架构解决,如技术平台选型(操作系统/中间件/设备等),部署上希望支持多机房,水平扩展,无单点等。
强调一下,系统是人的系统,架构首先是为人服务的,业务概念清晰、应用逻辑合理、人好理解是第一位的(即系统有序度高),现在大家讨论更多的是技术架构,如高并发设计,分布式事务处理等,只是因为这个不需要业务上下文背景,比较好相互沟通,具体架构设计时,首先要关注业务架构和应用架构,这个架构新手要特别注意(具体可查看马海祥博客《如何搭建垂直门户网站的内容层次架构》的相关介绍)。
3、整体架构
真实中的网站架构也许并不如此也可以实现高性能,但是高性能的网站莫不过如此,如下图所示:
(1)、负载均衡系统
负载均衡系统分为硬件和软件两种。
硬件负载均衡效率高,但是价格贵,比如F5等。
软件负载均衡系统价格较低或者免费,效率较硬件负载均衡系统低,不过对于流量一般或稍大些网站来讲也足够使用,比如lvs。
(2)、反向代理系统
目前普遍使用Squid或者nginx,或者Lighttpd,Varish。
这四者又各自有很大的差异。
Squid:主要用来做反向代理,使用内存+硬盘。
Nginx:可以反向代理+负载均衡+WWW解析。
Lighttpd:反向代理能力一般,处理FastCGI比较好,消耗内存很小。
Varish:主要做内存的反向代理,性能最优。
(3)、Web服务器系统
由Apache负责解析PHP内容,也可以用Nginx,或者Lighttpd,相对来说Apache比较稳定。
(4)、分布式存储系统
存储量很大,经常会达到单台服务器无法提供的规模,比如相册、视频等应用。因此需要专业的大规模存储系统。
(5)、底层服务系统
根据各自需要由C/C++开发设计供上层CGI调用。
(6)、数据库系统
①、使用MySQL数据库,考虑到Web应用的数据库读多写少的特点,我们主要对读数据库做了优化,提供专用的读数据库和写数据库,在应用程序中实现读操作和写操作分别访问不同的数据库。
②、使用同步机制实现快速将主库(写库)的数据库复制到从库(读库),一个主库对应多个从库,主库数据实时同步到从库。
③、写数据库有多台,每台都可以提供多个应用共同使用,这样可以解决写库的性能瓶颈问题和单点故障问题。
4、架构师能力模型
架构师只做分和合的事情,但综合能力要求很高,要求内外兼修,下得厨房,上得厅堂,下图通过典型的架构方式介绍一个架构师的能力要求:
在此基础上,架构师要有技术的广度(多领域知识),又有深度(技术前瞻),对主流公司的系统设计非常了解,知道优劣长短,碰到实际问题,很快有多种方案可供评估。
抽象思维是架构师最重要的能力,架构师要善于把实物概念化并归类,比如面对一个大型的B2C网站,能够迅速抽象为采购->运营->前台搜索->下单->履单这几大块,对系统分而治之,庖丁解牛,早已目无全牛。
抽象思维是往高层次的总结升华,由实到虚,而透过问题看本质则是由虚到实,往深层次地挖掘,比如看到一段java代码,知道它在JVM如何执行,一个跨网络调用,知道数据是如何通过各种介质到达目标(操作系统内核/网卡端口/电磁介质等),透过问题看本质使架构师能够敏锐地发现底层之真实,系统性端到端地思考问题,识别木桶的短板并解决之。
能落地的架构才是好架构,良好的沟通能力确保各方对架构达成共识,愿意采取行动,良好的平衡取舍能力确保架构在现有资源约束下是最合理的,理想最终照进现实(具体可查看马海祥博客《一个普通网站发展成大型网站的架构演变历程》的相关介绍)。
总结下,架构师的能力要求包括:
兼具技术的广度(多领域知识)和深度(技术前瞻)
兼具思维的高度(抽象思维)和深度(问题到本质)
兼具感性(沟通)和理性(平衡)
5、架构境界
架构师从境界上由浅到深可以分为四层:第一看山不是山,第二看山是山,第三看山不是山,第四看山是山。
刚接手项目时,对业务不了解,时时被业务方冒出的术语弄得一愣一愣的,如果把现有问题比作山,则是横看成岭侧成峰,根本摸不透,此时看山不是山。
经过业务梳理和对系统深入了解,可以设计出一个?丝的方案,把各个系统串起来,解决当前的问题,对当前这个山能够看清楚全貌,此时能够做到看山是山。
通过进一步抽象,发现问题的本质,原来这个问题是共性的,后续还会有很多类似问题。设计上进行总结和升华,得出一个通用的方案,不光能解决当前的问题,还可以解决潜在的问题,此时看到的已经是问题本质,看山不是山。
最后回到问题本身,去除过度的抽象,给出的设计简洁明了,增之一分嫌肥,减之一分嫌瘦,既解决当前问题,又保留最基本的扩展,此时问题还是那个问题,山还是那个山。
第一境界给不出合适方案,不表。
第二境界的方案只解决表面问题,往往设计不够,碰到其它类似问题或者问题稍微变形,系统需要重新做。
第三境界的方案往往过度设计,太追求通用化会创造出过多抽象,生造概念,理解和实现均困难,此时系统的无序度反而增加,过犹不及。
第四境界的方案,在了解问题本质的基础上,同时考虑现状,评估未来,不多做,不少做。
佛教讲空和色,色即事物现象,空即事物本质,从这个意义上说,第一重境界无色无空,第二重境界过色,第三重境界过空,第四重境界站在色和空之间,既色又空,不执着于当前,不虚无于未来。
不空不色,既空既色,道法自然,本性如来,架构之髓也。
马海祥博客点评:
构建大型的商业网站绝对不可能像构建普通的小型网站一样一蹴而就,需要从严格的软件工程管理的角度进行认真规划,有步骤有逻辑地进行开发,对于大型网站来说,所采用的技术涉及面极其广泛,从硬件到软件、编程语言、数据库、Web服务器、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的,所以要想对自己有所提升,就必须学会搭建科学的系统架构。
本文发布于马海祥博客文章,如想转载,请注明原文网址摘自于http://www.mahaixiang.cn/wzch/1451.html,注明出处;否则,禁止转载;谢谢配合!上一篇:如何在网站策划中做好导航设计
下一篇:大型网站系统的升级演变过程
您可能还会对以下这些文章感兴趣!
-
网站策划必须要注意的可用性设计
可用性主要是指使一个功能或者产品易于使用,但同时也要保持产品质量维持在高水平上。在过去十年中高品质的可用性一直是各个行业讨论的核心,因为它对用户来说越来越重要。一般来说,良好的可用性成为那些成功的初创公司的核心。多数情况下,简单的想法最具创造性的,好……【查看全文】
-
策划一个具有高质量度移动站点的方法步骤
如果做个SEOer或站长们近期工作重点排名调查表的话,我估计排名首位的一定是移动站点或手机网站的建设了。移动站点之所以被站长们如此的看重,主要是因为其强大的平板电脑和手机用户群了。据悉在百度推广后台也已经有移动站点质量度的星级评价体系了,页面大小、页面内……【查看全文】
-
门户网站导航的信息结构分析
网站导航是网站中最重要的元素,是网站提供给用户的最直接最方便的访问网站内容的工具,导航的核心目标是设计一个简便快捷的操作入口,帮助用户快速到达网站中的相应内容,设计上应当根据网站类型及内容的需求设计合理的导航信息结构,导航设计不光只是信息结构或组织方……【查看全文】
-
如何在网站策划中做好导航设计
网站中导航的设计既存在着科学,也蕴涵着艺术,使用者可以用最短的时间从A点到达B点,这是导航的魅力所在,也是它的职责所在,导航不单单是链接,可以说导航是一种思维,是一种创建网站的思维,这样的思维让用户清晰可见网站中的信息内容,所有想查找的信息是处于可及范……【查看全文】
-
网盟环境下广告位置的变化对广告关注度的影响
广告位置是指一则广告在特定媒体发布时所处的规定地位,广告位置直接对广告效果和广告成本发生影响。比如,斯塔奇研究认为,杂志封底广告比杂志内页广告吸引读者数多达65%。同样,在电视广告中,处在广告时段开头的广告和结尾的广告,比居中的广告回忆度要高。另外,广……【查看全文】
-
一个普通网站发展成大型网站的架构演变历程
大型网站都有复杂的应用,这些应用必须使用数据库,那么在面对大量访问的时候,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法满足应用,于是我们需要使用数据库集群或者库表散列。在数据库集群方面,很多数据库都有自己的解决方案,Oracle、Sybase等都有很好……【查看全文】
-
大型网站系统的升级演变过程
一个成熟的大型网站的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线,……【查看全文】
-
物理结构(扁平结构和树形结构)与逻辑结构之间的关系区别
在网站初期的策划建设中,一个好的网站结构也说是网站未来发展成功与否的重要成败点,同时也是我们对网站优化的指导方向。整体来说,网站结构一般分为物理结构和逻辑结构。网站物理结构就是也就是我们网站实际目录,或者说是文件实际的物理地址,指的是网站目录及所包含……【查看全文】
-
关于网站搜索框功能的策划及设计
如今,很多网站都有搜索框,这主要是因为搜索功能可以让用户快速查找到自己想看的内容,节省用户的时间。稍微具有一定规模的网站,在网站建设上可能都会考虑加入网站搜索功能,前期网站内容较少,网站搜索功能显示不出威力,但是,随着网站内容越来越多,那么,搜索功能……【查看全文】
-
基于用户体验的网站可用性策划建议
关于网站的可用性策划,我想应该是每位站长都首先要考虑的因素了。因为网站的可用性是你这个网站能否受欢迎的一个重要判定方面了,无论你进行的是企 业网站、网购网站还是其它类型的网站,马海祥觉得让你的网站界面变得容易操控,使用时令人舒服是关键,近几年已经有很……【查看全文】
分类目录
互联网更多>>
- 互联网思维的一些特征 如今,互联网迅猛发展已经渗透人们生活各个方面,尤其是互联网正加快向传统行业渗透和融合,对传统行业提出严……
- 盘点2010年代这10年的重大网络安全事件 二十一世纪的第2个十年即将过去,在过去十年里有很多的重大网络安全事件发生,我们见证了过去十年,大量的数据……
- 基于高斯模糊原理的模糊图片的研究 高斯模糊(Gaussian Blur)的原理中,它是根据高斯曲线调节象素色值,它是有选择地模糊图像。说得直白一点,就是高……
SEO优化 更多>>
-
史上最全的网站SEO策略方案
在搜索引擎优化中,一个网站的SEO策略能最终影…… -
百度搜索将推出飓风算法2.0:严厉打
为了营造良好的搜索内容生态,保护搜索用户的…… -
百度冰桶算法5.0:保障移动搜索用户
为了提升移动搜索落地页体验,营造优质的移动…… -
网站收录量对于网站排名的影响作用
很多做SEO的朋友都会问,是不是网站收录越多网…… -
如何使用留言评论进行推广引流
随着新媒体的快速发展,留言评论变得随处可见…… -
SEO是什么?
对于刚入SEO行业的新人来说,要想做好网站的s…… -
今年网站SEO优化要注意的6大策略
通俗的来说,SEO技术就是一种达到SEO效果所采用…… -
移动端手机站做站内优化的要点
随着移动流量的与日俱增,移动搜索引擎的功能……