陈沙克

Aug 132020
 

今晚学习了一下使用PowerShell创建资源,我主要是用来创建

  1. 资源组
  2. 存储账号
  3. Data Factory
  4. key vault

这些资源如果你是手工来创建,一个头疼的地方就是区域,很多时候是要求区域一致才能使用。创建的时候,很容易搞错。

使用脚本创建,比较头疼的地方,就是服务的名字,存储账号,就只能使用小写字母和数字,对于key vault来说,你创建的key,删除后,会保留90天,你再次创建相同的名字,会失败。

假设我们需要创建Dev,QA,Prod,三个环境,那么基本运行下面的脚本就可以。

目前key vault 来存储密钥,你就只能是手工来完成。

参考文章

https://www.alexvolok.com/2020/adf-devops-generate-az-cli/

把下面两个文件创建出来,登录Azure门户,直接进入命令行,上传2个文件,直接运行

./Create-Environment.ps1

一切都应该很顺利,如果名字没有重复的。

adf.json 这个文件,你是不需要做任何的修改。你需要调整的是 Create-Environment.ps1  这个文件。就前面几行,看一下就明白了。

你还有一种办法覆盖脚本的变量。就是在运行的命令的时候,指定参数

# Development, Staging and Production:
.\Create-Environment.ps1 -EnvironmentName "DevOps2020" -Stage "Dev" -Location "West US"
.\Create-Environment.ps1 -EnvironmentName "DevOps2020" -Stage "Stg" -Location "West US"
.\Create-Environment.ps1 -EnvironmentName "DevOps2020" -Stage "Prod" -Location "West US"

大家可以看一下输出的效果

PS /home/chen> .\Create-Environment.ps1 -EnvironmentName "DevOps2020" -Stage "Dev" -Location "West US"

Name                           Value
----                           -----
ResourceGroupName              RG-DevOps2020-Dev
ADFName                        ADF-DevOps2020-Dev
KeyVaultName                   KV-DevOps2020-Dev
StorageName                    adlsdevops2020dev

Create a new resource group: RG-DevOps2020-Dev
Location    Name
----------  -----------------
westus      RG-DevOps2020-Dev
Creating a new key vault account: KV-DevOps2020-Dev
Location    Name               ResourceGroup
----------  -----------------  -----------------
westus      KV-DevOps2020-Dev  RG-DevOps2020-Dev
Creating a new storage account: adlsdevops2020dev
AccessTier    CreationTime                      EnableHttpsTrafficOnly    IsHnsEnabled    Kind       Location    Name               PrimaryLocation    ProvisioningState    ResourceGroup      StatusOfPrimary
------------  --------------------------------  ------------------------  --------------  ---------  ----------  -----------------  -----------------  -------------------  -----------------  -----------------
Hot           2020-08-12T18:42:27.314196+00:00  True                      True            StorageV2  westus      adlsdevops2020dev  westus             Succeeded            RG-DevOps2020-Dev  available
Name    ResourceGroup      State      Timestamp                         Mode
------  -----------------  ---------  --------------------------------  -----------
adf     RG-DevOps2020-Dev  Succeeded  2020-08-12T18:42:55.241918+00:00  Incremental

创建 adf.json

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "defaultValue": "myv2datafactory",
            "type": "String"
        },
        "location": {
            "defaultValue": "East US",
            "type": "String"
        },
        "apiVersion": {
            "defaultValue": "2018-06-01",
            "type": "String"
        }
    },
    "resources": [
        {
            "type": "Microsoft.DataFactory/factories",
            "apiVersion": "[parameters('apiVersion')]",
            "name": "[parameters('name')]",
            "location": "[parameters('location')]",
            "identity": {
                "type": "SystemAssigned"
            },
            "properties": {}
        }
    ]
}

创建 Create-Environment.ps1

