单体架构

  • 单体架构在中小企业内部用的是非常多的,就是完整独立的web服务
  • 当业务不复杂,团队规模不大的时候,单体架构比微服务架构具有更高的生产率

1 ) 单体架构的程序部署在单台服务器

  • 这种架构是目前中小企业用的最多的架构
  • 其中web服务(nginx)、网站程序、静态资源(图片)、数据库(Mysql、Redis)都在一台服务器上面
  • 如果每天网站的访问IP在5万以下这种架构完全可以应付(注意,这个与服务器配置也有关系)

2 ) 单体架构的程序部署在多台服务器(负载均衡)

  • 把我们的程序部署到多态服务器上面,然后通过nginx配置负载均衡,当客户访问我们的项目的时候
  • 随机的分配给不同的服务器处理响应,这样可以防止宕机,提升系统运行稳定性

3 ) 单体架构的程序部署在多台服务器(负载均衡+主从数据库)

  • 这样的架构能轻松的应对每天几百万、上千万的访问量
  • 当每天有上亿访问量,或者更高并发量的时候,上面的方法就有点力不存心了
  • 这个时候我们就可以使用微服务架构

微服务架构

  • 微服务架构是一种具体的设计实现或者设计方案,是将复杂的系统使用组件化的方式进行拆分,并使用轻量级通讯方式进行整合的一种设计方法
  • 通俗的讲就是把单体架构项目抽离成多个项目(服务),部署到多台服务器
  • 微服务架构定义的精髓,可以用一句话来描述,那就是“分而治之,合而用之”
  • 将复杂的系统进行拆分的方法,就是“分而治之”,分而治之,可以让复杂的事情变的简单
  • 使用轻量级通讯等方式进行整合的设计,就是“合而用之”的方法,合而用之可以让微小的力量变得强大
  • 微服务架构是将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中
  • 服务间通信采用的轻量级通信机制(通常用HTTP资源API),这些服务围绕业务能力构建并且可通过全自动部署机制独立部署
  • 这些服务公用一个最小型的集中式的管理,服务可用不同的语言进行开发,使用不同的数据储存技术
  • 如果用“茶壶煮饺子”来打比方的话,原来我们是在一个茶壶里煮很多个饺子
  • 现在(微服务化之后)则基本上是在一个茶壶煮一个饺子,而这些饺子就是服务的功能
  • 茶壶则是将这些服务功能打包交付的服务单元

consul服务注册集群

微服务

微服务是微服务架构具体的实现方案,是通过微服务架构设计方法拆分出来的一个独立的组件化的小应用

微服务架构和单体式架构区别

1 ) 单体式架构服务

  • 优点

    • 1、部署简单

      • 由于是完整的结构体,可以直接部署在一个服务器上即可
    • 2、技术单一
      • 项目不需要复杂的技术栈,往往一套熟悉的技术栈就可以完成开发
    • 3、用人成本低
      • 单个程序员可以完成业务接口到数据库的整个流程
    • 4、项目管理相对较易
    • 5、测试相对简单直观
    • 6、应用开发相对简单
    • 7、横向扩展容易
  • 缺点

    • 1、系统启动慢

      • 一个进程包含了所有的业务逻辑
      • 涉及到的启动模块过多,导致系统的启动,重启周期变长
    • 2、系统错误隔离性差,可用性差
      • 任何一个模块的错误可能导致整个系统的宕机;
    • 3、可伸缩性差
      • 系统的扩容只能对整个应用扩容,不能做到对整个功能点进行扩容
    • 4、线上问题修复时间长
      • 任何一个线上问题修复需要对整个应用系统进行全面升级
    • 5、交付周期长
      • (需求->设计->开发->测试->现场实施部署,就传统性质的企业而言)

