热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Web架构师应该具备的能力

Web架构师应该具备的能力最近和几个朋友谈到时下流行的Web2.0,提到了其中最重要的角色——架构师。多方各有争执,不外乎是因为职业背景和视角的缘故。包括架构一词,本身就

Web架构师应该具备的能力

    最近和几个朋友谈到时下流行的Web 2.0,提到了其中最重要的角色——架构师。多方各有争执,不外乎是因为职业背景和视角的缘故。包括架构一词,本身就从建筑学借鉴而来,至于架构师,则可以简单地从建筑学的设计师来引申,不外乎就是设计结构,设计一个大楼的结构。回到软件本身,那就可以简单地理解为负责设计软件框架的人了。

    我们没有讨论清楚架构师、软件架构师、系统架构师及其Web 架构师这些看似相同却有所区别的角色的关键区别,本身见仁见智,也不是一时半会能够说清楚的,最后我们讨论了作为一个Web 2.0 网站架构师需要的一些基本的知识和能力(个人看法,难免有失偏颇):

    1,熟知你的业务模式和目标人群

    这是最重要的,Web 2.0 本质上是以Web 作为平台的应用,如果不真正了解你的业务,不了解用户的核心需求,不了解你目标客户的典型行为,是很难做好网站的。从这个角度来讲,一个Web 架构师首先必须是一个出色的产品经理。大多时候,我们只要做到业务技术领先就足够了,一味地追求技术的先进性反倒会深陷泥潭。

    在技术和业务之间找到一个平衡,也就意味着必须明白整个业务核心的竞争力在哪里?目标人群的基本诉求在哪里?然后选择最低成本的技术来实现业务需求,但是反过来,又必须适当地为业务拓展保留适当的空间。

    打个比方说,如果是一个以照片分享为目的应用,你可以将注册程序写的烂一点(但是不可以烂到不能动),你可以将帮助系统做的不那么好看一点,但是上传照片和浏览照片绝对不可以慢,你可以数据库设计的不是那么好,但是存储问题绝对要慎重,绝对不能够在照片超过1 万张后,网站速度就和牛一般……

    只有真正理解你所要做的事情,技术那玩意儿才可能变得可爱起来。

    2,了解负载均衡策略实现

    不管怎样的Web2.0,怎样的业务,你都必须做一个关键的假设:你的流量一定会上涨的,单台机器一定不能够满足你业务发展的需求。我相信这样的假设是合理的,没有一个Web 2.0 公司相信他们可以用一台机器来改变世界。

    并不是要求从一开始就设计一个理想化的负载均衡策略,那样未免有些过于“未雨绸缪”,但是作为一个Web 架构师,一定要给自己留下一些“分家”的余地。因此适当地了解不同层面的负载均衡策略实现是必要的。

    一般来说,在小规模发展初期,适当地考虑数据库分拆和按照业务进行域名分拆就足够了。在中等规模的情况下,可能需要适当地采纳硬件或者软件Load-Balancer,在这种场景中,Web 层面的负载均衡你可以通过F5/NetWare 那样的硬件来帮你实现,当然了,选择Apache 或者更加专业的负载均衡软件也未尝不可,比如Windows 下面的NLB 和Linux 下面的LVS 。而为了实现负载均衡,在应用服务器层面作一些适当的调整也是必要的,至少此刻不能够让你随心所欲地使用session 变量了(其实也并不是完全不可用),而一旦你采用了缓存(Web 2.0 有谁不知道MemCached?),如果考虑不够周全,本来单机环境下好好的应用到头来就会变得乱七八糟,本质上无非是数据不同步的问题,其实反过来想,你把流量和压力分解了,数据各自为政了,不出问题也是没有天理的。

    言归正传,作为一个Web 架构师,必须了解负载均衡策略的不同实现,更要了解负载均衡之后可能引发的问题和关键点,对此一无所知,在面子上也是说不过去的。

    3,设计“合理”的存储

    该没有人打算将所有的东西存储在一个关系数据库里面吧,也该没有人可以说,一个Web 2.0 网站用一个关系数据库可以解决问题。如果说Web 2.0 是以用户为中心,那么也可以说成是以用户数据为核心价值,应用的核心驱动是数据。没有办法讨论是应该用关系数据库还是不用关系数据库,许多东西就是在其中找到一个平衡,一个“合理”的平衡。

    传统的存储会分为SAN 、NAS 和DAS,只不过随着技术的发展,其中的边界越来越模糊,模糊的可以甚至让你忘记其中的差别,你尽管看好口袋里的银子,大致明白有多少银子能够办多少事情就可以了。但是你还是需要去做选择,对于Web 应用而言,大多还是PC 服务器,也可能许多人热衷于通过相对廉价的设备构建诸如GFS 那样的存储架构。

    许多人认为Web 2.0 最关键的是业务,“用钱可以解决的问题,就不是问题”,这话是对的,在早期如果就将架构设计为未来5-10 年的架构,架构师的这种“远见”必定成为日后的笑柄,但是反过来不去考虑任何数据分布的可能,如此短见终究会自食其果。

    再看看实际情况中,架构师应该如何面对呢?在启动阶段,简单而直接的关系型数据库就可以了,你并不需要花费太多的精力去考虑,只要大致测算出一台服务器的容纳能力,然后估算出在到达容纳能力上限的一半左右,你有多少的时间可以去折腾,如此而已,也真够了。简单地说,粗鲁一点,一台文件服务器,一台数据库服务器,只要别犯愚蠢错误,诸如文件只有一个目录,完全不可拆分,如数据库只有一个表,耦合了太多逻辑等等,既然没有,那就放手去做。而在业务发展到一定规模,如已经有10 万用户,不考虑你的存储已经不可能了,此时我们会发现,诸多性能问题是因为不太合理的存储问题而导致的,这个时候存储设计更多是应对性能而考虑的。而在发展到更大规模,存储的可管理性和成本问题逐步成为关键。

    对于架构师而言,不同时期选择不同的设计策略是尤为重要的,没有最好的,只有合理的架构,存储亦然。

    4,异构平台的整合能力

    如果从企业应用的角度而言,绝对不赞成一个系统中有多个平台的,那会无谓地增加集成的成本,过去的“数据孤岛”是最好的证明。那么究竟Web 架构师是在一个平台上炉火纯青就够了,还是能够在多个平台之间漂移为好呢?

    我们来重新定义“平台”的含义, 我简单地把它理解成两个层面的,一个是操作系统层面,一个是开发语言层面,当然讨论开来,问题就大了,可以说框架,可以说数据库,可以说协议等等。但是有一点必须肯定,操作系统是你业务软件层面的基础,而开发语言是实现业务的工具,而两者结合起来,都有一些推荐的经典架构,.NET 方面是Windows 2003/2008+Sql Server +IIS 6.0,然后通过Visual Studio 2005/2008,以微软为依托,完全使用他们提供的服务。LAMP 则是Linux+Apache+MySql+Php, J2EE Web 架构则普遍接受为Hibernate+Spring+Struts,至于RoR、Python,这是明星式的后起之秀。

    一个Web 架构师去仔细考察哪个平台孰优孰劣是愚蠢的,除了能够精通一个平台,那样能够让你处理业务的时候得心应手,但最好还能够同时熟悉另外一个平台,虽然我们可以说时代已经变了,所有的都是XML,都是标准的REST调用,但是你真的能够保证吗?大多应用都是.NET 写的,需要提供一个论坛,你用了Discuz,你需要适当地修改业务,虽然论坛本身的定制功能很强大,但是要嵌入特定的业务,不至于对LAMP 一无所知吧,那样连统一登录的问题都不好解决,当然了,也可以为自己说我不需要它,因为有别的可以选择,但是有一点也是事实,你无法随心所欲地根据业务需要增加最适合你业务的模块。

    在我个人的理解,一个好的架构师最好能够同时熟悉两种操作系统,两个以上的开发语言,一个方面是现实世界的业务复杂度使然,一个方面是既然会存在不同的平台,那必定有其合理性,博取众家之长,能够帮助一个架构师在他的工作平台上更加理性、公正地看待问题本身,其实反过来看.NET 、Java 或者PHP,也不就是相互借鉴其优点嘛。

    一个好的架构师,是应该有处理异构平台的能力的,必须记住,Web 本身就是异构的。

    5,设计更好的交互

    说到交互,大多人会想到是产品设计范畴的交互式设计,Web 2.0 强调以用户为中心,而交互,也是以用户为驱动的交互设计。但是我在这里谈及的,更多是通常意义的Web前端设计,也可以称之为“表现层架构”。

    我们都知道Web 2.0 很重视交互,也正因为如此,大多工程师耗费更多的时间并不是在后台的数据处理,而是前台的交互。在AJAX 、RIA 大行其道的今天,Web 架构师一个极其重要的职责是简化因为“高度交互”而导致的开发高复杂度。

    我们讨论AJAX,但不是让每个开发人员都去操作XmlHttpRequest,不是让每个人去了解HTML DOM 、Javascript 和CSS,然后组合的眼花缭乱。所有人都知道,让很多开发人员吐血的不是后台代码调试,而是Javascript 和CSS,因为需要无比的耐心和技巧。而架构的职责呢,就是定义行之有效的规范和实现。

    简单一点地说,开发人员要弹出一个类似Facebook 的框,总不至于让每个开发人员各显神通去拼吧,然后绞尽脑汁地去兼容不同的浏览器,兼容不同的版本,再然后兼容不同页面。我需要从后台取数据,需要每个开发人员去自己写,需要一个隐藏的效果,也需要各显神通。

    于是,有人会说,上面的几个问题jQuery 可以解决,也有开发人员会采用这个类库,但是也会有人用Prototype或ExtJs,而架构师的职责,就是规定应该用什么,怎么用,而哪些又是不可用的。

    那我可以简单地理解,在这个层面的交互架构师的关键职责是定义到底是不是用jQuery, 不同的界面应该用怎样的html,应该采用怎样的服务器界面技术,应该采用怎样的远程处理框架。

    定义这些交互技术的目标是用最简单的方式实现最好的交互,这个也正是架构的职责所在。

    5,性能和故障诊断

    本来不应该把这个问题列入其中的,但是考虑到典型的Web 2.0 是永远的beta 版,换句话说,问题是永远存在的,你不可能一开始就做出一个完美的应用。随着业务的增长,出现性能问题和系统故障的情况是不可避免的。场景很平常: 流量上去了, 却发现整体网站变得奇慢无比,有些页面间歇性地出现错误, 更加要命的是, 开发人员也进行了代码复查, 却还是没有找到“低级”的错误。

    一个好的架构师,在这个时候应该能够协助进行一些诊断和优化,基于业务的、技术的判断,在愈加复杂的系统中,找出核心的问题所在。通常来说,一个应用系统的性能和SQL 的水平是有关系的,但是到底哪些SQL 有问题,问题影响的程度如何,需要作出快速、准确的判断。

    我不太赞成事后诸葛亮,但是一个好的Web 架构师还是应该能够洞察到性能导致的问题所在,也会提出一套行之有效的故障诊断方案:是数据库、程序还是网络,是操作系统还是硬件本身的问题,或者都兼而有之?

    性能和故障诊断涉及到的层面太多了,有操作系统、数据库、配置文件、程序代码,甚至还会和网络有关,每个方面都需要用一本书来说明,也许还不够。但是作为架构师,是必须对此有感觉的。

    这是我个人对于Web 2.0 架构师所需要素质的一些理解,但是我想还有很多方面的能力是需要的,比如沟通的能力,抽象的能力,平衡的能力等等,也希望各位来帮忙补充。


