微服务框架可以分为侵入式和非侵入式两种,可以以微服务框架SpringClod来进行说明,在微服务框架中使用ErkaServer作为服务注册中心,在微服务单元上配置使用ErekaClient向注册中心进行注册,这样就会带来一个问题,在旧代码或者非JAVA代码(比如Python)中使用SpringClod微服务框架,这样就需要对旧代码及非JAVA代码进行微服务化的改造。

什么是微服务

微服务并没有一个官方的定义,可以理解为一种架构风格,将一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

以往的应用程序开发中,应用程序都是单体型,在开发和部署上比较方便,但是随着业务的不断增加,开发迭代和性能瓶颈等问题都会增加开发难度。微服务正是为解决这一设计问题而应运而生,微服务在将复杂系统切分为数十乃至上百个小服务的同时,这些小服务带来了语言和框架选择上的灵活性,缩短应用开发上线时间,可根据不同的工作负载和资源要求对服务进行独立缩扩容等优势。

微服务框架的技术点

微服务被拆分为多个微服务进程后,进程内的方法调用变成了进程间的远程调用,这种变化会带来分布式系统的一系列问题,比如:

服务的注册与发现

身份验证与*

服务的伸缩控制

反向代理与负载均衡

路由控制

流量切换

日志管理

性能度量、监控与调优

分布式跟踪

过载保护

服务降级

服务部署与版本升级策略支持

错误处理

从上述微服务存在的技术点可以得到微服务基础架构的如下关键点:

微服务技术框架的介绍

微服务框架可以分为侵入式和非侵入式两种,什么是侵入式和非侵入式呢?可以以微服务框架SpringClod来进行说明,在微服务框架中使用ErkaServer作为服务注册中心,在微服务单元上配置使用ErekaClient向注册中心进行注册,这样就会带来一个问题,在旧代码或者非JAVA代码(比如Python)中使用SpringClod微服务框架,这样就需要对旧代码及非JAVA代码进行微服务化的改造。SpringClod是侵入式的微服务框架,侵入式微服务架构还存在Dbbo框架。

什么是非侵入式的微服务框架呢,还是以微服务框架中微服务的注册来进行说明,比如将服务注册和服务调用从现有服务中抽离出来,形成一个服务代理。该服务代理也叫做Sidecar,负责找到目的服务并负责通讯的可靠性和*等问题。当服务大量部署时,随着服务部署的Sidecar代理之间的链接形成了一个如下图所示的网格,该网格成为微服务的通讯基础设施层,承载微服务之间的所有流量,被称为ServiceMesh(服务网格)。非侵入式的微服务框架的比较有代表性的方案有Istio和Condit。

下面对这几种方案进行一个简单初步的介绍。

SpringClod

SpringClod作为一个微服务的开发框架,包括了很多的组件,其中包括SpringClodNetflix(Ereka、Hystrix、Zl、Archais)、SpringClodConfig、SpringClodBs、SpringClodClster、SpringClodConsl、SpringClodSecrity、SpringClodSleth、SpringClodDataFlow、SpringClodStream、SpringClodTask、SpringClodZookeeper、SpringClodConnectors、SpringClodStarters、SpringClodCLI等。

另外SpringBoot为SpringClod提供一个简化基于Spring的开发环境,可以适应SpringBoot快速开发单个微服务。

Dbbo

Dbbo是一个阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。其核心部分包含:

远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

SpringClodVSDbbo

一个关于SpringClod和Dbbo很有意思的比喻,使用Dbbo构建的微服务架构就像组装电脑,各个环节的可选自由度很高,但是最终结果很有可能因为一条内存质量不行就点不亮了,但是如果是一个高手,这*都不存在问题。SpringClod就像*机,在SpringSorce的整合下,做了大量兼容性的测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外配件时,需要对配件足够的了解。