EDAS- ”性感“ 微服务剖析

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: ## 背景 对于一直以来阿里云的 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;
目录
相关文章
|
7月前
|
Kubernetes Serverless 应用服务中间件
通过EDAS实现K8s微服务应用的金丝雀发布
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ASK,体验微服务应用的部署、访问和高级发布能力。
246 0
|
7月前
|
弹性计算 Kubernetes 应用服务中间件
微服务和 Serverless 架构-EDAS 基本操作讲解与 EDAS 优势总结
微服务和 Serverless 架构-EDAS 基本操作讲解与 EDAS 优势总结
418 0
微服务和 Serverless 架构-EDAS 基本操作讲解与 EDAS 优势总结
|
7月前
|
弹性计算 监控 应用服务中间件
微服务和 Serverless 架构-EDAS 主要功能介绍
微服务和 Serverless 架构-EDAS 主要功能介绍
552 0
微服务和 Serverless 架构-EDAS 主要功能介绍
|
7月前
|
运维 应用服务中间件 Serverless
微服务和 Serverless 架构-EDAS 整体架构
微服务和 Serverless 架构-EDAS 整体架构
401 0
微服务和 Serverless 架构-EDAS 整体架构
|
弹性计算 Kubernetes Cloud Native
云原生微服务应用平台 EDAS 2022 年度报告
最近一年来,随着我们的客户对于云技术的诉求从资源快速交付的服务,转变为对资源精益运用的服务。EDAS 团队结合公共云上所服务的企业类客户的几万个应用,选取了 8 个最具代表性的指标,进行了一次系统性的分析整理和总结,希望可以给当前正在从事软件架构的从业人员一个侧面的视角,来了解一些当下发生在身边的技术现象。
云原生微服务应用平台 EDAS 2022 年度报告
|
弹性计算 Kubernetes Cloud Native
云原生微服务应用平台 EDAS 2022 年度报告
最近一年来,随着我们的客户对于云技术的诉求从资源快速交付的服务,转变为对资源精益运用的服务。EDAS 团队结合公共云上所服务的企业类客户的几万个应用,选取了 8 个最具代表性的指标,进行了一次系统性的分析整理和总结,希望可以给当前正在从事软件架构的从业人员一个侧面的视角,来了解一些当下发生在身边的技术现象。
336 1
云原生微服务应用平台 EDAS 2022 年度报告
|
中间件 应用服务中间件 微服务
《支撑海量用户的微服务技术-阿里巴巴中间件EDAS的服务化解决之道》电子版地址
支撑海量用户的微服务技术-阿里巴巴中间件EDAS的服务化解决之道
106 1
《支撑海量用户的微服务技术-阿里巴巴中间件EDAS的服务化解决之道》电子版地址
|
5天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
11 0
|
19天前
|
负载均衡 测试技术 持续交付
高效后端开发实践:构建可扩展的微服务架构
在当今快速发展的互联网时代,后端开发扮演着至关重要的角色。本文将重点探讨如何构建可扩展的微服务架构,以及在后端开发中提高效率的一些实践方法。通过合理的架构设计和技术选型,我们可以更好地应对日益复杂的业务需求,实现高效可靠的后端系统。
|
19天前
|
监控 持续交付 API
构建高效可扩展的微服务架构
在当今快速迭代和竞争激烈的软件市场中,构建一个高效、可扩展且易于维护的后端系统变得尤为重要。微服务架构作为一种流行的分布式系统设计方式,允许开发者将应用程序划分为一系列小型、自治的服务,每个服务负责执行特定的业务功能。本文将探讨如何利用现代技术栈搭建一个符合这些要求的微服务架构,并讨论其潜在的挑战与解决方案。我们将涵盖服务划分策略、容器化、服务发现、API网关、持续集成/持续部署(CI/CD)以及监控和日志管理等关键主题,以帮助读者构建出既可靠又灵活的后端系统。