什么是单体架构系统?
所谓的单体架构就是所有功能,都放在一个应用里。
比如后面要讲的一个单体产品服务应用,提供数据和视图都在一个springboot里。
单体架构系统有其好处,如便于开发,测试,部署也很方便,直接打成一个 jar 或者 war, 就什么都好了。
不过单体架构也有其弊端,最主要体现在高访问,高并发的上限是固定的。 比如一个单体架构,能够承受 1000次访问/秒。 但是访问量达到 2000次/秒的时候,就会非常卡顿,严重影响业务,并且仅仅依靠单体架构本身,很难突破这个瓶颈了。
简而言之,就是所有鸡蛋放一个篮子里,要是多个人取鸡蛋的话,就非常慢,还可能摔了篮子,打碎鸡蛋。
什么是分布式和集群?
既然单体架构会有性能上的瓶颈,那么总要解决呀。 解决办法通常就是采用分布式和集群来做。
简单来说,就是把鸡蛋放到不同的篮子里
要说springcloud 分布式之前,先引入微服务概念。
微服务简单说,一个 springboot 就是一个 微服务,并且这个 springboot 做的事情很单纯。 比如一个项目中,有提供数据和查询数据两个功能,那么就可以拆成两个微服务,分别是 数据微服务,和视图微服务,其实就是俩 springboot, 只是各自做的事情都更单纯~
那既然我们把项目拆分成了两个微服务,也就是两个spring boot 那我们如何管理这个微服务,以及这两个微服务之间如何通信的问题?
所以就要引入一个 微服务注册中心概念,这个微服务注册中心在 springcloud 里就叫做 eureka server, 通过它就可以把微服务注册起来,以供将来调用。
原来是在一个 springboot里就完成的事情,现在分布在多个 springboot里做,这就是初步具备 分布式雏形了。
在业务逻辑上, 视图微服务 需要 数据微服务 的数据,所以就存在一个微服务访问另一个微服务的需要。而这俩微服务已经被注册中心管理起来了,所以 视图微服务 就可以通过 注册中心定位并访问 数据微服务了。就相当于eureka是一个调度中心,用来管理这两个微服务之间的协调通信。
那么分布式有什么好处呢?
1 . 如果我要更新数据微服务,视图微服务是不受影响的
2 . 可以让不同的团队开发不同的微服务,他们之间只要约定好接口,彼此之间是低耦合的。
3 . 如果视图微服务挂了,数据微服务依然可以继续使用
什么是集群?
原来数据微服务只有这一个springboot, 现在做同样数据微服务的,有两个 springboot, 他们提供的功能一模一样,只是端口不一样,这样就形成了集群。
集群的好处
1 . 比起一个 springboot, 两个springboot 可以分别部署在两个不同的机器上,那么理论上来说,能够承受的负载就是 x 2. 这样系统就具备通过横向扩展而提高性能的机制。
2 . 如果 8001 挂了,还有 8002 继续提供微服务,这就叫做高可用 。
以上是很简单的分布式结构,围绕这个结构,我们有时候还需要做如下事情:
- 哪些微服务是如何彼此调用的? sleuth 服务链路追踪
- 如何在微服务间共享配置信息?配置服务 Config Server
- 如何让配置信息在多个微服务之间自动刷新? RabbitMQ 总线 Bus
- 如果数据微服务集群都不能使用了, 视图微服务如何去处理? 断路器 Hystrix
- 视图微服务的断路器什么时候开启了?什么时候关闭了? 断路器监控 Hystrix Dashboard
- 如果视图微服务本身是个集群,那么如何进行对他们进行聚合监控? 断路器聚合监控 Turbine Hystrix Dashboard
- 如何不暴露微服务名称,并提供服务? Zuul 网关
后续将会更新关于spring boot的其他内容
1.spring cloud-------注册中心
2.springcloud----注册数据微服务
3.springcloud-视图微服务-Ribbon
4.springcloud-视图微服务-Feign
*帅气的远远啊*