You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
6.5 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 一、系统架构演变
在线笔记https://dpb-bobokaoya-sm.blog.csdn.net/
## 1.服务架构的演
### 1.1 单体架构
  单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问层。
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/35927ffa5dfb4c3f8ec539ad853e5493.png)
 单体架构只适合在应用初期,且访问量比较下的情况下使用,优点是性价比很高,开发速度快,成本低,但缺点也很明显,这时扩展的首先就是考虑服务器的集群处理。
### 1.2 集群
  针对单个服务器在访问量越来越大的情况越来越吃力的情况,我们可以考虑服务器的集群话处理。
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/7ab90e9559204abf80f58aefcfb9c6ba.png)
集群的部署大大提高了服务的处理能力同时利用Nginx提供的负载均衡机制来分发请求使用户的体验没有改变。
### 1.3 垂直化
  上面的集群部署是可以解决一部分的服务器压力,但是随着用户访问量的增多,集群节点增加到一定阶段的时候,其实作用就已经不是太大了,因为将所有的业务都集中在一起,造成耦合度很高,这时我们可以考虑业务的拆分。来提高系统的性能。比如将原来在一个系统里面的业务拆分为用户系统,订单系统和商品系统。也就是我们讲的垂直化拆分如下:
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/2e79162d284d4cc0934bc07a9877123f.png)
服务垂直化拆分后是可以大大的提高整体的服务处理能力,但是也会出现很多的冗余的代码,比如用户系统要操作订单库,要操作商品库,订单系统也有可能要操作用户库和商品库等。
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/8dca1b18477b45cf9072509b8c4498db.png)
### 1.4 服务化
针对垂直化拆分出现的问题这时就出现了我们经常听到的SOA(面向服务的架构).什么是SOA呢在《微服务设计》中有这么一段描述
> SOA是一种设计方法其中包括多个服务而服务之间通过配合最终会提供一系列功能一个服务通常以独立的形式存在于操作系统进程中服务之间通过网络调用而非采用进程内调用的方式进行通信。
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/d4f523681a42489394ce683c2f054977.png)
业务重用,共享服务,
### 1.5 微服务化
在SOA的基础上继续演进就是我们讲的微服务。SOA的服务更细粒度的拆分后就是微服务。根据时间递进。
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/d9bf48d7af46448493f8b5ba13c19d92.png)
 对基础运维的要求能力会越来越高,虚拟化,容器话等。
微服务和SOA的区别
1.思想上微服务的目的是解耦而SOA的目的是实现数据的互通和共享性。
2.协议:微服务会使用一些轻量级的通信协议(Restful API)
3.基础设施要求,微服务更加强调开发运维的持续交付。
## 2. 微服务架构的需求
### 2.1 RPC框架
在微服务架构中服务与服务之间要实现接口的调用我们肯定要通过相关的RPC(Remote Procedure Call)框架来实现。
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/3f21ef65cdaa4ea5a2d695892480f7be.png)
常用的RPC框架有:Dubbo,Google的GRPCApache的Thrift微博的Motan京东的EasyRPC等。我们通过RPC框架可以取调用服务提供者提供的服务但有一个前提是我们要能找到这个服务。通常我们的服务部署都是集群多节点的部署所以在消费者这端就不可能直接写死在代码里面这时就涉及到了服务的发现问题这时就需要另一个组件注册中心了
### 2.2 注册中心
  注册中心实现服务地址管理的功能,解决服务动态感知(上线,下线)。
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/e83978e8ccfc42ada97bc8de49d897f3.png)
### 2.3 负载均衡
在服务注册中心的介绍中我们可以看到负载均衡的应用。我们可以通过Ribbon来实现客户端的负载均衡负载均衡的策略可以是轮询随机根据响应时间来计算权重的轮询等。
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/7898f2445bfd4054845a36a39d94b335.png)
### 2.4 配置中心
在微服务架构中我们有很多个服务而每个服务中是都会有单独的配置文件的。里面有很多的配置信息的有关联的而且对于后期的更新维护也会非常的不方便这时配置中心就上场了。常用的配置中心有apollo/Nacos/disconf/zookeeper/diamond/Spring Cloud Config
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/dfd4b95212be45f493c426f1b7424cd2.png)
### 2.5 网关
  网关可以帮助我们完成用户请求的入口,路由。完成统一授权,日志的记录,权限的认证和限流及熔断操作。
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/d59cb8a7a9024d2eb7bf547a7cee6b4c.png)
### 2.6 限流、降级、缓存
  在现实的微服务架构中的性能是很难满足所有的用户请求,这时我们就可以通过一些措施来保证我们的核心服务的正常运转。
限流sentinel、hystrix
降级:主动降级(订单评论、广告关闭)、被动降级
缓存降低数据源访问频率、Redis等
容错机制:服务出现挂机,宕机之后的处理机制。
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/46ccc95619de477880b5caa0c146358b.png)
### 2.7 Bus
Bus消息总线实现异步化的通信机制。
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/690cf95599334553a2191389e4e4ddd9.png)
### 2.8 链路监控
因为微服务中的服务实在是太多了为了能更好的监控个服务的情况肯定就需要链路监控服务我们可以通过sleuth+zipkin来实现应用层监控系统级监控
![image.png](https://fynotefile.oss-cn-zhangjiakou.aliyuncs.com/fynote/1462/1637300624000/195b8c70cebb44e0bf7ad2b5f28e523e.png)