EDAS- ”性感“ 微服务剖析

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: ## 背景 对于一直以来阿里云的 EDAS 中间件微服务应用开发、部署,都有这独特的性感,很多支持同时 渴望不可及。在现有行业微服务开发热火朝天,开发简单、部署高效、成熟的 EDAS 产品支持等优势,让我们今天从代码入手 ,让 ”性感“ 触手可摸; ## EDAS 支持开发模式 * dubbo ,原生 dubbo 平移到 EDAS,通过 pandoraboot 方式将 dubbo 转化为

背景

对于一直以来阿里云的 EDAS 中间件微服务应用开发、部署,都有这独特的性感,很多支持同时 渴望不可及。在现有行业微服务开发热火朝天,开发简单、部署高效、成熟的 EDAS 产品支持等优势,让我们今天从代码入手 ,让 ”性感“ 触手可摸;

EDAS 支持开发模式

  • dubbo ,原生 dubbo 平移到 EDAS,通过 pandoraboot 方式将 dubbo 转化为了 hsf 兼容了 dubbo 开发;
  • Spring cloud ,原生方式接入到 EDAS;
  • hsf ,天然支持,通过 pandora 容器方式进行开发;

典型 RPC

今天所有的演示、讲解都通过经典的 RPC 调用,服务的注册、发现、调用等维度进行说明,同时将会结合限流降级的功能一起演示;

image.png

PROVIDER

作为 RPC 中核心的角色,部署业务代码的关键,对外暴露出服务接口,通过注册的方式,将服务注册到 EDAS 服务中心;

itemcenter-api

package com.alibaba.edas.carshop.itemcenter;

/**
 * Alibaba Group EDAS. http://www.aliyun.com/product/edas
 */
public interface ItemService {

    public Item getItemById( long id );
    
    public Item getItemByName( String name );
    
}
  • 暴露服务接口,主要提供了两个方式,getItemById 获取商品 ID,getItemByName 获取商品名称

itemcenter

package com.alibaba.edas.carshop.itemcenter;


/**
 * Alibaba Group EDAS. http://www.aliyun.com/product/edas
 */
public class ItemServiceImpl implements ItemService {

    @Override
    public Item getItemById( long id ) {
        Item car = new Item();
        car.setItemId( 1l );
        car.setItemName( "Mercedes Benz" );
        return car;
    }
    @Override
    public Item getItemByName( String name ) {
        Item car = new Item();
        car.setItemId( 1l );
        car.setItemName( "Mercedes Benz" );
        return car;
    }
}
  • itemservice 主要用来实现接口的 getItemById getItemByName 这两个方法;
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:hsf="http://www.taobao.com/hsf"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.taobao.com/hsf
       http://www.taobao.com/hsf/hsf.xsd" default-autowire="byName">
    <bean id="itemService" class="com.alibaba.edas.carshop.itemcenter.ItemServiceImpl" />
    <!-- 提供一个服务示例 -->
    <hsf:provider id="itemServiceProvider" interface="com.alibaba.edas.carshop.itemcenter.ItemService"
        ref="itemService" version="1.0.0">
    </hsf:provider>
</beans>
  • 通过 spring 语法注入 itemservice 方法,将服务暴露出去; 如果在 hsf 中没有用 group 的方式,默认服务注册时分配的组是 hsf ,旧版本由于不支持多租户的概念所以 hsf 语法中必须加入 group=
package com.alibaba.edas.carshop.itemcenter;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Alibaba Group EDAS. http://www.aliyun.com/product/edas
 */
public class IndexServlet extends HttpServlet {

    private static final long serialVersionUID = -112210702214857712L;

    @Override
    public void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.write("OK");
        return;
    }
    
    @Override
    protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
        return;
    }

}
  • 在本例中通过 servlet 的方式做了一个简单的测试 demo,在 provider 部署成功后,可以直接测试;

CONSUMER

消费者 detail 订阅到 itemservice 服务后开始调用;具体也是通过 spring 的方法注入,bean 文件的语法格式和 PROVIDER 的 bean 文件的一致;

    @Override
    public void contextInitialized( ServletContextEvent sce ) {
        ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext( sce.getServletContext() );
        final ItemService itemService = ( ItemService ) ctx.getBean( "item" );
        Thread thread = new Thread( new Runnable() {
            @Override
            public void run() {
                while ( true ) {
                    try {
                        Thread.sleep( 500l );
                        System.out.println( itemService.getItemById( 1111 ) );
                        System.out.println( itemService.getItemByName( "myname is le" ) );
                    } catch ( Throwable e ) {
                        e.printStackTrace();
                    }
                }
            }
        } );
        thread.start();
    }
    public class IndexServlet extends HttpServlet {

    private static final long serialVersionUID = -112210702214857712L;

    @Override
    public void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
        final ItemService itemService = ( ItemService ) StartListener.CONTEXT.getBean("item");
        Item item = itemService.getItemByName(req.getParameter("name"));
        
        PrintWriter write = resp.getWriter();
        write.write(String.format("item id: %s, item name: %s", item.getItemId(),item.getItemName()    ));
    }
    
    @Override
    protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
    }

}
  • 订阅的服务 ID 命名为 item
  • 消费者 demo 中通过 pandoraboot 方式启动了一个容器;每 500ms 打印一次
  • indexservlet 中同样是提供了一个测试类

开始部署

所有部署过程都是由客户端 ECU 上的 configclient 完成,没有使用任何相关脚本;下面开始实践操作;

