阅读更多

2顶
0踩

企业架构



开发者要么出于本能,要么很快就能在痛苦中发觉:即便一个很小的变化也能改变一切。就像攀岩那样,每次挪移都会影响到未来的抉择,因此如果在开始时考虑不周的话,可能会在今后突然导致致命的危机。随着对开发生命周期和上市时间缩短这方面需求的增长,在架构初期的任何决定都比以前更加重要。

想要定义合适的软件架构,不应仅仅搭出高级架构的框架,还应联合所有利益相关者,包括程序员、管理员、市场推广人员等,最终一同得出走向成功的愿景规划。

新一场“客户端与服务器端之辩”
架构师需要决定将繁重的任务放在哪边。无分软件架构模式与风格,大众都在就这个问题争论不休。

Battery Ventures风投的Adrian Cockcroft在推特上就这个主题引发了一次著名的公众辩论:“Etsy 让我知道了为什么单一整体式应用是一条死路,请在可持续扩展部署中使用微服务架构。”



Etsy’s CTO John Allspaw回应道:“在这点上你缺少批判性思考,因为你想象不到它能带来的所有好处。”



而Allspaw在另一条推特中解释道:“选择变少了,机会却扩大了。只留几个人们有着深刻理解的工具和模式,反而更有优势。”

下面是相关的一点背景。单一整体式架构指的是传统的“一切归于主机”的软件开发方法。所有的进程与子程序都是庞大代码库的一部分,它们运行在不同的服务器上,以便最小化延迟,最大化正常运行时间。

较新的架构是微服务,它包括了一系列独立进程,彼此实时协调运作。最初,这听起来就像是重启古老的“客户端与服务器端之辩”。基本上这个比喻很直观,不过还有来自移动市场约束的三个显著差异。这三点差异与面向服务架构(SOA)的更新、企业服务总线(ESB)调用这些服务、以及进行一定程度的集中管制(CG)以避免复杂程度难以控制这三点相关。

SOA、ESB和CG
SOA从世纪之交就已存在,它是一种处理web服务更为有效的方式。这些年来,许多不同的方面都在使用SOA。也就是说需要取决于特定情况下使用哪种定义的SOA,才能确定微服务相关的方法。

Oracle的技术网络经理Bob Rhubart这样总结SOA的关系:“就现状来讲,微服务并不是SOA的替代品,更像是随着SOA逐渐过于严格和整体单一化,为了保留灵活度而采用的一种方式。”随着大量服务开始向上扩展,趋势逐渐明显:快速直接的沟通成为噩梦。通常ESB将访问方法或接口与每个服务一一对应。如果要更新系统,比如公司出售,或者供应商的任务重新分配,这时所有开发者必须要更新ESB。

集中式和分散式管制的价值也是有争议的。高级工程师Martin Fowler和James Lewis根据开发社区的讨论总结:“集中式管制的后果之一就是出现标准单一技术平台的倾向。根据经验来讲,这种办法过于严苛——并非每个问题都是个钉子,可以用一个锤子(解决方案)来搞定。”然而,有时候使用集中管制的单一整体式架构仍然更有意义。
从单一整体式架构中获益的项目
尽管在看法、专业化和细微差异上仍有很大的商榷空间,不过有些指标确实能够表明何种架构更适合某种具体目标。例如,Stack Exchange的工程师VP David Fullerton这样描述单一整体式架构:这是个让人感到乏味的架构,却能造就令人兴奋的结果。他在纽约QCon的演讲中这样描述自己的单一整体式架构:“其规模很适合我们。我们每个月要处理40亿个请求,峰值达到3000个/秒;每天处理8亿个SQL查询,峰值达到8500个/秒。”

单一整体式架构在时间有限时,能提供非常清晰的路径,关键是要尽快建立并运行起来。如果整支团队已经集中在一起,并取得同步,就能更有效地协作,继续完成任务。部署很简单,扩展起来也相对简单。团队只需要在大量虚拟机或独立主机上通过负载平衡器运行多个副本。一般来讲,团队最终会构建出单一整体式架构的核心,然后通过微服务手段构建可扩展组件。