2 ) 微服务

  • 优点

    • 1、易于开发和维护

      • 一个服务只关注一个特定的业务功能,所以它业务清晰,代码量少
      • 开发和维护单个微服务相当简单。而整个应用是若干个微服务构建而成的,所以整个应用在被维持在一个可控的状态
    • 2、单个服务启动快
      • 单个服务代码量少,所以启动快
    • 3、局部修改易部
      • 单个应用只要有修改,就得重新部署整个应用,微服务解决了这个问题
      • 一般来说,对某个微服务进行修改,只需要重新部署这个服务即可
    • 4、技术栈不受限
      • 在微服务架构中,可以结合业务和团队的特点,合理选用技术栈
      • 例如有些服务可以使用关系型数据库Mysql,有的服务可以使用非关系型数据库redis
      • 甚至可根据需求,部分服务使用JAVA开发,部分微服务使用Node.js开发
    • 5、按需收缩
      • 可根据需求,实现细粒度的扩展
      • 例如,系统中的某个微服务遇到了瓶颈,可以结合微服务的特点,增加内存,升级CPU或增加节点
  • 缺点

    • 1、运维成本高
    • 2、分部式复杂度高
    • 3、接口成本高
    • 4、重复性劳动
    • 5、业务分离困难

单体架构和微服务架构技术选型对比

对比点 单体架构 微服务架构 结论
上手难度 数据库共享或本地程序调用 API 接口调用 单体架构胜
开发效率 早期工作量小,随着项目规模和时间的推移,效率大幅度下降 早期设计和沟通的工作量加大,随着项目规模和时间的推移,效率变化不大 对于简单项目,单体架构胜;对于复杂项目,微服务架构胜
系统设计(高内聚低耦合) 以包的形式对代码进行模块划分,控制得当即可实现高内聚。但最终都是在数据层面将整个系统耦合在一起 每个业务单独包装成一个微服务,数据和代码都从物理上隔离开来,实现高内聚低耦合相对容易 微服务架构胜
系统设计(扩展性) 在现有系统上修改,与现存业务逻辑高度耦合 独立开发新模块,通过 API 与现有模块交互 微服务架构胜
需求变更响应速度 需要了解整个系统才可以正确修改,容易导致不相关模块的意外失败 各个微服务组件独立变更,容易实施敏捷开发方法 微服务架构胜
系统升级效率 需要了解整个系统才可以正确修改,容易导致不相关模块的意外失败 各个微服务组件独立升级,上手和开发效率高,影响面小 微服务架构胜
运维效率 简单直接 大系统被拆分为多个小系统,部署和运维难度加大,但可以利用 DevOps 等方式将运维工作自动化 单体架构胜
代码复用性 一般以共享库的形式复用后台代码 微服务组件可以在新项目中直接复用,包括前端页面 微服务架构胜
硬件需求 整个系统只需要一个运行容器,为整个系统分配资源 按需为不同业务模块伸缩资源节点,一个系统需部署多个微服务,需要启动多个运行容器 对于简单项目,单体架构胜;对于复杂项目,微服务架构胜
项目成本 项目早期成本低,后期成本大 项目早期和后期,成本变化曲线平缓 对于简单项目,单体架构胜;对于复杂项目,微服务架构胜
非功能需求 为整个系统调优,牵一发而动全身 为单独的微服务按需调优,甚至更换实现方式和程序语言 微服务架构胜
职责、成就感 职责不明确,容易产生扯皮行为 拥有明确的职责划分,主人翁意识和成就感加强,容易形成自组织型团队 微服务架构胜
风险 系统是一个整体,一荣俱荣,一损俱损 大系统被拆分为小系统,风险可被控制在小系统内,但也引入了各小系统之间的交互风险 微服务架构胜
  • 总结

    • 1、如果公司没有运维建议使用单体架构 (小公司)
    • 2、如果项目并发量不大建议使用单体架构 (一天只有几万的访问量)
    • 3、如果项目比较简单建议用单体架构 (小项目)
    • 4、如果项目并发量非常大建议使用微服务架构或者serverless架构
    • 5、如果项目需求经常变化,公司经常要开展线上活动建议使用微服务架构

