本篇主要介绍对于微服务的理解

现如今,随着互联网的发展,对于系统性能,架构均有了更高的要求。以前传统的ssh时代的单体应用的机构模式已显力不从心,所以微服务架构应运而生,并且形成了越来越成熟的方案。写本系列文章的目标是从单体架构模式到微服务完整架构模式做一个系统性的介绍,并且着重从实际操作层面上一步步地演示,将零散的知识点串联起来。

传统的单体应用的利弊

(比如ssh时代的惯用架构:SpringMvc、Spring、Hibernate)

单体应用模式的优点是开发和部署都非常方便,只需要考虑到单体应用如何实现业务逻辑,对于性能的扩展只需要复制部署到多个tomcat形成集群,用Nginx进行负载均衡,即可完成一个简单的分布式方案。缺点就是比较简单粗暴,不管三七二十一,直接把整个应用复制部署,没有细化到单个功能的性能管控,并且在性能上瓶颈也很明显,负载服务器,数据库,都是各个瓶颈点。

 

微服务开发框架 SpringBoot

首先讲一下什么是springboot,它实际上和springmvc框架解决的是同一件事,就是如何对外提供服务(api),并且在使用层面,代码注解也是是很相似的。

技术区别:

springmvc可以看成是servlet的封装,首先需要建立一个java web项目,通过web.xml的配置接入springmvc入口,并且最终要将java web项目部署到容器中(比如tomcat); 而springboot则可以直接看成是一个tomcat和java web应用的集装箱,你只需要按照约定配置好 核心配置文件(比如application.yml),写好你的控制器(controller),然后再加上一个main方法,就可以直接启动 tomcat+你的应用,部署后,也是直接用jar命令来启动一个Jar包这样的形式。

适用场景:

springboot非常适合 部署大量独立服务,细品一下。 一个springboot的jar包就是一个完整的tomcat+应用,指定不同的端口号,一个jar命令,就启动了应用。

微服务架构思想:

其实呢,在这儿有个架构上的思想转变,之所以要说微服务,就是因为整个应用从架构上就拆分成了各个小应用,比如说 电商系统,拆分成了订单微服务,用户微服务等等,每个微服务都使用各自独立的数据库,微服务之间使用RPC等方式进行交互,每个微服务都是可以独立运行,并且只解决某一类业务。这样整体架构就由大单体应用的模式转变为 微单体应用群+独立数据独立运行+服务间调用 这样的模式,整个架构的容错率,可扩展性,高可用性 就变得更强了。

 

微服务治理解决方案 SpringCloud

当开始使用SpringBoot将单体系统拆分成若干个微服务后,面临一大问题就是:如何管理好这些微服务呢?答案:SpringCloud

SpringCloud是一套微服务治理解决方案,首先放一个整体概念图。

上图已经初步表达清楚了SpringCloud的核心理念,而它的理念具体由很多组件来分别实现,早期大部分组件是封装了来自 Netflix 贡献的开源框架,后续SpringCloud又自研了类似 gateway 等组件,包括近来兴起的 SpringCloud Alibaba,这些都遵循SpringCloud的接口规范,可插拔可切换的程度非常高,很灵活,下面就来简单看下都有些什么组件。

SpringCloud的核心组件包含:

1、注册发现中心:汇总管理所有微服务的信息,包括IP,端口,API列表,并提供给其他组件。

相关技术框架:Eureka、Consul、Nacos

2、服务网关:负责对外统一提供API接口,网关可自行配置接口的转发规则,也可直接从注册中心获取接口信息。

相关技术框架:Springcloud gateway、Zuul

3、配置中心:统一管理所有配置信息,供所有微服务读取,具有更新通知、版本管理等功能

相关技术框架:Springcloud config、Nacos

4、限流:根据实际情况,对接口(QPS、并发数)做限制,保证系统的可用性

相关技术框架:Springcloud gateway自带限流过滤器、Sentinel

5、熔断降级:根据接口的当前状态,评估出不能正常提供服务的接口,让其熔断,防止整个系统因相互调用而雪崩

相关技术框架:Hystrix、Sentinel

6、调用链路追踪:监控整个服务的调用生命周期,协助定位错误

相关技术框架:Zipkin、Pinpoint,SkyWalking,CAT

7、远程服务调用:服务之间的相互调用技术

相关技术框架:Feign、Dubbo

......以上为最核心的功能组件(更多组件列表可参考:https://spring.io/projects/spring-cloud/

下面收集一些比较好的Springcloud概念讲解的文章:

最适合入门者的 SpringCloud 架构、概念、组件介绍

 

Docker

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

我们简单地理解Docker,就是一个集装箱,比如在下面的图中,实际每个微服务的运行都需要有一系列的程序来支撑,那么Docker的作用就是将 下面红框内的 jdk,mysql,springboot等打包成一个单独的Docker包,然后运行起来,对外映射出springboot的服务端口,提供服务。这样方便在不同操作系统或者环境中迁移和部署,只需要简单的几个Docker命令,就可以一键搭建好一套微服务。而不需要从安装各种基础软件开始。

 

K8S (Kubernetes)

 

k8s是一个docker集群的管理工具,它的核心功能:

自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。


弹性伸缩: 通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量
服务的自动发现和负载均衡: 不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。


滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。

 

 

先写这么多,接下来准备写完 springboot+springcloud+docker+k8s 的实战系列

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