初识微服务
单体架构与微服务架构的区别
单体架构
将所有的业务功能都集中在一个项目中开发, 打包成一个包部署。
优点: 就是成本低, 架构简单
缺点: 耦合度极高
微服务架构
根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
优点: 降低服务的耦合; 有利于升级拓展项目
这样的微服务架构的问题一:
业务越多 ,项目结构越复杂, 那么服务与服务之间的业务关系调用就会越来越复杂。
如此复杂的业务关系, 想要靠人来解决是不可能的, 所以微服务提供了一个组件—–注册中心
注册中心解决问题一
注册中心可以记录微服务中 ,每个服务的IP、端口、及其他们的作用(能干什么)
如果一个服务想要调用另一个服务,那么想要知道该服务的作用, 就直接找到他的注册中心就可以得到对应的服务信息。
出现的问题二: 多个服务引起的很多配置文件的修改问题
随着服务的增多, 配置信息也会海量的上升, 对于我们的管理是非常不利的。所以微服务提供了配置中心, 他可以管理这些服务中的所有配置
解决问题二 :配置中心解决。
配置中心可以管理所有我们的配置文件。
如果以后需要有配置进行变更, 我们只需要通知配置中心即可 。它可以通知相关的微服务,实现配置的热更新。
问题三: 微服务过多,用户访问的时候不知道访问哪个
微服务数量达到一定的数量 ,靠我们人为的去维护管理是不可能的, 同时也不是任何用户来都能够访问我们的服务。所以需要进行管理。
服务网关 解决问题三
服务网关可以实现对进入服务的用户身份进行认证管理
同时还可以将用户的请求 转发到具体的请求。(请求路由)
通过上述的服务网关, 我们就可以将得到的用户请求发送到对应的服务上, 然后服务就可以通过数据库等查询到对应的信息返回给用户。
问题四: 不可能所有的请求都访问数据库吧 ?
通过服务网关, 我们就可以将得到的用户请求发送到对应的服务上, 然后服务就可以通过数据库等查询到对应的信息返回给用户。
但是 ,这么多的请求, 这么多的服务。如果全部打到数据库上, 那么对于数据库的压力将是恐怖的。 所以我们需要将数据进行缓存。
分布式缓存解决问题四。
对于分布式的集群任务, 我们需要对应的缓存来缓解数据库的访问压力。所以就需要分布式缓存。
分布式集群的请求 ,先打到分布式缓存中, 缓存未命中,再访问数据库。
问题五: 分布式集群中的请求往往覆盖多个服务,如何解决 ?
对于分布式集群来说, 我们的请求可能需要调用不同的集群才能完成一个任务,那么如何处理分配这些请求的执行顺序(执行时间等等),如何分配这些时常,就是我们需要解决的问题。
如果无法很好的分配这些任务的执行 , 对于系统的性能是有极大影响的
消息队列解决问题五.
消息对列就可以很好的解决这些请求的调度。
提高服务的并发。
问题六: 服务出现问题如何解决。
如此庞大的集群, 一旦出现问题那将是致命的, 所以我们需要一些东西来维护定位,乃至追踪这些问题。 所以就引入了分布式服务日志 && 系统监控链路追踪。
分布式日志服务解决问题六
通过分布式日志服务, 我们可以解决对于出现问题的定位, 但是我们还需要监控来定位乃至观察这些服务的运行情况, 这就用到了系统监控和链路追踪
问题七: 微服务的部署
服务集群达到这样的量级, 如果还是通过人工部署那当然是不现实的, 所以就需要用到自动化集群的部署
Jenkins解决问题七
通过Jenkins来实现对微服务进行自动化的编译, 基于Docker进行打包形成镜像。再通过K8s 或者 RANCHER这样的技术实现微服务的集成部署。
微服务架构总结图
微服务技术的划分
微服务治理SpringCloud
SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验: