1. 概述:
弹内应用使用的大量弹内基础设施在云上不存在或者有对应的产品,但是无法无缝上云需要改造,具体对应如下:
序号 | 弹内组件 | 云上 | 说明及注意事项 |
---|---|---|---|
1 | BUC-SSO | aliyun RAM(OpenID) | 云上可以使用 aliyun 的 ram 以及 openID 配置统一用户和单点登录应用,需要二次开发 |
2 | Oplog | 操作日志审计或者自定义开发简易 Oplog | 操作审计日志投递到 OSS 或者日志服务,使用云上操作审计日志查询。 或者自己开发一个简易操作审计日志,直接存数据库。 |
3 | MetaQ | ONS(云上 metaQ) | 使用 taobao-hsf.sar 包,配置 ak/sk 无缝上云,需要注意新支持的 namespaces |
4 | TDDL | DRDS | 无缝上云,链接方式需要修改; |
5 | mysql | RDS | 无缝上云 |
6 | IDB 数据管理平台 | DMS | 无缝上云,DMS 对部分低版本 DRDS 不支持。 |
7 | TMD | Web 应用防火墙 | 7层协议直接配置可支持,4层协议需要改造使用 TMD 的改用 waf 的话,云上 waf 支持的二次开发接口较少 |
8 | 容器服务 | 云上容器服务(Kubernetes) | 云上容器服务控制台尚未稳定成熟,需要自己熟练使用 kubernetes 运维。 |
9 | Aone | 云效 | 部分 aone 功能不支持,与容器服务 K8s 能较完美整合,建议使用。 |
10 | sentinel限流降级组件 | AHAS 应用高可用服务,Diamond | 需要部署到 edas for ecs 才行,云上 edas,云效,容器服务尚未整合好,可以考虑自己使用 sentinel 在 diamond 中配置,自己部署控制台,需要改造统一用户 |
11 | Tair | 无 | 需要自己部署或者改造为 redis,云数据库 Memcache,或者自己部署 tair 到云 ECS 中 |
12 | VipServer | 无 | 需要自己部署 vipserver 或者部分区域有 vipserver部署 |
13 | HSF/ConfigServer | EDAS | 无缝上云,配置 ak/sk |
14 | Eagleeye | EDAS | 需要部署到 edas for ecs 才行,云上 edas,云效,容器服务尚未整合好 |
15 | Diamond | EDAS ACM | 无缝上云,配置 ak/sk |
16 | Switch | ACM | 直接 acm 中配置或者迁移 switch 控制台,需要改造统一用户 |
17 | sunfire | ARMS | 需要使用 EDAS部署 或者自己部署 sunfire |
18 | Medusa 美杜莎国际化 | 无 | 直接使用 medusa包,使用 top 协议访问。 |
19 | 云监控 | ECS 与相关云设施监控 | |
20 | 日志服务 | 采集日志 |
弹内的基础镜像默认包含弹内特有的一些日志采集等基础组件,因应云上环境要求,需要重新定义基础镜像。
2. pandora +EDAS 无缝上云
应用采用pandora 的taobao-hsf.sar与云上 EDAS 产品,可以直接实现大部分中间件无缝上云。
2.1 相关 配置:
- 使用 EDAS 的 namespace 来隔离 Diamond, ConfigServer,HSF 等服务,分别部署测试、预发、线上等环境;
- 获取 pandora 的 taobao-hsf.sar包下载;
-
配置 pandora 访问 edas namespace需要的 ak/sk/tid 等;
- 设置 ak/sk/tid文件到指定目录: /home/{user_home}/.spas_key/default
- default 文件保存 ak/sk 信息,格式类似
accessKey=343333333333333
secretKey=55555555555
tenantId=32323-343434-343434-343434-343434-34343434
- 配置 RAM可以访问 MetaQ(ONS)的 ak/sk用户:
- 设置 ons 相关 ak/sk 到指定目录:/home/{user_home}/.ons
onskey.properties 文件保存 ak/sk 信息,格式类似:
AccessKey = xxxxx
SecretKey = yyyyyyyyyy
OnsChannel = ALIYUN
AuthEnabled = true
NameserverDomain = onsaddr-iiiii.aliyun.com:8080
NameserverSubgroup = nsaddr4client-iiiii
- Java应用启动变量设置:
-Dpandora.location=/home/{user_home}/taobao-hsf.sar
-Daddress.server.domain=xxxx-yy-ccccc-2-ttt-1-internal.edas.aliyun.com
-Daddress.server.port=8080 -Dconfigserver.client.port=8000
-Dspas.identity=/home/{user_home}/.spas_key/default
-Drocketmq.client.keyFile=/home/{user_home}/.ons/onskey.properties
-Ddisable.pandora.ons=true
-Dtenant.id=xxxxxx-3333-456x-8888-999999999
2.2 EDAS 与 pandora sar 包依赖 plugin:
组件 | 对应 plugin | 备注 |
---|---|---|
Diamond | diamond-client 插件 | 配置 pandora 与 edas namespace 的 ak/sk 无缝上云,不需额外配置 |
Config Server | configcenter-client config-client | 配置 pandora 与 edas namespace 的 ak/sk 无缝上云,不需额外配置 |
HSF | hsf | 配置 pandora 与 edas namespace 的 ak/sk 无缝上云,不需额外配置 |
MetaQ | ons-client | 配置 pandora 与 ram 的 ak/sk 无缝上云,不需额外配置 |
vipserver-client | vipserver-client | vipserver 未上云,可以使用需要自己应用设置 ak/sk 或者 vipserver 加白取消 ak/sk鉴权 |
EagleEye | eagleeye-core | 客户端写日志功能,需要配置SLS日志采集 |
TDDL | DRDS | 可以使用 druid,Common pool 实现数据库链接 |
sentinel | sentinel | 无缝上云,如果没有 EDAS 应用,需要执行手工修改 ACM(Diamond)来实现。 |
switch | switch | 需要执行修改ACM(Diamond)来实现配置。 |
2.3 EDAS 缺陷:
1. Pandora 包只支持一组 edas namespace 的 ak/sk;
pandora 包只支持访问一组 namespace 的 ak/sk,会使一个应用只能访问一个 namespace 中的 hsf 服务,ACM 配置等,对部分需要跨 namespace 访问的需求没法满足;
2. Pandora 包 ak/sk 必须落盘保存在文件里,不支持直接远程获取保持在内存中;
ak/sk 落盘,由安全隐患;
3. 云效、EDAS,K8S 不能完美整合,不支持完整的分批发布与整合;
因为不能整合,导致云效尤其是线上分批发布,流程只能完成打包和合并主干,分批发布采用手动在容器服务控制台发布的方式;
4. Project.name 参数冲突:
edas 默认 project.name 参数为 edas 的应用 id,而大量弹内应用使用同名参数作为启动参数,并在 hsf 服务等服务中使用,导致冲突。
5. MetaQ中 topic名唯一冲突问题
云上 MetaQ 尚未支持 namespace 隔离,其 topic 全局跨租户唯一,意味着你的 topic 名假如被其它租户或其它环境使用,将没法建立,因为需要将 topic 名按照租户-topic-环境方式分别隔离建立。
6. EagleEye 日志 在日志服务分割问题:
日志服务提供的内容分割为多个字段功能只支持一层分割,eagleEye 日志根据应用服务类型分多种格式,因而只能分割前几列有限的字段,剩余分割或者控制台显示需要自己实现。
7. pandora sar 包导致的常见包冲突:
参考排包功能edas开发帮助
8. sentinel:
可以使用 sentinel,如果没有结合 edas,需要直接在 ACM(Diamond)中配置
9. vipserver-client:
目前的 vipserver并不是云产品,鉴权基于 Dauth 建立,需要改造为云上 ram 后才能完美使用。
3. 改造上云或自部署中间件:
3.1 tair:
云上 ECS 部署 tair 服务器。
建议应用改造直接使用云数据库 memcache,redis 版。
3.2 vipserver:
使用弹内版本部署 vipserver,建议改造 vipserver 中 dauth 为 aliyun RAM。
3.3 sunfire:
使用弹内sunfire 版本部署在云 ECS 中或者使用 ARMS。
3.4 SSO:
使用 aliyun 支持的 openid 和 oauth2, 包装 sso-client 包,实现 aliyun 控制台应用的单点登录,并导入阿里云子账号数据,统一用户数据。
3.5 oplog:
实现 oplog 日志读写 client,服务端采用操作升级接口,实现云上 oplog。
3.6 TMD 淘宝导弹防御系统:
云上有类似产品 web 应用防火墙WAF,应用可以使用WAF 接口做改造开发。
4. 可使用云产品
- DMS 代替 IDB 实现数据库管理;
- 容器服务:kubernetes;
- 云效;
- 云监控;
- 日志服务
5. 环境隔离
设施 | 部署环境 | 隔离方法 |
---|---|---|
镜像仓库 | 开发环境 | 通过镜像仓库的命名空间隔离,比如:app_daily 表示日常环境, app_pre 表示预发环境,app_prod 表示线上环境,app_base 表示基础镜像存放,镜像保存地址在 工程 {app_name}.release文件来区分,打包完成后自动 push 镜像,例如:registry-vpc.{region_id}.aliyuncs.com/app-pre/{app_name}:[镜像版本号]。 镜像仓库作访问控制和安全扫描。 |
云效 | 开发环境 | 统一一套云效,镜像仓库和集群证书配置后,按照云效的环境配置将应用打包后发布到不同环境,不同集群。 |
mvn 仓库 | 开发环境 | 统一一套,与云效在一起,被云效引用,做访问控制 |
gitlib 代码仓库 | 开发环境 | 统一一套,与云效在一起,被云效引用,做访问控制 |
运维管理平台-开发团队端 | 开发环境 | 结合云效和云设施,获取各个租户的云信息,包括基础信息,监控数据,配置数据等,通过租户 Agent 获取数据。 |
开发kubernetes 集群 | 开发环境 | 开发环境应用部署,同时购买最小配置依赖设施,作为开发调试使用 |
日常kubernetes 集群 | 日常环境 | 日常环境应用部署,同时购买最小配置依赖设施,作为日常测试使用 |
预发kubernetes 集群 | 线上环境 | 预发环境应用部署,使用线上环境依赖设施,作为预发测试使用 |
线上kubernetes 集群 | 线上环境 | 线上环境应用部署,根据业务需求购买基础设施和依赖组件,线上正式环境使用 |
edas组件 | 开发/日常/预发/线上环境 | 设置命名空间隔离4个环境,当然也可以在不同租户中设置各自的环境,获取命名空间 ak/sk/tid,隔离 HSF,ACM(Diamond),configserver 等环境 |
RDS for Mysql | 开发/日常/预发/线上环境 | RDS 实例,线上预发公用 |
DRDS | 开发/日常/预发/线上环境 | 建立应用所需所有数据库,线上预发公用 |
vipserver | 开发/日常/预发/线上环境 | 部署 vipserver,线上预发公用,可以使用域名隔离 |
tair | 开发/日常/预发/线上环境 | 部署 tair server,线上预发公用 |
metaQ | 开发/日常/预发/线上环境 | 使用不同 topic名隔离,比如后缀带上环境标。 |