nodejs微服务:单体架构与微服务架构相关推荐

  1. 系统由单体架构到微服务架构到底是如何演进的?

    随着互联网的发展,互联网企业的业务也在不断的飞速发展,进而导致系统的架构也在不断的发生着变化.总体来说,系统的架构大致经历了:单体应用架构->垂直应用架构->分布式架构->SOA架构 ...

  2. 一文了解四种软件架构:Serverless架构、微服务架构、分布式架构、单体架构

    如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存.晋升空间.这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面. 一.单体架构 单体架构 ...

  3. 架构之:微服务和单体服务之争

    文章目录 简介 先单体再微服务 直接从微服务开始 总结 简介 微服务和单体服务的各自好处之前的文章中已经讲的很明白了.本篇文章不是探讨到底应该用哪种服务架构.而是假设项目最终会采用微服务架构,那么就会 ...

  4. 华为架构师8年经验谈:从单体架构到微服务的服务化演进之路

    本次分享的技术大纲如下: 传统应用开发面临的挑战 服务化实践 服务化不是银弹 服务化架构的演进方向 一 .传统应用开发面临的挑战 挑战1-- 研发成本高 主要体现在如下几个方面: 代码重复率高 在实际 ...

  5. 漫谈单体架构与微服务架构(上):单体架构

    最近微服务架构特别火爆,就跟人工智能.区块链一样,软件架构设计如果不提微服务,感觉就像是与世界先进的架构风格和开发技术脱了节似的,各方各面都无法彰显高大上的气质. 本来再打算使用一套系列文章来讨论微服 ...

  6. java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...

    原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...

  7. 系统架构设计师 - 单体架构、SOA架构、微服务架构

    文章目录 横向对比 SOA 设计原则 主要技术 UDDI 统一描述发现集成 SOAP 简单对象访问协议 WSDL web服务描述语言 BPEL 业务过程执行语言 REST 表述性状态转移 实现方法 W ...

  8. 网易考拉的服务架构如何从单体应用走向微服务化? | 技术头条

    网易考拉(以下简称考拉)是网易旗下以跨境业务为主的综合型电商,自2015年1月9日上线公测后,业务保持了高速增长,这背后离不开其技术团队的支撑.微服务化是电商IT架构演化的必然趋势,网易考拉的服务架构 ...

  9. 单体应用架构和微服务架构的区别

    一.单体应用架构概念 一个归档包(可以是JAR.WAR.EAR或其它归档格式)包含所有功能的应用程序,通常称为单体应用.       而架构单体应用的方法论,就是单体应用架构. 二.单体架构示意图 三 ...

最新文章

  1. HarmonyOS系统概述
  2. 大数据分析中使用关系型数据库的关键点
  3. 情境感知技术是什么?
  4. 抽象工厂模式(Absraact Factory)介绍与实现
  5. hibernate事务详解
  6. c+命名空间_了解C ++中的命名空间
  7. VS2010中文版莫名的错误
  8. linux awk 打印最后一列,使用awk打印从第n个到最后一个的所有列
  9. Yonex 各系列球拍指数
  10. 本科三本的计算机博士,读书中的我 从三本本科到985博士
  11. java里面不等于怎么打_不等于在c语言中怎么打
  12. devexpress html编辑器,图解DevExpress RichEditControl富文本的使用,附源码及官方API
  13. 利用python,求解数独
  14. 什么是哈希洪水攻击(Hash-Flooding Attack)?
  15. **薛定谔名著《生命是什么》体会**
  16. ansible的介绍与安装
  17. 技术分享连载(八十八)
  18. 罗斯蒙特流量计应用领域
  19. AH名片簿客户通讯录管理软件3.78
  20. php计算器_,php计算器

热门文章

  1. flowable创建processEngine的流程
  2. hadoop2.7x高可用部署方案(+zookeeper)
  3. TMMI_测试过程改进框架
  4. Sql Server 中char、nchar、varchar、nvarchar这几种数据类型的区别
  5. vue 树结构 的 穿梭框
  6. 代码随想录 一刷总结(完结)
  7. 基于微信小程序的房屋租赁系统
  8. 【ChatGPT工具篇-1】ChatGPT + MindShow 分分钟搞定PPT制作
  9. 【读书笔记】工作技巧-科学笔记,如何有效阅读一本书:超实用笔记读书法(日本.奥野宣之)_20190608
  10. 小米:从顺势而为到逆势而上