image.png

根据截图分解每个主要功能含义:

1)命名空间,逻辑对资源进行隔离管理,不通命名空间下的应用无法相互调用;

2)集群类型:swarm 集群、ECS 集群、容器服务 k8s 集群,集群是对 ECS 机器的统一管理;

3)应用部署方式:jar、war、镜像部署;
3.1) jar 普通的 java 应用,直接打包成 jar 后即可部署;
3.2) war ,web 类型的应用;
3.3) 通过 docker 镜像的方式部署应用;

应用环境比较特殊,原生的 sc 应用,和 Spring cloud pandora 的方式不一样,需要部署普通的标准 java 环境,后者需要部署 edas-container 的容器。

image.png

4)创建部署环境;

image.png

image.png

部署好后,左侧菜单是应用维度支持的组建功能,右上角是对应用的所有操作按钮;

image.png

针对应用所有的操作都可以在 “变更记录” 中看到,所有应用发布出现的异常都可以通过发布单排查分析;

5)部署应用

image.png

image.png

部署完成后,应用状态 “运行正常” agent 正常说明部署已经成功,下面开始测试。
部署任意 CONSUMER PROVIDER 都可以用我们编写的 indexservlet 测试类测试;

6)最后测试

本文中只部署了一个 provider 应用,可以在 ECU 上直接进行测试,可以通过 curl 的方式模式一个 http 请求;

image.png

未完待续......

相关实践学习
使用DAS实现数据库自动SQL优化
本场景介绍如何使用DAS实现数据库自动SQL优化。
SpringMVC框架入门
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts2等。 相关的阿里云产品企业级分布式应用服务 EDAS:企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Spring Cloud、Apache Dubbo(以下简称 Dubbo )等微服务运行环境,助力您的各类应用轻松上云。产品详情: https://www.aliyun.com/product/edas&nbsp;
目录
相关文章
|
弹性计算 Kubernetes 应用服务中间件
微服务和 Serverless 架构-EDAS 基本操作讲解与 EDAS 优势总结
微服务和 Serverless 架构-EDAS 基本操作讲解与 EDAS 优势总结
微服务和 Serverless 架构-EDAS 基本操作讲解与 EDAS 优势总结
|
弹性计算 监控 应用服务中间件
微服务和 Serverless 架构-EDAS 主要功能介绍
微服务和 Serverless 架构-EDAS 主要功能介绍
微服务和 Serverless 架构-EDAS 主要功能介绍
|
运维 应用服务中间件 Serverless
微服务和 Serverless 架构-EDAS 整体架构
微服务和 Serverless 架构-EDAS 整体架构
微服务和 Serverless 架构-EDAS 整体架构
|
Kubernetes Serverless 应用服务中间件
通过EDAS实现K8s微服务应用的金丝雀发布
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ASK,体验微服务应用的部署、访问和高级发布能力。
|
弹性计算 Kubernetes Cloud Native
云原生微服务应用平台 EDAS 2022 年度报告
最近一年来,随着我们的客户对于云技术的诉求从资源快速交付的服务,转变为对资源精益运用的服务。EDAS 团队结合公共云上所服务的企业类客户的几万个应用,选取了 8 个最具代表性的指标,进行了一次系统性的分析整理和总结,希望可以给当前正在从事软件架构的从业人员一个侧面的视角,来了解一些当下发生在身边的技术现象。
408 1
云原生微服务应用平台 EDAS 2022 年度报告
|
中间件 应用服务中间件 微服务
《支撑海量用户的微服务技术-阿里巴巴中间件EDAS的服务化解决之道》电子版地址
支撑海量用户的微服务技术-阿里巴巴中间件EDAS的服务化解决之道
129 2
《支撑海量用户的微服务技术-阿里巴巴中间件EDAS的服务化解决之道》电子版地址
|
弹性计算 Kubernetes Cloud Native
云原生微服务应用平台 EDAS 2022 年度报告
最近一年来,随着我们的客户对于云技术的诉求从资源快速交付的服务,转变为对资源精益运用的服务。EDAS 团队结合公共云上所服务的企业类客户的几万个应用,选取了 8 个最具代表性的指标,进行了一次系统性的分析整理和总结,希望可以给当前正在从事软件架构的从业人员一个侧面的视角,来了解一些当下发生在身边的技术现象。
云原生微服务应用平台 EDAS 2022 年度报告
|
监控 应用服务中间件
如下请问EDAS的这个问题怎么解决? 应用id:2b0e6935-47fb-40ec-a11d-7dac320aecc1 集群中的节点内存是足够的,部署跑不起来 可以帮忙看看吗,以前集群下应用发布都是正常的,最近集群下应用部署基本都报错跑不起来,提示节点不可用
如下请问EDAS的这个问题怎么解决? 应用id:2b0e6935-47fb-40ec-a11d-7dac320aecc1 集群中的节点内存是足够的,部署跑不起来 可以帮忙看看吗,以前集群下应用发布都是正常的,最近集群下应用部署基本都报错跑不起来,提示节点不可用
137 2
|
Kubernetes 负载均衡 Serverless
通过EDAS部署并访问应用
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ASK,掌握微服务应用的部署和访问。
|
应用服务中间件 开发者
EDAS 应用创建、启动和停止|学习笔记
快速学习 EDAS 应用创建、启动和停止
344 0
EDAS 应用创建、启动和停止|学习笔记