nodejs微服务:单体架构与微服务架构
单体架构
- 单体架构在中小企业内部用的是非常多的,就是完整独立的web服务
- 当业务不复杂,团队规模不大的时候,单体架构比微服务架构具有更高的生产率
1 ) 单体架构的程序部署在单台服务器
- 这种架构是目前中小企业用的最多的架构
- 其中web服务(nginx)、网站程序、静态资源(图片)、数据库(Mysql、Redis)都在一台服务器上面
- 如果每天网站的访问IP在5万以下这种架构完全可以应付(注意,这个与服务器配置也有关系)
2 ) 单体架构的程序部署在多台服务器(负载均衡)
- 把我们的程序部署到多态服务器上面,然后通过nginx配置负载均衡,当客户访问我们的项目的时候
- 随机的分配给不同的服务器处理响应,这样可以防止宕机,提升系统运行稳定性
3 ) 单体架构的程序部署在多台服务器(负载均衡+主从数据库)
- 这样的架构能轻松的应对每天几百万、上千万的访问量
- 当每天有上亿访问量,或者更高并发量的时候,上面的方法就有点力不存心了
- 这个时候我们就可以使用微服务架构
微服务架构
- 微服务架构是一种具体的设计实现或者设计方案,是将复杂的系统使用组件化的方式进行拆分,并使用轻量级通讯方式进行整合的一种设计方法
- 通俗的讲就是把单体架构项目抽离成多个项目(服务),部署到多台服务器
- 微服务架构定义的精髓,可以用一句话来描述,那就是“分而治之,合而用之”
- 将复杂的系统进行拆分的方法,就是“分而治之”,分而治之,可以让复杂的事情变的简单
- 使用轻量级通讯等方式进行整合的设计,就是“合而用之”的方法,合而用之可以让微小的力量变得强大
- 微服务架构是将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中
- 服务间通信采用的轻量级通信机制(通常用HTTP资源API),这些服务围绕业务能力构建并且可通过全自动部署机制独立部署
- 这些服务公用一个最小型的集中式的管理,服务可用不同的语言进行开发,使用不同的数据储存技术
- 如果用“茶壶煮饺子”来打比方的话,原来我们是在一个茶壶里煮很多个饺子
- 现在(微服务化之后)则基本上是在一个茶壶煮一个饺子,而这些饺子就是服务的功能
- 茶壶则是将这些服务功能打包交付的服务单元
consul服务注册集群
微服务
微服务是微服务架构具体的实现方案,是通过微服务架构设计方法拆分出来的一个独立的组件化的小应用
微服务架构和单体式架构区别
1 ) 单体式架构服务
优点
- 1、部署简单
- 由于是完整的结构体,可以直接部署在一个服务器上即可
- 2、技术单一
- 项目不需要复杂的技术栈,往往一套熟悉的技术栈就可以完成开发
- 3、用人成本低
- 单个程序员可以完成业务接口到数据库的整个流程
- 4、项目管理相对较易
- 5、测试相对简单直观
- 6、应用开发相对简单
- 7、横向扩展容易
- 1、部署简单
缺点
- 1、系统启动慢
- 一个进程包含了所有的业务逻辑
- 涉及到的启动模块过多,导致系统的启动,重启周期变长
- 2、系统错误隔离性差,可用性差
- 任何一个模块的错误可能导致整个系统的宕机;
- 3、可伸缩性差
- 系统的扩容只能对整个应用扩容,不能做到对整个功能点进行扩容
- 4、线上问题修复时间长
- 任何一个线上问题修复需要对整个应用系统进行全面升级
- 5、交付周期长
- (需求->设计->开发->测试->现场实施部署,就传统性质的企业而言)
- 1、系统启动慢
2 ) 微服务
优点
- 1、易于开发和维护
- 一个服务只关注一个特定的业务功能,所以它业务清晰,代码量少
- 开发和维护单个微服务相当简单。而整个应用是若干个微服务构建而成的,所以整个应用在被维持在一个可控的状态
- 2、单个服务启动快
- 单个服务代码量少,所以启动快
- 3、局部修改易部
- 单个应用只要有修改,就得重新部署整个应用,微服务解决了这个问题
- 一般来说,对某个微服务进行修改,只需要重新部署这个服务即可
- 4、技术栈不受限
- 在微服务架构中,可以结合业务和团队的特点,合理选用技术栈
- 例如有些服务可以使用关系型数据库Mysql,有的服务可以使用非关系型数据库redis
- 甚至可根据需求,部分服务使用JAVA开发,部分微服务使用Node.js开发
- 5、按需收缩
- 可根据需求,实现细粒度的扩展
- 例如,系统中的某个微服务遇到了瓶颈,可以结合微服务的特点,增加内存,升级CPU或增加节点
- 1、易于开发和维护
缺点
- 1、运维成本高
- 2、分部式复杂度高
- 3、接口成本高
- 4、重复性劳动
- 5、业务分离困难
单体架构和微服务架构技术选型对比
对比点 | 单体架构 | 微服务架构 | 结论 |
---|---|---|---|
上手难度 | 数据库共享或本地程序调用 | API 接口调用 | 单体架构胜 |
开发效率 | 早期工作量小,随着项目规模和时间的推移,效率大幅度下降 | 早期设计和沟通的工作量加大,随着项目规模和时间的推移,效率变化不大 | 对于简单项目,单体架构胜;对于复杂项目,微服务架构胜 |
系统设计(高内聚低耦合) | 以包的形式对代码进行模块划分,控制得当即可实现高内聚。但最终都是在数据层面将整个系统耦合在一起 | 每个业务单独包装成一个微服务,数据和代码都从物理上隔离开来,实现高内聚低耦合相对容易 | 微服务架构胜 |
系统设计(扩展性) | 在现有系统上修改,与现存业务逻辑高度耦合 | 独立开发新模块,通过 API 与现有模块交互 | 微服务架构胜 |
需求变更响应速度 | 需要了解整个系统才可以正确修改,容易导致不相关模块的意外失败 | 各个微服务组件独立变更,容易实施敏捷开发方法 | 微服务架构胜 |
系统升级效率 | 需要了解整个系统才可以正确修改,容易导致不相关模块的意外失败 | 各个微服务组件独立升级,上手和开发效率高,影响面小 | 微服务架构胜 |
运维效率 | 简单直接 | 大系统被拆分为多个小系统,部署和运维难度加大,但可以利用 DevOps 等方式将运维工作自动化 | 单体架构胜 |
代码复用性 | 一般以共享库的形式复用后台代码 | 微服务组件可以在新项目中直接复用,包括前端页面 | 微服务架构胜 |
硬件需求 | 整个系统只需要一个运行容器,为整个系统分配资源 | 按需为不同业务模块伸缩资源节点,一个系统需部署多个微服务,需要启动多个运行容器 | 对于简单项目,单体架构胜;对于复杂项目,微服务架构胜 |
项目成本 | 项目早期成本低,后期成本大 | 项目早期和后期,成本变化曲线平缓 | 对于简单项目,单体架构胜;对于复杂项目,微服务架构胜 |
非功能需求 | 为整个系统调优,牵一发而动全身 | 为单独的微服务按需调优,甚至更换实现方式和程序语言 | 微服务架构胜 |
职责、成就感 | 职责不明确,容易产生扯皮行为 | 拥有明确的职责划分,主人翁意识和成就感加强,容易形成自组织型团队 | 微服务架构胜 |
风险 | 系统是一个整体,一荣俱荣,一损俱损 | 大系统被拆分为小系统,风险可被控制在小系统内,但也引入了各小系统之间的交互风险 | 微服务架构胜 |
- 总结
- 1、如果公司没有运维建议使用单体架构 (小公司)
- 2、如果项目并发量不大建议使用单体架构 (一天只有几万的访问量)
- 3、如果项目比较简单建议用单体架构 (小项目)
- 4、如果项目并发量非常大建议使用微服务架构或者serverless架构
- 5、如果项目需求经常变化,公司经常要开展线上活动建议使用微服务架构
nodejs微服务:单体架构与微服务架构相关推荐
- 系统由单体架构到微服务架构到底是如何演进的?
随着互联网的发展,互联网企业的业务也在不断的飞速发展,进而导致系统的架构也在不断的发生着变化.总体来说,系统的架构大致经历了:单体应用架构->垂直应用架构->分布式架构->SOA架构 ...
- 一文了解四种软件架构:Serverless架构、微服务架构、分布式架构、单体架构
如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存.晋升空间.这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面. 一.单体架构 单体架构 ...
- 架构之:微服务和单体服务之争
文章目录 简介 先单体再微服务 直接从微服务开始 总结 简介 微服务和单体服务的各自好处之前的文章中已经讲的很明白了.本篇文章不是探讨到底应该用哪种服务架构.而是假设项目最终会采用微服务架构,那么就会 ...
- 华为架构师8年经验谈:从单体架构到微服务的服务化演进之路
本次分享的技术大纲如下: 传统应用开发面临的挑战 服务化实践 服务化不是银弹 服务化架构的演进方向 一 .传统应用开发面临的挑战 挑战1-- 研发成本高 主要体现在如下几个方面: 代码重复率高 在实际 ...
- 漫谈单体架构与微服务架构(上):单体架构
最近微服务架构特别火爆,就跟人工智能.区块链一样,软件架构设计如果不提微服务,感觉就像是与世界先进的架构风格和开发技术脱了节似的,各方各面都无法彰显高大上的气质. 本来再打算使用一套系列文章来讨论微服 ...
- java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...
原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...
- 系统架构设计师 - 单体架构、SOA架构、微服务架构
文章目录 横向对比 SOA 设计原则 主要技术 UDDI 统一描述发现集成 SOAP 简单对象访问协议 WSDL web服务描述语言 BPEL 业务过程执行语言 REST 表述性状态转移 实现方法 W ...
- 网易考拉的服务架构如何从单体应用走向微服务化? | 技术头条
网易考拉(以下简称考拉)是网易旗下以跨境业务为主的综合型电商,自2015年1月9日上线公测后,业务保持了高速增长,这背后离不开其技术团队的支撑.微服务化是电商IT架构演化的必然趋势,网易考拉的服务架构 ...
- 单体应用架构和微服务架构的区别
一.单体应用架构概念 一个归档包(可以是JAR.WAR.EAR或其它归档格式)包含所有功能的应用程序,通常称为单体应用. 而架构单体应用的方法论,就是单体应用架构. 二.单体架构示意图 三 ...
最新文章
- HarmonyOS系统概述
- 大数据分析中使用关系型数据库的关键点
- 情境感知技术是什么?
- 抽象工厂模式(Absraact Factory)介绍与实现
- hibernate事务详解
- c+命名空间_了解C ++中的命名空间
- VS2010中文版莫名的错误
- linux awk 打印最后一列,使用awk打印从第n个到最后一个的所有列
- Yonex 各系列球拍指数
- 本科三本的计算机博士,读书中的我 从三本本科到985博士
- java里面不等于怎么打_不等于在c语言中怎么打
- devexpress html编辑器,图解DevExpress RichEditControl富文本的使用,附源码及官方API
- 利用python,求解数独
- 什么是哈希洪水攻击(Hash-Flooding Attack)?
- **薛定谔名著《生命是什么》体会**
- ansible的介绍与安装
- 技术分享连载(八十八)
- 罗斯蒙特流量计应用领域
- AH名片簿客户通讯录管理软件3.78
- php计算器_,php计算器
热门文章
- flowable创建processEngine的流程
- hadoop2.7x高可用部署方案(+zookeeper)
- TMMI_测试过程改进框架
- Sql Server 中char、nchar、varchar、nvarchar这几种数据类型的区别
- vue 树结构 的 穿梭框
- 代码随想录 一刷总结(完结)
- 基于微信小程序的房屋租赁系统
- 【ChatGPT工具篇-1】ChatGPT + MindShow 分分钟搞定PPT制作
- 【读书笔记】工作技巧-科学笔记,如何有效阅读一本书:超实用笔记读书法(日本.奥野宣之)_20190608
- 小米:从顺势而为到逆势而上