热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从单体到微服务—系统架构进化分析

文章目录系统架构概览图1、单一应用架构阶段2、垂直应用架构(MVC)3、分布式服务架构(RPC)4、流动计算架构࿰

文章目录

    • 系统架构概览图
    • 1、单一应用架构阶段
    • 2、垂直应用架构(MVC)
    • 3、分布式服务架构(RPC)
    • 4、流动计算架构(SOA )
    • 5、微服务架构


系统架构概览图

image

1、单一应用架构阶段

当网站的访问量/流量很小的时候,业务上我们把所有的功能(假设有订单、商品、支付、库存…)全放在一台服务器上就可以了

  • 注意:这时的系统可能是把数据库、Web服务啥的都部署在同一台服务器上;且也没有什么前后端分离的概念( JSP 既负责页面展示而且也包含业务逻辑处理代码)。
  • 优点:可以减少部署的节点和成本;
  • 缺点:扩展性太差,因为前后端代码耦合在一起,维护起来很困难。
  • 性能上可以支撑:1-10个并发。
  • 代表技术:JSP、Tomcat

(C:\Users\hongjie.li\AppData\Roaming\Typora\typora-user-images\image-20220629200054338.png)]

2、垂直应用架构(MVC)


  • M【Model】 层代码主要存放的是业务逻辑;V【View】 层主要存放的是视图(html、jsp等等);C【Controller】 层代表是控制层,是处于于M和V中间的一层,用户通过操作V层发送的请求经由V层分发到M层进行逻辑处理。V层逻辑处理的结果通过C层响应给V层,进而反馈给用户。

  • 优点:由于代码进行分层,所以扩展性相比于单一应用得到了大大的提升,且将数据库与web服务器分开部署,提高了系统的可用性。

  • 缺点:此时的系统仍然只是一个单体应用,因为是在代码层面上的拆分,所以被称之为垂直拆分。

  • 性能上可以支撑:10-1000个并发

  • 代表技术:JSP + Servlet + JavaBean;SpringMvc等等

Alt

3、分布式服务架构(RPC)

当垂直应用(每个应用都是MVC架构)越来越多,应用之间的交互不可避免,这时就将核心业务抽取出来,作为独立的服务:

  • RPC:Remote Procedure Call,远程过程调用,调用远程服务器上的函数或者过程(最初是针对C语言这样的面向过程的语言提出的概念)就跟在本地调用一样,要实现RPC需要解决三个问题:

    1. 通讯问题:RPC的通讯需要依赖于某种传输协议(比如:TCP、UDP)。
    2. 寻址问题:你怎么找到远程服务器【ip】,怎么找到远程服务器上的哪个服务【端口】,怎么找到具体要调用哪个方法【方法名称】。
    3. 序列化和反序列化:因为网络协议是基于二进制的,想要通过网络传输,首先发送方得把数据转为二进制数据【序列化】。然后接收方需要把二进制数据进行一个恢复【反序列化】。
  • 优点:原本部署在一个服务器上的多个业务,都拆分到了独立的服务器上,彼此之间通过RPC框架来进行通信;且此时有了多个数据库。

  • 缺点:随着服务越来越多,在本服务需要维护其他服务的信息(如:ip、端口…)越来越多,管理这些信息的方式不够灵活。

    举个例子:假如订单服务需要调用库存服务,这时我们需要拿到库存服务的 ip + 端口 才能在互联网中找到对应服务器上的对应服务。

    那这些 ip + 端口 的信息直接写死在代码里面吗?这样的方式不够灵活,且万一服务的 ip、端口信息有变,就得去修改代码,一两个地方还好,地方一多起来,你可能会想骂娘。这种方式显然不符合开闭原则,所以你可能会想到使用配置文件来记录这些信息可能会更好。但是,每次新加一个服务你仍然得去修改这个配置文件,显然还是差点意思。
    在这里插入图片描述


4、流动计算架构(SOA )


SOA 出现背景(why?)

当服务越来越多,容量的评估,小服务资源得浪费等问题逐渐显现,此时需要增加一个调度中心基于访问压力,实时管理集群容量,提供集群利用率。服务生命周期的管控和运行态得治理成为瓶颈。