从微服务架构中获益的项目
关于是否使用微服务,有很多赞成的论调,不过行业分析师指出:无论是应用自身,还是团队磨合,都会有很严重的沟通问题。当然,微服务在文档、测试与解决不兼容问题的时间上肯定有着更高的阈值。

PayPal的CTO James Barrese表示:他们从单一整体式架构转到了微服务架构上,以便能在更短周期内更快地更新。

在新的移动、面向项目团队中,由于工作一般具有独立性、跨时区性、多平台性,因而整体进程安排起来更好一些。这种架构允许团队成员成为某个功能的专家,让应用更新的时间跨度越来越短。想要隔离并下线出现问题的组件非常简单。在企业层面上,公司无需再耗费昂贵的投资来组建特定的开发堆栈。

结论
微服务软件架构代表软件开发架构的未来趋势么?PwC显然是认可这一看法的,他们指出:
引用
诸如Netflix、Gilt、PayPal和Condé Nast这样的公司都是以网站可以容纳高吞吐量而著称。然而,尽管他们最近对系统做了大修大改,但那些老旧而更偏向单一整体式的架构无法再快速增加或修改原有功能了。因此,现在他们都在转用基于微服务的架构,采用更模块化、更松散耦合的方式。

不过事实上,单一整体式的结构并未灭亡,而且仍旧在快速原型法中扮演着最有效的角色,尽管到了生命周期后期,团队会逐渐转向微服务。但在切实可用的人工智能出现前,最好的办法就是结合两种架构,一起使用。

原文链接:Microservices vs. Monolithic Architecture(译者/Vera 责编/钱曙光)
  • 大小: 134.2 KB
  • 大小: 25.1 KB
  • 大小: 36.3 KB
