初识架构、架构风格、与REST


  • cid:41:privileges:topics:read

    作为一个接触不到太多架构知识的学生党,REST一直是一个比较让我困惑的概念。趁着暑假不太忙,我在网上学习了一下关于REST的知识并写出了这篇文章。这篇文章并不是网上常见的直接解释REST的科普文,而是按照我对于架构的理解把架构的产生、架构风格等和REST相关的知识用通俗的方式表达出来,姑且算是个Introduction吧。我认为只要把“架构和架构风格是什么?怎么产生的?”这个问题想清楚了,回答“REST是什么?”这个问题应该是水到渠成的。对于REST的约束更详细的解释,可以参考最后给出的链接。

    什么是REST?这个问题要从什么是架构开始说起。先来开一个脑洞:

    世界诞生之初,造物主凭一己之力创造出世间万物。某一天,造物主突然感到疲惫不堪不愿再继续创造,于是它设计出了一群叫做人类的动物来帮助它继续造物。造物主创造人类的时候并不是按统一的模板进行创造的,有的人擅长捕猎,有的人擅长耕种,每个人各有所长。当这群人类被造物主放置到自然之中后,他们发现自己无法完成被造物主赋予的“创造”使命”:每个人都有各自擅长的事情,但为了活下去,更多的是要面对自己不擅长做的事。做擅长的事所节省出来的时间都被不擅长的事浪费掉的时间抵消,结果光是活下去就花费了所有的时间。
    于是人们决定组成部落,让每个人只做自己擅长的事,通过分享成果来让整个群体中的每一个个体能腾出时间来做维持生存以外的事。部落本身作为一个整体有一个明确的目标:确保个体的生存并完成造物主赋予的使命。以部落的目标为基础,人们对白天进行的活动进行了分工:善于捕猎的人每天只负责捕猎,善于耕种的人每天只负责耕种,而善于思考的人每天只负责“造物”。而每天晚上,人们会聚集到一起分享自己的劳动成果。由于合作带来的效率进步,整个部落不再需要为生计发愁;由于善于思考的人有充分的时间发挥创造力,一系列新的工具被发明出来;伴随着食物的富足,人口增长随之而来。
    随着新工具新方法的发明,旧的“职业”出现了分化。农耕的人们发现现在他们可以驯服牛,并利用牛来拉动犁来开垦土地。于是原本从事农耕的人们发现他们要做的事从耕地这一件变成了三件:驯放牛,犁地,播种。原本的耕种者需要进一步根据自己擅长的领域从三件事中挑选一件来做。不久人们发现一个问题,由于放牛人、犁地人和播种人每天只在晚上才能聚集在一起讨论,白天工作时临时遇到的问题无法立刻解决,导致经常出现整个白天因为一个小问题而闲置。比如,放牛人比头天晚上商议的时间之前完成了放牛工作来找犁地人,发现犁地人不在于是回去继续放牛;犁地人按时来约好的地方领牛,却发现放牛人不在。于是整个部族经过商议后决定,除了每晚的集会外,从事相关工作的人可以在白天的时候每隔一个小时聚集一次。从此以后,因为沟通而导致闲置的问题得到了解决。
    又过了若干年,部落人丁兴旺,每个人都各司其职辛勤劳作。然而新的问题出现了。不知道为什么,部落出现了木材过剩而粮食不足的状况。于是在部族大会上,人们在从事“思考”工作的群体当中选出了一个人作为族长,让他来解决危机。族长经过思考,决定为每一个伐木工人制定一个低于现有产出的目标,而为每一个耕种者制定了一个高于当前产出的目标。族长希望通过这样的调整使部落重新回到一个最高效运转的状态。
    然而事与愿违,问题不但没有解决反而进一步加剧,成为了危机。木头的生产率有增无减,而粮食日渐短缺。族长感到很困惑,于是深入观察了伐木业和耕种业人群。最终他发现了供需不平衡的真正原因:伐木工人们原本的工作量比较小空余时间多,因此伐木工人的繁殖频率高于其它职业,并且后代都非常好的继承了前代所擅长的能力,于是伐木业的工人越来越多;与之相反的是,从事耕种的人口工作量高于部落的平均水平,导致繁殖频率低于平均水平。当族长对产量目标作出调整后,伐木工人有更多的空余时间,人口迅速增长;耕种人口的增长速率由于工作量进一步的增加而严重放缓。总人口增速加快而耕种人口增速减缓,于是危机就产生了。
    发现了问题的根本所在之后,族长将产量目标恢复到了原来的水平。此外又额外发布了一系列指令。期中最重要的一条,就是被后世称为“计划生育”的指令:不论用何种方法,伐木工群体必须将人口增长的速率控制在部族人口增长速率之下,如若不然将强制放逐部分伐木工。新指令效果显著,人口增长的平衡在一代人之内就得以解决,木材过剩和粮食短缺的危机也得以化解。后世的经济学家研究部落的这一段历史时,认为这一段时期内施行的一系列指令非常有借鉴意义。于是将这一时期内发布的所有指令的集合命名为“计划经济”。

    好了故事讲完了,请原谅我死板无趣的语言风格,毕竟好久没有把自己的脑洞用语言的形式表达出来了。那么:

    什么是架构?
    部落中的每一个人各司其职,分享成果,为了一个共同的目标而努力。更抽象的来说,架构由三个要素构成:

    • 可以被定义的、需要解决的问题(或者说目标)。(被创造出来的人类需要生存和创造)
    • 切分问题,分(解)工(作)。 (部落为了更好的生存和创造,需要每个人各尽所能)
    • 沟通合作,协同一体。 (每个人做自己擅长的事,并将成果分享给他人以达成整体的进步)

    什么是(架构的)约束?
    部落或部落中的个体集合所需要满足的条件,比如:“计划生育”。换句话说约束可以理解为架构需要满足的条件或达到的状态,比如“计划生育”要求部落达到“伐木工群体的生育率低于平均水平”这个状态。

    什么是架构风格?
    “计划经济”所指代的一系列指令,也就是一组部落需要达到的状态。换一种比较官腔的说法就是:当给定一个名称时,一组协作的架构约束就成为了一种架构风格。(这里的一组是[0,∞),约束数为零也算一种风格)
    架构风格可以理解为是设计架构的guideline。(组织部落成员分工合作的guildeline)

    什么是REST?
    REST是一种架构风格。沿用上面的脑洞来讲的话:假设造物主创造的不是人类,而是一群生活在“Computer”世界中的神奇生物。它们通过可以传输信号的线缆所形成的网络相互相连。它们有一个共同的目标:为造物主的一个名为“Browser”的马克杯中制造和添加名为“Hypermedia”的咖啡。它们所信奉的宗教“REST”中有五条教义:无状态、层次化系统、C/S模型、可缓存、统一接口。这个宗教,就是REST。

    比较正式的来说,REST这种架构风格是一种构建Web服务的指导方针。按照REST的约束来设计的分布式超媒体系统能拥有更好的性能。REST有五个必要的约束和一个可选的约束:
    1. REST是一个C/S架构
    2. 无状态
    3. 可缓存
    4. 统一接口:
    5. 层次化的系统
    6. 按需代码(code on demand,可选约束)

    到这里架构、架构风格和REST的通俗表述就算是完成了,简单总结一下这三个概念:
    架构:为了完成一个界定好的目标,把问题分解分工,最后把分工的结果有序的结合成最终的结果。
    架构风格:一组对架构的约束加上一个名字。
    REST:一个由无状态、层次化系统、C/S模型、可缓存、统一接口这五个约束组成的架构风格。

    参考链接:






    https://en.wikipedia.org/wiki/Representational_state_transfer
    http://kb.cnblogs.com/page/186516/
    http://www.zhihu.com/question/27785028
    http://www.cnblogs.com/loveis715/p/4669091.html
    http://kb.cnblogs.com/page/539160/


登录后回复
 

与 BitTiger Community 的连接断开,我们正在尝试重连,请耐心等待