此时,用于提高机器利用率的,提升服务质量的(资源调度和治理中心)SOA 服务治理是关键。

SOA 是什么(what?)

SOA:Service Oriented Architecture ,面向服务架构。

ESB:Enterprise Service Bus,企业服务总线,也被称为服务中介。主要是提供了一个服务用于服务之间交互。简单来说 ESB 就是一根管道,用来连接各个服务节点。为了集成不同系统,不同协议的服务,ESB 做了消息的转化解释和路由工作,让不同的服务互联互通。

ESB 包含的功能如:负载均衡,流量控制,加密处理,服务监控,异常处理,监控告急。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-35KdZkup-1656561974845)(E:\2 笔记\工作笔记current\工作技术学习笔记current\Dubbo学习笔记\Dubbo学习笔记.assets\image-20220630105419630.png)]

SOA 架构的特点


  1. 系统集成:有序的解决企业系统间的通信问题,把原先散乱、无规划的系统间的网状结构,梳理成规整、可治理的系统间星形结构。
  2. 系统的服务化:站在功能的角度,把原先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速复用
  3. 业务的服务化:站在企业的角度,把企业只能抽象成可复用、可组装的服务;把原先只能化的企业架构转变为服务化的企业架构,进一步提升企业的对外服务能力。

5、微服务架构


微服务出现背景(why?)

微服务是在 SOA 上做的升华,微服务架构强调的一个重点是业务需要彻底的组件化和服务化,原有的单个业务系统会根据业务拆分成多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。

微服务其实就是一个轻量级的服务治理方案。

微服务是什么(what?)

微服务架构是一种架构模式,他提倡将单一应用程序划分成一组小的服务,服务之间互相协调,互相配合,为用户提供最终价值。

每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 协议的 Restful API)。

每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境。另外,应当尽量避免统一的、集中式的服务管理机制。对每一个具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其构建。
在这里插入图片描述

微服务架构特点

优点:随着敏捷开发、持续交付、DevOps 理论的发展和实践,以及基于 Docker 等轻量级容器部署应用和服务的成熟,微服务架构开始流行,逐渐称为应用架构的未来演进方向。通过服务的原子化拆分,以及微服务的独立、打包,部署和升级,小团队的敏捷交付,应用的交付周期将缩短,运营成本也将大幅下降。

特点:

  • 通过服务实现组件化,开发者不再需要协调其他服务部署对服务的影响。

  • 可以按照业务能力来划分服务和开发团队,开发者可以自由选择开发技术,提供 API服务。

  • 去中心化,每个微服务都有自己私有的数据库持久化业务数据,每个微服务只能访问自己的数据库,而不能访问其他服务的数据库。

    某些业务场景下,需要在一个事务中更新多个数据库。这种情况也不能直接访问其他微服务的数据库,而是通过对于微服务进行操作。

    数据的去中心化,进一步降低了微服务之间的耦合度,不同服务可以采用不同的数据库技术(SQL、NoSQL等)。在复杂的业务场景下,如果包含多个微服务,通常在客户端或者中间层(网关)处理。

  • 基础设施自动化(devops、自动化部署)

把应用拆分成为一个一个的单个服务,应用Docker技术,不依赖于任何服务器和数据模型,是一个全栈应用,可以通过自动化方式独立部署,每个服务运行在自己的进程中,通过轻量的通讯机制联系,经常是基于 HTTP 资源API,这些服务基于业务能力构建,能实现集中化管理(因为服务太多啦,不集中管理就无法DevOps啦)。

参考引用

参考博客:https://www.iteye.com/blog/maosheng-2434993
Dubbo官网:Dubbo官网


我是杰哥,一个在IT行业中正在不断学习的程序员。 欢迎各位说话好听的人才们一键三连,你们的支持是我更新的最大动力,咱们下期见~

文章持续更新,可以微信搜索「 杰哥是真想教会你 」第一时间阅读,回复【面试】有我准备的一些在精不在多的面试资料。


推荐阅读
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
author-avatar
爲妳奮鬥壹輩子丶故事_932
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有