精华内容
下载资源
问答
  • 阿里edas开发工具包,
  • EDAS 产品定位;EDAS 客户画像;Kubernetes 应用 以应用视角全生命周期托管 K8s 工作负载;业务场景 阿里巴巴应用安全生产最佳实践;业务场景 业务多租户化细粒度权限管理;业务场景 业务大促等高并发时无保护导致多米诺...
  • edas-lite-configcenter.zip

    2020-03-20 11:11:05
    轻量配置中心edas-lite-configcenter端口修改,默认8080、9600,因为有些安全限制敏感端口,改为18080,19600
  • EDAS

    2018-08-07 11:59:00
    企业级分布式应用服务EDAS 产品概述 EDAS是阿里巴巴中间件团队研发的PaaS平台,为企业提供高可用和分布式的互联网架构解决方案.基于阿里云的资源管理和服务管理系统,并提供了分布式服务框架,服务治理,统一配置管理,...

    企业级分布式应用服务EDAS

    产品概述

    • EDAS是阿里巴巴中间件团队研发的PaaS平台,为企业提供高可用和分布式的互联网架构解决方案.基于阿里云的资源管理和服务管理系统,并提供了分布式服务框架,服务治理,统一配置管理,分布式链路跟踪,高可用及数据化运行等.
    • 全面兼容Apache Tomcat容器
    • 在EDAS上.可以一站式完成应用生命周期管理,包括发布,启动,停止,扩容,缩容和删除等

    • 全局事务服务(Global Transaction Service,简称 GTS)是一款高性能、高可靠、接入简单的分布式事务中间件,用于解决分布式环境下的事务一致性问题。该产品支持 DRDS、RDS、Oracle、MySQL、PostgreSQL、H2 等多种数据源,并可以配合使用 EDAS、Dubbo 及多种私有 RPC 框架,同时还兼容 MQ 消息队列等中间件产品,能够轻松实现分布式数据库事务、多库事务、消息事务、服务链路级事务及其各种组合,策略丰富,易用性和性能兼顾。

    应用场景

    在云环境中,应用发布与管理会变得十分复杂.本地开发完成的应用需要到每一台服务器进行发布和部署,以及应用的重启,扩容等.服务器的不断增加对运维人员是一个极大的挑战.

    针对这个场景,EDAS 提供了一个可视化的控制台,无论集群规模多大,都可以在控制台上轻松地进行应用生命周期管理。

    名词解释

    Ali-Tomcat:Ali-Tomcat 是 EDAS 中的服务运行时必须依赖的一个容器,主要集成了服务的发布、订阅、调用链追踪等一系列的核心功能,无论是开发环境还是运行时,均必须将应用程序发布在该容器中。

    Dubbo:Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是阿里巴巴 SOA 服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    EDAS:企业级分布式应用服务(Enterprise Distributed Application Service)。以阿里巴巴中间件团队多款久经沙场的分布式产品作为核心基础组件,面向企业级云计算市场提供高可用分布式解决方案,是阿里巴巴企业级互联网架构解决方案的核心产品。EDAS 充分利用阿里云的资源管理和服务体系,引入阿里巴巴中间件整套成熟的分布式产品,帮助企业级客户轻松构建大型分布式应用服务系统。

    EDAS Agent:EDAS Agent 是 EDAS 中安装在您的 ECS 上,主要用于 EDAS 服务集群与部署在相应的 ECS 上的应用程序之间进行通信的 Daemon 程序,在运行的过程中主要承担应用管理、状态回报、信息获取等功能;同时也是 EDAS 控制台与您的应用程序之间信息沟通的主要桥梁。

    EDAS RPC 服务:EDAS RPC 服务提供对 Dubbo 框架的支持。一个使用 Dubbo 框架开发的,并以 WAR 为部署方式的应用,可以无缝在 EDAS 平台进行应用的发布和管理,并使用所有 EDAS 所提供的服务治理和数据化运营功能。

    EDAS 应用生命周期:应用是 EDAS 管理的基本单位,一个应用下面通常包含了多台机器。EDAS 提供了完整的应用生命周期管理机制,可以完成应用从发布到运行过程的全面管理,包括应用创建、部署、启动、回滚,扩容缩容和停止删除等操作。

    EDAS 鹰眼监控系统/分布式链路跟踪:EDAS 鹰眼监控系统用于分析分布式系统的系统调用、消息发送和数据库访问,从而精准发现系统的瓶颈和隐患。

    EDAS 应用实例数限额:表示主账号及其名下的子账号所拥有的所有应用下面的实例数上限。付费账号在给主账号分配此限额的时候,其下的所有主账号的限额之和不能大于付费账号的总应用实例数限额。

    IaaS 基础监控:EDAS 的监控功能之一,能够针对应用的运行状态,对机器的 CPU、内存、负载、网络和磁盘等基础指标进行详细的监控。

    服务调用监控:EDAS 的监控功能之一,能够针对应用的服务调用情况,对服务的 QPS、响应时间和出错率进行全方面的监控

    分布式配置管理:EDAS 提供的功能,将分布式系统的配置信息在 EDAS 控制台上进行集中管理,可以实时增加、修改、删除配置,并将配置更新在全局范围或者应用内部进行推送

    分布式任务调度:任务调度服务允许您配置任意周期性调度的单机或者分布式任务,并能对任务运行周期进行管理,同时提供对任务的历史执行记录进行查询。适用于诸如每天凌晨2点定时迁移历史数据,每隔5分钟进行任务触发,每个月的第一天发送系统月报等任务调度场景。

    服务鉴权:HSF 服务框架致力于保证您每一次分布式调用的稳定与安全。在服务注册、服务订阅以及服务调用等每一个环节,都进行严格的服务鉴权。

    服务限流:EDAS 可以对每一个应用提供的众多服务配置限流规则,以实现对服务的流控,确保服务能够稳定运行。限流规则可以从 QPS 和线程两个维度进行配置,帮助您在应对流量高峰时,确保系统能以最大的支撑能力平稳运行。

    服务降级:与服务限流相反,每一个应用会调用许多外部服务,对于这些服务配置降级规则可以实现对劣质服务的精准屏蔽,确保应用自身能够稳定运行,防止劣质的服务依赖影响应用自身的服务能力。EDAS 从响应时间维度对降级规则进行配置,帮助您在应对流量高峰时合理地屏蔽劣质依赖。

    自动化压测:独创的自动化压测工具模型,能够帮助客户将性能压测融入到日常生活中。值得一提的是,所有自动化压测的流量,全是生产环境真实流量,通过对服务权重的控制,在保证稳定的前提下,真正意义上做到线上压测。

    安装EDAS Agent

    在EDAS部署应用之前,需要先在ECS上安装EDAS Agent.EDAS Agent是EDAS服务器集群与部署在相应的ECS之间进行通信的Daemin程序

    注意:EDAS Agent 中默认安装 JDK 8。如果您需要使用 JDK7,可以通过使用命令脚本手动安装 Agent,并在末尾加上 -force -java 7。

    比如华北2(北京 Region)安装 JDK 7 的命令如下:

    wget -q -O /root/install.sh http://${selectedregion url}/install.sh && sh /root/install.sh -force -java 7

    使用命令脚本手动安装Agent

    1. 登录 EDAS 控制台,在左侧导航栏中选择资源管理 > ECS,然后在实例列表页面右上角单击导入 ECS。
    2. 在导入 ECS 页面右上角单击切换成手动安装,跳转到 安装 Agent 页面,单击点击复制,拷贝命令。
    3. 以root身份运行命令.完成后到EDAS控制台看Agent是否正常

    在购买ECS时通过EDAS基础镜像自动安装Agent

    1. 在 ECS 实例列表页面右上角,单击创建实例,跳转到 ECS 购买页面。
    2. 在购买页面的镜像一栏中,选择镜像市场,然后单击从镜像市场选择(含操作系统)。
    3. 在镜像市场对话框的搜索框中输入 EDAS,单击搜索。
      • 如果是用来创建普通应用,选择 EDAS JAVA 环境 (普通 ECS)。
      • 如果是用来创建 Docker 应用,选择 EDAS分布式应用。
    4. 在搜索结果中选择 EDAS JAVA 环境 (普通 ECS),版本默认选择当前最新,单击使用,即完成了 EDAS 基础镜像的选择

    通过导入ECS自动安装Agent

    1. 在 EDAS 控制台 左侧的导航栏中选择资源管理 > ECS,在实例列表页面右上角单击导入 ECS。
    2. 在导入 ECS 界面中,选择集群,单击下一步。
      • 如果是用来创建普通应用,则直接用默认的选择 xxxx_default【ECS 集群】。
      • 如果是用来创建 Docker 应用,则根据下来框中的集群来选择。
      • 如果没有想要的集群,可以单击新建集群来创建新的集群。

    注意:确认导入 ECS 后,系统会把 ECS 上的所有数据清除,使用 EDAS 的官方镜像重装操作系统。请记住新密码。

    发布应用

    发布应用包括创建应用、部署应用和配置负载均衡 3 步。

    创建应用

    说明:

    • 应用运行环境:如无特殊需求,请选择 EDAS Container 的最新版本。
    • 应用名:请尽量选择易于辨识的名称。
    • 命名空间:请选择导入 ECS 的命名空间。
    • 网络类型会随所选集群而定,不可选择。

    部署应用

    EDAS 提供同时部署多台 ECS 实例的功能。本文以一台 ECS 实例为例,所以在分批发布次数下拉列表选择默认的 1 次就可以。

    • 文件上传方式:选择上传 war 包,然后单击下载样例工程,将编译好的 WAR 包保存到本地。
    • 上传 WAR 包:单击选择文件,选择刚下载好的样例工程 WAR 包。
      如您想了解 WAR 包开发的规范,请参考开发者指南中服务开发章节的内容。

    配置负载均衡

    如果配置选项中没有SLB清闲创建并配置SLB

    (如果需要进行 SLB 端口监听)勾选 SLB 端口监听右侧的开启选项,设置 SLB 前端端口,然后单击配置负载均衡。

    用户指南

    EDAS 中的资源主要是指云服务器 ECS (Elastic Compute Service)、负载均衡 SLB(Server Load Balancer)、专有网 络 VPC(Virtual Private Cloud)这三类。

    ECS

    • 如果您在 2017 年 6 月 14 日 17:00 (UTC+8)之后,第一次购买 ECS 实例,不能再选择经典网络,只能选择专有网络(VPC)。在此之前创建的经典网络的 ECS 实例可以继续使用。
    • 在 VPC 创建 ECS 实例,需要选择 VPC,且选择 VPC 之后,该 ECS 实例不能再转移到其它 VPC 中。所以请确认您要创建 ECS 实例的 VPC。如果没有 VPC,请先创建 VPC。
    • 注意:如果您选择公共镜像或自定义镜像,EDAS 目前仅支持 CentOS 6.5/6.8/7.0/7.2/7.3/7.4 64 位操作系统。

    VPC

    • 经典网络
      经典网络类型的云产品,统一部署在阿里公共基础内,规划和管理由阿里云负责,更适合对网络易用性要求比较高的客户。
    • 专有网络
      专有网络是一个可以自定义隔离专有网络, 您可以自定义这个专有网络的拓扑和 IP 地址,适用于对网络安全性要求较高和有一定的网络管理能力的客户

    在 VPC 网络内,ECS 实例与 EDAS 服务器隔离。所以需要安装日志采集器来收集 ECS 的信息。单击实例列表操作列中的安装日志采集器进行安装。安装日志采集器的具体步骤,请参考安装日志采集器。

    日志采集器

    在 EDAS 提供的一系列服务中,很多数据都是从本地机器拉取的,这就要求服务器可以连接到对应的机器上。

    阿里云的网络环境分为经典网络和 VPC 网络两种。

    • 在经典网络中,如果防火墙和安全组没有特殊的端口(8182)限制,服务器是可以直接连接的。
    • 在 VPC 网络中,机器天然与服务器隔离。针对 VPC 网络,EDAS 提供了一个特殊的解决方案:日志采集器(鹊桥)

    日志采集器分为 Server 端和 Client 端。SProxy 则是安装在您机器上的日志采集器 Client。

    必须在 VPC 内部选取一台机器(假设为机器 A)来安装日志采集器。即SProxy,然后机器A会收集VPC内的其他机器信息,来与EDAS集群(Server端)记性通信

    资源组

    资源组是EDAS对资源的一种划分,资源组只能绑定ECS或者SLB,不能绑定VPC.当您使用主账号负责购买资源,子账号负责应用运维时,可以使用资源组对账号的权限进行控制。

    • 某公司使用了 EDAS 搭建自己的业务应用。其中部门 A 负责用户中心的应用,部门 B 负责商品中心的应用。
    • 两个部门共同使用了一个 EDAS 主账号开通的 EDAS 服务,并分别有一个子账号。 部门 A 有几台专用 ECS 和 SLB 实例,用于部署用户中心的应用。
    • 该公司在使用 EDAS 的时候创建了一个资源组,向这个资源组中添加部门 A 的 ECS 和 SLB 实例,然后将这个资源组授权给部门 A 使用的子账号。
    • 部门 A 在使用这个子账号时只能操作这个资源组中的资源。部门 A 和部门 B 之间不会产生冲突。

    集群

    支持ECS集群,Swarm集群,kubernetes集群.网络类型包括经典网络和VPC网络,其中K8S只支持VPC网络

    命名空间

    您在使用 EDAS 的过程中,通常需要进行资源(ECS)隔离。EDAS 支持按不同账号分配资源,利用账号实现资源隔离。同时,也可以利用 VPC 的网络隔离特性实现资源隔离。但这两种方式会在操作难度(账号切换)和实现成本(需要购买多个 VPC)两方面给您造成不必要的负担,而且不能兼顾资源隔离和统一管理。在经典网络中也无法实现资源的网络隔离。

    为了解决这个问题,EDAS 实现了一个新功能:命名空间。在某个地域(Region)的经典网络或 VPC 中,一个命名空间对应一个环境(包含一个或多个集群),不同命名空间之间逻辑上天然隔离。同时,一个账号可以创建多个命名空间。命名空间帮助您将多个环境间的资源完全隔离,并可以使用一个账号进行统一管理。

    应用管理

    应用简介

    EDAS支持三种累心应用的发布:

    • 普通应用: 指直接通过JAR/WAR包部署的应用
    • Docker应用: 指部署在Docker容器中的应用
    • Kubernetes应用: 通过 Kubernetes 发布的应用。Kubernetes 的更多信息请参见 Kubernetes 官网文档。

    以下转载自:http://www.cnblogs.com/ealenxie/p/8967012.html

    EDAS支持语言Java,C++,PHP。EDAS支持Idea,Eclipse;Eclipse插件安装等编译工具。EDAS初级版仅支持应用的部署管理,不支持HSF功能。EDAS基础版不支持RPC框架。

    EDAS提供高性能的RPC框架,能构建高可用的分布式系统,考虑各个应用之间的分布式服务发现、服务路由、服务调用以及服务安全等细节。EDAS能单独部署到公司内网。

    EDAS HSF服务框架保证用户每次分布式调用的稳定与安全。在服务注册、服务订阅以及服务调用等环节都进行严格的服务鉴权。

    HSF设置超时时间 : 通过HSF标签methodSpecials和clientTimeout进行配置,优先级由高到低是 : 客户端methodSpecials>客户端clientTimeout>服务端methodSpecials>服务端clientTimeout

    EDAS控制台域名 : https://edas.console.aliyun.com

    EDAS控制台提供日志浏览功能,可查看服务器上所部署的应用运行日志。收敛日志用于将单个应用中类似格式的日志合并和排序。收敛日志配置后需要等待大概5分钟才能生效。

    EDAS安装轻量配置中心 : 启动配置中心将会占用此台机器的8080和9600端口,需要在hosts中添加 {轻量配置中心公网 ip} jmenv.tbsite.net。如果此台机器是多网卡的,可启动脚本startup.bat或startup.sh中添加启动参数: -Daddress.server.ip={指定的 IP 地址};通过 -Dhsf.server.ip参数指定要注册服务的IP。

    EDAS 服务限流的限流规则(限流规则仅适用于服务调用者)能够从QPS和线程两个维度进行配置。可进行HSF限流和HTTP限流。

    EDAS 提供了从响应时间维度对降级规则(降级规则仅仅适合服务提供者)的配置。

    EDAS 鹰眼监控系统能够分析分布式系统的每一次系统调用、消息发送和数据库访问。主要包括应用拓扑(可查看调用拓扑和流量QPS),调用链查询(可查看慢业务和出错业务),调用链详情(基于TraceId查询)。

    EDAS 提供报警功能,但目前只有短信与邮件通知的方式。

    EDAS 的应用主要分为两种类型:中间件服务化应用(JAR/WAR包类型的普通应用和Docker应用)和 Kubernetes 应用。Kubernetes应用只支持VPC网络。

    EDAS 的应用部署类型有两种 : ECS独占实例(在一台独立的ECS机器上,仅允许部署单独一个应用),Docker实例(单个应用在同一ECS上只能部署一个实例)

    EDAS 能够针对应用的服务调用情况,对服务的QPS、响应时间(RT)和出错率进行全方面的监控。

    EDAS 能够针对应用的运行状态,对机器的CPU、内存、负载(Load)、网络和磁盘等基础指标进行详细的监控。EDAS还提供容器监控功能(应用诊断)。基础监控(可提供以应用为维度的数据)面向的是机器,容器监控面向是应用所在的容器。基础监控存在时延,容器监控基本是实时的。

    EDAS 提供弹性伸缩功能来根据集群内服务器的CPU、RT和Load三个指标实现自动的扩容或者缩容。

    EDAS 对应用的生命周期管理,包括创建、部署、启动/停止和删除(应用删除不可恢复)。可设置JVM参数,Tomcat参数,可对应用的实例分组(可按分组部署应用,添加实例到分组),可配置负载均衡。可配置健康检测URL。

    EDAS 包含两种集群:Swarm(部署普通应用和Docker应用)和Kubernetes集群(部署Kubernetes应用)。

    EDAS 的配置推送分为全局配置推送和应用内部的配置推送。全局配置推送能操作该用户的所有配置信息,应用内的配置推送只能操作该应用所属的配置信息。一个配置信息由三元组(group、DataId、Content)组成。

    EDAS 提供主子账号体系,付费账号都是主账号(拥有EDAS所有资源,所有权限),但不是所有的主账号都是付费账号。1个付费账号最多能绑定5个主账号。RAM子账号由主账号在RAM系统中创建,子账号名要在主账号内唯一。RAM账号有两种授权方式 : RAM授权,EDAS授权(两种方式互斥,有了RAM授权,那么就不能在EDAS中授权),主账号可以对绑定的子账号(用户)进行权限分配、资源分配等。应用的授权只能是主账号对子账号进行授权。

    EDAS 的资源主要是指云服务器ECS(Elastic Compute Service)、负载均衡SLB(Server Load Balancer)、专有网络VPC(Virtual Private Cloud)这三类。

    VPC环境调用链和监控数据需要有访问请求流量才会产生,如果无客户访问网站,则不会有曲线。确定机器的8182端口打开。执行 netstat -antp|grep 8182查看是否端口开放。

    EDAS Agent是EDAS中安装在用户ECS上,主要用于EDAS服务集群与部署在相应的ECS上的应用程序之间进行通信的Daemon程序,在运行的过程中主要承担应用管理、状态回报、信息获取等功能,Edas Agent在每个区的安装脚本都是不一样的。如果安装Agent的过程中发现卸载Java,说明指定的JDK版本与安装版本不一致;如果EDAS Agent心跳停止了, ECS的实时状态会变成Agent异常 ,此时,任何对该ECS的部署、启动、停止等命令均无效。重启服务器后EDAS Agent会自动重启,但是Tomcat不会。如果配置JVM参数(在EDAS Agent2.8.0 版本及以上才有效),参数会被写到容器目录下的bin/setenv.sh文件中,需要重启Tomcat和应用才可以生效。

    EDAS 容器由AliTomcat,Pandora和定制的Pandora插件组成。EDAS容器发布不会对已部署的应用产生任何影响。

    Ali-Tomcat是EDAS中的服务运行时必须依赖的容器,主要集成服务的发布、订阅、调用链追踪等一系列的核心功能,无论是开发环境还是运行时,均必须将应用程序发布在该容器中。

    Pandora是轻量级的隔离容器,也就是taobao-hsf.sar,用来隔离Web App和中间件的依赖,隔离中间件之间的依赖,让其相互之间互不影响。

    定制的Pandora插件中集成了实现服务发现的插件、实现配置推送的插件、实现调用链跟踪的插件等各种中间件产品插件。对EDAS应用进行服务监控、治理、跟踪、分析等全方位运维管理。

    EDAS高级版的流量管理规则有两种模式 : 参数取模和名单分流。通常用于灰度发布,蓝绿部署,A/B 测试,营销需求(新产品发布)。

    EDAS提供Open API,可以提供资源查询,应用生命周期管理和账号管理功能。

    EDAS日志采集器(鹊桥) : 仅支持CentOS 6.5/7.0/7.2 64位和Ali-Linux 15.1 64位,可在多台机器上安装,推荐在安装了EDAS Agent的机器上安装(并不是必须的)。安装完成后手动检测端口(8000)是否建立成功。

    Dubbo是第一代RPC框架。

    转载于:https://www.cnblogs.com/tastepy/p/9436191.html

    展开全文
  • edas-config-center

    2018-04-26 15:36:46
    企业级分布式应用服务EDAS:以应用为中心的中间件PaaS平台
  • 详细的edas开发配置开发文档,完edas的同学可以看看,详细的开发流程,一文搞定edas开发
  • Springboot+HSF分布式服务框架+EDAS注册中心,实现发布订阅模式
  • edas-config-center.jar

    2019-05-17 17:05:26
    阿里轻量配置中心
  • EDAS最佳实践.pdf

    2021-01-06 20:56:34
    阿里云edas 最佳实践
  • edas

    2019-02-27 14:17:09
    host配置 \Windows\System32\drivers\etc\hosts文件中添加以下内容 172.16.8.11 jmenv.tbsite.net (ip为...shell - pom 文件中 需要引入 ctrl 和 serv 的依赖 , 将依赖raincloud-dubbo 改成raincloud-edas 嗯,...
    1. host配置
      \Windows\System32\drivers\etc\hosts文件中添加以下内容
      172.16.8.11 jmenv.tbsite.net (ip为电脑当前ip)

    2. Main启动类 需要用潘多拉启动

    3. shell - pom 文件中 需要引入 ctrl 和 serv 的依赖 , 将依赖raincloud-dubbo 改成raincloud-edas

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    嗯,基础服务统一引用

    org.syman
    r3-srv-impl
    1.0.0-SNAPSHOT

    就可以了,那些服务不用每个项目copy了

    展开全文
  • 对传统电梯覆盖方式的分析,进而介绍EDAS技术的组网结构、特点、对基站的影响及在应用价值中的建设成本和施工周期方面和传统室分方案做了比较。通过测试验证,效果明显,可得到覆盖指标RSCP、Ec/Io提高了约90%以上,...
  • EDAS中HSF方式启动服务入门文档,详细描述了EDAS中HSF方式的启动过程
  • 企业级分布式应用服务 EDAS 开发者指南 企业级分布式应用服务 EDAS/开发者指南 开发者指南 EDAS配置中心安装与使用文档 一EDAS配置中心能帮您做什么 EDAS为您提供两种方式来配置服务 开发者在本机配置DNS将 指向5...
  • EDAS开发者指南.pdf

    2016-12-08 20:27:12
    EDAS开发者指南.pdf
  • EDA:EDAs模型-源码

    2021-03-22 11:04:17
    自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) ...
  • EDAS-HSF-BOOT

    2018-08-15 14:10:51
    EDAS 生产者 消费者 api 齐全 环境配好既可以使用................................................................
  • EDAS集成ACM-附件资源

    2021-03-02 15:11:45
    EDAS集成ACM-附件资源
  • EDAS开发指南

    千次阅读 2020-01-06 11:10:50
    1. 开发工具准备 ...通过在 Eclipse 安装 Tomcat4e 插件,或者在 Intellij Idea 安装配置 Ali-tomcat,可以快速方便地启动并调试基于 EDAS 服务化框架 HSF 开发的应用。 1.1.1 Eclipse 安装 Tomcat4E Ec...

    1. 开发工具准备

    目前开发工具主要介绍 Eclipse 和 Intellij Idea 相关插件的安装配置。
    1.1 Ali-Tomcat 安装
    通过在 Eclipse 安装 Tomcat4e 插件,或者在 Intellij Idea 安装配置 Ali-tomcat,可以快速方便地启动并调试基于 EDAS 服务化框架 HSF 开发的应用。
    1.1.1 Eclipse 安装 Tomcat4E
    Eclipse Tomcat4E 安装 1 通过以下地址下载插件,
    http://edas-public.oss-cn-hangzhou.aliyuncs.com/tomcat4e.zip
    2.解压压缩包里面内容如下:
    在这里插入图片描述
    2. 打开 eclipse,点击工具栏菜单 Help 按钮,选择 Install New SoftWare,弹出如下页面:
    在这里插入图片描述
    3.点击 Add 按钮,选择 local 按钮,找到本地解压的 tomcat4e,点击 ok:
    在这里插入图片描述
    4.点击 Select All 选择列表 tomcat4e 插件,点击 next 完成安装:
    在这里插入图片描述
    Eclipse tomcat4e 配置
    1.从以下地址下载 Pandora(taobao-hsf.sar):
    http://edas-public.oss-cn-hangzhou.aliyuncs.com/install_package/pandora/unauth/
    taobao-hsf.tgz

    3. 在 Eclipse 里创建了 web 工程(已创建 web 工程),点击 run configuration 如下图:
    在这里插入图片描述]/img-blog.csdnimg.cn/20200106105407657.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDExNzc2Nw==,size_16,color_FFFFFF,t_70)
    4. 在新建的应用配置 pandora 路径,在图中红色位置配置 pandora 包路径:
    在这里插入图片描述
    5. 点击 Apply 和 Run。 一个工程只需要配置一次,下次可以直接启动了。

    1.1.2 Intellij Idea 安装 Ali-Tomcat

    注意:
    目前通过 IDEA 使用 Ali-Tomcat 的方式,仅 IDEA 的商业版才支持。
    1.下载 Ali Tomcat:
    http://edas-public.oss-cn-hangzhou.aliyuncs.com/install_package/tomcat/taobao-tomcat-7.0.59.tgz
    2.从菜单中或者工具栏中点击 Run 选择 Edit Configuration:
    在这里插入图片描述
    3.点击界面左上方的+号增加一个 Tomcat 的本地实例:
    在这里插入图片描述
    4. 通过 Application Server -> Configuration…指定 Tomcat 的位置:
    在这里插入图片描述
    5. 在弹出的 Applicaton Servers 对话框里单击+,并选择 Ali Tomcat 7.0.59 的安装目录
    在这里插入图片描述
    6. 配置好的 Run/Debug Configuration 中 Application Server 指向刚刚配置好的 Ali Tomcat 实例
    在这里插入图片描述
    7.配置 Pandora(taobao-hsf.sar)
    下载地址:
    http://edas-public.oss-cn-hangzhou.aliyuncs.com/install_package/pandora/unauth/
    taobao-hsf.tgz

    说明:
    如果把 sar 包放到 tomcat 的安装目录($CATALINA_HOME)的 deploy 目录下,那么不需要指定
    -Dpandora.location 参数。
    如果把 sar 包放到其他地方,请指定 JVM 参数-Dpandora.location 来配置
    Pandora(taobao-hsf.sar) 的位置。

    1.2 HotCode 插件安装(可选)

    HotCode 插件的作用是,当你启动应用后,修改应用代码,保存代码后,将会立刻生效,而不需
    要重启整个应用。 这一功能在一些大型应用的开发中,对于ᨀ高调试效率会很有帮助。
    EDAS 开发者指南
    1.2.1 Eclipse 安装 Hotcode 插件

    1. 通过以下地址下载插件,
      http://edas-public.oss-cn-hangzhou.aliyuncs.com/hotcode2e.zip
      Tomcat4E 插件一样进行本地安装。
      2.下载 http://edas-public.oss-cn-hangzhou.aliyuncs.com/install_package/hotcode2/hotcode2.jar
      与 1 中安装 hotcode 插件中配置关联,如下图:
      在这里插入图片描述
      3.开启 Hotcode,点击工具栏中的 hotcode 图标,如下图:
      在这里插入图片描述
      启动应用之后,就可以在控制台的日志中末尾看到如下日志输出:
      在这里插入图片描述
      1.2.2 Intellij Idea 安装 Hotcode 插件
    2. 在以下地址下载
      http://edas-public.oss-cn-hangzhou.aliyuncs.com/install_package%2Fhotcode2%2Fhotcode2-idea-plugin.jar
    3. 通过 Install plugin from disk,选择前面本地保存的 hotcode 目录,完成 Hotcode 的安装
      在这里插入图片描述
    4. 安装完成之后,在工具栏点击 Hotcode 插件的图标即可针对当前工程激活
      Hotcode。
      说明:在安装插件的情况下,应用不再需要配置-Dhotcode.base, 也就是说,在
      hotcode 插件激活的时候,唯一需要指定的是 taobao-hsf.sar 的位置
      (-Dpandora.location)。
      在这里插入图片描述
    5. 确认 Hotcode 和 Pandora 启动,应用部署成功。
      在这里插入图片描述
    6. 开发环境搭建
      完成以上工具准备后,您可以通过安装配置中心(地址服务器、Diamond、ConfigServer)
      来快速搭建 EDAS 本地开发环境。 2.1 启动 EDAS 配置中心
      请按照以下步骤启动 EDAS 配置中心:
    7. 确认环境是否达到要求:
    1. 正确配置环境变量 JAVA_HOME,指向一个 1.6 或 1.6 以上版本的 JDK。
    2. 确认 8080 和 9600 端口未被使用。
      注意事项:
      由于启动 EDAS 配置中心将会占用此台机器的 8080 和 9600 端口,因此推荐您找一
      台专门的机器启动 EDAS 配置中心,比如某台测试机器。
    1. 启动 EDAS 配置中心:
    1. 从以下地址下载 EDAS 配置中心安装包并解压:
      edas-config-center.zip
    2. 进入 edas-config-center 目录启动配置中心: z Windows 系列操作系统请双击 startup.bat。 z Unix 系列操作系统请在当前目录下执行下面的命令。
      sh startup.sh 2.2 使用 EDAS 配置中心
      在本地 DNS(hosts 文件)中,将 jmenv.tbsite.net 指向启动了 EDAS 配置中心的机器 IP。
      hosts 文件的路径如下: z Windows 系列操作系统:C:\Windows\System32\drivers\etc\hosts
      EDAS 开发者指南
      z Unix 系列操作系统:/etc/hosts
      示例:
      如果您在 IP 为 192.168.1.100 的机器上面启动了 EDAS 配置中心,则所有开发者只需要在机
      器的 hosts 文件里加入如下一行即可:
    192.168.1.100 jmenv.tbsite.net
    

    2.3 通过 EDAS 配置中心查询某个应用ᨀ供或调用的服务
    以下过程假设您在一台 IP 为 192.168.1.101 的机器上启动了 EDAS 配置中心。 1. 进入 http://192.168.1.101:8080/
    2. 在左侧菜单栏点击服务列表,会显示以下页面。您可以根据服务名、服务组名或者 IP
    地址进行模糊搜索,用来查询服务ᨀ供者以及服务调用者。
    在这里插入图片描述
    常见查询案例:
    在ᨀ供者列表页:
    z 在搜索条件里输入 IP 地址,点击“搜索”即可查询该 IP 地址的机器ᨀ供了哪些服务。
    z 在搜索条件里输入服务名或服务分组,即可查询哪些 IP 地址ᨀ供了这个服务。
    在调用者列表页:
    z 在搜索条件里输入 IP 地址,点击“搜索”即可查询该 IP 地址的机器调用了哪些服务。
    z 在搜索条件里输入服务名或服务分组,即可查询哪些 IP 地址调用了这个服务。

    3. HSF 开发

    3.1 HSF 简介
    HSF(High Speed Service Framework),高速服务框架,是阿里-主要采用的服务框架,其目的是
    作为桥梁联通不同的业务系统,解耦系统之间的实现依赖。
    3.3.1RPC
    远程过程调用(Remote Procedure Call)是一种通过网络从远程计算机程序上请求服务的协
    议,它的特点在于不需要了解底层网络技术。在 OSI 网络通信模型中,RPC 跨越了传输层和
    应用层。RPC 使得开发分布式应用更加容易。
    3.3.2 ConfigServer(地址注册中心)
    HSF 是一个 RPC 框架,服务端需要将地址发送到注册中心让客户端能够进行服务发现,客户端需要通过注册中心订阅一个服务的地址。服务与地址的对应关系是多对多的关系,一个服务可以由多个地址ᨀ供,一个地址可以ᨀ供多种服务。当一个服务有了新地址(机器)或者减少了地址(机器)时,注册中心会通知这个服务的订阅方将地址增加或者减少,这个注册中心就是 Configserver,它负责存储地址信息以及地址变更的推送。具体信息请参考本文
    第二章开发环境搭建。
    3.3.3 Diamond(配置中心)
    HSF 持久化的配置中心是 Diamond。HSF ᨀ供软负载服务,其中的路由规则是在 Diamond 上
    进行配置,然后推送到客户端进行解析,第二章节中开发环境搭建已经包含 Diamond。
    3.3.4 Pandora
    Pandora 是 HSF 生存的容器,由 pandora 来管理整个 HSF 的生命周期和二方包的隔离。
    3.2HSF 标签清单
    3.3.3.1 Consumer 配置

    标签配置示例:
    <hsf:consumer id=“service” interface=“com.taobao.edas.service.SimpleService”
    version=“1.1.0” group=“test1” clientTimeout=“3000”
    target=“10.1.6.57:12200?_TIMEOUT=1000” maxWaitTimeForCsAddress=“5000”>
    hsf:methodSpecials
    <hsf:methodSpecial name=“sum” timeout=“2000” />
    </hsf:methodSpecials>
    </hsf:consumer>
    3.3.3.2 Provider 配置
    标签配置示例:

    <hsf:provider id=“simpleService” interface=“com.taobao.edas.service.SimpleService”
    ref=“impl” version=“1.0.1” group=“test1” clientTimeout=“3000” enableTXC=“true”
    serializeType=“hessian”>
    hsf:methodSpecials
    <hsf:methodSpecial name=“sum” timeout=“2000” />
    </hsf:methodSpecials>
    </hsf:p

    3.3.3.3 HSF jvm 参数配置
    -Dhsf.server.port
    指定 HSF 的启动服务绑定端口,默认为 12200
    -Dhsf.serializer
    指定 HSF 的序列化方式,默认值为 hessian
    -DdefaultHsfClientTimeout
    指定 HSF 的客户端超时时间 ms,默认为 3000
    -Dhsf.server.max.poolsize
    指定 HSF 的服务端最大线程池大小,默认值为 600
    -Dhsf.server.min.poolsize
    指定 HSF 的服务端最小线程池大小。默认值为 50
    3.3 HSF 基础开发
    参考下面的 demo 编写示例,来快速的开发一个基础版的 HSF 应用
    EDAS 开发者指南
    3.3.1 创建 Web 项目
    通过上面第一、二章节我们已经在开发工具中配置好对应的插件,并且搭建了本地服务注册
    配置中心,下面我们以一个 demo 展开介绍 Hsf 开发的相关细节。 以 eclipse 为例创建一个 maven web 项目。
    请点击 File -> New -> Project -> Maven Project -> maven-archetype-webapp ,在弹
    出的界面输入 groupId、artifactId ,然后连续点击 Next,完成项目创建。项目目录结构
    如图:
    在这里插入图片描述
    3.3.2 添加 Maven 依赖
    在项目 pom.xml 中添加如下依赖:

    org.springframework
    spring-web
    3.1.1.RELEASE


    javax.servlet
    javax.servlet-api
    3.0.1
    provided


    com.alibaba
    hsf.schema
    edas1.0.1

    3.3.3 编写发布 HSF 的服务
    创建需要发布的服务接口:com.alibaba.edas.SampleService
    EDAS 开发者指南
    编写实现类:com.alibaba.edas.impl.SampleServiceImpl
    public interface SampleService {
    String echo(String str);
    }
    public class SampleServiceImpl implements SampleService {
    @Override public String echo(String str) {
    return str;
    }}
    3.3.4 发布服务配置文件
    请按照以下步骤配置发布者的服务配置文件。

    1. 在 web.xml 中配置 spring 的监听器:

      contextConfigLocation
      classpath:config/applicationContext.xml


      org.springframework.web.context.ContextLoaderListener</listenerclass>
    2. 在 resources 目录下面添加 spring 配置文件:config/applicationContext.xml
    <?xml version="1.0" encoding="UTF-8"?>




    3. 在 resources 目录下面添加发布者的配置文件:config/providers-spring.xml

    <?xml version="1.0" encoding="UTF-8"?>



    <hsf:provider id=“sampleServiceProvider” interface=“com.alibaba.edas.SampleService”
    EDAS 开发者指南
    ref=" target" version=“for-test” group=“your-namespace” >
    </hsf:provider>

    到此发布者就编写好了。
    4. 右键点击创建的项目,点击 Run As,选择 Run configuration,在弹出页面选择 AliTomcat
    Webapp, 右键 new 新建,如下图:
    在这里插入图片描述
    5. 填写好相关配置,点击 Run,启动应用,此时通过第二章节建的配置中心可以看到发布
    的服务,如下图:
    在这里插入图片描述
    3.3.5 消费服务配置文件
    6. 在配置文件 config/applicationContext.xml 添加消费者配置:

    <?xml version="1.0" encoding="UTF-8"?>





    7. 在 resources 目录下面添加消费者的配置文件 consumers-spring.xml 配置:

    <?xml version="1.0" encoding="UTF-8"?>


    <hsf:consumer id=“sampleService” interface=" com.alibaba.edas.SampleService”
    version=“for-test” group=“your-namespace”>
    </hsf:consumer>

    8. 已经完成了消费者的定义,下面创建 servlet 来调用测试代码进行测试:
    public class HsfServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
    ServletException, IOException {
    ApplicationContext
    ctx=WebApplicationContextUtils.getWebApplicationContext(req.getServletContext());
    SampleService sampleService = (SampleService) ctx.getBean(“sampleService”);
    resp.getWriter().println(Long.toString(System.currentTimeMillis()));
    } }
    9. 在 web.xml 中添加如下内容:

    hsf
    com.alibaba.edas.HsfServlet


    hsf
    EDAS 开发者指南
    /hsf.htm

    10. 启动应用,通过配置中心可以查看消费服务列表,如下图:
    在这里插入图片描述
    通过前面 3.3.5 编写的消费 servlet,可以调用到服务ᨀ供者的服务。
    3.3.6 Demo 下载地址
    通过如下地址下载:
    http://edas-public.oss-cn-hangzhou.aliyuncs.com/install_package%2Fedas-app-demo%2Fedas-ap
    p-demo.zip
    将下载下来的压缩包解开后,可以看到 itemcenter-api,itemcenter 和 detail 三个 Maven
    工程。其中 itemcenter-api 工程ᨀ供接口定义,detail 工程是消费者应用,Itemcenter 工程是
    服务ᨀ供者应用。
    3.4 HSF 高级开发
    敬请期待
    4. FAQ 4.1 EDAS 日志说明
    开发中遇到的很多问题,我们都可以通过查看相关日记,找到问题所在,进而解决问题。下 面表格是 EDAS 相关日记路径汇总。

    4.2 Tomcat FAQ
    作为应用的容器,简单的排查问题的思路就是:
    遇到问题先查看/home/admin/taobao-tomcat-production-xxxx/logs/catalina.out, 再查
    看/home/admin/taobao-tomcat-production-xxxx/logs/localhost.log.xxx, 找到 tomcat
    相关的第一个错误。先解决第一个错误, 重启观察, 看是否还有其他错误。 4.2.1 修改应用访问根路径
    问题:通过修改 server.xml 来配置路径不生效,导致启动出现 Class not Def
    解决方案:
    Tomcat 启动应用时默认使用 war 包名字作为 ContextPath. 访问应用时必须呆上
    ContextPath 路径才能访问,ali-tomcat 兼容 jboss jboss-web.xml 配置, 可通
    过 jboss-web.xml 修改 ContextPath. 添加 jboss-web.xml 修改应用 ContextPath
    为 /, 即可通过根路径访问应用 (不需要带应用名).
    在应用 WEB-INF 目录下添加 jboss-web.xml 文件, 文件完整内容如下:

    <jboss-web>
     <context-root>/</context-root>
    </jboss-web>
    

    4.2.2 Tomcat jvm 内存配置
    检查内存相关的配置如-Xmx,MaxDirectMemory,MaxPermSize 这些加在一起如果接近或者超
    过虚拟机的内存(可通过 cat /proc/meminfo | grep MemTotal 进行查看),就很有可能发
    生 oom-killer。
    EDAS 开发者指南
    4.2.3 Tomcat 在启动过程中卡住

    1. 如果进程存在,那么说明 Tomcat 在部署过程中卡在某个地方了,首先通过 jstack 打印
      线程堆栈并保存到某个文件中。
    2. sudo -u admin /opt/taobao/java/bin/jstack P I D > / v a r / t m p / PID > /var/tmp/ PID>/var/tmp/PID.jstack
    3. vim /var/tmp/$PID.jstack
      然后打开该文件,搜索 localhost-startStop-1 查看该线程的堆栈,通常会看到该线程
      (Tomcat 的部署线程)在出于等待状态,或者是出现死锁,根据情况对应用进行修改。
      4.3 HSF FAQ
      4.3.1 HSF-0001
      问题᧿述
      客户端报错:在/home/admin/logs/hsf 查看 hsf.log
      在这里插入图片描述
      HSFServiceAddressNotFoundException-[HSF-Consumer]
      未找到需要调用的服务目标地址 ᧿述信息:需要调用的目标服务为:xxxx 组别为:xxxx
      解决方案 1、 服务不存在: 在 edas 控制台-应用-服务列表查看对应的服务是否已经发布成功
      2、 配置不对:
      检查发布者和消费者配置的服务名字、版本号、组别,这 3 个要一致(注意大小写也要
      一样, 同时要注意前后不能有空格)
      4.3.2 HSF-0002
      问题᧿述
      消费端报超时(HSFTimeOutException)
      解决方案
      目前出现这个错误的很大一部分原因都是因为服务ᨀ供方接口内部逻辑报错,导致消费端
      报超时错误,可以先去检查一下服务ᨀ供方的业务 log 是否报错。 1、服务端跑的慢,在服务端的 hsf.log 里找业务执行超时的日志。
      2、两边可能有 GC 。 检查服务端和客户端 gc 日志,耗时很长的 gc,会导致超时。
      EDAS 开发者指南
      3、服务端有序列化错误。 看一下服务端的 hsf.log,里面一般有序列化错误。
      4、上面三个都排除了的话,可以让 PE(运维人员)看一下机器的网络是否健康。
      4.3.3 HSF-0003
      问题᧿述
      [HSF-Provider] 未找到需要调用的方法
      解决方案
      1.服务端确实没有ᨀ供这个方法,在 edas 控制台-应用-服务列表查看对应的服务,查看服务
      详情。
      2.服务端应用新增的服务,但有两台机器,一台部署了新服务,加了方法。一台还是老的应
      用,调用走到了老的应用机器上,联系服务方排查。
      3.服务方和消费方接口没统一,比如服务方的参数列表里是 java.lang.Double,而消费方调
      用时直接传了基本类型 double,也会造成这个错误。
      4.3.4 HSF-0027
      问题᧿述
      hsf.log 日志出现:[HSF-Provider] HSF thread pool is full.
      解决方案
      分配给服务端业务执行的线程池已经达到最大值,并且没有空闲线程,拒绝执行了一些任务。
      出现这个异常时,HSF 默认会 dump 出一个文件:HSF_JStack.log(这个日志文件一般在服
      务ᨀ供方的 hsf.log 同级目录下),查看这个文件可以看到此时的线程堆栈信息,其中名称
      为 HSFBizProcessor-xxx 的是服务端的业务线程,分析大部分线程此刻正在等待什么资源,
      从而分析出哪个地方是瓶颈。
      HSF 默认的最大线程数是 600, 如果确实要增大这个数 , 则使用
      -Dhsf.server.max.poolsize=xxx 参数进行修改。
      4.3.5 HSF-0031
      问题᧿述
      [HSF-Provider] 执行 HSF 服务 xxx 的方法 xxx 耗时 xxxms,接近超时时间
      解决方案
      服务端:
      服务端会在实际耗时大于超时时间与 100ms 之差时,打印这个日志,所以
      1、如果超时时间本来就很短,比如小于 100ms,则每次调用都会打印这个日志,这时可忽
      略这个日志。
      2、如果超时时间已经比较大了,还打印这个日志,则说明业务执行慢,需要分析业务执行
      的性能瓶颈。
      EDAS 开发者指南
      客户端:
      超时一般报在客户端 HSFTimeoutException,因为 HSF 的整个服务调用过程是点对点的,
      如果客户端发现超时,一般是服务端执行慢了。
      异常里会打服务端的 ip,第一步应该是去看服务端的 hsf.log 日志,80%的原因都是服务端
      跑的慢。
      服务端执行非常快,但当客户端 Load 很高,负载压力很大的时候,会因为客户端请求发不
      出去、响应卡在 tcp buffer 等问题,造成超时。
      在这里插入图片描述
    展开全文
  • 阿里巴巴中间件产品专家倪超、阿里巴巴中间件高级开发工程师左潇龙在2018云栖大会·上海峰会中做了题为《EDAS—云上的微服务开发与治理利器》的分享,就EDAS 企业级分布式应用服务、Spring Cloud 应用上云等方面的...
  • 面向edas开发的规范

    千次阅读 2019-05-19 14:55:05
    -ak : 用户 EDAS Access Key,在用户开通 EDAS 服务时创建,主要用于 EDAS 应用上的 HSF 服务鉴权、配置管理等功能。每次执行 EDAS Agent 安装升级时必选。 说明:此 Access Key 与阿里云服务的 Access Key 无关...

    前言

    概述

    本文档主要介绍了服务开发者基于Aliware做项目开发时,从项目环境搭建,项目开发,项目上线及Aliware服务功能相关的使用说明,操作步骤及代码示例

    应用范围

    服务开发者

    后端开发语言为JAVA。

    需要使用RPC(HSF)。

    需要EADS提供的应用管理(上下架管理,动态扩容、缩容)。

    需要应用服务监控服务(日志统一管理,运行环境监控,Jvm状态监控,请求链路分析)。

     

    更新历史

    版本

    /更新日期

    更新内容

    V1.0.0

    20170719

    第一次发布

    V1.0.4

    20170725

    修改Maven 私服配置 settings.xml文件,代码去掉行号

     

     

    目录

    前言 1

    概述 1

    应用范围 1

    更新历史 1

    目录 2

    1. 开发资源的申请 4

    1.1. 阿里云开发子账号的申请 4

    1.2. ECS的申请 4

    1.3. Agent的申请 4

    1.3.1. EDAS Agent 简介 4

    1.3.2. 安装 Agent 5

    2. 开发指南 9

    2.1. 环境配置 9

    2.1.1. Maven 私服配置 9

    2.1.2. 安装轻量配置中心 10

    2.2. 基于EDAS的HSF标准服务开发指南 11

    2.2.1. 基于Spring开发 11

    2.2.2. 基于SpringBoot开发 25

    2.3. 带有验证能力的HSF服务开发指南 41

    2.4. 申请调用其他HSF服务 41

    2.5. 授权其他应用使用HSF服务 41

    2.6. 开发规范 41

    2.6.1. 工程结构规范 41

    2.6.2. 命名规范 44

    2.6.3. POJO 类定义规范 45

    2.6.4. HSF使用规范 45

    2.6.5. 异常处理规范 46

    2.6.6. 日志规范 47

    2.6.7. 返回值规范 48

    3. 使用指南 51

    3.1. 上架和部署说明 51

    3.1.1. 登录 51

    3.1.2. EDAS控制台入口 51

    3.1.3. EDAS控制台 52

    3.1.4. 创建应用 53

    3.1.5. 设置应用类型和网络类型 55

    3.1.6. 部署应用 55

    3.1.7. 启动应用 57

    3.1.8. 查看启动日志 58

    3.2. 应用监控 59

    3.2.1. 监控大盘 59

    3.2.2. 基础监控 60

    3.2.3. 服务监控 61

    3.3. 全自动化测试方案 65

    3.4. 全链路压测方案 65

     

     

     

    开发资源的申请

     

    阿里云开发子账号的申请

     

    ECS的申请

     

    Agent的申请

    EDAS Agent 简介

    EDAS Agent(以下简称 Agent)是 安装在 ECS 上,用于 EDAS 服务集群与部署在相应 ECS 上的应用程序之间进行通信的 Daemon 程序。在运行的过程中主要承担以下的角色:

    应用管理:包括应用部署、启动、停止等。

    状态回报:包括应用存活状态、健康检查状态、Ali-Tomcat 容器状态等。

    信息获取:如获取 ECS 和容器的监控信息。

    Agent 除了完成以上基于应用的管控功能,还负责 EDAS 控制台与用户应用程序之间通信。简单的说,一个应用发布的服务是否在某台 ECS 上正确及时的发布,这个简单的信息获取就需要 Agent 的参与和协调。

    说明: 上述 Agent 所涉及的功能对用户都是透明的,作为用户,您只需要安装 Agent 即可。

     

    安装 Agent

    EDAS 只会选择安装了 Agent 的 ECS 进行应用的部署(包括第一次安装、扩容)。EDAS 计费系统中的节点的概念,也是指安装了 Agent 并且部署了应用的 ECS。所以在购买 ECS 之后,使用 EDAS 的第一个步骤就是安装 Agent。

    注意事项

    该脚本需要先以 root 身份登录用户的 ECS 终端手动执行。

    目前 Agent 的安装及其运行环境仅支持 CentOS 6.5/6.8/7.0/7.2 64 位 与 Ali-Linux 5.7 64 位

    该脚本可以重复执行,重复执行的结果是覆盖安装,所以 Agent 没有提供单独的升级脚本,即当需要升级 Agent 时,需要执行和安装时同样的脚本。

    目前不同 Region 的 ECS 服务器所使用的安装脚本是不同的,在选择安装脚本之前一定要切换到 ECS 所对应的 Region 列表,然后再单击 安装 Agent 按钮。

    安装步骤

    登录 EDAS 控制台,在左侧导航栏中选择 资源管理 > 云服务器 ECS

    在页面的左上角选择 ECS 所在区域,如“华东1”。

    在 ECS 实例列表页面,选择相应的 ECS,单击右上角 安装 Agent 按钮。

    在 EDAS Agent 安装对话框,选择相应的网络环境。

     

    非 VPC 环境: 对应阿里云的 经典网络 模式,即相应的 ECS 如果处于经典网络时,选择 install.sh 脚本进行安装。

    VPC 环境:是指相应的 ECS 处于 VPC 环境内部时,采用提示中的 install_vpc.sh 脚本进行安装。

    在默认的列表中,用户可能无法找到对应的 ECS,造成这种情况一般存在以下原因:

    实例没有在相应的区域中,可在左上角的区域列表(华东1华北1 等)中进行切换后确认。

    后台的 ECS 列表没有同步完成,由于自动同步方式方式会存在一定时延,如切换相应的区域后仍未发现相应的 ECS ,可点击右上角的 同步 ECS 按钮触发手动同步。

    如果手动同步依然失败,请检查阿里云上主账户的 Access Key ID/Access Key Secret 是否启用。

     

    开始安装:可以选择单台机器进行单个安装,也可以选择多台机器进行批量安装,具体方法:

    安装单个 Agent

    在对话框中,拷贝 非 VPC 环境 区域中的命令。

    以 root 身份登录该 ECS。

    在 ECS 终端中,粘贴拷贝的命令并执行。

    稍等片刻,脚本执行成功后会出来如下信息:

     

    [root@iHostname]# wget -q -O /root/install.sh http://edas-hz.oss-cn-hangzhou-internal.aliyuncs.com/install.sh && sh /root/install.sh -ak {your-access-key} -sk {your-secret-key}

    ....

    ....

    ....

    Edas Install Success!

    说明:在安装时,如果有特定安装需求,比如 JDK 或 EDAS 的版本,可以输入不同参数进行设置。

    执行 sh /root/install.sh -h,可出现如下的信息:

    [root@devhome ~]# sh install.sh -h

    ENV: cn-hangzhou

    Usage: install.sh -ak <ak> -sk <sk>

    [-L|--list] [-java <7(default)|8>] [-version <2.13.0(default)>] [-force]

    其中每个参数的具体含义为:

    -ak : 用户 EDAS Access Key,在用户开通 EDAS 服务时创建,主要用于 EDAS 应用上的 HSF 服务鉴权、配置管理等功能。每次执行 EDAS Agent 安装升级时必选。

    说明:此 Access Key 与阿里云服务的 Access Key 无关。

    -sk : 用户 EDAS Access Key 对应的 Seceret Key,此参数每次执行 EDAS Agent 安装升级时必选。

    -L 或 —list : 列举当前 EDAS 环境可用的 EDAS Agent 版本信息,执行后输出信息如下:

    [root@devhome ~]# sh install.sh -L

    ENV: cn-hangzhou

    2.10.2, 2.11.2, 2.13.0

    -java : 指定运行时安装的 JDK 版本(选择 7 为 JDK7,选择 8 为 JDK8,目前 EDAS 上只支持这两种 JDK 版本)。此 JDK 将作用于 EDAS 上应用的 JVM 执行环境,安装完成后,JAVA_HOME 路径为:/usr/java/default。

    注意:在安装 JDK 的过程中,如果发现之前安装有 JDK,且版本与指定版本不一致的情况,会将之前安装的版本卸载(绿色版除外)。

    -version : 指定安装 EDAS 的版本,可结合 -L|—list 参数选择安装版本。

    -force : 由于安装 EDAS Agent 时,需要安装很多依赖的组件,当第二次进行 EDAS Agent 升级时,如果没有指定 -force 参数,则不会将依赖的组件进行重新安装;相反,如果指定了此参数,将会重新安装所有组件。

    在机器上确认 Agent 是否运行正常。

    [root@iHostname]# pgrep -f 'AgentDaemon' && egrep 'Register ecu' /home/admin/edas-agent/logs/agent.log

    14:25:36 [main] INFO  com.alibaba.edas.agent.AgentDaemon - Register ecu into edas successfully

    在 EDAS 控制台中确认相应的 ECS 是否已经安装了正确的版本,如下图:

     

    批量安装 Agent

    单击 安装 Agent 按钮,在弹出的对话框下方有相应网络环境下批量安装 Agent 的脚本说明,如图:

     

    批量安装与单个安装基本思路一样,不同的是需要在执行脚本的机器上填充待安装机器 IP 列表,输入相应的 root 密码(所有机器密码都应是一样的),且保证此机器与其它待安装机器的网络可连接。具体步骤可参见上图。

     

    开发指南

    环境配置

    Maven 私服配置

    注意: Maven 版本要求 3.x 及以上请在你的 Maven 配置文件 Setting 中,加入中间件私服地址。

     

    <mirrors>

        <mirror> 

            <id>alimaven</id> 

            <name>aliyun maven</name> 

            <url>http://maven.aliyun.com/nexus/content/groups/public/</url> 

            <mirrorOf>central</mirrorOf> 

        </mirror>

    </mirrors>

    <profiles>

        <profile>

            <id>edas.oss.repo</id>

    <activation>

                 <activeByDefault>true</activeByDefault>

             </activation>

     

            <repositories>

                <repository>

                    <id>edas-oss-central</id>

                    <name>taobao mirror central</name>

                    <url>http://edas-public.oss-cn-hangzhou.aliyuncs.com/repository</url>

                    <snapshots>

                        <enabled>true</enabled>

                    </snapshots>

                    <releases>

                        <enabled>true</enabled>

                    </releases>

                </repository>

            </repositories>

            <pluginRepositories>

                <pluginRepository>

                    <id>edas-oss-plugin-central</id>

                    <url>http://edas-public.oss-cn-hangzhou.aliyuncs.com/repository</url>

                    <snapshots>

                        <enabled>true</enabled>

                    </snapshots>

                    <releases>

                        <enabled>true</enabled>

                    </releases>

                </pluginRepository>

             </pluginRepositories>

        </profile>

    </profiles>

     

    <activeProfiles>

        <activeProfile>edas.oss.repo</activeProfile>

    </activeProfiles>

     

    注意:如果遇到EDAS相关Jar包在maven上更新不下来时,<mirrors>标签中只保留 alimaven的镜像,注释其他镜像。

    安装轻量配置中心

    轻量配置中心给开发者提供在开发、调试、测试的过程中的服务发现、注册和查询功能。此模块不属于 EDAS 正式环境中的服务,使用时请下载安装包进行安装。

    在一个公司内部,通常只需要在一台机器上安装轻量配置中心服务,并在其他开发机器上绑定特定的 Host 即可。具体安装和使用的步骤请参见下文。

    安装轻量配置中心

    首先,请确认环境是否达到要求:

    正确配置环境变量 JAVA_HOME,指向一个 1.8版本的 JDK。

    确认 8080 和 9600 端口未被使用。由于启动 EDAS 配置中心将会占用此台机器的 8080 和 9600 端口,因此推荐您找一台专门的机器启动 EDAS 配置中心,比如某台测试机器。如果您是在一台机器上进行测试,请将 Web 项目的端口修改为其它未被占用的端口。

    然后,启动 EDAS 配置中心:

    下载 EDAS 配置中心安装包并解压。

    进入 edas-config-center 目录启动配置中心:

    Windows 系列操作系统请双击 startup.bat。

    Unix 系列操作系统请在当前目录下执行 sh startup.sh 命令。

    轻量配置中心的使用

    对于需要使用轻量配置中心的开发机器,请在本地 DNS(hosts 文件)中,将 jmenv.tbsite.net 域名指向启动了 EDAS 配置中心的机器 IP。

    hosts 文件的路径如下:

    Windows 系列操作系统:C:\Windows\System32\drivers\etc\hosts

    Unix 系列操作系统:/etc/hosts

    示例:

    如果您在 IP 为 192.168.1.100 的机器上面启动了 EDAS 配置中心,则所有开发者只需要在机器的 hosts 文件里加入如下一行即可。

    192.168.1.100 jmenv.tbsite.net

    绑定 Host 解析后,HSF 服务将基于此注册中心进行服务注册与发现。

     

    基于EDAS的HSF标准服务开发指南

    基于Spring开发

    开发工具准备

    Ali-Tomcat 安装

    点击链接地址,下载 Ali-Tomcat,保存后解压至相应的目录(如:d:\work\tomcat)。

    点击链接地址,下载 Pandora 容器,保存后将内容解压至上述保存的 Ali-Tomcat 的 deploy 目录(d:\work\tomcat\deploy)下。最后出来的目录结构如下

    注意:请使用 JDK 1.7及以上版本。

    配置 Eclipse 开发环境

    配置 Eclipse 需要先下载 Tomcat4E 插件,然后选择Pandora 容器路径,配置之后开发者可以直接在 Eclipse 中发布、调试本地代码。具体步骤如下:

    点击链接下载 Tomcat4E 插件并解压至本地,如:d:\work\tomcat4e\。压缩包内容如下:

     

    打开 Eclipse,点击工具栏菜单> Help 按钮,选择 Install New Software,弹出如下对话框。依次单击 Add > Local,选中解压好的 Tomcat4E 插件目录(d:\work\tomcat4e\)>,单击 OK

     

    单击 Select All > Next 按钮即完成插件安装。

     

    重启 Eclipse。

    要使 Tomcat4E 生效,需要针对相应的 Eclipse 工程进行单独设置。右键单击相应的 Eclipse 工程,在弹出的菜单中选中 Run As >单击 Run Configurations

     

    选择左侧导航选项中的 AliTomcat Webapp,单击上方的 新增启动配置

    在弹出的界面中,选择 AliTomcat 选项卡,在 Pandora (taobao-hsf.sar location) 区域,选择 Use local taobao-hsf.sar,并单击旁边的 Browse 以选择本地的 Pandora 路径,如:d:\work\tomcat\deploy\taobao-hsf.sar。

     

    单击 Apply 或 Run,完成设置。一个工程只需配置一次,下次可直接启动。

     

    配置 IntelliJ IDEA开发环境

    IDEA 的配置不需要依赖额外的插件,而是通过JVM启动参数 -Dpandora.location 来不过目前 IDEA 仅仅支持商业版,社区版本暂不支持此种方式。具体步骤如下:

    从菜单中或者工具栏中点击 Run,选择 Edit Configuration

     

    单击界面的加号(+),选择 Tomcat Server,单击 Local,以增加一个本地 Tomcat 的启动配置。

     

    配置 AliTomcat:在右侧页面选择 Server 选项卡,在 Application Server 区域,点击 Configure。 然后在弹出的页面中选择AliTomcat路径,如:d:\work\tomcat\

     

    配置好 AliTomcat 后,在 Application Server 区域的下拉菜单中,选择刚刚配置好的 AliTomcat 实例。

     

    在 VM Options 区域,增加 JVM 启动参数指向 Pandora 的路径,如:-Dpandora.location=d:\work\tomcat\deploy\taobao-hsf.sar

    单击 Apply 或 OK 完成配置。

    工程构建

    创建MavenWeb 服务

    创建工程目录如下图:

     

    其中 api 工程提供接口定义,consumer工程是消费者应用,provider 工程是服务提供者应用。

    添加Maven依赖

    在项目consumer和provider工程的pom.xml中添加如下依赖

    <dependencies>

    <!-- servlet-api dependency 建议3.0以上版本 -->
       <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>3.0.1</version>
          <scope>provided</scope>
       </dependency>


       <!-- spring dependency, 2.5.6(及其以上版本)-->
       <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>4.2.3.RELEASE</version>
       </dependency>

     

    <!-- edas dependency 必须依赖-->
        <dependency>
          <groupId>com.alibaba.edas</groupId>
          <artifactId>edas-sdk</artifactId>
          <version>1.5.4</version>
       </dependency>
    </dependencies>
    <build>
       <finalName>detail</finalName>
       <plugins>
          <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-compiler-plugin</artifactId>
             <version>3.1</version>
             <configuration>
                <source>1.7</source>
                <target>1.7</target>
             </configuration>
          </plugin>
       </plugins>
    </build>

    服务发布

    定义接口

    HSF 的服务基于接口实现,当接口定义好之后,生产者将实现该接口以提供具体的实现来提供服务,消费者也是基于此接口作为服务去订阅。

    在api工程中定义一个服务接口ItemService,此接口将提供两个方法getItemById 与 getItemByName。

    public interface ItemService {

       Item getItemById( long id );
       
       Item getItemByName( String name );
       
    }

    生产者实现接口类

    provider工程中创建实现类ItemServiceImpl。

    public class ItemServiceImpl implements ItemService {

       @Override
       public Item getItemById( long id ) {
          Item car = new Item();
          car.setItemId( 1l );
          car.setItemName( "Test Item GetItemById" );
          return car;
       }
       @Override
       public Item getItemByName( String name ) {
          Item car = new Item();
          car.setItemId( 1l );
          car.setItemName( " Test Item GetItemByName" );
          return car;
       }
    }

    生产者配置

    provider工程中 web.xml 中配置 spring 的监听器: 

    <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:hsf-provider-beans.xml</param-value>
    </context-param>

    <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener
       </listener-class>
    </listener>

     

    在 resources 目录下面添加 spring 配置文件:config/hsf-provider-beans.xml 

     

     

    <?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="cn.com.flaginfo.edas.demo.itemcenter.ItemServiceImpl" />
        <!-- 提供一个服务示例 -->
        <hsf:provider id="itemServiceProvider" interface="cn.com.flaginfo.edas.demo.itemcenter.ItemService"
            ref="itemService" version="1.0.0" group="test">
        </hsf:provider>
    </beans>

    生产者配置属性清单

    关于 HSF 生产者的属性配置,除了上述内容提到的之外,还有如下的内容可供选择:

    属性

    描述

    interface

    interface 必须配置 [String],为服务对外提供的接口

    version

    version 为可选配置 [String],含义为服务的版本,默认为 1.0.0

    group

    serviceGroup 为可选配置 [String],含义为服务所属的组别,以便按组别来管理服务的配置,默认为 HSF

    clientTimeout

    该配置对接口中的所有方法生效,但是如果客户端通过 MethodSpecial 属性对某方法配置了超时时间,则该方法的超时时间以客户端配置为准,其他方法不受影响,还是以服务端配置为准

    serializeType

    serializeType 为可选配置 [String(hessian|java)],含义为序列化类型,默认为 hessian

    corePoolSize

    单独针对这个服务设置核心线程池,是从公用线程池这个大蛋糕里切一块下来

    maxPoolSize

    单独针对这个服务设置线程池,是从公用线程池这个大蛋糕里切一块下来

    enableTXC

    开启分布式事务 TXC

    ref

    ref 必须配置 [ref],为需要发布为 HSF 服务的 Spring Bean ID

    methodSpecials

    methodSpecials 为可选配置,用于为方法单独配置超时(单位 ms),这样接口中的方法可以采用不同的超时时间,该配置优先级高于上面的 clientTimeout 的超时配置,低于客户端的 methodSpecials 配置

     

    服务订阅

    消费者配置

    consumer工程中 web.xml 中配置 spring 的监听器: 

    <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:hsf-consumer-beans.xml</param-value>
    </context-param>

    <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener
       </listener-class>
    </listener>

     

    在 resources 目录下面添加 spring 配置文件:config/hsf-consumer-beans.xml 

    <?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">
        <!-- 消费一个服务示例 -->
        <hsf:consumer id="item" interface="cn.com.flaginfo.edas.demo.itemcenter.ItemService"
        version="1.0.0" group="test">
        </hsf:consumer>
    </beans>

    在consumer工程中创建实现类测试Servlet类

    public class IndexServlet extends HttpServlet {

       @Override
       public void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
          ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(
             req.getServletContext());
          ItemService itemService = (ItemService) ctx.getBean("item");
          resp.getWriter().println(itemService.getItemById(10));
       }
       
       @Override
       protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
       }

    }

    在web.xml中添加servlet配置

    <servlet>
       <servlet-name>IndexServlet</servlet-name>
       <servlet-class>cn.com.flaginfo.edas.demo.detail.IndexServlet</servlet-class>
    </servlet>
    <servlet-mapping>
       <servlet-name>IndexServlet</servlet-name>
       <url-pattern>/index.htm</url-pattern>
    </servlet-mapping>

    消费者配置属性清单

    除了示例代码中体现的属性(interface,group,version)之外,还有下表的属性配置以供选择:

    属性

    描述

    interface

    interface 必须配置 [String],为需要调用的服务的接口

    version

    version 为可选配置 [String],含义为需要调用的服务的版本,默认为1.0.0

    group

    group 为可选配置 [String],含义为需要调用的服务所在的组,以便按组别来管理服务的配置,默认为 HSF,建议配置

    methodSpecials

    methodSpecials 为可选配置,含义为为方法单独配置超时(单位 ms),这样接口中的方法可以采用不同的超时时间,该配置优先级高于服务端的超时配置

    target

    主要用于单元测试环境和 hsf.runmode=0 的开发环境中,在运行环境下,此属性将无效,而是采用配置中心推送回来的目标服务地址信息

    connectionNum

    connectionNum 为可选配置,含义为支持设置连接到 server 连接数,默认为1,在小数据传输,要求低延迟的情况下设置多一些,会提升 TPS

    clientTimeout

    客户端统一设置接口中所有方法的超时时间(单位 ms),超时设置优先级由高到低是:客户端 MethodSpecial,客户端接口级别,服务端 MethodSpecial,服务端接口级别

    asyncallMethods

    asyncallMethods 为可选配置 [List],含义为调用此服务时需要采用异步调用的方法名列表以及异步调用的方式。默认为空集合,即所有方法都采用同步调用

    maxWaitTimeForCsAddress

    配置该参数,目的是当服务进行订阅时,会在该参数指定时间内,阻塞线程等待地址推送,避免调用该服务时因为地址为空而出现地址找不到的情况。若超过该参数指定时间,地址还是没有推送,线程将不再等待,继续初始化后续内容。

     

    打包运行

    完成代码和配置的开发任务之后,在 Eclipse 和 IDEA 中,可直接以 Ali-Tomcat 运行该服务。

    在 Eclipse 和 IDEA 中可以用maven插件打包,maven插件中在项目root目录执行install。

    或者用Maven命令打包项目

    使用命令提示符( Win 环境)或 SHELL 终端(Linux 环境)进入到示例工程目录。

    打包 api:cd api && mvn clean install && cd ../

    打包 provider 工程:cd provider && mvn clean package && cd ../

    打包 consumer 工程:cd consumer && mvn clean package && cd ../

     

    基于SpringBoot开发

    工程构建

    创建MavenWeb 服务

    创建工程目录如下图:

     

    父目录pom.xml文件配置

    <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>1.4.0.RELEASE</version>
    </parent>

    <properties>
       <spring-cloud-starter-pandora.version>1.0</spring-cloud-starter-pandora.version>
       <spring-cloud-starter-hsf.version>1.0</spring-cloud-starter-hsf.version>
       <spring-cloud-starter-sentinel.version>1.0</spring-cloud-starter-sentinel.version>
    </properties>

    <dependencyManagement>
       <dependencies>
          <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-dependencies</artifactId>
             <version>Camden.SR3</version>
             <type>pom</type>
             <scope>import</scope>
          </dependency>

          <!-- 用户需要依赖的Api -->
          <dependency>
             <groupId>cn.com.flaginfo.edas</groupId>
             <artifactId>pandora-hsf-boot-demo-api</artifactId>
             <version>0.0.1-SNAPSHOT</version>
          </dependency>
          
          <!-- Alibaba Aliware -->
          <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-pandora</artifactId>
             <version>${spring-cloud-starter-pandora.version}</version>
          </dependency>
          <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-hsf</artifactId>
             <version>${spring-cloud-starter-hsf.version}</version>
          </dependency>
          <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-sentinel</artifactId>
             <version>${spring-cloud-starter-sentinel.version}</version>
          </dependency>

          <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
             <version>3.1.0</version>
          </dependency>

       </dependencies>
    </dependencyManagement>

    在项目consumer和provider工程的pom.xml中添加如下依赖

    <dependencies>
       <!-- 用户需要依赖的Api -->
       <dependency>
          <groupId>cn.com.flaginfo.edas</groupId>
          <artifactId>pandora-hsf-boot-demo-api</artifactId>
       </dependency>

       <!-- spring dependency -->
       <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
       </dependency>

       <!-- Alibaba Aliware 依赖 -->
       <!-- pandora-boot启动依赖 -->
       <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-pandora</artifactId>
       </dependency>
       <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-hsf</artifactId>
       </dependency>
       <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-sentinel</artifactId>
       </dependency>
       
       <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
       </dependency>

       <dependency>
          <groupId>com.alibaba.edas.configcenter</groupId>
          <artifactId>configcenter-client</artifactId>
          <version>1.0.2</version>
       </dependency>

    </dependencies>

    <build>
       <plugins>
          <!-- 该插件用于生成fat jar,并且主动排除taobao-hsf.sar这个jar包,该jar包在生产环境部署时会通过-D参数指定,所以打包时无需打包,避免资源浪费 -->
          <plugin>
             <groupId>com.taobao.pandora</groupId>
             <artifactId>pandora-boot-maven-plugin</artifactId>
             <version>2.1.6.3</version>
             <executions>
                <execution>
                   <phase>package</phase>
                   <goals>
                      <goal>repackage</goal>
                   </goals>
                </execution>
             </executions>
          </plugin>
       </plugins>
    </build>

    application.properties配置

    #服务名称
    spring.application.name=pandora-hsf-boot-demo-consumer
    #端口号
    server.port=8082

    启动代码

    在项目consumer和provider工程的springBoot启动类中中添加如下代码

    @SpringBootApplication
    //设置HSF的配置文件及限流降级配置
    @ImportResource(locations = {"classpath:hsf-beans.xml","classpath*:sentinel-tracer.xml"})
    public class HSFBootDemoConsumerApplication {
        public static void main(String[] args) {
            // 启动Pandora Boot 用于加载Pandora容器
            PandoraBootstrap.run(args);
            SpringApplication.run(HSFBootDemoConsumerApplication.class, args);
            // 标记服务启动完成,并设置线程wait。 通常在main函数最后一行调用。
            PandoraBootstrap.markStartupAndWait();

        }
    }

    服务发布

    定义接口

    HSF 的服务基于接口实现,当接口定义好之后,生产者将实现该接口以提供具体的实现来提供服务,消费者也是基于此接口作为服务去订阅。

    在api工程中定义一个服务接口ItemService,此接口将提供两个方法getItemById 与 getItemByName。

    public interface ItemService {

       Item getItemById( long id );
       
       Item getItemByName( String name );
       
    }

    生产者实现接口类

    provider工程中创建实现类ItemServiceImpl。

    public class ItemServiceImpl implements ItemService {

       @Override
       public Item getItemById( long id ) {
          Item car = new Item();
          car.setItemId( 1l );
          car.setItemName( "Test Item GetItemById" );
          return car;
       }
       @Override
       public Item getItemByName( String name ) {
          Item car = new Item();
          car.setItemId( 1l );
          car.setItemName( " Test Item GetItemByName" );
          return car;
       }
    }

    生产者配置

    在 resources 目录下面添加 spring 配置文件:config/hsf-provider-beans.xml 

     

     

    <?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="cn.com.flaginfo.edas.demo.itemcenter.ItemServiceImpl" />
        <!-- 提供一个服务示例 -->
        <hsf:provider id="itemServiceProvider" interface="cn.com.flaginfo.edas.demo.itemcenter.ItemService"
            ref="itemService" version="1.0.0" group="test">
        </hsf:provider>
    </beans>

    生产者配置属性清单

    关于 HSF 生产者的属性配置,除了上述内容提到的之外,还有如下的内容可供选择:

    属性

    描述

    interface

    interface 必须配置 [String],为服务对外提供的接口

    version

    version 为可选配置 [String],含义为服务的版本,默认为 1.0.0

    group

    serviceGroup 为可选配置 [String],含义为服务所属的组别,以便按组别来管理服务的配置,默认为 HSF

    clientTimeout

    该配置对接口中的所有方法生效,但是如果客户端通过 MethodSpecial 属性对某方法配置了超时时间,则该方法的超时时间以客户端配置为准,其他方法不受影响,还是以服务端配置为准

    serializeType

    serializeType 为可选配置 [String(hessian|java)],含义为序列化类型,默认为 hessian

    corePoolSize

    单独针对这个服务设置核心线程池,是从公用线程池这个大蛋糕里切一块下来

    maxPoolSize

    单独针对这个服务设置线程池,是从公用线程池这个大蛋糕里切一块下来

    enableTXC

    开启分布式事务 TXC

    ref

    ref 必须配置 [ref],为需要发布为 HSF 服务的 Spring Bean ID

    methodSpecials

    methodSpecials 为可选配置,用于为方法单独配置超时(单位 ms),这样接口中的方法可以采用不同的超时时间,该配置优先级高于上面的 clientTimeout 的超时配置,低于客户端的 methodSpecials 配置

     

    服务订阅

    消费者配置

    在 resources 目录下面添加 spring 配置文件:config/hsf-consumer-beans.xml 

    <?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">
        <!-- 消费一个服务示例 -->
        <hsf:consumer id="item" interface="cn.com.flaginfo.edas.demo.itemcenter.ItemService"
        version="1.0.0" group="test">
        </hsf:consumer>
    </beans>

    在consumer工程中创建实现类测试DemoController类

    @Controller
    @RequestMapping("demo")
    public class DemoController {
       @Autowired
       private ItemService itemService;

       @ResponseBody
       @RequestMapping(method = RequestMethod.GET)
       public String testItem() {
          Item item = itemService.getItemById(10);
          System.out.println("getItemById=" + item);
          return item.toString();
       }

    }

    消费者配置属性清单

    除了示例代码中体现的属性(interface,group,version)之外,还有下表的属性配置以供选择:

    属性

    描述

    interface

    interface 必须配置 [String],为需要调用的服务的接口

    version

    version 为可选配置 [String],含义为需要调用的服务的版本,默认为1.0.0

    group

    group 为可选配置 [String],含义为需要调用的服务所在的组,以便按组别来管理服务的配置,默认为 HSF,建议配置

    methodSpecials

    methodSpecials 为可选配置,含义为为方法单独配置超时(单位 ms),这样接口中的方法可以采用不同的超时时间,该配置优先级高于服务端的超时配置

    target

    主要用于单元测试环境和 hsf.runmode=0 的开发环境中,在运行环境下,此属性将无效,而是采用配置中心推送回来的目标服务地址信息

    connectionNum

    connectionNum 为可选配置,含义为支持设置连接到 server 连接数,默认为1,在小数据传输,要求低延迟的情况下设置多一些,会提升 TPS

    clientTimeout

    客户端统一设置接口中所有方法的超时时间(单位 ms),超时设置优先级由高到低是:客户端 MethodSpecial,客户端接口级别,服务端 MethodSpecial,服务端接口级别

    asyncallMethods

    asyncallMethods 为可选配置 [List],含义为调用此服务时需要采用异步调用的方法名列表以及异步调用的方式。默认为空集合,即所有方法都采用同步调用

    maxWaitTimeForCsAddress

    配置该参数,目的是当服务进行订阅时,会在该参数指定时间内,阻塞线程等待地址推送,避免调用该服务时因为地址为空而出现地址找不到的情况。若超过该参数指定时间,地址还是没有推送,线程将不再等待,继续初始化后续内容。

     

    配置中心

    添加依赖

    <dependency>
       <groupId>com.alibaba.edas.configcenter</groupId>
       <artifactId>configcenter-client</artifactId>
       <version>1.0.2</version>
    </dependency>

     

    示例代码

    public class ConfigCenter {

        // 属性/开关
        private static String config = "";
        //初始化的时候,给配置添加监听
        private static void initConfig() {
            ConfigService.addListener("hsfDemoConsumer", "hsfConfigTest",
                new ConfigChangeListener() {
                    public void receiveConfigInfo(String configInfo) {
                        try {
                            //当配置更新后,马上获取新的配置
                            config = configInfo;
                            System.out.println(configInfo);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
        }

        // 通过get接口把配置值暴露出去使用
        public static String getConfig() {
            return config;
        }
    }

     

    单元测试

    添加依赖

    <dependency>
       <groupId>com.alibaba.hsf</groupId>
       <artifactId>LightApi</artifactId>
       <version>1.0.0</version>
    </dependency>

    <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-all</artifactId>
    </dependency>

    <dependency>
       <groupId>com.taobao.pandora</groupId>
       <artifactId>pandora-boot-test</artifactId>
       <version>2.1.6.3</version>
    </dependency>

    示例代码

    @RunWith(PandoraBootRunner.class)
    @DelegateTo(SpringJUnit4ClassRunner.class)
    // 加载测试需要的类,一定要加入Spring Boot的启动类,其次需要加入本类
    @SpringBootTest(classes = { HSFBootDemoProviderApplication.class, VersionInfoTest.class })
    @Component
    public class VersionInfoTest {
        //当这里使用 @HSFConsumer 时,一定要在 @SpringBootTest 类加载中,加载本类,通过本类来注入对象,否则当做泛化时,会报类转换异常
        @HSFConsumer(generic = true, serviceGroup = "test" ,serviceVersion = "1.0.0")
        private VersionInfoService versionInfoService;

        @Autowired
        ApplicationService applicationService;

        @Test
        public void testInvoke() {
            System.out.println(applicationService.getApplication());
            System.out.println("#####:"+ versionInfoService.getVersionInfo());
            TestCase.assertEquals("V1.0.0", versionInfoService.getVersionInfo());
        }
        @Test
        public void testGenericInvoke() {
            GenericService service = (GenericService) versionInfoService;
            Object result = service.$invoke("getVersionInfo", new String[] {}, new Object[] {});
            System.out.println("####:"+result);
            TestCase.assertEquals("V1.0.0", result);
        }
        @Test
        public void testMock() {
            VersionInfoService mock = Mockito.mock(VersionInfoService.class, AdditionalAnswers.delegatesTo(versionInfoService));
            Mockito.when(mock.getVersionInfo()).thenReturn("V1.9.beta");
            TestCase.assertEquals("V1.9.beta", mock.getVersionInfo());
        }
    }

    Actuator监控

    添加依赖

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    在application.properties中添加配置

    #health接口信息详情配置
    endpoints.health.sensitive=false
    #端口号必须为7002,否则会报错
    management.port=7002

    使用方法

    http请求Get方式直接调用接口获得返回值信息

    例如:http://127.0.0.1:7002/health

    注意:因为PandoraBoot重新定义了 actuator启动端口,固定为7002,所以开发环境多个工程配置会报端口占用错误。

    部署及运行

    本地部署

    在 IDE 中,通过 main 方法直接启动。

    本地打包 FatJar ,通过 JAVA 命令启动。

    排除 taobao-hsf.sar 依赖启动方式(加入-D 指定 SAR 位置)

    #java -jar -Dpandora.location=/Users/Jason/.m2/repository/com/taobao/pandora/taobao-hsf.sar/3.2/taobao-hsf.sar-3.2.jar pandora-hsf-boot-demo-provider-0.0.1-SNAPSHOT.jar

    说明:-Dpandora.location 指定的位置(可以是一个解压的目录或者 JAR 包)

    例如: java -jar  -Dpandora.location=/path/to/your/taobao-hsf.sar your_app.jar

    注意: -Dpandora.location 指定的路径必须是全路径

    不排除 taobao-hsf.sar 依赖启动方式(通过插件设置)通过 pandora-boot-maven-plugin 插件,把 excludeSar 设置为 false ,默认是 true ,打包时就会自动包含该 SAR 包。

    <plugin>

      <groupId>com.taobao.pandora</groupId>

      <artifactId>pandora-boot-maven-plugin</artifactId>

      <version>2.1.6.3</version>

      <configuration>

        <excludeSar>false</excludeSar>

     </configuration>

      <executions>

          <execution>

              <phase>package</phase>

              <goals>

                  <goal>repackage</goal>

              </goals>

          </execution>

      </executions>

    </plugin>

    直接启动

    java -jar pandora-hsf-boot-demo-provider-0.0.1-SNAPSHOT.jar

    EDAS中部署

    在应用管理中,创建的应用需要选择支持 FatJar 功能的容器。选择部署应用,上传 FatJar 应用即可部署。那么以后默认该应用只能上传 FatJar 了,不再支持 WAR 。

     

     

    开发规范

    工程结构规范

    基础工程结构

    该结构适用于只提供RPC生产者接口的服务,例如:评论服务,签到服务等。

    项目示例

    项目名称为:通用评论

    项目名称缩写为:common-comment

    目录结构示例:

     

    核心目录结构说明:

    目录名称

    名录描述

    common-comment

    父目录

    common-comment-api

    RPC接口定义目录

    common-comment-common

    通用类目录

    common-comment-service

    RPC接口实现目录,即生产者

     

    Package结构示例:

     

    核心Package结构说明:

    Module名称

    Package名称

    Package描述

    common-comment-api

    api.domain

    service相关的实体类(BO类)所在包

    api.service

    RPC生产者接口所在包

    common-comment-service

    dao

    数据库ORM映射接口所在包

    dao.impl

    数据库ORM实现类所在包

    domain

    数据库表对应实体类(DO类)所在包

    service.impl

    RPC生产者接口实现类所在包

    common-comment-common

    code

    返回值代码枚举类所在包

    domain

    通用返回值结果封装类所在包

    注意:为了方便排版Package名称列中省略前置package,实际项目中必须含有前置cn.com.flaginfo.项目名称(项目名称为小写无连接符号)。

    复杂项目结构

    该结构适用于有很多业务功能及有web功能的项目,例如:党建项目。

    项目示例

    项目名称为:金华消防

    项目名称缩写为:jhxf

    目录结构示例:

     

    目录结构说明:

    【强制】XXX-admin-web:为PC端前端代码及视图控制层代码(controller)。

    【强制】XXX-app-web: 为手机端端前端代码及视图控制层代码(controller)。

    【推荐】XXX-service:业务处理模块依据业务及功能调用情况,可以拆分为多个service模块。

    例如:某个资源消耗(CPU,内存,线程,硬盘IO等)比较高的功能或爆发高的功能,建议单独拆分一个service提供RPC服务,在服务器资源紧张的时候,既不会影响其他功能的正常使用,也方便针对性的对服务器动态扩容和缩容。

    命名规范

    项目命名

    【强制】服务类项目命名,依据项目实际功能小写英文单词全拼,单词之间用英文减号“-”分隔。

    例如common-comment

    【强制】业务类项目命名,依据项目所在地区-项目名称小写中文拼音,拼音太长可用缩写及英文减号“-”分隔。

    例如jhxf

    项目模块命名

    【强制】项目模块命名规则为项目名称缩写-模块名称

    例如jhxf-service, common-comment-api

    RPC接口及实现类命名

    【强制】服务类和业务类的RPC接口都定义在api.service,命名为XXXXService。

    【强制】接口实现类在各自业务service模块的service.impl命名为XXXXServiceImpl。

    GroupId命名

    DataId命名

    POJO 类定义规范

    【强制】所有的 POJO (DO,BO,VO)类属性必须使用包装数据类型

    【强制】RPC 方法的返回值和参数必须使用包装数据类型

    【强制】POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。

    例如:定义为基本数据类型 Boolean isDeleted;的属性,它的方法也是 isDeleted(),RPC框架在反向解析的时候,“以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异 常。

    HSF使用规范

    【推荐】HSF配置方式目前推荐xml的方式进行配置。xml方式方便统一的进行配置管理,更直观的了解已配置接口功能,配置属性也比注解方式更灵活更丰富。

    生产者(RPC服务提供者)

    【强制】<hsf:provider>必须配置group参数和version参数。

    例如

    <hsf:provider id="versionInfoService"
    interface="cn.com.flaginfo.edas.demo.service.VersionInfoService" group="test" version="1.0.0" ref="versionInfoServiceImpl" />

    消费者(RPC服务调用者)

    【强制】<hsf:consumer>必须配置group参数和version参数。

    例如

    <hsf:consumer id="applicationService" version="1.0.0" group="test"
    interface="cn.com.flaginfo.edas.demo.service.ApplicationService"/>

    【推荐】RPC消费者使用异步调用时,需要结合业务场景做充足的测试后再使用。因为该异步只是调用RPC接口时为异步,执行获取结果的方法为同步,会阻塞当前线程直到接口返回结果。

    【推荐】RPC消费者使用泛化的方式时,注意配置的id和代码参数名一样,才能正确注解到参数上。

    <hsf:consumer id="genericTestService" version="1.0.0" group="test" interface="cn.com.flaginfo.edas.demo.service.GenericTestService" generic="true"/>

    java代码:

    @Autowired
    private GenericService genericTestService;

    【强制】RPC消费者使用泛化的方式时,如果接口方法没有参数,$invoke方法要传空数组对象,不能传null。

    String version = (String)genericTestService.$invoke("getGenericTest", new String[]{}, new Object[]{});

    异常处理规范

    【强制】RESTful/http方式的api 开放接口必须捕获异常,并使用“错误码”。

    【强制】服务类和跨项目调用的RPC生产者接口实现类必须捕获异常,并使用统一的Result方式,封 装 isSuccess()方法、“错误码”、“错误简短信息”。

    说明:关于 RPC 方法返回方式使用 Result 方式的理由:

    1)使用抛异常返回方式,调用方如果没有捕获到就会产生运行时错误。

    2)如果不加栈信息,只是 new 自定义异常,加入自己的理解的 error message,对于调用 端解决问题的帮助不会太多。如果加了栈信息,因为RPC框架内部执行反射方法时,未捕获的异常会被封装成其他异常,最终业务自己定义的异常会被封装嵌套在其他2个异常内,在频繁调用出错的情况下会打印大量异常栈信息,而且数据序列化和传输的性能损耗也是问题。

    日志规范

    【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架 SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    private static final Logger logger = LoggerFactory.getLogger(Abc.class);

    【强制】对 trace/debug/info 级别的日志输出,必须使用条件输出形式。

    例如

    if (logger.isDebugEnabled()) {
       logger.debug("Processing trade with userId: " + userId + " order : " + order );
    }

    说明:logger.debug("Processing trade with userId: " + userId + " order : " + order ); 如果日志级别是 warn,上述日志不会打印,但是会执行字符串拼接操作,如果 order 是对象, 会执行 toString()方法,浪费了系统资源,执行了上述操作,最终日志却没有打印。

    【推荐】谨慎地记录日志。生产环境禁止输出debug日志;有选择地输出info日志;如果使用 warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘撑爆,并记得及时删除这些观察日志。

    说明:大量地输出无效日志,不利于系统性能提升,也不利于快速定位错误点。

    【推荐】可以使用 warn 日志级别来记录用户输入参数错误的情况,避免用户投诉时,无所适从。注意日志输出的级别,error 级别只记录系统逻辑出错、异常等重要的错误信息。如非必要,请不要在非异常及错误场景打出error级别。

    返回值规范

    【强制】Http接口返回值统一封装为HttpResult,方便接口调用方统一解析返回结果、处理返回值状态。

    【强制】RPC接口必须都有返回值,且统一封装为ServiceResult,方便调用方统一解析返回结果,处理异常信息。无返回值的返回类型写为ServiceResult<Void>

    【强制】消费者调用RPC接口返回的ServiceResult<T>必须判断isSuccess()方法值,处理存在的返回值异常信息。

    HttpResult

    /**
     * HTTP接口返回对象封装
     */

    public class HttpResult {
        /**
         * 返回错误结果封装
         * @param resCode 返回值代码
         * @param resMsg 返回值消息
         */
        public Map<String, Object> onFailure(String resCode, String resMsg) {
            Map<String, Object> result = new HashMap<String, Object>(2);
            result.put("resCode", resCode);
            result.put("resMsg", resMsg);
            return result;
        }

        /**
         * 返回正确结果封装
         * @param data 返回参数
         */
        public Map<String, Object> onSuccess(Map<String, Object> data) {
            Map<String, Object> result = new HashMap<String, Object>();
            result.put("errcode","0");
            result.put("errmsg", "ok");
            if (data != null) {
                result.putAll(data);
            }
            return result;
        }
    }

    ServiceResult

    /**
     * Service层返回对象封装
     */
    public class ServiceResult<T>  implements Serializable{
        /**
         * 请求是否成功
         */
        private boolean success = false;
        /**
         * 返回值代码
         */
        private String resCode;
        /**
         * 返回消息
         */
        private String resMsg;
        /**
         * 返回结果
         */
        private T result;

        private ServiceResult() {
        }

        /**
         * 返回正确结果封装
         * @param result 返回结果
         * @param <T> 返回结果Class
         * @return 正确结果封装
         */
        public static <T> ServiceResult<T> onSuccess(T result) {
            ServiceResult<T> serviceResult = new ServiceResult<T>();
            serviceResult.success = true;
            serviceResult.result = result;
            serviceResult.resCode = "0";
            serviceResult.resMsg = "ok";
            return serviceResult;
        }

        /**
         * 返回错误结果封装
         * @param resCode 错误代码
         * @param resMsg 错误消息
         * @return 错误结果封装
         */
        public static <T> ServiceResult<T> onFailure(String resCode, String resMsg) {
            ServiceResult<T> item = new ServiceResult<T>();
            item.success = false;
            item.resCode = resCode;
            item.resMsg = resMsg;
            return item;
        }

        /**
         * 返回错误结果封装
         * @param resCode 错误代码
         * @return 错误结果封装
         */
        public static <T> ServiceResult<T> onFailure(String resCode) {
            ServiceResult<T> item = new ServiceResult<T>();
            item.success = false;
            item.resCode = resCode;
            item.resMsg = "failure";
            return item;
        }

        public boolean hasResult() {
            return result != null;
        }

        public boolean isSuccess() {
            return success;
        }

        public T getResult() {
            return result;
        }

        public String getResCode() {
            return resCode;
        }

        public String getResMsg() {
            return resMsg;
        }

        @Override
        public String toString() {
            return "ServiceResult{" +
                "success=" + success +
                ", resCode='" + resCode + '\'' +
                ", resMsg='" + resMsg + '\'' +
                ", result=" + result +
                '}';
        }
    }

     

    使用指南

    上架和部署说明

    登录

    登录地址:https://signin.aliyun.com/flaginfo/login.htm

    EDAS控制台入口

    选择页面左边列表的《企业级分布式应用服务 EDAS》 或者页面中间偏下的《企业级分布式应用服务 EDAS》标签,进入EDAS控制台。

     

    EDAS控制台

    此页面简称为EDAS控制台,EDAS相关的资源管理,应用管理,配置管理,性能监控,任务调度,链路分析都集成在这里。

     

    创建应用

    点击应用管理→创建应用,输入应用相关信息,然后单击 下一步。

     

     

    字段说明
    应用运行环境:运行应用的容器 (Ali-Tomcat) 版本,默认是最新的版本
    应用名称:应用名称(此服务名称),在所属主账号内不能重复
    应用所在区域:选择华东1(目前我们EDAS的服务器都在华东1
    应用健康检查:EDAS 定期访问该 URL,根据其响应状态,确定应用的存活状态,若不配置,EDAS 不进行应用的健康检查,但不影响应用的正常运行。
    备注:该应用的描述性信息。

    设置应用类型和网络类型

     

    字段说明:

    应用类型 选择 普通应用

    网络类型 选择 经典网络

    实例 选择 应用将要部署的实例

    点击创建应用(此步奏之后,应用的容器便创建好了,之后还要上传war包或jar包)

    部署应用

    点击应用管理→需要部署的应用后边的操作(管理)→部署应用,上传jar包输入版本信息,设置完成后,单击 部署应用

     

     

     

     

    部署应用参数说明:

    文件上传方式:

    上传 war 包或jar包:选择上传 war 包或jar包后,在下面上传 war 包或jar包右侧单击选择文件,打开本地文件夹,选择要部署的 WAR 包或jar包。

    war 包或jar包地址:选择 war 包或jar包地址后,在下面 war 包或jar包地址右侧的文本框中输入定存放 war 包或jar包且可以访问的 URL 地址。

    使用历史版本:使用历史版本:选择使用历史版本后,在下面历史版本的下拉框中选择要使用的历史版本。

    发布目标分组:需要发布此应用版本的分组。

    请填写版本:应用版本用于标识一次应用发布所使用的部署包的版本,能够帮助用户很好的区分每一次应用发布的部署包版本,并在回滚操作的时候,能够精准的跟踪到某一次发布。

    注意:部署应用的时候,可以添加一个版本号或者文字描述,不建议使用 用时间戳作为版本号。

    版本描述:对此 war 包/jar包版本进行描述。

    历史版本(仅适用于使用历史版本的文件上传方式):在下拉框中选择要使用的历史版本。

    启动应用

    创建并部署应用成功后,在应用详情页面右上角单击 启动应用,启动应用。

    应用启动后,页面右上角会提示 启动成功。应用中的实例的任务状态显示为 运行中。

     

    查看启动日志

    点击左运行日志→实时日志→双击catalina.out,即可查看启动日志

     

     

    应用监控

    监控大盘

    登录 EDAS 控制台。

    在左侧导航栏,单击 应用管理。

    在应用列表中,单击需要监控的 应用名称。

    在具体应用页面左侧导航栏中,选择 应用监控 监控大盘。

    说明:包括 CPU、负载、内存、磁盘及网络,将鼠标悬停到监控图- 横坐标的某个点,可以查看该时间点的信息和状态数据。

     

    基础监控

    EDAS 从应用所运行的机器上采集数据,然后基于分析的结果提供 CPU、内存、负载、网络、磁盘五个主要指标的单机与集群视图。所有监控均以应用为单位进行数据的统计和处理。

    注意:由于从数据的采集到分析存在一定的延时,所以 EDAS 无法提供百分之百的实时监控视图,目前的时延策略为2分钟。

    查看集群或者单机统计视图的步骤为:

    登录 EDAS 控制台,单击 应用管理,在 应用列表 中单击具体的应用。

    在应用详情页面左侧的导航栏中选择 应用监控 基础监控,进入基础监控页面。

     

      基础监控页面默认监控最近半小时的分组数据,也可以通过选择时间间隔及单机数据页签监控其它时间间隔的分组数据和单机数据。

    选择监控数据类型

    监控的数据类型包括分组数据和单机数据两种。

    这两种数据类型从不同维度监控相同的一些列指标,包括:

    CPU 数据统计汇总:代表 CPU 的占用率,为 user 和 sys 占用率的和,其中分组数据的图示为该应用分组内所有机器占用率的平均值。

    内存数据统计汇总:物理内存的总大小与实际使用大小,其中分组数据的图示为该应用分组内所有机器的总大小与总使用大小。

    负载数据统计汇总:系统负载中的 1 min load 字段,其中分组数据中的图示为该应用分组内所有机器 1 min load 的平均值。

    网络速度数据统计汇总: 网卡的写出与读入速度,如果机器上有多块网卡,该数据代表所有网卡名以“eth”开头的写出与读入速度的总和,其中分组数据中的图示为该应用分组内所有机器的平均值。

    磁盘数据统计汇总:机器上所有挂载磁盘的总大小与实际使用大小,其中分组数据的图示为该应用分组内所有机器的总大小与总使用大小。

    磁盘读写速度数据统计汇总:机器上所有挂载磁盘的读写速度大小总和,其中分组数据的图示为应用分组内所有机器改数据的平均值。

    磁盘读写次数数据统计汇总:机器上所有挂载磁盘的读写次数(IOPS)总和,其中分组数据的图示为应用分组内所有机器改数据的平均值。

    设置时间间隔

    时间间隔包括半小时、六小时、一天和一周四种。

    半小时:统计当前时间之前半个小时内的监控数据,是登录基础监控页面时的默认方式。数据统计点的时间间隔为 1 分钟,是 EDAS 所提供的最细的查询粒度。

    六小时:统计当前时间之前 6 个小时内的监控数据,数据统计点的时间间隔为 5 分钟。

    一天:统计当前时间之前 24 个小时内的监控数据,数据统计点的时间间隔为 15 分钟。

    一周:统计当前时间之前 7 天内的监控数据,数据统计点的时间间隔为1小时,是 EDAS 提供的最长统计周期。

    说明:

    页面中的“开始时间”与“结束时间”,是当前视图所呈现的时间跨度;当选择其中一项时,对应的项会自动调整其值,如:选择“半小时”,结束时间选择 “2016年5月20日 12点00分00秒”时,开始时间会自动设置为 “2016年5月20日 11点30分00秒”。

    设置完成后,监控的数据随选择的时间间隔自动进行更新。

     

    服务监控

    通过收集和分析在不同的网络调用中间件上的日志埋点,可以得到同一次请求上的各个系统的调用链关系,有助于梳理应用的请求入口与服务的调用来源、依赖关系,同时,也对分析系统调用瓶颈、估算链路容量、快速定位异常有很大帮助。

    监控服务

    登录 EDAS 控制台。

    在左侧导航栏中,单击 应用管理

    在应用列表中,单击要监控的 应用名称

    在具体应用页面左侧的导航栏中选择 应用监控 > 服务监控

     

     

    服务监控页面包含七个页签:

    应用概要:展示所提供服务的总体情况和调用的服务情况。

    我的入口:展示对外提供的 HTTP 入口列表。

    提供的 RPC 服务:展示当前应用所提供的 RPC 的调用情况。

    RPC 调用来源:展示当前应用所提供的 RPC 服务被哪些应用调用。

    RPC 调用依赖:展示当前应用调用了哪些应用的服务。

    访问数据库:展示对数据库的请求情况。

    消息类型:MQ 消息等。

    默认显示默认分组下的应用概要页签。

    (可选)设置监控条件,单击 更新,更新监控数据。

    最新:默认展示当前时间的数据情况,点击下拉箭头,可以手工选择时间。

    order by:默认以 QPS 排序,点击下拉箭头,可以按耗时、错/S(一分钟平均出错的 QPS)进行排序。

    结果数:默认显示10条结果,点击下拉箭头,可以设置展示数量,包括1、5、30、50、100和不限。

    展现:默认以豆腐块图展现,也可以选择支持多图和表格作为展现形式。

    单击监控图中某一列的具体指标,弹出自定义查询页面,查看该指标项的监控数据。

     

    在指标区域中,选择不同指标,也可以监控不同组合的数据。

    查看调用链

    在监控服务过程中,可以监控该应用和其它应用的附件间的调用关系,同时也可以查看详细的调用链路。

    在监控图中,单击调用的或被调用的服务右侧的 查看调用链,跳转到 链路分析 > 调用链查询 页面。

     

    在调用链查询页面,可以查看该应用和(被)调用的服务间的调用链路。

     

    点击TraceId会跳转到调用链详情页面,显示调用链详细信息

     

    监控下钻应用

    服务监控页面除了可以查询和该应用相关的调用链路,还可以下钻到相互依赖的应用上进行监控。

    在 提供的 RPC 服务RPC 调用来源 或 RPC 调用依赖 等页签中,单击监控图上方 下钻 右侧的 来源应用被调用的服务 或 调用的服务 按钮,弹出下钻应用的监控页面。

    监控下钻应用的数据。

     

    全自动化测试方案

    全链路压测方

    详见:

    https://www.aliyun.com/product/edas?spm=5176.10695662.746114.1.29c8530csNLY1M

    https://www.aliyun.com/product/apsara-stack/doc?spm=5176.12021097.1218927.3.16e56015283E54

    https://manage.aliyun.com/manage/view/cdu_document/product_zh/topic/EDAS_UserGuide_ManageAccount_9.2.3.html

     

     

    展开全文
  • 1.3.1. EDAS Agent 简介............................................................................... 4 1.3.2. 安装 Agent.............................................................................
  • 该文章是基于阿里云商业化产品 EDAS 3.0的微服务实践,如果您的团队具备较强的微服务测试能力,那么希望我们在微服务测试方面的实践和背后的思考,可以为您提供一些参考。点击这里,观看直播,了解更多 EDAS 3.0 ...
  • 微服务治理解密:EDAS 是什么?

    千次阅读 2020-02-27 16:01:26
    本文是《微服务治理解密》系列篇的第一篇文章,为大家介绍 EDAS 是什么。该系列文章基于阿里云商业化产品 EDAS『产品官网 >>』 的微服务实践,如果你的团队具备较强的微服务治理能力,那么希望我们在...
  • 1.阿里框架EDAS开发文档。2.环境配置。3.开发API。4.开发dome等。
  • 您可以使用 EDAS-SDK 开发 HSF 应用,实现服务注册发现,还可以实现隐式传参、异步调用、泛化调用、调用链路 Filter 扩展等高级 HSF 特性,以及 HSF 单元测试。 快速开始 介绍如何使用 EDAS-SDK 快速开发 HSF ...
  • 在企业特性上,例如服务治理、应用监控等方面,我们提供一个稳定成熟的产品,来降低企业构建互联网化应用的门槛,例如企业级应用服务 EDAS 3.0 就是这样一个典型的产品。" ——阿里巴巴合伙人、阿里云智能基础产品...
  • 用户在使用EDAS进行应用变更的时候,一定会接触到发布单功能。发布单以图形化的方式展现了应用部署、启动、停止和扩缩容等操作的具体过程,并能查看发布脚本的执行日志,以及出错信息。对于分批进行的变更,用户可以...
  • EDAS Dubbo Spring Boot demo 说明 本机如何测试 执行本地编译 mvn -DskipTests clean package 启动本地的zookeeper docker-compose up -d 在IDE中运行DubboProvider 在IDE中运行DubboConsumer 打开dubbo.http点击...
  • ylbtech-杂项-分布式-EDAS:深度解析阿里云EDAS服务 1.返回顶部 1、 深度解析阿里云EDAS服务 弹性伸缩 摘要: 第一种只适用于业务较少的情况,而在新业务不断增加的情况下,增加新...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,076
精华内容 1,230
关键字:

EDAS