单体架构与微服务架构的区别

单体架构

img

将所有的业务功能都集中在一个项目中开发, 打包成一个包部署。

优点: 就是成本低, 架构简单

缺点: 耦合度极高

微服务架构

img

根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。

优点: 降低服务的耦合; 有利于升级拓展项目

这样的微服务架构的问题一:

业务越多 ,项目结构越复杂, 那么服务与服务之间的业务关系调用就会越来越复杂。

如此复杂的业务关系, 想要靠人来解决是不可能的, 所以微服务提供了一个组件—–注册中心

注册中心解决问题一

注册中心可以记录微服务中 ,每个服务的IP、端口、及其他们的作用(能干什么)

如果一个服务想要调用另一个服务,那么想要知道该服务的作用, 就直接找到他的注册中心就可以得到对应的服务信息。

出现的问题二: 多个服务引起的很多配置文件的修改问题

随着服务的增多, 配置信息也会海量的上升, 对于我们的管理是非常不利的。所以微服务提供了配置中心, 他可以管理这些服务中的所有配置

解决问题二 :配置中心解决。

配置中心可以管理所有我们的配置文件。

如果以后需要有配置进行变更, 我们只需要通知配置中心即可 。它可以通知相关的微服务,实现配置的热更新。

问题三: 微服务过多,用户访问的时候不知道访问哪个

微服务数量达到一定的数量 ,靠我们人为的去维护管理是不可能的, 同时也不是任何用户来都能够访问我们的服务。所以需要进行管理。

服务网关 解决问题三

服务网关可以实现对进入服务的用户身份进行认证管理

同时还可以将用户的请求 转发到具体的请求。(请求路由

通过上述的服务网关, 我们就可以将得到的用户请求发送到对应的服务上, 然后服务就可以通过数据库等查询到对应的信息返回给用户。

问题四: 不可能所有的请求都访问数据库吧 ?

通过服务网关, 我们就可以将得到的用户请求发送到对应的服务上, 然后服务就可以通过数据库等查询到对应的信息返回给用户。

但是 ,这么多的请求, 这么多的服务。如果全部打到数据库上, 那么对于数据库的压力将是恐怖的。 所以我们需要将数据进行缓存。

分布式缓存解决问题四。

对于分布式的集群任务, 我们需要对应的缓存来缓解数据库的访问压力。所以就需要分布式缓存。

分布式集群的请求 ,先打到分布式缓存中, 缓存未命中,再访问数据库。

问题五: 分布式集群中的请求往往覆盖多个服务,如何解决 ?

对于分布式集群来说, 我们的请求可能需要调用不同的集群才能完成一个任务,那么如何处理分配这些请求的执行顺序(执行时间等等),如何分配这些时常,就是我们需要解决的问题。

如果无法很好的分配这些任务的执行 , 对于系统的性能是有极大影响的

消息队列解决问题五.

消息对列就可以很好的解决这些请求的调度。

提高服务的并发。

问题六: 服务出现问题如何解决。

如此庞大的集群, 一旦出现问题那将是致命的, 所以我们需要一些东西来维护定位,乃至追踪这些问题。 所以就引入了分布式服务日志 && 系统监控链路追踪。

分布式日志服务解决问题六

通过分布式日志服务, 我们可以解决对于出现问题的定位, 但是我们还需要监控来定位乃至观察这些服务的运行情况, 这就用到了系统监控和链路追踪

问题七: 微服务的部署

服务集群达到这样的量级, 如果还是通过人工部署那当然是不现实的, 所以就需要用到自动化集群的部署

Jenkins解决问题七

通过Jenkins来实现对微服务进行自动化的编译, 基于Docker进行打包形成镜像。再通过K8s 或者 RANCHER这样的技术实现微服务的集成部署。

微服务架构总结图

img

img

微服务技术的划分

微服务治理SpringCloud

SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud

SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验:

img

分布式的缓存

img

异步通信技术

img

分布式搜索的技术

img

持续集成DevOps技术

img

hm的学习大纲

img

img

img