一文看懂微服务和常用的微服务落地技术

2020-05-21 00:00:00 微服 调用 服务 系统 熔断

近在我的秒杀深度优化课程中讲到分布式扩展的多种方法,其中有目前火的微服务扩展及对应的落地技术,特地希望可以通过一篇文章讲清楚内容,带大家入门。

微服务的概念

首先我们尝试用一段话解释一下微服务的概念,微服务区别于讲所有的服务,数据库访问等业务及中间层代码打在一个jar或者war包内的all in one的体系结构,以业务服务及领域模型的组合为单元拆分出可独立部署,独立运行,独立风险控制的系统组件应用的结合体。微服务拥有业务服务(可以理解为spring mvc中的service)及领域模型(可以理解为spring mvc中的model)为闭环,其本身的微服务系统所提供的服务业务边界清晰,生命周期独立且可自运行,可隔离,可追踪。

举个实际一点的例子,在没有采用微服务结构前,我们的电商java代码结构类似如下


所有的服务融合在一个业务程序内,采用all in one的打包方式组成一个jar或者一个war包,并且访问同一个mysql数据库,简单粗糙,服务之间调用关系由于是在一个代码包内,可以随意互相应用,业务关系不清晰,而且部署在一起,一旦一个服务或者对应的数据库产生问题,则全盘故障。于是我们把系统做了微服务化的拆分,以服务为单位将其变成一个分布式的系统


网关接入系统负责接收对应的web请求,转发给对应后面的业务服务系统处理对应的业务并接收返回转发给前端。后面的业务服务系统各司其职,每个系统只负责自己业务范围内的职责,比如商品系统仅服务商品相关的服务,创建,更新,查询,上下架等整个的生命周期并被购物车系统依赖,服务系统之间的逻辑关系清晰,且不同系统间只能通过对方提供的接口做访问,管理方便,每个系统拥有自己独立部署服务器,拥有自己的存储数据库,故障可隔离,配合日志,消息,监控,配置中心等分部署微服务下的配合组件做到一个可监控,可隔离,又可通信的服务体系。

微服务的落地技术

微服务的落地技术有很多,但总体来讲还是可以用几个简单的点去做分类,微服务的框架目前开源的用的多的是spring cloud,另外有人肯定会说为什么不是dubbo,那其实dubbo仅仅是解决了微服务技术中的一部分问题,例如服务通信,负载均衡,服务注册发现等,但是他没有解决降级限流,熔断控制,服务路由等问题,还需要自己实现或者结合一些第三方组件,因此spring cloud是真正意义上闭环完整的实现了所有微服务的落地功能技术。但是在这里我还是强烈推荐大家学习一下dubbo技术,毕竟在国内阿里体系公司技术流派的氛围下,阿里的开源组件是有很多爱好者和公司使用的,而且dubbo的面向服务插件的编程方式可以很容易的融合第三方库弥补其微服务的不完善性,终做到一个闭环的服务生态,那我们一起来看一下使用dubbo做微服务技术的具体落地,微服务需要解决以下几个问题

服务通信

隔离开系统之后,本来进程内的调用就要改成进程之间的调用了,进程之间的调用常用的方式就是网络通信,而远程的网络通信调用函数的方式就是RPC(Remote Process Call)远程过程调用,其并非是一个简单的网络通信过程,在java中依靠接口代理的通信机制使用服务消费方在进程内可以像调用本地函数一样去调用服务提供方的代码,其中间层由dubbo的服务代理机制负责搞定。
服务提供方代码:

##定义接口
package org.apache.dubbo.demo;

public interface DemoService {
    String sayHello(String name);
}
##实现接口
package org.apache.dubbo.demo.provider;
 
import org.apache.dubbo.demo.DemoService;
@Service
public class DemoServiceImpl implements DemoService {
    public String sayHello(String name) {
        return "Hello " + name;
    }
}

相关文章