认识微服务

140 阅读6分钟

1 微服务生态圈

微服务(SpringCloud、阿里巴巴Dubbo)

  • 单一职责:微服务拆分粒度更小,每个服务对应唯一的业务能力,避免重复开发
  • 面向服务:微服务对外暴露业务接口
  • 自治:团队独立、部署独立、数据独立、技术独立
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

image.png

  • 消息队列解决里面服务集群之间的异步通信。
  • 系统监控链路追踪,实时监控每个结点的运行状态(负载,内存),能快速定位到哪个方法。

image.png

  • Jenkins,对微服务项目的编译,然后通过docker打包。K8s和Rancher实现部署。

image.png

分布式架构:根据业务功能对系统进行拆分,每个业务模块独立开发,称为一个服务

1.1 注册中心

解决:如业务A可能需要的服务流程是服务1先调用服务2,然后服务2再调用服务3,最终再返回结果给业务层。 那么随着服务集群的不断扩大,集群内的服务调用将变得十分复杂,基本上通过人力已经很难去维护和记录了。

  • 帮忙记录服务集群里面所有的服务实例
  • 服务消费者可以通过注册中心拉取相关的服务信息,然后完成指定的服务调度任务
  • 注册中心可以监控服务实例的健康状态(服务实例会在一定周期内向注册中心发送心跳包,以确保自身状态是否正常)

1.2 配置中心

解决:可单单仅有注册中心是不够的,如果我们要对每个服务实例做不同要求的配置修改,每个都去改,还好考虑兼容性等一系列问题,这将是一个巨大的工作量,所以,微服务生态圈再次推出一个组件配置中心 可以实现配置的热更新。

1.3 服务网关

解决:因为服务是一个集群,内部服务实例比较庞大,我们用户并不知道应该访问哪个服务实例,而且也不是什么请求都可以对服务进行访问,我们可能需要一些拦截恶意功能、身份校验,将请求路由到具体的服务实例、负载均衡等操作,所以服务网关的重要性就不言而喻了。

1.4 分布式缓存

解决:现在用户访问的问题暂时解决了,那我们该考虑数据库了,如此大的访问群体、访问量,数据库可没有服务实例那么大的庞大数量、很难承担如此之大的并发量,而且访问速度也是一大障碍

这个时候,我们就需要引入一套服务集群——分布式缓存 那缓存是什么,缓存就是将一部分数据库的数据放到内存当中,我们都知道访问内存的速度是远远大于远程访问数据库的速度,我们可以把用户经常访问的数据缓存到内存当中,此时当用户的请求过来时,我们先进入缓存看看是否命中,如果未命中,再访问数据库

1.5 分布式搜素

用户的访问可以说是千变万化、那么对数据库的搜索要求就必然很高,简单的搜索功能已经无法满足庞大的并发访问需求了,那么我们需要再次引入一个服务集群——分布式搜索 而有了分布式搜索集群,我们可以都搜索内容进行切片、分词等操作,多机器搜索结果聚合的操作,那么这个时候数据库其实只需要做一些读写操作、安全事务等操作就可以了。

1.6 异步消息队列集群

解决:我们再考虑一个问题,如果一个请求所需的访问链路很长(服务1调服务2、服务2调服务3、服务3调服务4 ....),那么很明显这样子性能就会下降,而且如果服务2阻塞了,还要等待其完成,可以说是服务效率大打折扣。

那么为了应对这种问题,我们引入了一个集群——异步消息队列集群 那么什么是异步消息呢,简单说就是如果我此时调用服务1,我就给服务2发送一条消息,说我要调用服务2,这个时候服务2开始干活,服务1和服务2异步进行,减少中间的阻塞传递的时间,一定程度上提高了性能。

1.7 分布式日志系统和系统监控链路追踪

微服务团体是如此的庞大,怎么复杂的服务要是出了问题我们却很不容易定位,那怎么办? 很简单,我们这个时候就需要引入两个组件来协同我们完成故障排查。 分布式日志系统 和 系统监控链路追踪

1.8 JenKins、Docker、K8S(RANCHER)

如此庞大的服务集群,那部署又成了一个大难题了,总不可能一个一个去人工部署吧,那么我们就需要再次引入一个框架——JenKins

我们可以对这些打包完成的项目制作成镜像,方便多台不同集群使用,那Docker这个成熟的框架就可以帮我们解决这些问题

那么好了,包也打好了,镜像也做好了,我们还需要一个工具帮我们进行自动化处理,那K8S 或者 RANCHER就可以

1.9 微服务带来的问题

在讲问题之前我们先来看看微服务的完整技术栈

在这里插入图片描述 如此复杂的微服务技术栈,那带来的问题也是非常多的。

  • 如何做到一个服务调用另一个服务?
  • 随着部署量的增大,运维的难度也变得越来越大,怎么办?
  • 依赖的服务不稳定怎么办?分布式的事务要怎么处理?
  • 跨语言、跨系统所带的稳定性、兼容性、性能等问题该如何处理?
  • .....

那么程序员就会根据问题发布相关的解决方案

1.10 SpringCloud

为什么选择springCloud就不用说了吧,Dubbo可以说比较旧了,现在的SpringCloud可以说是一统后端江湖,技术发展也是相当成熟,组件也十分丰富。

后期的SpringCloudAlibaba也算是SpringCloud里面的一部分,SpringCloudAlibaba加强了原有SpringCloud里面某些组件的不足的功能、然后扩展一些自己的功能,让SpringCloud的生态圈变得更加成熟稳定。

点我进入SpringCloud的官网

2 服务架构演变

2.1 单体架构:

  • 所有的业务的写在一个项目中;
  • 优点是结构简单,部署成本低;
  • 缺点:高耦合不利于升级维护

2.2 分布式架构:

  • 将根据业务功能对系统进行拆分,每个业务模块按独立项目进行开发。
  • 优点是低耦合利于维护升级拓展;
  • 缺点是复杂部署成本高。

image.png

image.png

2.3 微服务:

image.png

image.png

image.png

3 微服务结构

国内知名微服务落地技术:SpringCloud、阿里巴巴Dubbo

image.png

3.1 微服务技术对比

image.png

3.2 企业需求

image.png

3.3 SpringCloud

SpringCloud是目前国内使用最广泛的微服务架构。官网:spring.io/projects/sp…

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

image.png

image.png

此次教程:Hoxton.SR10+SpringBoot2.3.X