​浅谈架构

标签: Tech | 发表时间:2012-02-02 11:45 | 作者:linsd99
出处:http://hi.baidu.com/linsd99
今天@Laruence 挖了个坑,我试着来灌点水。纯粹个人观点,不准确也不全面。

架构 (architecture) 这个概念确实不好定义。首先,它很虚,不像代码可以用源文件“自证”。其次,它很泛,好像跟什么都相关,开发、测试、部署甚至运营等各阶段都有其影子。然后,它好像还在变,在计算机发展的各个阶段(Mainframe/PC/Cloud)都感觉不太一样。而且,在不同的领域也都有不同的反映。

所以,一千个人心中有一千个哈姆雷特,一千个工程师眼里也能有一千种架构。在2012年2月1日晚11点左右(向Pkubuntu致敬),我的看法可以用两个例子说明。以建筑为例,设计师想方案,建筑师出图纸,工人施工同时项目管理贯穿始终,那图纸就是架构。如果说到烤鸭,骨头和肉是代码,鸭架子就是架构,而过程管理将其变成烤鸭。

如果要更正式点定义,架构就是model和pattern,从而把code串成system。而其中最重要的就是design principles (设计原则),即为什么这个问题要用这个而非那个。更文艺点,再结合点美学,也可以叫作design philosophy (设计哲学或理念)。

然后我们来看什么是model和pattern,这两个具体的定义我还没想出来。先说一下比较,model偏宏观,而pattern偏微观;model重抽象描述,而pattern重具体实现。比如,你的系统有一个服务端和一个客户端,那么client/server就是model,而client与server之间的交互方式则是pattern,比如RPC/message、同步/异步,比如用滑动窗口来组织请求与应答等等。当然,这和系统的尺度有关。如果你zoom in到服务端,此时的model可能就是模块的组织关系,而pattern则是调用方式,比如用function call还是event等。

具体到领域上,我觉得主要有三类架构问题(不包括硬件):

1. 软件架构,其典型用例是企业级软件,通过合理的功能抽象,提取出公共组件和通用流程,进行最大化的功能复用 (reuse)。我称其为软件的可维护性问题。
2. 系统架构,其巅峰是OS,重点是解决资源的分配与复用 (multiplexing)。
3. 大规模分布式架构,主要应用在Cloud中,重点是大规模系统的资源整合、快速交付和运维问题。

1有《Design Patterns》一书,2有很多OS、并行程序设计的书可供参考 (或者应该写本《Parallel Patterns》?),3目前我还不知道有什么书可参考。

那为什么架构会很泛又多变呢?这就牵扯到开发过程了。我们再引入一个方法论 (methodology) 的概念。传统软件工程那一套不必说了,互联网服务常用迭代式的开发方法 (现在又叫敏捷),这就是方法论。我个人的做法通常有三种:divide and conquer,modeling and iterate,back-of-envelop-calculation and simulation,按问题的规模、难易程度、熟悉程度、项目的组织方式等等选择不同做法。这就又提到架构师这个角色了,找时间再谈。

总而言之,相对于代码和功能这些更实际的东西,以上所说的都是偏虚偏抽象的事情,我称其为开发工艺问题,包括架构和方法论两个层面。不同时代的系统,其组成不同,对开发工艺的要求也不同。在Cloud时代,可归结为三点:软件架构和开发过程支持快速迭代,系统架构与分布式架构支持大规模用户和数据分析,然后由数据分析驱动迭代。

阅读全文
类别: Tech  查看评论

相关 [架构] 推荐:

架构

- - IT瘾-dev
网关:Nginx、Kong、Zuul. 缓存:Redis、MemCached、OsCache、EhCache. 搜索:ElasticSearch、Solr. 熔断:Hystrix、resilience4j. 负载均衡:DNS、F5、LVS、Nginx、OpenResty、HAproxy. 注册中心:Eureka、Zookeeper、Redis、Etcd、Consul.

信息架构

- Michael - Tony-懒得设计
写几篇关于信息架构的文章,系统地输出我理解的信息架构. 发了一篇关于招信息架构实习生的博客,收到不少简历. 但谈起信息架构,多数不了解,稍微了解的扯了很多很偏的东西. 随手搜索了一下,我发现了原因:. 1 《web信息架构》这本书太概念,太学术. 2 有人绑架了“信息架构”这个词,拿出去唬人,内容都是皮毛或者是根本和信息架构不沾边的东西.

CSS架构

- - 博客 - 伯乐在线
英文原文: CSS Architecture,编译: CSDN-张红月. Philip Walton 在AppFolio担任前端工程师,他在Santa Barbara on Rails的聚会上提出了CSS架构和一些最佳实践,并且在工作中一直沿用. 擅长CSS的Web开发人员不仅可以从视觉上复制实物原型,还可以用代码进行完美的呈现.

Linux的架构

- - 博客园_首页
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. 我们以下图为基础,说明Linux的架构(architecture). (该图参考《 Advanced Programming in Unix Environment》). 最内层是我们的硬件,最外层是我们常用的各种应用,比如说使用firefox浏览器,打开evolution查看邮件,运行一个计算流体模型等等.

LMAX架构(转)

- - 企业架构 - ITeye博客
LMAX是一种新型零售金融交易平台,它能够以很低的延迟(latency)产生大量交易(吞吐量). 这个系统是建立在JVM平台上,核心是一个业务逻辑处理器,它能够在一个线程里每秒处理6百万订单. 业务逻辑处理器完全是运行在内存中(in-memory),使用事件源驱动方式(event sourcing).

软件架构

- - 研发管理 - ITeye博客
    对于外包业务类型的项目,软件架构设计的目的与产品类型的项目有所不同,在这里主要讨论外包类型项目的软件架构设计目的.     1、为大规模开发提供基础和规范,并提供可重用的资产,软件系统的大规模开发,必须要有一定的基础和遵循一定的规范,这既是软件工程本身的要求,也是客户的要求. 架构设计的过程中可以将一些公共部分抽象提取出来,形成公共类和工具类,以达到重用的目的.

NUMA微架构

- - 夏清然的日志
现在开始补日志,逐步的扫清以前写了一半的和“欠账未还的”. 半年之前开的头,今天先把NUMA说完. PC硬件结构近5年的最大变化是多核CPU在PC上的普及,多核最常用的SMP微架构:. 多个CPU之间是平等的,无主从关系(对比IBM Cell);. 多个CPU平等的访问系统内存,也就是说内存是统一结构、统一寻址的(UMA,Uniform Memory Architecture);.

HDFS架构

- - 数据库 - ITeye博客
       在阅读了GFS的论文之后,对GFS的框架有了基本的了解,进一步学习自然是对HDFS的解析,不得不说,之前对GFS的一些了解,对理解HDFS还是很有帮助的,毕竟后者是建立在前者之上的分布式文件系统,二者在框架上可以找到很多的共同点,建议初次接触HFDS的技术人员可以先把GFS的那篇论文啃个两三遍,毕竟磨刀不砍柴工.

再谈企业架构-业务架构

- - 人月神话的BLOG
前面已经谈到过企业架构的层次和维度方面的问题,在这里简单谈下企业架构中的业务架构和业务价值链方面的内容. 随着企业不断的发展和演进,各个业务功能单元会逐步成熟,也会形成多个端到端的流程,这些流程涉及到工程项目管理,供应链,财务,人力资源,产品研发等多个方面的内容. 我们再进行高端业务架构建模的时候采用的方法也基本是参考业界标准的价值链模型进行展开.