前言
本文主要探讨政务云下,使用容器方式部署服务时,整体配套的阿里云产品,同时介绍主要使用的基础产品及这些产品使用的一些建议。
下文对于阿里云产品的使用介绍基于目前的政务云版本,与公有云版本存在一定差异,仅供参考。
部署架构
由于线上环境稳定要求较高,因此加入了拨测 和 监控报警服务,为项目单独开发,本文暂不做介绍。
产品介绍
EDAS(企业级分布式应用服务)
使用方式
edas的发布主要有两种方式基于ESC集群部署和基于k8s集群部署(需要配合阿里云的容器服务使用)
同时,edas也提供了微服务的注册中心和配置中心
tips
- 使用edas+acs实现无损发布(发布期间流量不中断)
滚动发布 + Readiness配置,配置健康检查的接口,只有通过了Readiness检测,流量才会打到此pod。
ACS(容器服务)
使用方式
容器需要对外暴露服务时,是不可使用pod Ip + 端口的,这只在k8s集群内部可识别,正确的做法是使用容器服务配置服务,容器服务本身是提供了slb负载均衡的地址段的。(使用EDAS发布时,EDAS也可直接配置负载均衡,但需要关联SLB,较为不便,不推荐)
SLB (负载均衡)
使用方式
基于k8s发布的服务,SLB中无法直接选择相应的服务器,需要手动添加服务ip地址(上面容器服务中配置服务的负载均衡地址)
SLS(日志服务)
使用方式
集群部署时,日志分散在各个节点上,查看日志时,需要切换各个节点查看,极为不便(容器方式还需要多一步进入容器,更为麻烦)。
sls采集容器服务的日志时,需要把logtail配置到镜像内,同时采用机器组格式,多台服务器通过同一个自定义标识实现机器组弹性伸缩。(容器每次重启pod ip会变更,不适合使用固定IP)
# 获取安装logtail的脚本
wget http://data.cn-hangzhou-zwynet-d01.sls-pub.internet.cloud.zj.gov.cn/logtail.sh
# 安装logtail
sh logtail.sh install
# 修改机器组标识
echo dayu-compute-yufa > /etc/ilogtail/user_defined_id
tips
- sls的默认全文索引,基于分词查询的,可以根据需要配置分词符 (默认配置中 . 并不是分词符)
以默认配置为例,以下日志搜IOException并不能搜到日志, 需要搜java.io.IOException,因为默认 . 并不是分词符,需要按完整分词搜索
- 基于格式化字段的搜索 如 ElapseTime > 1000,需要给该字段加数值索引,否则不生效
- 基于分词符,索引的修改只能对后续接入的日志生效,并能不影响之前的数据
- 同一个文件,只能被一个Logtail的配置收集,不支持同时被多个logtail配置收集
- 不要使用极简模式(单行) 模式采集日志,异常栈会被认作是多行日志,集群模式下,会出现错序,使用极简-多行 或正则模式匹配行首即可
ARMS(应用实时监控服务)
使用方式
使用jar包方式部署时,不需要额外的配置即可接入arms;使用容器部署时,需要将探针拷贝到镜像中,同时指定相应的启动命令。
# 拷贝ARMS探针
COPY ArmsAgent.zip ArmsAgent.zip
# 启动命令
# 启动后端服务
java -javaagent:/data/arms/ArmsAgent/arms-bootstrap.jar -Darms.licenseKey=#{licenceKey} -Darms.appName=#{appName} -jar java.jar --spring.profiles.active=${activeProfile}
tips
- 慢SQL巡检优化 (可以使用接口快照查看是由哪些接口引起的)
- 异常分析,可以辅助测试发现一些隐蔽的问题(可以使用接口快照查看是由哪些接口引起的)
- 调用链路,耗时分析优化 & 错误排查, 调用栈中会将每一步的耗时打印出来,另外,如果该接口出错,调用栈也会展示在哪个方法中抛出了异常