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