单体架构、SOA、微服务架构
1. 单体架构的问题
在Java Web开发中,web工程一般会被打包为war包部署在Servlet容器中,如Tomcat。比较简单,开发和调试部署都很方便。
但是当用户量大时,并发量高时,一台机器是无法满足系统的负载的,我们会考虑水平拓展,比如增加服务器的数量,通过负载均衡器(如Nginx)很容易实现应用的水平拓展。但是时间推移,还是会产生很多问题:
- 应用复杂度增加,更新、维护困难
- 影响开发效率
- 应用可靠性降低,这么大一个应用比如出现一个Bug,整个崩溃。
2. SOA
针对传统的单体架构问题。大部分企业通过SOA(Service-Oriented Architecture,面向服务的架构)来解决。SOA的思路是把应用中相近的功能聚合到一起,以服务的形式提供出去,可以理解为一批服务的组合。
SOA将原来的单体架构按照功能细分为不同的子系统,然后再由各个子系统依赖服务中间件来调用所需服务。
使用SOA将系统切分为多个组件服务,这种通过多个组件服务来完成请求的方式有很多好处,比如不同团队的可以负责不同的子项目;模块拆分,使用通讯接口,降低了模块之间的耦合度等等。
3. 微服务架构
微服务架构是一种架构风格和架构思想,它倡导文明在传统软件应用架构的基础上,将系统业务按照功能拆分为更加细粒度的服务,所拆分的每一个服务都是一个独立的应用,这些应用对外提供公共的API(一般使用REST API),可以独立承担对外服务的职责。
特点:
- 根据业务模块化分服务种类
- 每个服务可独立部署且相互隔离
- 通过轻量级API调用服务
- 服务虚保证良好的高可用性(HA:比如使用集群,避免单一节点死掉无法继续服务)
3.1 微服务架构和SOA区别
微服务架构 | SOA |
---|---|
一个系统被拆分为多个服务,粒度小 | 服务由多个子系统组成,粗粒度 |
团队级,自底向上开展实施 | 企业级,自顶向下开展实施 |
无集中式总线,松散的服务架构 | 企业服务总线,集中式的服务架构 |
集成方式简单(HTTP./REST/JSON) | 集成方式复杂(ESB/WS/SOAP) |
服务能独立部署 | 服务相互依赖,无法独立部署 |
其实主要也是粒度的区别,对SOA不熟,不过听老师说SOA现在的都是那些老应用了,有点过时了
3.2 微服务架构的组件
- 服务注册中心(Service Registry):注册系统所有服务的地方。
- 服务注册:服务提供方(比如订单服务)将自己的地址注册到服务注册中心,让服务调用方能够方便地找到自己。
- 服务发现:服务调用方(客户端)从服务注册中心找到自己需要调用服务的地址。
- 服务网关(API Gateway):也称为API网关,是服务调用的唯一入口(用户访问从这里进),可以在这个组件中实现用户鉴权、动态路由、灰度发布、负载限流等功能。
- 负载均衡:服务提供方一般以多实例的形式提供服务,使用负载均衡能够让服务调用方法接到合适的节点(每个服务都是一个项目,比如我把那个订单服务做Nginx反向代理负载均衡,这里没有画上去)
- 服务容错:通过断路器(也称断容器)等一系列的服务保护机制,保护服务调用者在调用异常服务时能快速地返回结果,避免大量的同步等待。(这个在API Gateway到每个微服务的连接中设置)
- 分布式配置中心:将本地化的配置信息(properties、yml、yaml等) 注册到配置中心,实现程序包在开发、测试、生产环境的无差别性,方便程序包的迁移。
- 等等组件(以上基本够用)…
部署运行过程:
部署了一系列的微服务,每个微服务都会访问自己的数据库。这些微服务启动时,会将其信息注册到服务注册中心,在客户端发送请求时,请求首先被API网关拦截,API网关会读取请求数据,并从注册中心获取对应的服务信息,然后API网关会更具服务信息调研所需的微服务。
3.3 微服务的技术选型
- 微服务实例的开发:常用Spring Boot
- 服务的注册与发现:Spring Cloud Eureka、Apache Zookeeper、Dubbo
- 负载均衡:Spring Cloud Ribbon、Dubbo
- 服务容错:Spring Cloud Hystrix
- API网关:Spring Cloud Zuul、Spring Reactor、Nettry或者NodeJS
- 分布式配置中心:Spring Cloud Config
- 调试:swagger
- 部署:Jenkins+Docker
比如下面这种:
单体架构、SOA、微服务架构相关推荐
- 分布式与微服务——Iaas,Paas和Saas、单体应用和缺点、微服务概念、传统 分布式 SOA 架构与微服务架构的区别、微服务实战、什么是RPC、CAP定理和BASE理论、唯一ID生成、实现分布式
文章目录 1-什么是Iaas,Paas和Saas 一 IaaS基础设施服务 二 paas平台即服务 三saas软件即服务 四 总结 2-单体应用和缺点 一 单体应用 二 单体应用的缺陷 3-微服务概念 ...
- 系统架构的演变过程(单体应用架构、垂直应用架构、分布式SOA架构、微服务架构)
文章目录 系统架构演变 单体应用架构 垂直应用架构 分布式SOA架构 什么是SOA 微服务架构 分布式SOA架构和微服务架构对比 系统架构演变 随着互联网的发展,网站应用的规模不断扩大,常规的应用架构 ...
- 单体应用、SOA架构、微服务架构的对比
目录 前言: 单体架构 SOA架构 微服务架构 前言: 随着近年来云技术的发展,越来越多的用户选择使用云技术来代替传统的IT基础设施.在云技术发展的早期,业界的关注点集中在虚拟化.分布式.存储等laa ...
- 单体架构-->SOA架构-->微服务架构
上诉架构图采用了分层架构,按照调用顺序,从上到下为表示层.业务层.数据访问(DAO)层.DB层.表示层负责用户体验,业务层负责业务逻辑,包括电影.订单和用户三个模块.数据访问层负责DB层的数据存取,实 ...
- java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...
原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...
- SOA架构与微服务架构到底是什么?以及对应的一些常用的框架简介
架构是逻辑上的设计模式,而框架则是具体的实现.一个架构模式上,可能会使用到多个框架. 一.架构的演变 架构的演变是根据业务量的急速扩张对技术要求不断的加深而产生的.如果细粒度的划分可以有很多路线,我一 ...
- 微服务架构 之 互联网项目架构演变过程 (单点架构,模块化架构,分布式架构,soa架构,微服务架构)
一.什么是单点系统(传统架构)? 1.传统的SSH,SSM 架构,分为三层架构 web控制层.业务逻辑层.数据库访问层. 2. 传统架构也就是单点应用,就是大家在刚开始初学JavaEE技术的时候SSH ...
- SOA架构和微服务架构之间的关系
写在前面: 你好,欢迎你的阅读! 我热爱技术,热爱分享,热爱生活, 我始终相信:技术是开源的,知识是共享的! 博客里面的内容大部分均为原创,是自己日常的学习记录和总结,便于自己在后面的时间里回顾,当然 ...
- 漫谈单体架构与微服务架构(上):单体架构
最近微服务架构特别火爆,就跟人工智能.区块链一样,软件架构设计如果不提微服务,感觉就像是与世界先进的架构风格和开发技术脱了节似的,各方各面都无法彰显高大上的气质. 本来再打算使用一套系列文章来讨论微服 ...
- 单体应用架构和微服务架构的区别
一.单体应用架构概念 一个归档包(可以是JAR.WAR.EAR或其它归档格式)包含所有功能的应用程序,通常称为单体应用. 而架构单体应用的方法论,就是单体应用架构. 二.单体架构示意图 三 ...
最新文章
- Pandas把dataframe中的整数数值(integer)转化为时间(日期、时间)信息实战
- 【FFmpeg】ffmpeg 命令查询二 ( 比特流过滤器 | 可用协议 | 过滤器 | 像素格式 | 标准声道布局 | 音频采样格式 | 颜色名称 )
- c语言探测次数不超过4的哈希算法,HihoCoder1084: 扩展KMP(二分+hash,求T串中S串的数量,可以失配一定次数)...
- Matlab功率谱估计
- struts2学习笔记(三) Action(上)
- 设置对话框大小和位置
- 【MCMC】基于贝叶斯优化的自适应MCMC算法仿真
- Python Des加密与解密实现软件注册码、机器码
- Human Muscles/Musculature (人体肌肉组织)
- python——金融商品多种均线指标综合运用模拟实现(MACD模型)
- 如何在“一周内”摸清一个行业
- 求助!微信公众号页面部分手机加载后空白!
- Flutter高仿微信-第26篇-新的朋友
- 手机安全卫士的一些总结
- RHEL6 或CentOS 6配置共享存储--使用iSCSI
- 使用qt实现多线程编程
- 开发客户,哪种方式成本低又有效?
- setTimeout和cleartimeout(),再settimeout执行到一半后,正确的使用cleartimeout()删除
- 递推算法6——逆推法之存取问题
- 车载大屏仪表用什么软件开发的