SpringCloud 01_单体应用到分布式系统演变过程
单体应用到分布式系统演变过程
1、单应用架构
早期的系统大部分都是单应用架构,所有的模块集成在一个应用里面,只需要一台应用服务器和一台数据库服务器,随着访问量的增加,服务器负载的慢慢提高,解决性能瓶颈的方案是不断提高服务器的配置。
2、应用服务器集群
随着访问量的继续增加,单台应用服务器已经无法满足需求,假设我们的数据库服务器还没遇到性能问题,我们可以通过增加应用服务器的方式来将应用服务器集群化,这样用户可以分流到各个应用服务器中,从而达到提升系统负载能力的目的。
但是应用服务器集群会带来的问题:
用户请求如何分流到各个应用服务器?
用户如果的两次请求被分配到不同的服务器,如果做到session共享?
为了解决第1个问题,需要在用户请求和应用服务器中间增加负载均衡,负载均衡分硬负载和软负载,硬负载可以选择F5等,软负载可以选择nginx、Apache等,增加了负载均衡后系统架构便变成下面这样。
而第2个关于session共享问题,我们可以通过配置tomcat的session共享或者缓存服务器来实现。
3、数据库读写分离
应用服务器集群提升了应用层的负载能力,但是数据库的负载能力并没有得到提升,那如何去提高数据库的负载能力呢?是不是也能参照应用服务器集群的方式,通过增加数据库服务器来实现呢?数据库读写分离被提了出来:
同样读写分离也会带来新的问题:
主库如何及时将数据同步到读库
应用服务器如何知道要调用哪个数据源
针对第1个问题,各数据库都提供了主从复制的解决方案,如mysql自带master-slave方式实现主从复制。
针对第2个问题,可以使用多数据源或者引入第三方数据库中间件,例如mycat。
4、缓存技术引入
随着访问量的持续增加,会出现许多用户访问统一内容的情况,对于这些数据,没必要每次都去数据库获取,这个时候引入应用层的缓存技术是个很好的选择,例如redis、memcache等。
5、应用拆分
随着业务的继续发展,应用的压力再次增大,同时不断增加的模块使系统变得越来越臃肿,维护工作量也越来越大。这个时候就可以考虑将应用系统进行拆分,按照领域模型拆分成多个子系统。
应用拆分后会带来新的问题,如子系统一中的一个查询在子系统二中也需要查询,是不是这些查询在两个子系统中都分别写一套呢?当然是不行的,一定要把这些抽象出来做成一个服务,这样又生成一个新的问题,多个子系统之间怎么相互访问呢?为了解决这个问题,RPC技术是个很好的选择,比较典型的有:dubbo、webservice、hessian、http、rmi等。
6、数据库垂直拆分
同样的,应用层面性能瓶颈解决后,又轮到数据库了,我们能将应用按照领域模型拆分成一个个应用子系统,数据库也是一样,根据不同的业务拆分成不用的数据库。拆分后数据库可以和拆分后的应用一一对应。
7、数据库水平拆分
数据库进行读写分离、垂直拆分后基本上解决了负载的问题,但是随着业务量的增加,表的数据不断增长,数据查询性能便成了问题,所以必须要多数据库进行水平拆分。水平拆分是将单个表的数据拆分到多个数据库中,如1亿数据的表拆分到10个数据库后,每个表就只有1000w了。
数据库水平拆分后,数据源就变得非常复杂了,让业务系统去控制查询哪个数据源变得不现实,这个时候需要引入第三方的数据库中间件,例如mycat、阿里的drds等。
最后演变出来的便是上图这个相对比较全的分布式架构了,但并不是说最后这个分布式架构一定是最优解决方案,具体选择哪个架构还是要结合业务系统的业务需求和业务量来分析。
最后:
SpringCloud 01_单体应用到分布式系统演变过程相关推荐
- 从单体应用转为分布式系统:来自Deliveroo的实践
过去一年中,Deliveroo在商业和IT领域成长迅速,这导致它的大型单体应用面对不少的技术挑战.Greg Beech在近期的QCon伦敦大会演讲中指出,Deliveroo对此问题的解决方案并非依靠微 ...
- 系统设计思想之网络应用系统架构(思想+解决方案)——从单体到分布式系统和系统设计技术点
总结 之前说过语言是基石头,语言通过系统设计思想形成系统,进而发展了语言,同时也发展了系统自身.系统为何有这么大的魅力,这个的关键就是系统的设计思想,系统设计思想分为架构思想和代码设计思想,一个是宏观 ...
- springboot gateway 负载均衡_05_Springbootamp;Springcloud面试题
点击上方"蓝色字体",选择"设为星标", 可以防止走失! 1 简单说一下springboot? Spring Boot是由Pivotal团队提供的全新框架,其设 ...
- SpringCloud微服务架构学习
SpringCloud 1. 微服务架构理论入门 1.1. 微服务架构概述 微服务架构是一种架构模式,它提倡将单一应用程序划分为一组小的服务,服务之间互相协调,互相配合,为用户提供最终价值.每个服务运 ...
- SpringCloud知识概括
SpringCloud知识概括 SpringCloud简介 Eureka Zookeeper Consul Ribbon OpenFeign Hystrix Gateway Config Bus St ...
- 跟着狂神学SpringCloud(Rest环境搭建+Eureka服务注册与发现+ribbon+Feign负载均衡+Hystrix+服务熔断+Zuul路由网关+SpringCloud config分布)
跟着狂神学SpringCloud SpringCloud 回顾之前的知识- JavaSE 数据库 前端 Servlet Http Mybatis Spring SpringMVC SpringBoot ...
- 2021年SpringCloud 精选大厂面试题-【附详细答案】
1. 微服务是什么? 微服务与微服务架构 微服务的优缺点 2. 微服务之间是如何独立通讯的 微服务通信机制 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很 ...
- 1、SpringCloud入门篇,综合概述
SpringCloud 微服务概述 什么是微服务 目前的微服务并没有一个统一的标准,一般是以业务来划分 将传统的一站式应用,拆分成一个个的服务,彻底去耦合,一个微服务就是单功能业务,只做一件事. 与微 ...
- 基于SpringBoot+SpringCloud+Vue前后端分离项目实战 --开篇
本文目录 前言 做项目的三大好处 强强联手(天狗组合) 专栏作者简介 专栏的优势 后端规划 1. SpringBoot 和 SpringCloud 的选择 2. Mybatis 和 MybatisPl ...
最新文章
- 有趣的Web版Ubuntu Linux
- 2000服务器文件共享,Win2000 Server实现对共享文件的监控
- 【OpenCV 例程200篇】29. 图像的翻转(cv2.flip)
- c#报错不实现接口成员_《C#程序设计》 习 题 集
- J.U.C并发框架源码阅读(十七)ReentrantReadWriteLock
- Mysql对字段进行分段统计
- dedecms 中变量函数
- gis环境设置在哪_BIM与GIS如何融合应用?
- nba球队查询系统c语言代码,NBA球队中英文对照一览表
- mongodb 查多个不等于_MongoDB增删查
- 信息论的基本概念和熵的计算
- 51单片机驱动数码管显示
- 网红电商第一股首份财报继续亏损,如涵的网红效应还能持续多久?
- 微信王者登录太多服务器怎样删除,使用微信登录游戏或其他app时,可以使用不同的个人信息登录 选项已满 怎么删除?如图...
- oracle元转换为万元,Excel表格中快速实现元转换成以万元显示的方法
- python爬取拉钩网信息
- 用project做项目计划之 项目成本、预算、基线工期、基线成本、基线时间
- python 使用pdfminer3k 读取PDF文档
- win7正版微软给你
- bzoj1123 [POI2008]BLO 圆方树
热门文章
- POJ - 3358 Period of an Infinite Binary Expansion(欧拉定理)
- 求n!,C(n,m)和A(n,m)最后的非零位。
- Duilib教程-控件练习
- 6.OD-Run trace /Hit trace
- Ring3下Dll注入方法整理汇总
- 学习windows 应用层 inline hook 原理总结
- 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----其他(攻击方式)篇
- cocos2d-x初探学习笔记(10)--运动中的加速度效果
- PyCairo 中的文本
- SurfaceView 和 GLSurfaceView