架构 技术优势 技术挑战 团队优势 团队挑战
单体

低延时

开发简单

没有重复的模型/验证

伸缩

由于代码库过大引起的复杂度

特性内沟通的开销低

失败的恐惧

特性间沟通的开销大

前端+后端

能够单独扩展前端和后端

将业务逻辑与表示分离

能够复用后端并构建多个前端

由于网络调用引起的复杂度

专业性

能够更快地迭代前端

通往面向服务架构的阶梯

沟通开销

知识壁垒

前后端开发互相阻塞

面向服务架构(SOA)

细粒度的伸缩性

隔离

封装

运维开销

延时

服务发现

跟踪/调试/日志记录

热点服务

API文档,客户端

集成测试

数据碎片

自治

自治程度的困境

重复工作的风险

微服务 与面向服务架构一样,只会更多

与面向服务架构一样,只会更多

隐性耦合的风险

由于有界上下文会产生更多的自治

意味着需要DevOps

需要一个平台团队

需要思维方式的重要切换

一、单体

好处:

  1. 如果数据库查询已经进行了不错的优化,网站应该相当快。
  2. 开发相对简单,因为开发人员无需担心与调用远程API相关的各种挑战。

缺点:

  1. 只能通过部署整个应用程序的多个副本来扩展应用程序处理负载的能力

二、前后端分离

好处:

  1. 通过将业务逻辑(应用程序的内核)与表示层分离,代码应该更容易理解,应用程序更易于变更。这两个服务在概念上(和物理上)通过API隔离了,因此只要接口不变,任何一方都可以自由地进行内部更改。
  2. 用后端暴露API的另一个好处是它可以供多个前端使用。
  3. 独立地开发前后端意味着每个服务的开发都可以按照自己的步调进行。

缺点:

  1. 团队之间的某些阻塞几乎是不可避免的。

三、面向服务

优点:

  1. 强调独立性的面向服务架构,服务必须解耦,以便可以随时部署新的版本,而不会影响任何其他服务。

特点:

  1. 运维开销:一个面向服务架构可能包括数十个甚至数百个服务,以及各种数据存储和消息队列,所有这些都需要进行配置、部署、监控和维护。
  2. 延迟:在面向服务架构中,一个用户请求可能导致数十个服务间API调用。这可能包括链式调用,即服务A调用服务B,服务B调用服务C,等等。如果没有仔细的应用程序设计,这些请求的延迟会快速叠加,最终导致很延迟的用户体验。
  3. 服务发现:有几十种不同的服务,每种服务都有多个实例运行,因此需要一种容易的方法来找到它们想要通信的那个服务。
  4. 跟踪,调试,日志记录:当应用程序出现问题时,想要弄清楚问题所在是相当困难的。
  5. 热点服务:可能存在一些服务,几乎所有其他服务都依赖于它们。用户认证/身份服务是常见的例子。服务A被传递一个用户ID,使用认证服务来查找用户,执行一些处理,然后将用户ID传递给服务B,服务B也与认证服务联系,等等。这些热点服务最终可能接收大量的流量,因此可能成为单点故障和扩展的瓶颈。
  6. API文档和客户端:通过这么多的服务将API彼此暴露,团队将花费大量时间为这些API编写文档和客户端。它们需要保持最新,以保证有用。
  7. 集成测试:检查所有服务之间能否正确交互,以及应用程序能否作为一个整体运行,可能非常困难。
  8. 数据碎片:面向服务架构可能有许多小的数据库,这会使报表和数据分析变得很困难,因为你需要从多个数据库获取数据,将其压缩为通用格式,并将它们连接在一起。
  9. 平台团队应为所有团队编写一个通用库以供所有团队使用。

参考文献:人民邮电出版社《遗留系统重建实战》

