Web应用程序架构的比较
| 架构 | 技术优势 | 技术挑战 | 团队优势 | 团队挑战 |
| 单体 |
低延时 开发简单 没有重复的模型/验证 |
伸缩 由于代码库过大引起的复杂度 |
特性内沟通的开销低 |
失败的恐惧 特性间沟通的开销大 |
| 前端+后端 |
能够单独扩展前端和后端 将业务逻辑与表示分离 能够复用后端并构建多个前端 |
由于网络调用引起的复杂度 |
专业性 能够更快地迭代前端 通往面向服务架构的阶梯 |
沟通开销 知识壁垒 前后端开发互相阻塞 |
| 面向服务架构(SOA) |
细粒度的伸缩性 隔离 封装 |
运维开销 延时 服务发现 跟踪/调试/日志记录 热点服务 API文档,客户端 集成测试 数据碎片 |
自治 |
自治程度的困境 重复工作的风险 |
| 微服务 | 与面向服务架构一样,只会更多 |
与面向服务架构一样,只会更多 隐性耦合的风险 |
由于有界上下文会产生更多的自治 |
意味着需要DevOps 需要一个平台团队 需要思维方式的重要切换 |
一、单体
好处:
- 如果数据库查询已经进行了不错的优化,网站应该相当快。
- 开发相对简单,因为开发人员无需担心与调用远程API相关的各种挑战。
缺点:
- 只能通过部署整个应用程序的多个副本来扩展应用程序处理负载的能力
二、前后端分离
好处:
- 通过将业务逻辑(应用程序的内核)与表示层分离,代码应该更容易理解,应用程序更易于变更。这两个服务在概念上(和物理上)通过API隔离了,因此只要接口不变,任何一方都可以自由地进行内部更改。
- 用后端暴露API的另一个好处是它可以供多个前端使用。
- 独立地开发前后端意味着每个服务的开发都可以按照自己的步调进行。
缺点:
- 团队之间的某些阻塞几乎是不可避免的。
三、面向服务
优点:
- 强调独立性的面向服务架构,服务必须解耦,以便可以随时部署新的版本,而不会影响任何其他服务。
特点:
- 运维开销:一个面向服务架构可能包括数十个甚至数百个服务,以及各种数据存储和消息队列,所有这些都需要进行配置、部署、监控和维护。
- 延迟:在面向服务架构中,一个用户请求可能导致数十个服务间API调用。这可能包括链式调用,即服务A调用服务B,服务B调用服务C,等等。如果没有仔细的应用程序设计,这些请求的延迟会快速叠加,最终导致很延迟的用户体验。
- 服务发现:有几十种不同的服务,每种服务都有多个实例运行,因此需要一种容易的方法来找到它们想要通信的那个服务。
- 跟踪,调试,日志记录:当应用程序出现问题时,想要弄清楚问题所在是相当困难的。
- 热点服务:可能存在一些服务,几乎所有其他服务都依赖于它们。用户认证/身份服务是常见的例子。服务A被传递一个用户ID,使用认证服务来查找用户,执行一些处理,然后将用户ID传递给服务B,服务B也与认证服务联系,等等。这些热点服务最终可能接收大量的流量,因此可能成为单点故障和扩展的瓶颈。
- API文档和客户端:通过这么多的服务将API彼此暴露,团队将花费大量时间为这些API编写文档和客户端。它们需要保持最新,以保证有用。
- 集成测试:检查所有服务之间能否正确交互,以及应用程序能否作为一个整体运行,可能非常困难。
- 数据碎片:面向服务架构可能有许多小的数据库,这会使报表和数据分析变得很困难,因为你需要从多个数据库获取数据,将其压缩为通用格式,并将它们连接在一起。
- 平台团队应为所有团队编写一个通用库以供所有团队使用。
参考文献:人民邮电出版社《遗留系统重建实战》
Web应用程序架构的比较的更多相关文章
- 利用memcached构建高性能的Web应用程序(转载)
面临的问题 对于高并发高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题.特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰 值已经达到500的时候,那你的程序运行离崩溃的边 ...
- B/S架构 Web打印程序(Argox)
B/S架构 Web打印程序 对于B/S架构下的管理软件系统,在客户端浏览器页面中如何透过本地打印机或网络打印机打印条码标签,Argox提供最常用的2种类型打印机集成方案. ● PPLA 打印机IE游 ...
- 黑客攻防技术宝典web实战篇:攻击应用程序架构习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 假设受攻击的应用程序使用两台不同的服务器:一台应用程序服务器和一台数据库服务器.已经发现一 ...
- 使用MVC 5、Web API 2、KnockoutJS、Ninject和NUnit开发、架构和测试Web应用程序
做一名微软软件开发人员就像在国际煎饼屋订早餐一样.每道菜都有一堆煎饼,你必须从各种各样的煎饼和糖浆口味中选择.对于web应用程序,解决方案堆栈是一组软件子系统或组件,用于交付功能完整的解决方案(无论是 ...
- vs2012 发布web应用程序
Visual Studio 2012 Visual Studio Express 2012 for Web 与 的Visual Studio 2010 Visual Studio Web发布更新 与 ...
- 转: GUI应用程序架构的十年变迁:MVC,MVP,MVVM,Unidirectional,Clean
十年前,Martin Fowler撰写了 GUI Architectures 一文,至今被奉为经典.本文所谈的所谓架构二字,核心即是对于对于富客户端的 代码组织/职责划分 .纵览这十年内的架构模式变迁 ...
- 基于EasyUI的Web应用程序及过去一年的总结
前言 在这家公司服务了一年时间,一个多月之前已经提交了离职申请,好在领导都已经批准了,过几天就办理手续了,在此感谢领导的栽培与挽留,感谢各位同事在工作中的给我的帮助,感谢师傅(在我心中当他是我师傅,跟 ...
- 目前在做的一个web应用程序的前端选型
最近进入了一个新的项目组,要新起一个项目.这个Web项目是一个企业内部使用的系统,主要用来记录.追踪.管理潜在客户的数据.该系统有以下特点: 需要支持IE10及以上版本: 后端采用micro serv ...
- fir.im Weekly - iOS/Android 应用程序架构解析
假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 本期 fir.im Weekly 收集了关于 iOS/Android 开发资源,也加入了一些关于 Web 前端方面的分 ...
随机推荐
- 四十九、进程间通信——System V IPC 之消息队列
49.1 System V IPC 介绍 49.1.1 System V IPC 概述 UNIX 系统存在信号.管道和命名管道等基本进程间通讯机制 System V 引入了三种高级进程间通信机制 消息 ...
- MySQL学习7 - 外键的变种 三种关系
一 介绍 二 如何找两张表之间的关系 三 表的三种关系 1.书和出版社 2.作者和书籍的关系 3.用户和博客 本节的重点 如何找出两张表之间的关系 表的三种关系 一 介绍 因为有foreign key ...
- android SDK模拟器环境搭建
一.下载安装android SDK 两种方式: (1)官网下载(需FQ):https://developer.android.com/studio/index.html (2)无需FQ下载:http: ...
- Jedis
需要把jedis依赖的jar包添加到工程中 连接单机版 // 第一步:创建一个Jedis对象.需要指定服务端的ip及端口. Jedis jedis = new Jedis("192.168. ...
- redis 资料
redis是什么: Redis is an open source, BSD licensed, advanced key-value store. It is often referred to a ...
- Jquyer相册
点击图片然后弹出相册列表,效果如下: html代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml&q ...
- 调用脚本的方式自动的创建或者是更新oracle数据库自带的Seq序列号的值
执行脚本: CREATE OR REPLACE PACKAGE PKG_QUERY IS -- Author : ADMINISTRATOR -- Created : 2016/12/8 星期四 10 ...
- matplotlib学习笔记
1.简介 matplotlib是python的一个2D绘图库,它可以在不同平台上地使用多种通用的绘图格式(hardcopy formats)和交互环境绘制出出版物质量级别的图片.matplotlib可 ...
- SqlServer数据库重命名报错误:5030
无法重命名 KLENN 无法用排他锁锁定该数据库,以执行该操作(错误:5030) 解决办法: 将数据库设置为单用户模式 (单用户模式指定一次只有一个用户可访问数据库,该模式通常用于维护操作. ) 1. ...
- 金蝶KIS&K3助记码SQL数据库批量刷新
金蝶KIS&K3助记码SQL数据库批量刷新 用的次数不多,就没有写入存储过程或者触发里面了,可以自行实现. 第一步选择对应账套的数据库,执行下面的命令,这个是一个函数. go if exist ...