• [技术干货] (GO生成可执行文件)利用OBS API配置和查询桶历史对象CRR
    (GO生成可执行文件)利用OBS API配置和查询桶历史对象CRR1      工具作用OBS提供跨区域复制(CRR)功能,此功能开通后,可以将同一个账号下一个桶(源桶)中的数据自动、异步地复制到不同区域的另外一个桶(目标桶)中,但启用跨区域复制功能之前上传的对象,不会被复制到目标桶。为了解决这个问题,CRR提供了历史对象CRR功能,开启此功能后,源桶中的所有数据都会自动、异步地复制到目标桶中,此功能的界面还未上线,但可以通过OBS API发送http、https请求来配置历史对象CRR功能,本文工具对API接口进行封装,使用者只需填写简单的配置信息即可启动桶历史对象CRR功能。2      效果展示源桶obs-chongchong-guangzhou中有1000个对象。使用工具启动源桶obs-chongchong-guangzhou到目的桶obs-chongchong-beijing的历史对象CRR,约10分钟后源桶中数据复制到北京region的目的桶obs-chongchong-beijing中。3      工具使用详细步骤(Linux平台)3.1      拷贝工具目录到工具运行平台将本文附录中的工具包链接(testCrrOld_Go_Linux.zip)下载到Linux平台指定目录并解压,并为可执行文件setBucketCrr配置执行权限,效果如下:     其中setBucketCrr是可执行文件、application.properties是配置文件、replicationOld-open.xml是配置历史对象CRR的XML文件。3.2      配置application.properties、replicationOld-open.xmlapplication.properties是工具运行的配置文件,需要将文件中的信息更新为实际信息。replicationOld-open.xml是配置历史对象CRR的XML内容,需要参考下表中解释将文件中的信息更新为实际信息。名称描述是否必须Agency用户创建的委托名字是ID规则的特殊辨识符否Prefix对象键值名的前缀,适配于一个或者多个对象。否Bucket规则适用的目的桶名称。是StorageClass对象的存储类型。有效值:STANDARD|WARM|COLD否 注:XML中字段更详细的配置指导参考链接——https://support.huaweicloud.com/usermanual-obs/obs_03_0003.html3.3      运行工具直接运行可执行文件setBucketCrr即可,工具会发送OBS配置请求,同时还会返回查询配置的结果信息。4      工具使用详细步骤(Windows平台)4.1      拷贝工具目录到工具运行平台将本文附录中的工具包链接(testCrrOld_Go_Win.zip)下载到Linux平台指定目录并解压,效果如下:     其中setBucketCrr是exe可执行文件、application.properties是配置文件、replicationOld-open.xml是配置历史对象CRR的XML文件。4.2      配置application.properties、replicationOld-open.xmlapplication.properties是工具运行的配置文件,需要将文件中的信息更新为实际信息。replicationOld-open.xml是配置历史对象CRR的XML内容,需要参考下表中解释将文件中的信息更新为实际信息。名称描述是否必须Agency用户创建的委托名字是ID规则的特殊辨识符否Prefix对象键值名的前缀,适配于一个或者多个对象。否Bucket规则适用的目的桶名称。是StorageClass对象的存储类型。有效值:STANDARD|WARM|COLD否 注:XML中字段更详细的配置指导参考链接——https://support.huaweicloud.com/usermanual-obs/obs_03_0003.html4.3      运行工具可通过cmd来运行可执行文件setBucketCrr,工具会发送OBS配置请求,同时还会返回查询配置的结果信息。 5      附录工具下载链接:https://obs-tools.obs.cn-north-1.myhuaweicloud.com/crrApi/testCrrOld_Go_Linux.ziphttps://obs-tools.obs.cn-north-1.myhuaweicloud.com/crrApi/testCrrOld_Go_Win.zip  
  • [视频点播] 视频点播更新新功能(GO SDK安装)
    获取并安装JetBrains GoLand,可至Intellij官网下载获取并安装Go安装包,可至Go官方下载页面下载。
  • [基础介绍] OceanConnect命令状态 汇总
    平台提供两种命令下发机制:命令立即下发:立即发送收到的命令,如果设备不在线或者没有收到指令则下发失败。命令缓存下发:平台收到命令后放入队列,在设备上线的时候,平台一次递送队列中的命令。1、DEFAULTPSM模式下,命令刚到平台时,它的状态是“DEFAULT”2、PENDING(缓存的命令待送达)查看命令是否能立即下发,如果不能,状态更新为“PENDING”3、SENT(立即下发的命令待送达)设备上报数据后,命令下发下去(但是不确定命令是否到达设备),消息是CON,状态更新为“SENT”4、DELIVERED(已送达)平台收到与CON消息对应的ACK后(但是不确定命令是否执行成功),状态更新为“DELIVERED”5、SUCCESSFUL(成功)平台收到命令的执行结果上报后将命令状态更新为“SUCCESSFUL”6、FAILED(失败)如果命令在下发过程中报错,则直接将命令状态更新为“FAILED”7、EXPIRED(TTL超时)在设定的时间内未执行下发命令操作,命令状态为“EXPIRED” 8、TIMEOUT(等待ACK超时) 如果ACK超时(PSM和DRX按照CoAP协议层超时时间,EDRX按照EDRX周期+往返时延(默认20s)),向IOCM更新设备状态为TIMEOUT9、CANCELED(被取消)先调用修改设备接口,然后再调用查询命令状态,状态为被取消“CANCELED”注:若在设备对平台应答中实现了mid(非必填参数),并且命令执行结果已上报成功,则:1) 命令执行结果相应中的状态(SUCCESSFUL/FAILED)会刷新到平台数据库中该命令记录;2) 平台推送给APP Server的命令执行结果通知中携带commandId;3) APP Server查询会得到该命令的状态为SUCCESSFUL/FAILED。若在设备对平台应答中未实现mid,并且命令执行结果已上报成功,则:1) 命令执行结果响应中的状态(SUCCESSFUL/FAILED)不会刷新到平台数据库中该命令记录;2) 平台推送给APP Server的命令执行结果通知中不携带commandId;3) APP Server查询会得到该命令的状态为DELIVERED。
  • [技术干货] 继Alpha Go之后,现在的深度学习发展之快令人害怕
    围棋,Alpha Go,人脸识别,自然语音。。。深度学习最早应用和受人瞩目的领域,取得的成绩令人震惊,然而自2016年3月,Alpha Go战胜传奇棋手李世石之后,至今已过了2年3个月,深度学习的可怕已经暴露无遗本文将介绍深度学习应用前瞻领域,对于数据科学而言,变化通常以月为单位计算,如今过了2年多,你对深度学习的认识还停留在围棋吗。如果说学习如逆水行舟,不进则退,那么数据科学领域就是逆流而上。请养成一个习惯,以天为单位关注深度学习领域,它,毫无疑问是当今发展最快,前景最广,含金量最高的技术。 一:视频识别 就在不久之前,全球最大不可描述网站***hub宣布计划利用人工智能技术将网站目录里的全部视频逐帧扫描和整理。从而进行达到视频分类的目的。类似于传统花卉识别,通过数据库里的标签数据对视频进行标记,分类,然而区别于传统的标签,视频具有时间和空间的特性。但由于卷积神经网络(ConvolutionalNeural Networks, CNN)的成熟,深度网络为解决大规模视频分类问题提供了新的思路和方法17579 (1) 监督学习方法基于图像的视频分类:将视频片段视为视频帧的集合,每个视频帧的特征通过ImageNet数据集上预先训练的最高水平的深度模型(如AlexNet,VGGNet,GoogLeNet,ResNet)进行获取。最终,帧层特征汇聚为视频层特征,作为标准分类器(如SVM)识别的输入。ii. 端到端的CNN网络:关注于利用CNN模型学习视频隐含的时空模式,如3D CNN,Two-stream CNN,TSN模型等。17580 iii. 双流(Two-stream)法中的时间CNN只能获取很短时间窗口内的运动信息,难以处理长时间多种行为组成的复杂事件和行为。因此,引入RNN来建模长期时间动态过程,常用的模型有LSTM,GRU-RNN等。LSTM避免了梯度消失的问题,在许多图像和视频摘要、语音分析任务中非常有效。iv. 视频中包含了很多帧,处理所有的视频帧计算代价很大,也会降低识别那些与类别相关的视频帧的性能。因此,引入视觉注意力机制来识别那些与目标语义直接相关的最有判别力的时空特征 (2) 非监督学习方法采用非监督学习的方法,整合空间和时间上下文信息,是发现和描述视频结构的一种很有前途的方法。二:农业:作物辨别、成熟度判别等 继自动收割之后,自动识别,自动分类,自动管理也可以由机器完成,这意味着农作物生产所需的人力再次降低,农民会失业吗,至少在中国不会。农作物识别和管理现在主要使用深度学习中的FasterR-CNN网络进行训练,调整最优模型参数。现在最终效果在测试集上的mAP(平均精度均值)达到了95.33%。而从样本的标记到模型的训练,以及最后的预测,整个过程仅仅用了一周。17581 机械化生产和监控在中国现在很难普及,但是国家对农业的补贴一直很慷慨,这既是一种经济手段也是一种政治手段,所以如果企业愿意在这方面率先使用深度学习技术来降低可变成本(CV),提高相对剩余价值,那么利润率会相当的可观,投资者在考虑投资时一直偏向于那些应用了机器学习和深度学习技术的公司原因也在此,因为某种程度上,企业对成本的控制和销量的控制一样重要,能控制成本的企业在生产上才会有相对竞争优势。 三:智能驾驶:识别路线、驾驶决策等 自动驾驶技术可以拆分为识别,可行驶区域(freespace)检测,行驶路径检测17583 深度学习在自动驾驶上主要应用于图像识别,现在CNN技术几近成熟,识别精确度很高, 不过方法与其他基本类似,1、 收集数据集2、 数据预处理3、 搭建模型4、 训练模型5、 评估模型稳健性 而智能驾驶之所以没有办法快速普及是由于深度学习需要的带有标记(label)的数据,即驾驶场景,要搭建模型必须有大量预处理过的数据集,而驾驶场景何其复杂,所需要的数据量大难收集,这是一个需要时间去解决的问题。三千多个场景一万多个if真的是因为需要才存在。 其他还有如电商行业商品分类,金融行业智能核保OCR识别、车辆智能定损等等都在应用深度学习取得行业优势。如果你觉得深度学习只能用作实业和生产那你就错了,深度学习同样可以应用在文娱领域,如DeepWarp做出的应用可以让任何静态的图片动起来17584 深度学习技术早就已经悄无声息的席卷我们生活中的各个角落,而你却还在像看概念科学一样觉得遥不可及,它是未来的机会,把握它就能获得相对优势。然而大部分人难以接触深度学习真正的原因是门槛高,操作复杂,耗费时间。但是现在有一些很好用的云端深度学习服务,让这门技术更加平民,方便,比如华为云的深度学习服务。 它拥有图像分类、物体检测等几十种CNN/RNN神经网络算法模型;,并且可以直接使用提供大量基于开源数据集训练好的模型,这点十分的方便,可以让你训练模型的时间大大缩短。还可以使用混合并行、梯度压缩、卷积加速、EASGD等技术加快模型训练速度;内置模型压缩能力,可以极大降低模型大小成本。计算速度方面,云端使用深度学习服务可以使用运营商的服务器和GPU,不用因为负担不起硬件设备望而却步,成本减少,相较于过去大大降低了门槛。华为云的深度学习模型训练提供基于UI的完整模型调测、训练、预测数据分析链,方便用户快速挖掘数据价值,随时调整参数。如果你对人工智能领域感兴趣,那么深度学习一定是你不可缺少的一环,因为深度学习技术本身就代表了前沿,对于提升你的价值和含金量都大有裨益,一个投资者也好,老板也好,会更偏向于贴了深度学习标签的人和公司。
  • 有没有go服务调用java服务的DEMO
    有没有go服务调用java服务的DEMO
  • [介绍/入门] 使用ServiceComb Go-chassis构建微服务
    本帖最后由 大脸猫爱吃鱼 于 2018-4-12 20:37 编辑作者 王齐林 发布于 2018年1月25日 转自InfoQ 近日,ServiceComb开源了该项目旗下的Go语言微服务框架ServiceComb Go-chassis(以下简称Go-chassis)。作为ServiceComb生态中的重要一环,Go-chassis将和已经开源的Apache ServiceComb(incubating) Java-chassis一道,为用户带来良好的框架级多语言微服务编程体验。同时,ServiceComb Go-chassis未来也会和ServiceComb Java-chassis一样,捐献到Apache基金会中。什么是chassis?Chassis,直译成中文是底盘的意思,它是一种微服务模式,由微服务大师Chris Richardson提出。在这种模式中,用户并不需要自己去处理构建微服务过程中外部配置、日志、健康检查、分布式追踪等那些横切关注点(crosscutting concern),而是将他们交给专门的框架来处理。用户可以更聚焦业务逻辑本身,简单、快速的开发微服务。Apache ServiceComb Go-chassis简介Go-chassis是一个用Go语言编写的微服务快速开发框架,采用插件化设计,将各种功能模块定义为接口,实现功能“可插拔”的同时也带来了非常好的扩展性;用户可以定制开发自己的通讯协议、处理链,对接自己的配置中心、服务发现中心等。Go-chassis的模块及工作流程如上图所示,不同协议请求进入到各协议Server,Server将具体的协议请求转换为Invocation统一抽象模型,并传入Handler chain( 框架内默认内置了大部分微服务治理所需的handler),最终再进入Transport handler,使用具体的协议客户端传输到目标。目前,Go-chassis支持的特性包括但不限于: [*]服务发现(配合ServiceComb现有的ServiceCenter) [*]动态配置管理: [*]负载均衡 [*]流量控制(服务端与客户端) [*]熔断容错 [*]分布式追踪 [*]Metrics [*]日志 [*]路由策略 在通讯协议方面,Go-chassis原生支持REST/Http 和 Highway协议,其中Highway是ServiceComb开发的、基于RPC的高性能通讯协议。使用Go-chassis开发体质指数应用(BMI)下面,我们将以简单的体质指数应用(BMI)为例,说明如何用Go-chassis快速开发微服务。BMI是国际上常用的衡量**胖瘦程度的一个标准,我们开发的BMI应用主要包含两个微服务: [*]体质指数计算器(calculator):负责处理运算事务。 [*]体质指数界面(web-app):提供用户界面及网关服务。 两个微服务之间的关系如下图所示,它们之间通过REST方式进行通信。准备工作在开始开发之前,请确保开发环境上已经完成以下配置 [*]安装 git [*]安装 Go 1.8+ [*]安装 docker [*]下载 ServiceComb go-chassis [code]go get https://github.com/ServiceComb/go-chassis[/code] [*]运行 Service Center 在 ServiceComb 微服务框架中,Service Center 提供服务注册及服务发现功能,可直接使用 docker 运行。[code]docker pull servicecomb/service-center docker run -d -p 30100:30100 servicecomb/service-center:latest[/code]体质指数计算器(calculator) 开发体质指数计算器(calculator)提供运算服务,分为具体业务逻辑、服务注册与配置,启动框架三部分: [*]具体业务逻辑 定义服务结构体[code]type CalculateBmi struct { }[/code]编写计算体质指数(BMI)函数,该函数根据公式13847进行实现:[code]func (c *CalculateBmi) BMIIndex(height, weight float64) (float64, error) { if height = 0 || weight = 0 { return 0, fmt.Errorf("Arugments must be above 0") } heightInMeter := height / 100 bmi := weight / (heightInMeter * heightInMeter) return bmi, nil }[/code]​编写handler函数,其中restful.Context必须作为入参传入。restful.Context中包含了对http调用的Request和Response的常用操作,Read开头的为对Request的读取,包括ReadEntity、ReadHeader、ReadPathParameter、ReadBodyParameter、ReadRequest等;而Writer开头的为对Response的写入操作,包括WriteHeader、WriteJson、WriteError等。[code]import ( rf "github.com/ServiceComb/go-chassis/server/restful" ) …… func (c *CalculateBmi) Calculate(b *rf.Context) { …… //定义返回结构体,此处省略 heightStr := b.ReadQueryParameter("height") weightStr := b.ReadQueryParameter("weight") var height, weight, bmi float64 var err error …… //字符串与浮点数类型转换,此处省略 if bmi, err = c.BMIIndex(height, weight); err != nil { errorResponse.Error = err.Error() b.WriteHeaderAndJson(http.StatusBadRequest, errorResponse, "application/json") return } result.Result = bmi result.CallTime = time.Now().String() b.WriteJson(result, "application/json") }[/code]指定对应的URL路由[code]func (c *CalculateBmi) URLPatterns() []rf.Route { return []rf.Route{ {http.MethodGet, "/calculator/bmi", "Calculate"}, } }[/code] [*]服务注册与配置 完成业务逻辑代码的编写之后,需要将业务逻辑注册到Go-chassis框架,注册时可以同时指定微服务的名称、ID等属性。[code]chassis.RegisterSchema("rest",&CalculateBmi{})[/code]除了在代码中指定的部分属性外,更多的属性是通过配置文件来进行配置。配置文件包括chassis.yaml和microservice.yaml,放置于代码目录下的conf文件夹内。其中,chassis.yaml中配置的是微服务的公共属性,如公共的AppId信息,使用的注册中心类型信息、地址信息,服务的协议、监听地址、注册发现地址、传输协议信息等;microservice.yaml配置的是微服务的私有属性,包括服务名、版本等。chassis.yaml[code]APPLICATION_ID: bmi #应用ID cse: service: registry: address: http://127.0.0.1:30100 #注册中心(ServiceCenter)的地址 protocols: rest: listenAddress: 0.0.0.0:8080 #微服务的监听地址[/code]microservice.yaml[code]service_description: name: calculator #微服务名称 version: 0.0.1 #微服务版本号[/code]启动框架和服务[code]import ( "github.com/ServiceComb/go-chassis" "github.com/ServiceComb/go-chassis/core/lager" ) …… if err := chassis.Init(); err != nil { //初始化框架 lager.Logger.Error("init failed", err) return } chassis.Run() //运行微服务[/code]体质指数界面(web-app)开发开发完后端的calculator服务之后,需要开发提供给用户的交互界面,主要分为前端静态界面、请求转发、服务启动入口三个部分。 [*]前端静态界面 前端静态界面使用了Bootstrap开发,并通过golang 官方库中http.ServeFile将前端静态页面展示出来。[code]func BmiPageHandler(w http.ResponseWriter, r *http.Request) { http.ServeFile(w,r,"external/index.html") }[/code]请求转发体质指数界面(web-app)微服务收到前端界面发过来的请求时,通过core.NewRestInvoker()将请求转发到calculator服务。在转发调用的过程中,用户并不需要感知calculator服务具体的地址和端口,服务发现的过程由go-chassis框架自动完成。[code]func BmiRequestHandler(w http.ResponseWriter, r *http.Request) { queries := r.URL.Query() heightStr := queries.Get("height") weightStr := queries.Get("weight") requestURI := fmt.Sprintf("cse://calculator/bmi?height=%s&weight=%s", heightStr, weightStr) restInvoker := core.NewRestInvoker() req, _ := rest.NewRequest("GET", requestURI) resp, _ := restInvoker.ContextDo(context.TODO(), req) w.Header().Set("content-type", "application/json") w.WriteHeader(resp.GetStatusCode()) w.Write(resp.ReadBody()) }[/code] [*]服务配置与启动 体质指数界面(web-app)服务的配置文件同样包括chassis.yaml和microservice.yaml两个yaml文件,具体内容如下:chassis.yaml[code]APPLICATION_ID: bmi #应用ID cse: service: registry: address: http://127.0.0.1:30100 #注册中心(ServiceCenter)的地址[/code]microservice.yaml[code]service_description: name: web-app #微服务名称 version: 0.0.1 #微服务版本号[/code]与calculator服务不同,体质指数界面(web-app)在Go-chassis框架内是一个消费者类型的服务,故只需调用chassis.Init()对Go-chassis框架进行初始化。[code]func main() { http.HandleFunc("/", BmiPageHandler) http.HandleFunc("/calculator/bmi", BmiRequestHandler) if err := chassis.Init(); err != nil { lager.Logger.Error("Init fail", err) return } port := flag.String("port", "8889", "Port web-app will listen") address := flag.String("address", "0.0.0.0", "Address web-app will listen") fullAddress := fmt.Sprintf("%s:%s", *address, *port) http.ListenAndServe(fullAddress, nil) }[/code]界面效果通过上述步骤,体质指数(BMI)应用已经开发完毕,可以通过http://localhost:8889访问该应用,届时将能看到如下界面,并可输入身高和体重信息验证服务是否正常运行。使用Go-chassis进行微服务治理除了基础的业务逻辑开发外,Go-chassis提供了丰富的微服务治理功能。下面将在刚刚开发的体质指数应用(BMI)基础上,介绍如何使用Go-chassis进行微服务治理。负载均衡当对体质指数计算器(calculator)进行水平扩展时,需要将请求均衡地分发到多个体质指数计算器(calculator)上。Go-chassis的负载均衡功能包括负载均衡策略和负载均衡过滤器两种方式。微服务实例在经过过滤器中制定的规则初筛之后,根据策略算法选出一个合适的实例进行下一步处理。Go-chassis内置了RoundRobin,Random,SessionStickiness,WeightedResponse四种策略,其中默认使用的策略为RoundRobin。此外,无论是负载均衡策略还是负载均衡过滤器,开发者都可以根据自己的需求进行定制。 [*]开启 负载均衡功能默认开启,不需要另外配置。若用户希望使用RoundRobin之外的策略,可以在配置文件chassis.yaml中进行指定。[code]cse: loadbalance: # 全局负载均衡配置 strategy: name: Random microserviceA: # 微服务级别的负载均衡配置 strategy: name: SessionStickiness[/code]对体质指数计算器(calculator)进行水平拓展时,用户只需复制原有代码,并在配置文件中修改监听端口,使得新的实例在另一个端口运行即可。 [*]微服务实例的本地缓存 为了便于区分不同的运行实例,在体质指数计算器(calculator)的实现中新增了返回实例ID的代码。[code]import ( "github.com/ServiceComb/go-chassis/core/registry" ) …… items := registry.SelfInstancesCache.Items() for microServiceID, _ := range items { instanceID, exist := registry.SelfInstancesCache.Get(microServiceID) if exist { result.InstanceId = instanceID.([]string)[0] } }[/code]Go-chassis框架初始化时,会将注册中心中的实例缓存到本地,并每30秒同步一次注册中心和本地缓存的数据(可配置)。代码中使用了本地缓存的数据来获取实例ID。 [*]验证 上述操作完成后,在界面上点击Submit 按钮,可以发现实例ID交替变换。流量控制 [*]开启 流量控制机制通过控制数据传输速率来避免微服务过载运行。用户可以进行服务端流量控制,限制接收处理请求的频率,在体质指数计算器(calulator)的chassis.yaml中可进行服务端流量控制的配置:[code]cse: handler: chain: Provider: default: ratelimiter-provider #添加服务段流量控制的handler flowcontrol: Provider: qps: enabled: true # 是否启用流量控制 limit: web-app: 1 # key为指定要限制的微服务调用者名称,此处web-app为调用calculator的微服务的名称;value为每秒允许的请求数。[/code]也可以进行消费端流量控制,限制发往指定微服务的请求的频率。在体质指数界面(web-app)中的chassis.yaml中配置:[code]cse: handler: chain: Consumer: default: ratelimiter-consumer #添加消费者段流量控制的handler flowcontrol: Consumer qps: enabled: true # 是否启用流量控制 limit: calculator: 1 # key为指定要限制的请求发往的微服务的名称;value为每秒允许的请求数[/code]验证访问 http://localhost:8889,在身高和体重的输入框中输入正数,尝试在1秒内多次点击 Submit 按钮。此时,能看到所有的请求将被后台延迟处理,处理的频率为1次/秒。熔断与降级 [*]开启 熔断与降级主要用于解决或缓解服务雪崩的情况,即个别微服务表现异常时,系统能对其进行处理,从而避免资源的耗尽。用户可以在服务端体质指数计算器(calculator)的chassis.yaml 文件中指明使用服务治理的处理链及指定熔断和容错策略:[code]cse: handler: chain: Provider: default: bizkeeper-provider circuitBreaker: Provider: calculator: requestVolumeThreshold: 3 #10s内发生错误的阈值,超出阈值触发熔断 fallback: Provider: enabled: true fallbackpolicy: Provider: policy: returnnull #出错后的处理策略[/code] [*]验证 [*]使服务进入熔断状态。访问 http://localhost:8889,在身高或体重的输入框中输入一个负数,连续点击三次或以上 Submit 按钮,此时在网页下方能看到类似左图的界面。 [*]验证服务处于熔断状态。在身高和体重的输入框中输入正数,再次点击 Submit 按钮,此时看到的界面依然是类似左图的界面。同时在 体质指数计算器(calculator) 后台运行日志中也能看到 circuit open 的日志。 [*]验证服务恢复正常。约5秒后 ,在身高和体重的输入框中输入正数,点击 Submit 按钮,此时界面显示正常。 分布式调用链追踪开启分布式调用链追踪用于有效地监控微服务的网络延时并可视化微服务中的数据流转。启用分布式调用链追踪,需要在体质指数计算器(calculator) 的 chassis.yaml 文件中添加如下配置,指定追踪数据上报的开关以及上报地址、上报类型等。[code]cse: handler: chain: Provider: default: tracing-provider tracing: enabled: true collectorType: zipkin collectorTarget: http://localhost:9411/api/v1/spans[/code]同样的,在体质指数界面(web-app)中的chassis.yaml中进行如下配置:[code]cse: handler: chain: Provider: default: tracing-consumer tracing: enabled: true collectorType: zipkin collectorTarget: http://localhost:9411/api/v1/spans[/code]此外,还需要运行Zipkin 分布式追踪服务,可以采取Docker方式:[code]docker pull openzipkin/zipkin docker run -d -p 9411:9411 openzipkin/zipkin[/code]验证首先访问 http://localhost:8889 ,在身高和体重栏处输入正数,并点击 Submit 按钮。然后访问 http://localhost:9411 ,进入Zipkin查看分布式调用追踪情况,可得下方界面。​Metrics [*]开启 监控数据能直观的显示微服务应用的性能数据,帮助更好的进行微服务治理、制定弹性伸缩策略等。Go-chassis支持输出Prometheus格式的监控数据,提供的数据包括Golang运行时的数据、微服务进程的内存占用、CPU占用情况等。要使用监控功能,需要在体质指数计算器(calculator) 的chassis.yaml 文件中添加下列内容:[code]cse: metrics: apiPath: /metrics enable: true enableGoRuntimeMetrics: true #是否开启go runtime检测 [/code] [*]​​​​验证 首先访问 http://localhost:8889 ,在身高和体重栏处输入正数,并点击 Submit 按钮。然后访问 http://localhost:8080/metrics(其中8080为体质指数计算器(calculator)服务端监听的端口),可以得到下图所示的监控数据:加入ServiceComb社区​ 本文介绍了ServiceComb Go-chassis的基本特性以及如何使用ServiceComb Go-chassis开发体质指数应用(BMI)以及进行微服务治理。整个示例的源代码可以从Github上获取。同时,作为一个新开源的项目,ServiceComb Go-chassis诚挚的欢迎大家一起参与社区讨论,贡献代码,共同努力打造“最好用的Go语言微服务框架”。 [*]ServiceComb Go-chassis github地址:https://github.com/ServiceComb/go-chassis [*]ServiceComb官方网站:http://servicecomb.incubator.apache.org/ [*]ServiceComb邮件列表:[email]dev-subscribe@servicecomb.incubator.apache.org[/email]
  • 【开心一刻】最受IT自由职业者欢迎的技能TOP 10发布
    本帖最后由 云彩飞扬 于 2018-2-24 14:48 编辑文章来自:IT168网站几个月的时间,IT技术界会发生翻天覆地的变化吗?也许这个时间不会影响IT技术领域的整体格局,但是对于某一种技术来说,则足够发生很大的改变。几个月之前,区块链技术还在自由职业者热门技能中排名第二,而现在它的身影已经消失了。近日,全球最大的自由职业者网站Upwork了美国自由职业市场上最热门技能的最新季度指数,相比发现,Q3和Q4技能指数结果存在巨大的差异。举个例子,首先就是React和区块链从Q4名单中消失了,比特币成为了自由职业者增长最快的技能,而React Native和Go则冲进了前五。唯一一个发挥比较稳定的就是AngularJS,仅仅从Q3的12位下降到了Q4的14位。据相关研究表明:独立劳动力正在不断增长,而且世界500强企业使用自由职业者的比例也在不断增加。随着新技能的不断涌现和原有技能的不断发展,企业会越来越依赖自由职业者。2017年第四季度增长最快的十大技能1、Bitcoin2、Amazon DynamoDB3、React native4、Robotics5、Go development6、Forex trading7、3D rigging8、Augmented reality9、Computer vision10、Penetration testing 2017年第三季度增长最快的十大技能1、Robotics2、Blockchain3、Bitcoin4、Penetration testing5、React.js6、Amazon Web Services Lambda7、Augmented reality8、Deep learning9、Instagram marketing10、Final Cut Pro X Go语言在拥挤的编程语言市场中,简单易懂似乎是极具吸引力的一个特性,所以Go语言在这么多语言中脱颖而出几乎是板上钉钉的。HashiCorp分享了Go语言从初生到成熟的整个旅程,Nick Jackson也展示了他们在Go语言上进行决策的整个过程,一直以来他们的业务都受到哪些限制,Go语言为什么能够成为使用最多的语言,他们从标准库中获得了哪些实在好处?React Native:Native发展的新竞争者?根据Q4的技能热度结果,React Native是第三个热门技能,为什么React Native只有两岁,却受到了这么技术开发人员的喜欢呢?**a Rogers给出了以下几个原因:跨平台开发许多移动IT公司都认为开发跨平台应用程序是React Native的主要优势,事实也的确如此,iOS和Android共享约96%的市场,使用React Native,可以重复使用多达70%的代码,然后应用一些平台调整(主要是关于UI)。快速开发迭代快速调试是我们喜欢React Native的另一个原因。编码时不必花费大量时间编译或每次将应用程序上传到物理设备或模拟器。相反,你可以立即监控所有更新,它显着提高了生产力并缩短了开发时间。简化布局Native iOS和Android开发人员在使用UI时经常遇到问题。React Native有另一个开发环境,整个过程非常简单。移动UI的开发类似于网站开发,所以在使用React Native框架构建应用程序时,开发人员可以使用可轻松管理的块进行操作。不断完善React Native框架是在2015年创建,相对年轻,其也在不断改进和更新新功能,例如支持的数据库种类每年都在增加,因此我们有理由相信移动开发中React Native将越来越容易。组件组成Facebook框架的另一个优点是方便的组件重用系统。React Native允许存储应用程序中最常用的元素,以便它们可以放置在不同的屏幕上,而无需进行任何更改。而且,这种方法比代码复制更方便。为什么?因为如果你对组件进行一些更改,那么这些更改将自动应用于其所有副本。应用程序足以媲美原生APP许多跨平台框架(如PhoneGap或Cordova)都是通过名为WebView的移动引擎呈现代码。然而,如果你曾经使用过或开发过这样的应用程序,你就会知道这种应用程序的效果非常差。而React Native则可以在没有任何移动引擎的帮助下将代码呈现给本地API,并且这个框架提供了一组原生模块,这些模块是用Objective-C和Java编写的,开箱即用,有助于提高计算繁重的操作(例如视频播放)的性能。最后,你会得到一个用JS编写的移动应用程序,看起来和使用起来都几乎与原生应用无异。
  • [行业前沿] go-chassis有自带的注册登录模块吗?
    go-chassis有自带的注册登录模块吗?
  • [介绍/入门] 国内首款 | Go语言微服务框架发布!
    本帖最后由 李白云 于 2018-2-3 11:34 编辑华为云CSE微服务引擎是业界首个商用的企业级微服务应用管理平台,包含微服务Java SDK、Go SDK、Mesher,为用户提供统一的服务注册、配置和治理控制台,可轻松实现微服务应用的快速开发和高效运维。 日前,华为云CSE(Cloud Service Engine)正式推出的产品级Go语言微服务框架Go Chassis。借助CSE Go Chassis进行微服务开发可最大化地降低开发门槛,提升产品上线速度,同时可以获得微服务运行时高可靠性保证、运行时动态治理等一系列开箱即用的能力。 在不久前CSE刚刚发布了基于Service mesh技术的CSE Mesher,支持Net、Node.js等语言应用能够以零侵入模式接入CSE微服务治理,本次Go语言微服务框架的发布,不仅意味着CSE正式拥抱Go生态系统,同样意味着CSE已提供Java、Go、NET、Node.js、PHP等多语言微服务解决方案,这给了企业及开发者提供了更大的选型空间,使企业可以高效复用现有的语言能力和软件资产。 Go语言:云计算新一代开发语言最近,Go语言之父,Google大神Rob Pike在博客里谈到了Go语言十年的成长,其中尤其是在云计算领域的发展速度让他感到震惊。Docker使用Go语言催化出云计算领域的容器行业。并且从Google趋势图中可以发现,Go在中国的使用非常火爆,并且截止目前Go社区在全球已有50万gopher。 Go语言语法特性简单、更加人性化的并行和异步编程;用更少的代码做更多的事、关注程序执行效率和性能。同时Go语言有Google这样的一流技术公司在后面,Go语言杀手级的应用docker,其生态圈在近年已经爆棚,已经获得了实践的广泛认可。10191 CSE Go Chassis 简化开发灵活可靠作为业界首款商用级别的Go语言微服务框架,Go Chassis已具备支持企业级应用的核心特性: ▷ 可定制的通信协议:除了现有支持的HTTP/ Highway RPC协议外,用户可自行扩展协议。支持Go Chassis开发的应用与使用Java Chassis开发的应用互相通信,企业在进行微服务架构选择有更大的自由。▷ 使微服务更加健壮:完善的服务治理(负载均衡、限流、熔断、降级等等),保障Go微服务应用可靠运行。▷ 运维:metrics可对接prometheus,让Go微服务应用运维无忧;并且log可下沉到不同系统,用户可按需配置log。▷ 安全:插件化的Cipher支持企业在证书、aksk等敏感数据加载时使用自己的加解密算法。▷ 灵活的处理链:支持用户自定义框架处理逻辑。 使用CSE Go Chassis开发微服务,可以最大化地简化开发门槛,提升产品上线速度。同时可以获得微服务运行时高可靠性保证、运行时动态治理等一系列开箱即用的能力。 多语言微服务解决方案CSE目前已全面支持企业应用基于Chassis和Sidecar模式进行微服务开发,无论是Java语言、Go语言或者其它语言的企业应用,均可基于CSE提供的全方位微服务解决方案使用统一标准进行微服务开发、通信、监控、治理。10192Chassis模式 用户可使用Go、Java语言微服务框架来作为微服务开发的底座,框架为其封装掉复杂性,让用户基于框架聚焦在上层业务逻辑进行二次开发。CSE Chassis提供了开箱即用的微服务治理之外,也赋予企业应用丰富的扩展能力。针对新开发的Go应用我们推荐使用此次发布的Go Chassis进行开发,通过使用Go Chassis快速开发易运维的微服务应用。 其它语言应用可使用CSE Mesher(Service mesh)以零侵入的方式CSE微服务治理中心。Mesher以Agent方式部署在应用节点上,对于不适合快速改造的老旧单体应用,Mesher提供了一种接入分布式环境的方式。 Chassis与Sidecar模式都不是银弹,它们各有优点和缺点,但Chassis与Sidecar可无缝结合,企业开发者可以因地制宜进行混编,选择真正适合企业的微服务化方案。例如很多传统企业应用是无法做到一蹴而就的架构微服务化,而在演进的过程当中,就可以考虑将单体应用一部分一部分地进行拆分。在这个过程中,已经拆分出来的基于Java/Go Chassis开发的微服务与未拆分并使用Mesher的应用之间就可实现互通和统一治理。对于企业应用开发来说,没有最好的只有最适合的,华为云CSE微服务引擎为企业提供SpringCloud、ServiceComb和ServiceMesh商业版多个开发框架的支持,支持Java/Go/.NET/Node.js/PHP/Python等多语言微服务开发和治理,致力于为企业应用微服务化提供一站式解决方案。 试用传送门:http://www.huaweicloud.com/product/cse.html
  • [行业前沿] Go SDK和CSE Mesher有什么关系?
    CSE Go SDK和CSE Mesher有什么关系?
  • [热门活动] 华为云市场双“蛋”狂欢GO--购任意软件即可赢取华为 nova 2s(活动时间:12/20--1/15)
    华为云市场是云上软件appstore,为企业提供一站式的软件购买与服务。包括多个子市场,提供镜像、Saas、API、服务、解决方案等,满足企业的所有上云需求。正逢双旦节日,华为云市场全新改版,携各大好礼隆重推出双“蛋”狂欢购活动,活动期间购云市场产品即可参与抽奖赢取华为手机nova 2S.                                一、活动时间:2017/12/20-2018/1/15                                二、奖品说明:                                一等奖 2名 华为手机nova 2S---订单实付金额前十名可参与抽取一等奖;                                二等奖 15名 京东购物E卡100元---订单实付金额前50名除去一等奖用户可参与抽取二等奖;                                三等奖 50名 云市场定制礼品---按实付金额的高低除去一二等奖用户抽取三等奖,送完即止;                                    奖品展示:                                三、活动规则:                                1、活动仅适用于华为云实名认证用户;                                2、活动期间购买云市场软件产品交易额>0即可参与活动抽奖;                                3、以实际下单的订单号为准进行抽奖,同一ID只能获奖一次,不能重复获奖;                                4、中奖订单信息将会于1.25--1.30日在华为云市场论坛公布;                                
  • 云市场双“蛋”狂欢GO--(PS:云市场最新“吐槽有礼”活动接踵而至)
    本帖最后由 华为云市场 于 2018-1-24 03:51 编辑好消息好消息{:4_87:}现在起吐槽华为云市场也有机会赢取大礼,详情请戳 “吐槽有礼 no 吐 no 快” {:9_90:}华为云市场是云上软件appstore,为企业提供一站式的软件购买与服务。包括多个子市场,提供镜像、Saas、API、服务、解决方案等,满足企业的所有上云需求。正逢双旦节日,华为云市场全新改版,携各大好礼隆重推出双“蛋”狂欢购活动,活动期间购云市场任意产品即可参与抽奖赢取华为手机nova 2S.(本活动于1/15结束,云市场最新活动“吐槽有礼”已经上线) 7170 一、活动时间:2017/12/20-2018/1/15 . 二、活动参与方式: 登录华为云市场 https://app.huaweicloud.com/ 购买任意软件即可参加活动, 更有“0元试用专区”可免费体验。 三、奖品说明: 一等奖 2名 华为手机nova 2S---订单实付金额前十名可参与抽取一等奖; 二等奖 15名 京东购物E卡100元---订单实付金额前50名除去一等奖用户可参与抽取二等奖; 三等奖 50名 云市场定制礼品---按实付金额的高低除去一二等奖用户抽取三等奖,送完即止; 奖品展示:7171 四、活动规则: 1、活动仅适用于华为云实名认证用户; 2、活动期间购买云市场软件产品即可参与活动抽奖; 3、以实际下单的订单号为准进行抽奖,同一订单只能获奖一次,不能重复获奖; 4、中奖订单信息将会于1.25--1.30日在华为云市场论坛公布; 5、为保证活动的公平公正,华为云有权对恶意刷活动资源(“恶意”是指为获取资源而异常注册 账号等破坏活动公平性的行为),利用资源从事违法违规行为的用户收回活动参与资格。 6、所有参加本活动的用户,均视为认可并同意遵守《华为云用户协议》《华为云社区运营机 制》。 7、活动规则:活动参与需遵守《华为云社区常规活动规则》,戳>>>这里 本活动参加华为云社区嘉年华活动盛典,详情请戳 华为云社区嘉年华活动
  • [教程] 关于使用CSE的Go微服务框架的一些tips
    建议选用1.8及以上的Go包,下面的版本太老。
  • [其他] 开源confluent-kafka-go连接华为MRS的安全集群
    本帖最后由 yd_55568363 于 2017-11-20 14:41 编辑1 问题描述: 开源confluent-kafka-go连接华为MRS的安全集群失败。 具体原因:confluent-kafka-go依赖的库librdkafka默认将broker所在hostname作为了server princple的一部分来使用,导致认证失败。 2 修改思路: 增加domainName参数用于认证,允许客户端设置。 2.1 librdkafka具体修改步骤: 源码地址:https://github.com/edenhill/librdkafka src/rdkafka_conf.c 增加sasl.kerberos.service.name配置项 "Kerberos principal name that Kafka runs as.", .sdef = "kafka" }, { _RK_GLOBAL, "sasl.kerberos.principal", _RK_C_STR, _RK(sasl.principal), "This client´s Kerberos principal name.", .sdef = "kafkaclient" }, + { _RK_GLOBAL, "sasl.kerberos.domain.name", _RK_C_STR, + _RK(sasl.domain_name), + "This cluster´s Kerberos domain name.", + .sdef = "hadoop.hadoop.com" }, #ifndef _MSC_VER { _RK_GLOBAL, "sasl.kerberos.kinit.cmd", _RK_C_STR, _RK(sasl.kinit_cmd), "Full kerberos kinit command string, %{config.prop.name} is replaced " "by corresponding config object value, %{broker.name} returns the " "broker´s hostname.", - .sdef = "kinit -S \"%{sasl.kerberos.service.name}/%{broker.name}\" " + .sdef = "kinit -S \"%{sasl.kerberos.service.name}/%{sasl.kerberos.domain.name}\" " "-k -t \"%{sasl.kerberos.keytab}\" %{sasl.kerberos.principal}" }, { _RK_GLOBAL, "sasl.kerberos.keytab", _RK_C_STR, _RK(sasl.keytab), "Path to Kerberos keytab file. Uses system default if not set." "**NOTE**: This is not automatically used but must be added to the " "template in sasl.kerberos.kinit.cmd as " src/rdkafka_conf.h增加domain_name字段 --- src\rdkafka_conf.h 2017-10-17 11:20:56.000000000 +0800 +++ src\rdkafka_conf.h 2017-10-25 16:26:34.000000000 +0800 @@ -118,12 +118,13 @@ struct { const struct rd_kafka_sasl_provider *provider; char *principal; char *mechanisms; char *service_name; + char *domain_name; char *kinit_cmd; char *keytab; int relogin_min_time; char *username; char *password; #if WITH_SASL_SCRAM src/rdkafka_sasl_cyrus.c 将hostname替换成domainName --- src\rdkafka_sasl.c 2017-10-17 11:20:56.000000000 +0800 +++ src\rdkafka_sasl.c 2017-10-25 16:09:38.000000000 +0800 @@ -192,13 +192,14 @@ rk->rk_conf.sasl.mechanisms, rk->rk_conf.api_version_request ? "" : ": try api.version.request=true"); return -1; } - rd_strdupa(&hostname, rktrans->rktrans_rkb->rkb_nodename); + //rd_strdupa(&hostname, rktrans->rktrans_rkb->rkb_nodename); + rd_strdupa(&hostname, rk->rk_conf.sasl.domain_name); if ((t = strchr(hostname, ´:´))) *t = ´\0´; /* remove ":port" */ 3 重新编译librdkafka 具体步骤参考https://github.com/edenhill/librdkafka/tree/v0.11.1 要求:已安装libsasl2-dev 编译: ./configure make make install 4 客户端使用 增加如下配置项: "security.protocol": "SASL_PLAINTEXT", "sasl.kerberos.service.name": "kafka", "sasl.kerberos.keytab": "/opt/nemon/user.keytab", ----需要换成路径 "sasl.kerberos.principal": "nemon@HADOOP.COM",----需要换成实际用户名 "sasl.kerberos.domain.name": "hadoop.hadoop.com",--需要换成实际domainName 其中前四项为开源已有参数。Keytab可通过manager界面下载。系统设置—用户管理—更多—下载认证凭据。 domainName如何获取: domain的命名规则为:hadoop. toLowerCase(realm)。假设集群的域名(default_realm)为HUAWEI.COM时,domain的值为hadoop.huawei.com。 可通过manager界面服务管理—KrbServer—服务配置—参数类别(全部配置)—域 ,查看default_realm。 示例代码consumer_example.go(非安全版VS安全版): 运行效果:略
  • [教程] 【跟专家深度学习7部曲】-《Go及其相关框架插件机制比较》
    本帖最后由 橘色祥云楼楼主 于 2018-1-3 10:27 编辑《Go及其相关框架插件机制比较》是华为[color=rgb(0,112,192)]PaaS服务产品部 史建伟老师精心打磨而成!{:3_48:} 【专家介绍】4007 【专题介绍】 Go语言自诞生之日起,相较Java等强类型虚拟机语言缺乏语言层面的动态加载能力。1.8以来引入了基于共享对象库文件(.so)的plugin机制,能够动态加载基于go语言编写的.so库文件。同时Docker、Kubernetes等基于Go语言的开源框架/系统都有基于自身架构设计的插件/驱动机制来实现特定模块功能的用户自定义扩展,并最终驱动了旨在兼容多数容器编排系统的容器存储接口标准CSI的起草。 本文重点介绍5个Go语言及其相关开源框架的插件机制,基于相关的原理、架构和使用分析,一窥当前Go语言领域的插件机制现状。文末基于详细的比较给出了参考步骤和架构,可供基于Go语言开发的系统进行模块化、插件化机制/框架的选型参考。 本文分成7个部分,带领大家一步步深度学习。(其中1和2合并成了一个帖子) 内附PPT图片,点击查看,深度学习7步走: 【Go及其相关框架插件机制比较】1. 引言&2.Go plugin机制 【Go及其相关框架插件机制比较】3. Docker插件机制 【Go及其相关框架插件机制比较】4. K8S插件机制 【Go及其相关框架插件机制比较】5. Hashicorp go-plugin 【Go及其相关框架插件机制比较】6.The Container Storage Inte**ce (CSI) 【Go及其相关框架插件机制比较】7. 总结 如果你有任何问题,欢迎马上回帖咨询,{:4_87:}我们会邀请史老师尽快为您解答~ ✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔我是有巨大的好事情的分割线✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔ 顺便来参与本年度最后一波活动啦:截止2018年1月31日——你的问题你的建议还能被采纳而获奖哦!{:2_26:} 8103 点击查看:《【1条100块】“3选1任你怼”:提个问、建个议,开口就能瓜分1000元红包》 ←← 3899
总条数:166 到第
上滑加载中