Web应用程序架构的比较的更多相关文章

  1. 利用memcached构建高性能的Web应用程序(转载)

    面临的问题 对于高并发高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题.特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰 值已经达到500的时候,那你的程序运行离崩溃的边 ...

  2. B/S架构 Web打印程序(Argox)

    B/S架构 Web打印程序 对于B/S架构下的管理软件系统,在客户端浏览器页面中如何透过本地打印机或网络打印机打印条码标签,Argox提供最常用的2种类型打印机集成方案. ●  PPLA 打印机IE游 ...

  3. 黑客攻防技术宝典web实战篇:攻击应用程序架构习题

    猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 假设受攻击的应用程序使用两台不同的服务器:一台应用程序服务器和一台数据库服务器.已经发现一 ...

  4. 使用MVC 5、Web API 2、KnockoutJS、Ninject和NUnit开发、架构和测试Web应用程序

    做一名微软软件开发人员就像在国际煎饼屋订早餐一样.每道菜都有一堆煎饼,你必须从各种各样的煎饼和糖浆口味中选择.对于web应用程序,解决方案堆栈是一组软件子系统或组件,用于交付功能完整的解决方案(无论是 ...

  5. vs2012 发布web应用程序

    Visual Studio 2012 Visual Studio Express 2012 for Web 与 的Visual Studio 2010  Visual Studio Web发布更新 与 ...

  6. 转: GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean

    十年前,Martin Fowler撰写了 GUI Architectures 一文,至今被奉为经典.本文所谈的所谓架构二字,核心即是对于对于富客户端的 代码组织/职责划分 .纵览这十年内的架构模式变迁 ...

  7. 基于EasyUI的Web应用程序及过去一年的总结

    前言 在这家公司服务了一年时间,一个多月之前已经提交了离职申请,好在领导都已经批准了,过几天就办理手续了,在此感谢领导的栽培与挽留,感谢各位同事在工作中的给我的帮助,感谢师傅(在我心中当他是我师傅,跟 ...

  8. 目前在做的一个web应用程序的前端选型

    最近进入了一个新的项目组,要新起一个项目.这个Web项目是一个企业内部使用的系统,主要用来记录.追踪.管理潜在客户的数据.该系统有以下特点: 需要支持IE10及以上版本: 后端采用micro serv ...

  9. fir.im Weekly - iOS/Android 应用程序架构解析

    假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 本期 fir.im Weekly 收集了关于  iOS/Android 开发资源,也加入了一些关于 Web 前端方面的分 ...

随机推荐

  1. [物理学与PDEs]第2章第2节 粘性流体力学方程组 2.4 粘性热传导流体动力学方程组

    粘性热传导流体动力学方程组: $$\beex \bea \cfrac{\p \rho}{\p t}+\Div(\rho{\bf u})&=0,\\ \rho \cfrac{\rd {\bf u ...

  2. C# 正则表达式贪婪模式案例

    案例一. 如 "acbacb"  正则  "a.*?b" 只会取到第一个"acb" 原本可以全部取到但加了限定符后,只会匹配尽可能少的字符 ...

  3. hibernate之Session对象

    Session对象:数据库的核心对象 增删改查 ...java public class UserDao { public void addUser(User user) { //使用hibernat ...

  4. slot

    本文涉及的slot有:<slot>,v-slot吗,vm.$slots,vm.$scopedSlots 废弃的使用特性:slot,slot-scope,scope(使用v-slot,2.6 ...

  5. PGCD2 - Primes in GCD Table (Hard)

    这题肝了三四天,其他啥也没做... 传送门 然后...双倍经验 简单版 不知道为什么会脑抽去帮 LZ_101 大佬验题... 题目和被 A 穿的 PGCD 一样,数据范围变成大概 2e11 ... 于 ...

  6. 【easy】104. Maximum Depth of Binary Tree 求二叉树的最大深度

    求二叉树的最大深度 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; ...

  7. 【原创】大叔经验分享(21)yarn中查看每个应用实时占用的内存和cpu资源

    在yarn中的application详情页面 http://resourcemanager/cluster/app/$applicationId 或者通过application命令 yarn appl ...

  8. Ubuntu18.04更换国内源(阿里,网易,中科大,清华等源)

    1.备份 备份/etc/apt/sources.list文件 mv /etc/apt/sources.list /etc/apt/sourses.list.backup 2.新建 新建/etc/apt ...

  9. activiti工作流笔记

    什么是activiti? Activiti是一个身经百战的业务流程管理引擎, 并且还是一个流程平台 为什么要用工作流引擎? 简单来说,就是为了统一管理流程业务. 想想看,如果要设计一个流程的程序,通常 ...

  10. Java——super 与 this 关键字

    super 与 this 关键字 super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类. this关键字:指向自己的引用. package ti; public ...