2
0
评论 共 3 条 请登录后发表评论
3 楼 shuhen2011 2016-04-07 12:50
让我想起了Windows微内核与Linux宏内核之争
2 楼 clannadyue 2016-02-14 10:00
让我想起了以太。。。。。。哈哈,幻想中的绝对真理
1 楼 yacki 2016-02-11 15:00
抛开场景谈架构毫无意义。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 微服务中Dubbo和SpringCloud架构技术路线对比

    架构师可以根据公司的技术实力并结合项目的特点来选择某个合适的微服务架构平台,以此稳妥地实施项目的微服务化改造或开发进程。微服务架构是互联网很热门的话题,是互联网技术发展的必然结果。它提倡将单一应用程序...

  • 微服务架构与传统单体架构的优缺点

    2、单体架构所有的模块都共用一个数据库,存储方式比较单一,微服务每个模块都可以使用不同的存储方式(比如有的用redis,有的用mysql等),数据库也是单个模块对应自己的数据库。 3、单体架构所有的模块开发所使用...

  • 微服务Dubbo和SpringCloud架构设计、优劣 势⽐较

    只需要通过spring配置的⽅式即可完成服务化,对于应⽤⽆⼊侵。设计的⽬的还是服务于⾃身的业务为主。虽然阿⾥内部原因dubbo曾经⼀度暂停维护版本,但是框架本身的成熟度以及⽂档的完善程度,完全能满⾜各⼤互联⽹...

  • 微服务架构的优缺点

    微服务架构的优势 使用微服务架构能够为我们带来如下好处: 1)服务的独立部署 每个服务都是一个独立的项目,可以独立部署,不依赖于其他服务,耦合性低。 2)服务的快速启动 拆分之后服务启动的速度必然要比...

  • 微服务实践(一):微服务架构的优势与不足

    【编者的话】本文来自Nginx官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战。正如作者所说,微服务架构更适合用于构建复杂的应用,尽管它也有自己的不足。 ...

  • 微服务架构学习与思考(05):微服务架构适用场景分析

    微服务架构使用场景的分析,单体架构和微服务架构各方面的对比,看看你在选型微服务时候,最看中哪些要素,然后选择你需要的架构设计

  • 架构模式的演变之路:从单体架构到微服务架构

    谈到软件系统设计的方法论,在代码层面,有我们熟悉的23种设计模式(design pattern),对应到架构层面,则有所谓的架构模式(architecture pattern)。它们分别从微观和宏观的角度指导着我们设计出良好的软件系统,...

  • 服务架构演进-单体与微服务

    以下内容来自于日常学习总结(凤凰架构),记录成长之路 康威定律 设计系统的架构受制于产生这些设计...在与那些爱赶技术潮流却不顾需求现状的微服务吹捧者讨论架构问题一定要保持头脑清醒。 一般来说当软件性能需求

  • 面向微服务架构与传统架构、SOA对比,以及云化对比

    通过对面向微服务架构与传统架构、SOA的对比,以及云化的对比分析,微服务与SOA都是软件工程发展过程中的软件服务化体系,为云提供不同的技术解决方案,适应不同的应用场景。

  • 单体架构和微服务架构的优缺点

    单体架构:单体架构就是把所有的业务模块编写在一个项目中,最终会打包成一个war,然后进行部署运行 单体架构的优点: 1.由于是完整的

  • 软件架构模式之微服务架构

    1、微服务架构介绍 微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则。...

  • 高性能微服务架构设计模式

    本课程是对分布式微服务架构设计模式进行讲解,以亿级QPS的电商网站为例对常见的技术架构进行分析,从高性能,高可用的角度比较各种方案的优劣点,重点讲解使用CQRS模式怎么进行高性能的微服务架构设计,读者学习本...

  • 微服务系列(一):微服务架构的优势与不足

    微服务在当下引起广泛关注,成为文章、博客、社交媒体讨论和大会演讲的热点;...然而,无论是追捧还是质疑,微服务架构拥有巨大优势,尤其是它让敏捷开发和复杂的企业应用交付成为可能。 本系列...

  • 聊聊架构模式的变迁:从分层架构到微服务架构

    摘要:一般地,架构模式大致可以分成两类,单体架构(monolithic architecture)和分布式架构(distributed architecture)。 前言 谈到软件系统设计的方法论,在代码层面,有我们熟悉的23种设计模式(design ...

  • SpringCloud 与 SpringBoot 微服务 架构 | 面试题及答案详解

    1.什么是微服务? 2.微服务之间如何独立通讯的? 3.SpringCloud 和 Dubbo 有哪些区别? 4.SpringBoot 和 SpringCloud 之间关系? 5.什么是熔断?什么是服务降级? 6.微服务的优缺点是什么?说下你在项目中碰到的...

  • SOA与微服务

    文章目录SOA与微服务中心化实现去中心化实现微服务架构微服务的特征SOA架构和微服务架构的差别 SOA 全称(Service Oriented Architecture),中文意思为“面向服务的架构”。他是一种设计方法,其中包含多个服务,...

  • 微服务系列一:微服务的优势与劣势

    - 扩展的成本相对低于单体架构。 - 微服务是可独立管理的服务。它可以在需要时启用越来越多的服务,对现有服务的影响降至最低。 - 可以单独更改或升级每个服务,而不是在整个应用程序中升级。...

  • node-v16.12.0-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • 试用Dev Containers的示例项目-Go

    计算机技术是指评价计算机系统的各种知识和技能的总称。它涵盖了计算机硬件、软件、网络和信息安全等方面。计算机技术的发展使我们能够进行高效的数据处理、信息存储和传输。现代计算机技术包括操作系统、数据库管理、编程语言、算法设计等。同时,人工智能、云计算和大数据等新兴技术也在不断推动计算机技术的进步。计算机技术的应用广泛,涵盖了各个领域,如商业、医疗、教育和娱乐等。随着计算机技术的不断革新,我们可以更加高效地实现预期自动化、标准化

Global site tag (gtag.js) - Google Analytics