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 前端方面的分 ...
随机推荐
- IScroll某些手机下不触发ScrollEnd问题处理
同样是微信7.0,看起来内核都是x5内核,两款不同的手机,一个有问题,一个没有问题. IScroll在问题手机下会出现快速拨动时候不触发ScrollEnd事件现象,轻点一次才会触发,解决办法 docu ...
- 练习:javascript轮播图效果
javascript轮播自动播放切换滑过停止,上一页/下一页 <!DOCTYPE html> <html lang="en"> <head> & ...
- 高性能JS(读书札记)
第一章:加载和执行 1.1脚本位置 将js脚本放在body底部 1.2组织脚本 文件合并,减少http请求(打包工具) 1.3无阻塞的脚本 js倾向于阻止浏览器的某些处理过程,如http请求和用户界面 ...
- linux下堆溢出unlink的一个简单例子及利用
最近认真学习了下linux下堆的管理及堆溢出利用,做下笔记:作者作为初学者,如果有什么写的不对的地方而您又碰巧看到,欢迎指正. 本文用到的例子下载链接https://github.com/ctfs/w ...
- WPF学习:3.Border & Brush
上一章<WPF学习:2.Layout-Panels-Countainers>主要介绍了布局,容器和面板.这一章主要开始介绍Border(边界)和Brush(画刷). 代码地址:http:/ ...
- vue-地址插件 v-region
demo地址:https://terryz.gitee.io/vue/#/region/demo
- vue-风格指南
https://cn.vuejs.org/v2/style-guide/
- 创建免费的证书,实现网站HTTPS
使用Certbot来实现HTTPS,这边也就考虑采用Cerbot来实现下 配置Certbot 证书 Certbot 的官方网站是 https://certbot.eff.org/ ,打开官网选择的 w ...
- 20165328 实验四《Andriid应用开发》实验报告
一.实验一:Andriod Stuidio的安装测试: 实验要求: 参考 ...
- Reveal.js一个用来做WEB演示文稿的框架
reveal.js是一个能够帮助我们很轻易地使用HTML来创建漂亮的演示效果,也就是我们常见的PPT幻灯片.reveal.js不依赖其他任何javascript库,是一个独立的javascript插件 ...