实时警报通知:微信告警通知的重要性解析
884
2023-01-10
本文目录一览:
概要
由于gRPC主要是谷歌开发的,由于一些已知的原因,gRPC跑demo还是不那么顺利的。单独写这一篇,主要是gRPC安装过程中的坑太多了,记录下来让大家少走弯路。
主要的坑:
本文讲解gRPC demo的同时,会介绍如何解决这些坑。本文对应的Github地址:https://github.com/52fhy/grpc-sample 。该仓库存储了demo示例,以及部分系统编译好的二进制包,大家觉得有些步骤里耗时实在太长了,可以直接clone该仓库,复制二进制包到对应目录(仅限测试开发,生产环境还是老老实实自己编译吧)。
升级GCC
gRPC命令行工具编译需要使用 GCC4.8及以上版本。CentOS6系列的内置版本是GCC4.7。
如果你的系统GCC版本=4.8,可以忽略本节。如果仅使用golang、java,请忽略本节。
如果需要升级gcc至4.8或更高版本,建议直接采用安装SCL源之后安装devtoolset-6(devtoolset-6目前gcc版本为6.3),因为devtoolset-4及之前的版本都已经结束支持,只能通过其他方法安装。
升级到gcc 6.3:
需要注意的是scl命令启用只是 临时 的,退出shell或重启就会恢复原系统gcc版本。如果要长期使用gcc 6.3的话:
这样退出shell重新打开就是新版的gcc了。其它版本同理。
升级到gcc 7.3:
已经停止支持的devtoolset4(gcc 5.2)及之前版本的安装方法,可能比较慢,大家感兴趣的话可以尝试。
编译gRPC命令行工具
gRPC分C、JAVA、GO、NodeJS版本,C版本包括C++, Python, Ruby, Objective-C, PHP, C#,这些语言都是基于C版本开发的,共用代码库一个代码库。
如果使用C版本的gRPC,最终要从源码里编译出下列工具:
这些工具作为插件供proto编译器使用。需要先下载 grpc/grpc github上的源码。
这里有2个坑:
1、grpc/grpc仓库比较大,鉴于国内访问的网速,建议使用国内镜像。码云(https://gitee.com)提供了同步更新的镜像地址:
这样下载速度提高了不少。
2、git submodule update这个命令实际就是在下载.gitmodules文件里定义的第三方依赖项到third_party目录,这个依赖项有很多,大家可以打开.gitmodules文件查看下详情。依赖的仓库都在github上,下载没几个小时是下载不下来的,就等着慢慢下载吧。
回头想想,我们花费了很多时间,结果只是为了得到grpc的proto编译插件。
PHP相关支持
PHP暂时不支持作为grpc的服务端。作为客户端是可以的,需要机器安装:
其中protoc和protobuf c扩展已经在 Protobuf 小试牛刀 介绍过了,这里不再赘述。上一小节里如果安装成功,那么grpc_php_plugin也是有了的。下面介绍如何安装PHP版的gRPC库。
安装grpc c扩展:
要求:GCC编译器需要4.8及以上版本。可以使用pecl安装:
也可以指定版本:
或者下载源码(http://pecl.php.net/package/grpc)安装:
grpc/grpc代码库里也有PHP扩展的C源码,在grpc/src/php/ext/grpc目录,进去也可以直接编译。
编译完成后在php.ini里添加,使用php --ri grpc可以查看信息。
安装完C扩展后,还需要使用composer安装grpc的库:
gRPC示例
编写gRPC proto
一共定义了三个文件:
其中 User 作为 Model定义,Response 用于 RPC统一返回定义,GreeterService 则是服务接口定义。
限于篇幅,proto文件详见 https://github.com/52fhy/grpc-sample 仓库的proto目录。
GreeterService.proto文件内容如下:
这里面定义了一个service,相当于定义了一个服务接口,我们把方法名、参数定义好了,后面需要去实现它。由于gRPC不支持PHP作为服务端,这里我们使用Golang作为服务端。
首先需要使用proto工具编译出golang的代码:
执行成功,会在 Pb_Go目录里生成Go代码:
如果需要生成PHP客户端的代码,则需要使用grpc php的命令行工具grpc_php_plugin,前面小结如果执行成功,这个工具已经有了。然后:
最终生成的文件:
注意:编译那里如果我们不加--grpc_out=../$out --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin,生成的PHP类是没有GreeterClient的。这个文件是gRPC编译工具自动生成的,用于连接gRPC服务端。
go编写服务
我们用Golang写服务端。上面虽然生成了Golang的部分代码,但真正的服务还没有写呢。
main.go
首先我们新建个main.go,代码不多,我直接贴出来:
然后就可以编译了。
有个大坑:go build main.go的时候会先下载go.mod里定义的依赖(依赖比较多,详情查看:https://github.com/52fhy/grpc-sample/blob/master/go.mod),其中下面这条非常慢,仓库太大了,虽然重定向到github:
为了快速下载,我在码云上做了镜像,地址:gitee.com/52fhy/google-api-go-client 。改了之后下载快多了。
编译成功后,生成了二进制文件main。我们可以直接运行:
go test
为了测试我们写的服务是否正常,可以写测试用例:
test_client.go
运行:
运行有点慢,感觉依赖的库多了。
php客户端
使用gRPC PHP客户端,确保你已经安装了:
示例:
client_test.php
运行后输出:
常见问题
1、CentOS6使用 go mod获取第三方依赖包unknown revision xxx错误
解决:其实go mod调用链中会用到一些git指令,当git版本比较旧时,调用失败产生错误,并给出歧义的提示信息。方法就是升级git版本,CentOS6自带的git是1.7版本。升级完毕后,再尝试go mod。
快速升级方法:
centos6:
2、PHP报错:Fatal error: Class 'Google\Protobuf\Internal\Message' not found
解决:请安装PHP的protobuf c扩展。
3、PHP报错:Fatal error: Class '\Grpc\BaseStub' not found
解决:使用composer require grpc/grpc安装grpc。另外对应的grpc C扩展也要安装。
4、下载 github release包很慢怎么办?
解决:下载Mac版 Free Download Manager 下载工具可以解决Github 下载缓慢或失败问题。速度嗖嗖的。
参考
1、为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本
http://www.vpser.net/manage/centos-6-upgrade-gcc.html
2、centos 6.x/7.x使用yum升级git版本 - 夜空
https://blog.slogra.com/post-721.html
3、Protobuf 小试牛刀 - 飞鸿影
https://www.cnblogs.com/52fhy/p/11106670.html
(本文完)
IT运维从传统走向智慧,首先要经历数字化运维阶段,搭建数字运维中台既是实现运维数据有效治理的前提和基础,也是推进运维数智化转型的第一步。针对上述需求,擎创科技自主研发的擎创夏洛克AIOps智慧运营平台(如下图所示)可通过数字运维中台,对运维数据进行统一的采集存储和管理,即便面对高达100TB的日增数据量,也可进行秒级实时分析,为异常检测、根因定位等场景奠定坚实基础。
与传统运维方式相比,智能化运维最突出的优势是“数据大集中”,即基于数字运维中台建设,通过统一监控中心来集中管理和分析所有运维数据,并以业务视角观测运维数据的相关性,最终建立智能化场景来解决实际问题。擎创自主研发的智能运维产品——夏洛克AIOps智慧运营平台,刚好为此量身定制。它能以全局运营视角解读IT运维,在AI算法平台的支撑下实现包括精准告警、异常检测、根因定位和容量分析等场景,助力企业数字化业务高效、稳定和顺畅运行。
目前,夏洛克AIOps已在政府机关组织、银行业、证券保险业和交通运输业等行业场景中应用落地,极大节省了企业客户的人力成本和资金成本,提升了运维的有效性和质量。例如,通过为客户构建智能运维平台,轻松应对日增80TB的数据量,让客户平均故障修复时间(MTTR)缩短150%以上,运维总体拥有成本(TCO)下降80%以上。
运维工程师使用的运维平台和工具包括: Web服务器:apache、tomcat、nginx、lighttpd 监控:nagios、ganglia、cacti、zabbix 自动部署:ansible、sshpt 配置管理:puppet、cfengine 负载均衡:lvs、haproxy 传输工具:scribe、flume 备份工具:rsync、wget 数据库:mysql、oracle、sqlserver 分布式平台:hdfs、mapreduce、spark、storm、hive 分布式数据库:hbase、cassandra、redis、MongoDB 容器:lxc、docker 虚拟化:openstack、xen、kvm 安全:kerberos、selinux、acl、iptables 问题追查:netstat、top、tcpdump、last 广义上所有开源的软件都是运维工程师会使用到的平台和工具,同时也包括运维各个技术方向上自行研发的各类平台。
发表评论
暂时没有评论,来抢沙发吧~