1 微服务生态圈
微服务(SpringCloud、阿里巴巴Dubbo)
- 单一职责:微服务拆分粒度更小,每个服务对应唯一的业务能力,避免重复开发
- 面向服务:微服务对外暴露业务接口
- 自治:团队独立、部署独立、数据独立、技术独立
- 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题
- Jenkins,对微服务项目的编译,然后通过docker打包。K8s和Rancher实现部署。
分布式架构:根据业务功能对系统进行拆分,每个业务模块独立开发,称为一个服务
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的生态圈变得更加成熟稳定。
2 服务架构演变
2.1 单体架构:
- 所有的业务的写在一个项目中;
- 优点是结构简单,部署成本低;
- 缺点:高耦合不利于升级维护
2.2 分布式架构:
- 将根据业务功能对系统进行拆分,每个业务模块按独立项目进行开发。
- 优点是低耦合利于维护升级拓展;
- 缺点是复杂部署成本高。
2.3 微服务:
3 微服务结构
国内知名微服务落地技术:SpringCloud、阿里巴巴Dubbo
3.1 微服务技术对比
3.2 企业需求
3.3 SpringCloud
SpringCloud是目前国内使用最广泛的微服务架构。官网:spring.io/projects/sp…
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即体验
此次教程:Hoxton.SR10+SpringBoot2.3.X