什么是微服务
微服务是分布式架构的一种,所谓分布式架构就是将服务拆分未微小的服务,而在拆分的过程中就会产生各种问题。
而例如 SpringCloud
等技术就是解决了服务拆分过程中产生的问题,例如服务治理,还会其他的问题,SpringCloud
并没有解决。需要其他技术解决。
所以之前认为 微服务=springCloud
确实是格局太小了。
微服务技术栈/服务治理
在构建微服务架构的时候,首先就是做微服务的拆分。根据业务功能模块,将单体项目,拆分为独立的项目,每个项目完成一部分服务,每个服务独立部署,上线。
拆分微服务之后,一个业务动作需要经过多个服务协作才能完成,服务之间相互调用,那么随着业务的复杂,服务之间的调用关系将会非常复杂,这些复杂的调用就需要专门的机制完成调用之间的管理,例如A服务调用B服务,需要知道B服务的域名或者IP
- 注册中心
注册中心记录每个微服务的IP/域名
以及端口,还有服务的一些信息,如服务能干什么事情,每个服务在调用另外一个服务的时候,通过注册中心去拉当前分布式集群中可用的服务。
由了注册中心,每个服务有自己的配置,服务之间的服务也有可能都相同,维护每个服务的配置也是比较繁琐的事情。
- 配置中心
配置中心就是统一的管理整个集群的配置。
当微服务跑起来之后,就可以有用户来访问,但是这么多的服务用户应该访问哪个呢?于是就需要一个统一入口
- 服务网关
不能随便访问哪个服务(涉及到鉴权),也不知道又哪些服务可以访问,一个请求来了,服务网关就可以完成路由,以及负载均衡的功能。
微服务起来,用户多了之后,那么数据库可能会撑不住大的访问量,于是还需要缓存组件。
- 分布式缓存
将数据库数据放到内存中,以供快速的访问呢,用户请求先到缓存,缓存中没有,才去数据库。
- 分布式搜索
一个请求会来回调用多个服务,调用链路会比较长,调用时间也会比较长,整个时候就需要使用到异步调用,
- 消息队列
请求来了,直接将消息丢到消息队列中,请求直接返回,其它订阅了消息的服务去执行。这样整个系统的吞吐就增加了。
复杂的调用,当发生问题的时候,排查问题就会变得困难,于是就需要一个日志平台以及链路追踪。
- 日志服务
统计整个集群服务的运行日志,例如入参,出参异常等信息,统一的存储,分析。
- 系统链路追踪
实时追踪系统服务的信息,例如服务栈信息,内存使用情况,CPU 负载等。
微服务部署CD
- Jenkins- 编译
- docker - 构建镜像
- k8s - 编码镜像
意思服务治理 + 服务部署 = 微服务
特点
认识微服务
单体架构
例如说现在有一个商城项目,该项目是一个单体架构,基本不用考虑哪些复杂的架构设计,如 订单模块
,用户功能
等,在写功能的时候网上堆代码就可以了。所以其也有优点
- 架构简单
其部署也简单,直接将单体架构打成一个包,往Tomcat
一仍就可以了,如果请求多了,那么直接加机器就可以了。所以另外一个有点就是:
- 部署成本第
但是其缺点也非常大。
业务越来越复杂,模块越来越多,都放在一个项目中,那就意味着代码的耦合度高,代码量多,那么光代码编译,打包就非常低效,代码你中有我,我中有你,开发中根本不该动存量代码。
分布式架构:
按照业务模块将逻辑拆分。
拆分服务之后带来了好处
- 降低代码耦合度
模块间不影响
- 有利于服务升级拓展
一个服务升级了,只升级该服务就好,其他服务不涉及。
带来此优势的同时,带来的问题
服务拆分带来的治理和部署问题,常见的问题有:
- 服务拆分粒度如何考量
- 服务集群地址如何维护
- 服务之间如何实现远程调用
- 服务健康状态如何感知
微服务架构特征
- 单一职责
微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发。
服务业务更少,影响范围更少了。
- 面向服务
微服务对外暴露业务接口,
每一个服务均向外暴露调用方式,以供其他服务调用。
- 自治
每个服务独立,其使用的技术,部署方式,包括数据库等,均可以和其他服务独立。
团队独立,符合敏捷开发。
- 服务之间的隔离性
服务需要做好隔离,容错,降级,避免出现级联问题(一个出问题,影响到一大片)
国内比较皆知的微服务技术
SpringCloudAlibaba 兼容SpringCloud 和 Dubbo
总结
本篇完成微服务的入门理解,总结起来微服务是2部分内容
- 服务治理
- 服务持续发布
- 微服务和单体的优劣
- 目前国内流行的技术
推荐:内容以及素材来资源黑马程序员培训课程,质量非常不错的课程。