推荐阅读
  • Nginx不仅是一款轻量级的高性能Web服务器,还具备出色的负载均衡和反向代理功能。它支持复杂的正则匹配规则、动静内容分离以及灵活的URL重写功能,使得配置和管理更加便捷高效。此外,Nginx提供了多种负载均衡算法,如轮询、加权轮询、最少连接数等,以满足不同应用场景的需求。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • java大数据量调优(超赞值得收藏)
    从总体上来看,对于大型网站,比如门户网站,在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节: ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • 本文详细探讨了MySQL并发参数的优化与调整方法,旨在帮助读者深入了解如何通过合理配置这些参数来提升数据库性能。文章不仅介绍了常见的并发参数及其作用,还提供了实际操作中的调整策略和最佳实践,适合希望提高数据库管理技能的技术人员阅读。 ... [详细]
  • 如何在PHP中有效实现和管理互斥锁机制(PHP锁) ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • Nginx入门指南:从零开始掌握基础配置与优化技巧
    Nginx入门指南:从零开始掌握基础配置与优化技巧 ... [详细]
  • 本文以 www.域名.com 为例,详细介绍如何为每个注册用户提供独立的二级域名,如 abc.域名.com。实现这一功能的核心步骤包括:首先,确保域名支持泛解析,即将 A 记录设置为 *.域名.com,以便将所有二级域名请求指向同一服务器。接着,在服务器端使用 ASP.NET 2.0 进行配置,通过解析 HTTP 请求中的主机头信息,动态识别并处理不同的二级域名,从而实现个性化内容展示。此外,还需在数据库中维护用户与二级域名的对应关系,确保每个用户的二级域名都能正确映射到其专属内容。 ... [详细]
  • Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
    在Java Web开发中,JSP(Java Server Pages)是一种重要的技术,用于构建动态网页。本文详细介绍了JSP的三大指令、九大隐式对象以及动作标签。三大指令包括页面指令、包含指令和标签库指令,它们分别用于设置页面属性、引入其他文件和定义自定义标签。九大隐式对象则涵盖了请求、响应、会话、应用上下文等关键组件,为开发者提供了便捷的操作接口。动作标签则通过预定义的动作来简化页面逻辑,提高开发效率。这些内容对于理解和掌握JSP技术具有重要意义。 ... [详细]
author-avatar
冬天的芦苇2011
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有