# Step 1: Input parameters
param([String]$EnvironmentName = "ABB",`
      [String]$Stage = "Dev",`
      [String]$Location = "westeurope"`
      )
$OutputFormat = "table"  # other options: json | jsonc | yaml | tsv
# internal: assign resource names
$ResourceGroupName = "RG-$EnvironmentName-$Stage"
$ADFName = "ADF-$EnvironmentName-$Stage"
$KeyVaultName ="KV-$EnvironmentName-$Stage"
$StorageName = "adls$EnvironmentName$Stage".ToLower().Replace("-","")
Get-Variable ResourceGroupName, ADFName, KeyVaultName, StorageName | Format-Table



# Step 2: Create a Resource Group
if (-Not (az group list --query "[].{Name:name}" -o table).Contains($ResourceGroupName))
{
    "Create a new resource group: $ResourceGroupName"
    az group create --name $ResourceGroupName --location $Location --output $OutputFormat
}`
else
{
   "Resource Group: $ResourceGroupName already exists"
}


# Step 3a: Create a Key Vault
if (-Not (az keyvault list --resource-group $ResourceGroupName ` --query "[].{Name:name}" -o table).Contains($KeyVaultName))
{
    Write-Host "Creating a new key vault account: $KeyVaultName"
    az keyvault create `
       --location $Location `
       --name $KeyVaultName `
       --resource-group $ResourceGroupName `
       --output $OutputFormat
}`
else
{
    "Key Vault: Resource $KeyVaultName already exists"
}


# Step 3b: Create a Storage Account
if (-Not (az storage account list --resource-group $ResourceGroupName --query "[].{Name:name}" -o table).Contains($StorageName))
{
       Write-Host "Creating a new storage account: $StorageName"

       az storage account create `
       --name $StorageName `
        --resource-group $ResourceGroupName `
        --location $Location `
        --sku "Standard_LRS" `
        --kind "StorageV2" `
        --enable-hierarchical-namespace $true  `
        --output $OutputFormat
}`
else
{
    "Storage: Account $StorageName already exists"
}

# Step 4: Create a Data Factory
az deployment group create `
  --resource-group $ResourceGroupName `
  --template-file "./adf.json" `
  --parameters name=$ADFName location=$Location `
  --output $OutputFormat
Aug 112020
 

最近在搞微软的Azure平台上的数据分析工具,这套工具,专门整合以前企业使用,以前企业在内部ETL,现在可以在云上进行ETL。确实是方便很多。我们都是在讨论数据湖要搞几个,开发,测试,生产都来一个。如果你是在自己数据中心,这是不可能讨论的话题。

Azure的ETL Cloud版本的工具集,名字是Data Factory。你基本就是在Azure的门户上完成所有的操作,包括写代码。

数据工厂的配置,其实就是一个Json文件。你做的配置,其实就是修改json文件。所以是有需求,把这些文件放到git来进行管理。

对于企业来说,肯定都是有开发,测试,生产,3套环境,或者至少2套环境。那么开发后的环境,如何部署到生产环境下呢。那么微软想到的通过Azure DevOps服务,实现CI CD。

这套东西的玩法,应该是最近一年,微软在狂推。和正常的开发流程的CI CD是有差异的地方,需要理解的地方。我这里整理一下,刚好今天Azure的pipeline服务挂掉了。导致只能写文章。

Azure的数据工厂,Azure Data Factory,我们简称ADF

devops

下面的工作就是把这个对着这个架构图来进行配置。

开发环境ADF

登录Azure,其实第一件事情就是

  1. 建立一个开发使用是资源组,RG
  2. 创建ADF,注意区域,git 后面配置就可以
  3. 在开发资源组里,创建一个存储,这可是data lake存储,一定要注意区域
  4. 创建key vault服务,注意区域,

需要注意的就是region,RG,资源组,是没有区域的概念。不过对于数据分析来说,肯定是要求相同的region。ADF,storage,key vault服务。

创建 Key vault的服务,有两个地方可以进行配置,这样可以后面运行的更加方便

  1. policy,设置上面刚刚创建的ADF,可以访问
  2. 创建访问存储的密钥名字,里面包含存储的访问密钥。后面会用到。

这里为了理想化,Dev,Test,Prod,使用不同的

  1. ADF
  2. Data Lake
  3.   Key Vault

为了安全,我们都独立的。

打开数据工厂,进行配置

连接服务

对于任何的数据工厂,基本是需要对接外面不同的服务,那么她至少是需要2个服务,

  1. Data Lake gen2 连接
  2. key vault 连接

key vault 是专门管理密钥。对企业来说,安全还是第一位,免得人家说三道四。

ADF默认连接到Data lake,是采用密码去连接的,所以这里改成key vault的连接,配置 Data Lake gen2 连接,采用key vault。上面已经配置,允许ADF访问key vault。这个时候,会很顺利。

Dataset

数据的格式,配置数据进入和输出的格式,这个地方,应该是比较复杂,对于我demo演示,倒是简单,copy数据,input和output,都是一样的。

Pipeline

pipeline,是核心,就是把数据处理的步骤用一条管道连接起来,目前是从Data lake获取数据,也是输出到Data Lake。

我就demo一个copy数据的例子,改天研究一下行列转换的例子,这样高大上不少。

对接Azure git

当你的ADF的demo可以完美的运行,后面的步骤就到了关键时刻。配置ADF连接Azure的DevOps。

连接上以后,其实需要理解的就是一个地方

你在ADF里,save,其实就是把配置save在master分支上。如果你publish,其实是把代码推送到ADF分支。

对于Azure认为,ADF分支,你可以理解是stable分支。ADF分支,其实是Azure帮你默认配置的。

如果你在ADF连接Azure git遇到麻烦,可以看这个地方,我确实也遇到了,

https://stackoverflow.com/questions/53102684/problem-setting-up-azure-datafactory-to-azure-devops-git

你是可以在ADF里,

  • 创建一个自己的分支,例如feature1,通过save保存到git的代码仓库里。
  • 创建一个merge request,merge到master,
  • publish,一定是直接把代码推到ADF stable版本。你是很可能直接吧feature 1的代码直接推送到ADF branch里的,这个要避免。

Azure DevOps

这是Azure提供的一个服务,算是以前微软的TFS改进版本,微软马上就要废掉TFS,2020的版本,本地部署的版本,可以实现和公有云的版本一致体验。

目前世纪互联的版本,还没开通。所以你就只能使用国际版本。用你国际账号,登录就可以。

Azure的DevOps,基本就是Jira+ Comfluence  + github. 整合起来给用户使用。

  1. 组织:对于个人来说,就是你的名字:chenshake
  2. 项目名字
  3. repo名字。对于大项目来说,一个可能会多个repo ,

Azure pipeline

对于开发人员或者用过DevOps平台的人,感觉有点怪怪,我如何提交代码?

对于ADF来说,你登录Azure的门户,进入ADF进行配置,这个时候,就是写代码,save,就是把代码提交到master分支里,publish,就是把你的代码merge 到stable版本里。

有代码了,我们一般来说,要编译一次,搞出一个制品库:Artifacts,然后拿着Artifacts去部署到生产环境或者测试环境。

对于ADF来说,代码都是json,配置文件。所谓的编译,制品库,据说copy文件夹而已。

流程上,我们要创建一条pipeline,把代码复制到制品库里。这就是build pipeline。

我们再创建一条release pipeline,就是把代码推送到测试环境或者生产环境。

对于ADF来说,release pipeline,需要做的工作,还是需要做一点有技术含量的工作。

我们是开发环境的Json文件,里面包含里不少开发环境的参数,我们需要替换成测试环境

  1. 资源组名字,DevRG,要改成QARG
  2. ADF名字,DevADF,要改成QAADF
  3. key vault 名字
  4. Data Lake名字
  5. 如果你对接数据库,数据库名字和密码

这时候,你就需要设置pipeline的变量,UAT,Prod,使用不同的变量来部署。

对于ADF的生产环境部署,Azure上,还是无法做到自动化,key vault创建 密钥名字,只能在图形化界面完成,目前是没有接口API。这个也是我目前发现的Azure服务,没API接口的。

我们可以利用powershell,通过pipeline去自动化创建

  1. 资源组
  2. Data lake
  3. key vault
  4. ADF

这些是一次性的工作,而且Azure上,也是无法做到全程自动化,所以这些我们都是提前手工创建好。Release pipeline所做的事情,其实是把这些服务,通过配置ADF,利用Json文件,配置起来。

微软很多服务名字要求是全局唯一,所以很多时候,你的服务名字要么加一串数字,要么就会面临名字重复,无法创建。

流程

这里就总结一下我对整个ADF的DevOps流程的理解

  1. 开发环境下的ADF,配置,save,保存到master分支,publish,推送到ADF分支
  2. 检测到ADF分支变化,触发Artifacts pipeline,上传一个制品库,就是把代码复制到一个目录下。
  3. 当制品库的pipeline完成后,触发release pipeline,利用pipeline的参数配置,对QA的资源组进行部署,实现QA环境的ADF正常工作
  4. 对于Prod,其实步骤和QA是一样,企业内部希望如何实现都是可以的。可以在QA完成部署后,马上部署Prod环境,也可以在QA测试完成后,手工去触发Prod环境的部署。

命名规范

Azure上的服务名字,有时候让人崩溃

  1. 有些服务,只能小写字母,不能用下横杠,
  2. 有些服务可以大小写,不能下横杠
  3. 有些服务大小写,下横杠都可以
  4. 有些服务要求全局唯一,有些是不要求
  5. 有些服务,你删掉后,重新创建,名字还不能相同,有软删除的功能,例如key vault服务。

所以建议大家,先搞一个Excel表格,把涉及的服务,名字都整理好。实际中,如果遇到重复,可以在名字后面加数字。你的服务名字,一般都加上公司名字,这样可以大幅减少重复概率。

愿景

data analysis 

dev

power-bi-cicd-1

对于Azure的DevOps服务,不仅仅是用在ADF,还能在Data bricks,就是Azure的Spark上,还能用在Power BI的报表开发上。

希望我可以有一天,通过DevOps,完成全部的Demo,从ADF,一直到PowerBI.

Jul 262020
 

对我来说数据仓库,数据湖这种数据处理的东西,还是非常陌生的,刚好有机会就好好学习一下。

至少对我来说,如果需要很好理解一个东西,需要自己动手练习一遍才行。对于数据仓库这种那么重的应用,你是很难搞出自己的一个demo。

不过时代已经不一样了。你在公有云上,Azure上,可以很快搞定一个数据仓库,数据湖的例子,加深你的理解。

  • Azure Databricks (Spark)
  • Azure HDInsight    (Hadoop)
  • Azure Data Factory (数据处理流水线,工具集)
  • Azure SQL Data Warehouse    Azure的SQL 数据仓库

factoy

这张图,可以理解是Azure推荐给用户的一种最佳实践的架构。根据这个图来理解数据的流向。

Azure Data Factory

对于企业来说,数据分为

  1. 结构化数据
  2. 非结构化数据

结构化数据,很好理解,就是在关系型数据库里的数据。这个其实传统的商业分析工具,应该很多。

非结构化数据

  1. 音频
  2. 视频
  3. 文本

企业内部的数据,分散在各个应用里,形成所谓的数据孤岛。很多时候,单独的一组数据,价值比较有限,挖掘的价值也有限。这时候就需要有一个地方存放这些数据。

在这些数据集中存放的时候,你需要对数据进行整理,处理。

从上面的图,可以看出,数据工厂的用途,就是把数据:结构化和非结构化数据,通过某种定义的方式,存放到Data lake 里。

数据工厂一个很重要的概念:pipeline,这个其实理解,就是数据经过一个流水线的方式,一步一步的处理,最后达到自己满意的结果。存放起来。

Data Lake

从上面的图,大家可以看到,数据湖,实现了数据的大集中。其实数据湖,很多时候理解成一个数据存放的地方。

以前一般都会把这种数据,放到对象存储上,互联网企业,就是在HDFS上。

Azure针对数据湖,专门搞出了一种Data Lake Storage Gen2。所以也可以看出,Azure对数据分析的重视。

Gen2,增强的目录功能,可以当本地文件系统使用,直接mount过来,权限控制,成本

数据放在Azure Data Lake ,你很方便对数据进行分析,处理。

Power BI

这是一个数据展示,报表工具,那么他的数据来源,比较广泛。

ALS gen2

从上面的图来看,Power BI报表工具,是可以直接从数据湖获取数据进行分析。

https://www.blue-granite.com/blog/10-things-to-know-about-azure-data-lake-storage-gen2

Azure SQL Data Warehouse

关于数据湖和数据仓库的区别,让人比较困惑。

diff

https://aws.amazon.com/cn/big-data/datalakes-and-analytics/what-is-a-data-lake/?nc=sn&loc=2

这个对比图,其实是来自AWS,其实Azure上也是差不多。

上面图可以看到,可以把Spark分析的Sql的数据,直接存放到数据仓库里。

在数据仓库里存放的数据,已经是结构化数据,利用报表来展示,会非常方便。

Azure Synapse

Azure Synapse is Azure SQL Data Warehouse evolved

就是未来微软的数据仓库升级版本,也顺便把名字修改了。

synapse

把Power BI直接集成进来。

Jul 052020
 

对于公有云来说,评价他的所谓生态圈,其实认证体系就是一个方面。这里整理一下国外的3大公有云的认证体系。后续争取把阿里云加上。

结论

  1. 3家公有云的认证体系,都比较相似
  2. DevOps是三家重点,Google刚刚加上
  3. 油管上的培训材料非常完整,基本都是培训机构自己制作的培训视频,视频制作非常精致
  4. Foundational, Fundamentals,Associate 级别的培训,视频免费。内容非常优质。
  5. 视频演示实战操作,非常流畅,经验丰富,花费大量的时间。包括demo的案例。
  6. GCP比Azure和AWS弱不少,算是追赶者。AWS和Azure已经是难分高下。
  7. AWS,Azure,GCP,都提供一共免费使用的计划,一年,对培训还是非常实用。
  8. 个人认证可以考虑:管理员认证和架构师认证。DevOps认证也是重点
  9. 认证都是通过VUE报名考试,Azure可以在家里考试,GCP和AWS就必须现场。

Azure

 

azure

 

这个图,是非常新的。简单介绍一下

Azure的认证没有关联关系,只是建议,并不需要通过某个级别,才能进入下一个级别的考试。

还有一点,大家都误以为开发者认证,是考试写代码,其实是让开发者了解Azure的各种服务,如何调用,其实课程内容,基本是不需要太多的开发基础,都是可以明白的。

  • AZ-900:这门课程是针对入门者,不过也针对公司的IT管理者,让你可以对Azure有一个全面的了解。我听过这门课程视频培训,其实是非常有价值的。实用。对于日常实用,真的是够用。
  • AZ-104:管理员认证
  • AZ-400:DevOps培训,微软是很重视的。在微软的认证体系里,通过这门考试,就是专家级别。微软有一整套的CI/CD工具链,尤其是开发工具,github上。所以这个认证大家要关注。
  • AZ-303,AZ-304:你如果希望获取Azure架构师的认证,需要通过2门考试。目前线上考试报名,你可以选择考试Azure 300和Azure 301,可以理解是课程的升级版本。
  • AZ-500:安全工程师,目前还没有安全架构师。安全,企业还是比较关注,你也需要有一套方法论,让企业信服你的方案是安全的。

考试费用:每门考试不台一样,AZ-900,100美金,A-Z300,AZ-301,亚洲是125美金。

AWS认证体系

AWS-roadmap

和Azure还是很相似的。

考试的编号的

aws-number

  • SAP-C01:AWS Certified Solutions Architect Professional 架构师认证。考试费用300美金。
  • DOP-C01:AWS Certified DevOps Engineer Professional DevOps专业认证
  • SOA-C01:管理员认证

和Azure的认证体系很相似吧。

Google Cloud certification

官网的地址 https://cloud.google.com/certification

gcp

Google最新增加了一个Professional 的认证:Professional Cloud DevOps Engineer

gcp-cert

这是官方的图片

 

  • Professional-Cloud-Architect:GCP的架构师认证,200美金
  • Cloud Engineer:管理员认证

Jun 302020
 

这篇文章拖到上半年最后一天,必须完成的时候。儿子是6月11日生日。今年真的也非常特别。半年都在家里呆着。而且10岁,真的是大小孩

基本情况

  • 身高:150
  • 体重:96斤

身高比9岁的时候,长了7厘米,体重,就比较夸张,16斤。最近半年在家里,真的快肥嘟嘟。

蛋糕

现在每年孩子的蛋糕,都是同学的母亲亲手制作,真的非常幸福。孩子气还是很重,估计明年,就很可能看不到这样的孩子气了。

业余爱好

什么年龄做什么事情。这点我一直都比较同意,我就是该玩的年龄,没学会玩,所以希望孩子学会如何玩。

游泳

游泳其实已经是儿子的强项,在50米的标准泳池里,2米水深,连续1000米,各种泳姿都没问题。而且他耐力比较惊人。练习一下,一口气游几千米都没啥问题。

现在就是不会蝶泳。找时间学会就行。

其实也整整学了2个暑假。也算是练习出来。

泰拳

孩子长大,慢慢也能遇到,看到各种所谓的欺负。其实孩子学校是非常不错的。所以由于一次看到同学给欺负,他主动提出要学防身。

其实学啥比较好,所谓散打,拳击,泰拳,还有所谓的传统武术。那么对我来说,选择最实用的,就是泰拳。

家里附近,刚好有一个不错的培训机构,泰国教练教泰拳。

可以这样说,如果你学泰拳,无论大人还是小孩,都应该找泰国教练。才真正的是泰拳。

泰拳实战性强。不会强调什么基本功。上来就是让你攻击教练。让你学会如何攻击,防守。实用,但是不见得好看。

儿子学泰拳的积极性还是很高的,他自己说,这是给逼的。要保护自己,家人,真的要好好练习一下。

上了大概10次的私教课,一周一次,其实效果,我个人觉得非常不错。

要等泰国教练回来,才能继续练习。

编程 Python

这也算是儿子的一个有优势的爱好。学Scratch 2年,感觉还是不错。在今年4月份,开始学Python。还是以前的Scratch老师教,孩子就不要适应老师。

儿子学Python,对我来说,是比较尴尬的事情。我的团队,全都是用Pyton干活,就我不会Pyton,所以也就顺便真的和儿子一起学Python。

其实外面的Python 课程,我基本都听过,都是开头一段,就没继续。跟着儿子一起听了10节python的课程,我真的听懂了,我也真的能用python写点东西,至少for 循环我是没问题。

孩子的编程机构:小麦编程,确实非常不错。估计他们经过验证,孩子第一次接触 Python ,直接上90分钟的课程,效果并不太好。所以孩子这次Python的培训,课程改成 45分钟,缩短教学的时间,让小孩可以更多的时间去理解上课的内容。

python

上面的代码,基本就代表儿子目前的Python的水平。继续学2年,应该还是非常不错的。

儿子目前确实可以很好理解for循环。

画画

儿子参加老师的画画培训,今年春节,还把作品做了一个日历,花的作品,真的非常不错。其实大家都比较好奇,如果没有老师指导,孩子能画成什么样子呢?

画画

对着自己爱看的龙珠书,画的。自己自发去画。我觉得就不错了。

爱看书

当家长的,肯定有一种情节,培养小孩多看书。什么四大名著,早早准备好。不过现在的小孩不爱看。

儿子爱看什么书呢。除了他喜欢的那种动漫。那么去年读完了一本世界名著

哈利波特。这套书一共7册,非常厚,他居然就看完,还看了两遍。

他能够安静坐在哪里看书,是好事。就是他喜欢看啥书,非常不确定。

旅游

去年暑假儿子去了一趟巴厘岛,对他来说,倒是记忆深刻,长大了,也懂事,玩了半个月,还提出要再去玩。那边也确实不错。

这次巴厘岛,考验孩子的英语水平。已经能自己一个人去吃早餐自助,自己一个人去解决自己的问题。

寒假,他们同学家长组织,去了一趟哈尔滨的雪乡,玩的很高兴,可以展现一下滑雪的水平。

儿子滑雪双板,滑的还是不错的。

和自己同学一起出去玩,其实也是很不一样的。体验了零下40度。

看了哈尔滨的冰雕,冰灯。该玩的都玩了。安全回来。很幸运。2020年1月10号出发,18号回北京。23号武汉封城。

May 172020
 

企业在Azure上部署应用,其实有一种常用的网络架构,就是一个vpc下,多个vpc。hub的vpc,实现网络访问的控制。

hub-spoke

整个过程,还是遇到了一些麻烦,这里整理记录一下。

整个过程,最麻烦的地方就是设置从pc到azure的vpn连接。

你需要在你的pc上,win10, 管理员的权限运行 powershell,

https://docs.microsoft.com/zh-cn/azure/vpn-gateway/vpn-gateway-certificates-point-to-site

创建一个证书,导出证书,存放在Azure上

并且还需要生成一个客户端证书。这样下载的vpn客户端,就可以直接连接上。用户名和密码,都是不需要的。

我已经可以访问底下vpc的虚拟机,并且是可以上网。不过ping,和trace,都是没有返回,不知道什么情况。