【心得分享】-- 微服务架构演变过程

1. 微服务架构演变过程

1.1 传统的架构

所有的业务都写在一个工程里边(ALL IN ONE),开发起来比较简单,部署也比较简单,但是程序的耦合度高,业务与业务之间代码耦合在一起,不利于团队开发!

1.2 分布式架构

就是将原来的单体架构,拆分成多个负责相关业务的服务(降低业务之间的耦合度),每个服务拥有自己的相关资源(数据库、缓存、消息队列),各个服务间通过RPC远程调用进行通信(http、dubbo、grpc)。
在这里插入图片描述

1.2.1 SOA面向服务架构

    1. 什么是面向服务架构呢?

      面向服务架构即SOA,也就是说我们将公共的代码抽取出来,提供一个程序接口,供其他模块调用,SOA是一种架构思想,在SOA中有两个非常重要的概念,WSDL(Web服务描述语言,Web Service Description Language),它是一种服务描述语言,它的格式是xml,他在SOA架构中起到的是标识一个服务(WSDL描述了调用接口的元数据:ip地址、端口号、接口名称、参数等…),SOAP是SOA架构中的通信协议,它是基于Http网络通信协议以及XML通信格式的一种通信协议。

Tip: SOA中提供的接口不能够实现跨语言通信,通常它需要依赖一个ESB企业服务总线实现服务的跨语言调用,它提供数据转换以及可靠的消息服务。

SOA的实现:WebService/ESB

在这里插入图片描述

1.2.2.1 实现一个简单的WebService
1.2.2.1.1 创建服务提供者
  1. 创建一个简单的Maven项目
  2. 编写一个Service业务实现类
package com.muzili.webservice.service.impl;

import com.muzili.webservice.service.UserService;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

/**
 * @author: muzili(李敷斌)
 * @date: 2020-12-26
 * @version:
 * @description:
 */
@WebService
public class UserServiceImpl implements UserService {


    /**
     * 通过userId获取用户名称
     *
     * @param userId
     * @return
     */
    @WebMethod
    public String getUserName(Long userId) {
        return "测试用户名"+userId;
    }



    public static void main(String[] args) {
        Endpoint.publish("http://192.168.1.101:8098/service/UserService",new UserServiceImpl());
        System.out.println("服务发布成功!");
    }

}

代码解析:

  1. WebService注解用来标识这是一个WebService服务
  2. WebMethod用于将具体实现方法暴露出去
  3. main方法中的代码实现了WebService的接口暴露(也就是提供WSDL信息)
    在这里插入图片描述
1.2.2.1.2 创建服务消费者
  1. 创建一个JavaEE工程,选择WebService
    在这里插入图片描述

2.复制ucenter服务的服务暴露接口地址(http://192.168.1.101:8098/service/UserService?wsdl),借助IDEA生成WebService调用相关实现代码
在这里插入图片描述在这里插入图片描述

3.编写一个测试类,进行接口调用测试

package com.muzili.webservice.test;

import com.muzili.webservice.UserServiceImpl;
import com.muzili.webservice.UserServiceImplServiceLocator;

import javax.xml.rpc.ServiceException;
import java.rmi.RemoteException;

/**
 * @author: muzili(李敷斌)
 * @date: 2020-12-26
 * @version:
 * @description:
 */
public class TestMain {


    public static void main(String[] args) throws ServiceException, RemoteException {
        UserServiceImplServiceLocator userServiceImplServiceLocator = new UserServiceImplServiceLocator();
        UserServiceImpl userService = userServiceImplServiceLocator.getUserServiceImplPort();
        String userName = userService.getUserName(123L);
        System.out.println("resp=>"+userName);
    }

}

========程序运行结果
log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
resp=>测试用户名123

Process finished with exit code 0

1.2.2 微服务架构

1.2.2.1 微服务架构产生的原因
  1. SOA缺乏相关的服务治理生态。
  2. SOA是基于WSDL进行接口暴露,而WSDL是基于XML进行接口描述的所以非常占用网络带宽
  3. SOA基于SOAP进行服务间通信,SOAP(http+xml)这种通信方式不能够实现跨语言通信,往往需要借助ESB的支持
1.2.2.2 微服务的基本概念

微服务架构是从SOA演变过来的,所以它承上启下,取其精华去其糟粕,微服务架构的服务拆分粒度会比SOA更细,并且每个服务都会有相关的基础资源(数据库、缓存),微服务更适合前后端分离开发。并且微服务是基于http+json的通信方式,能够实现跨语言通信。
在这里插入图片描述

1.2.2.3 微服务架构与SOA架构有什么不同?
  1. 微服务架构有着完善的服务治理解决方案
  2. 微服务使用的通信协议是http+json、dubbo、grpc…,而SOA使用的通信协议是SOAP(http+xml)
  3. 微服务架构能够实现跨语言通信,而SOA架构无法实现它需要借助ESB企业服务总线的支持
1.2.2.4 微服务存在什么问题?
  1. 分布式事务一致性问题
  2. 分布式定时任务问题
  3. 分布式缓存一致性问题
  4. 应用配置问题
  5. 服务可用性问题
  6. 服务发现问题

解决方案有哪些?

  1. 分布式事务可以通过SpringCloudAlibaba Seate来解决/RabbitMq、RouteMq基于事务的最终一致性解决方案
  2. 分布式定时任务:XXL-job、Elastic-job、SpringCloudAlibaba ScheduleX
  3. 服务配置问题:SpringCloudConfig、Nacos
  4. 服务可用性问题:SpringCloudAlibaba Sentinel
  5. 服务发现问题:Eureka、Zookeeper、Consul、Nacos
1.2.2.5 为什么要使用SpringCloud

SpringCloud提供了一系列微服务的解决方案,大大节省了开发时间!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值