中间件
概念说明
应用开始托管前,需要先梳理整个应用系统,将应用分成一个或者多个“自研节点”和标准中间件。顾名思义,自研节点是指ISV自行开发的应用模块,通常是一个开发工程产出的执行体。本产品文档所提及的中间件,是指可独立运行的系统组件,如MySQL、Redis、MongoDB数据库等。区别于系统所使用的技术框架,又与之有关。比如使用Dubbo作为开发框架,Dubbo本身不是本文所说的中间件,但是与Dubbo搭配使用的ZooKeeper,就是这里所谓的“中间件”。目前,平台提供的中间件相关的节点分成三类:
阿里云节点:这些中间件,并不在这个方案中实际消耗云资源进行部署,而是同步打通了阿里云相关中间件产品。
三方节点:这些中间件来自于标准的开源中间件镜像,平台本身并不修改或者保证该中间件本身的能力。
初始化节点:这些节点只运行一次,他们并不是真正意义上的中间件,而仅仅完成中间件的一些初始化业务,平台层面会保证这些节点在应用部署运行的整个生命周期只会被成功执行一次。
部署与访问
对中间件节点的访问,一般情况下,直接使用该节点对服务名称作为地址即可;对中间件的部署,是平台支持情况,分成两种:
平台已支持
直接在可视化编排界面进行拖拽和配置即可,如下图。左侧即为支持的节点。
平台未支持:
平台支持对中间件尚在不停的完善中,如果发现有不支持的中间件,可以联系相应的商务渠道进行沟通。当然,如果满足如下条件,ISV可以自行将中间件达成镜像包,作为自研节点供系统使用:
应用中,对该中间件的使用,并不涉及到持久化,或者数据允许丢失,或者可以指定明确的持久化路径。
应用中,对该中间件的使用,仅需要单节点使用,不使用集群或者高可用能力。
中间件通讯方式
操作系统  | 中间件类型  | 中间件名称  | 访问节点方式  | 
Linux  | 阿里云中间件  | RDS for mysql  | 环境变量中获取:iot.hosting.rds.${rds.mysql.name}.mysqlUrl其中,name是指服务名称  | 
RDS for SQL Server  | 环境变量中获取:iot.hosting.rds.${rds.mssql.name}.mssqlUrl其中,name是指服务名称  | ||
三方中间件  | Kafka  | 使用服务名称  | |
ZooKeeper  | 使用服务名称  | ||
InfluxDB  | 使用服务名称  | ||
MongoDB  | 使用服务名称  | ||
MySQL  | 使用服务名称  | ||
PostgreSQL  | 使用服务名称  | ||
RabbitMQ  | 使用服务名称  | ||
SQL Server  | 使用服务名称  | ||
MySQL-HA  | 使用服务名称  | ||
Redis  | 使用服务名称-master  | ||
Consul  | 使用服务名称  | ||
ElasticSearch  | 使用服务名称  | ||
Windows  | 三方中间件  | MySQL-HA  | 使用服务名称  | 
Redis  | 使用服务名称-master  | ||
SQL Server  | 使用服务名称  | ||
RabbitMQ  | 使用服务名称  | 
中间件环境变量说明
节点分类  | 环境变量字段  | 环境变量key  | 环境变量value  | 
自研节点  | 应用appkey  | iot.hosting.appKey  | |
应用appsecret  | iot.hosting.appSecret  | ||
mysql  | 数据库用户名  | iot.hosting.${initialize.k8s.mysql.name}.mysqlUser  | |
数据库密码  | iot.hosting.${initialize.k8s.mysql.name}.mysqlPassword  | ||
数据库database  | iot.hosting.${initialize.k8s.mysql.name}.mysqlDatabase  | ||
数据库地址  | iot.hosting.${initialize.k8s.mysql.name}.mysqlUrl  | jdbc:mysql://${initialize.k8s.mysql.name}:3306/${initialize.k8s.mysql.mysqlDatabase}  | |
sqlserver  | 数据库用户名  | iot.hosting.${initialize.k8s.mssql.name}.mssqlUser  | |
数据库密码  | iot.hosting.${initialize.k8s.mssql.name}.mssqlPassword  | ||
数据库database  | iot.hosting.${initialize.k8s.mssql.name}.mssqlDatabase  | ||
数据库地址  | iot.hosting.${initialize.k8s.mssql.name}.mssqlUrl  | jdbc:sqlserver://${initialize.k8s.mssql.name}:1433  | |
kafka  | kafka地址  | iot.hosting.${initialize.k8s.kafka.name}.kafkaHost  | ${initialize.k8s.kafka.name}:9092  | 
zookeeper地址  | iot.hosting.${initialize.k8s.kafka.name}.kafka.zkHost  | ${inputs.namespace}-${initialize.k8s.kafka.name}-zookeeper:2181  | |
rabbitmq  | 服务地址  | iot.hosting.${initialize.k8s.rabbitmq.name}.rabbitmqHost  | ${initialize.k8s.rabbitmq.name}  | 
登录账户  | iot.hosting.${initialize.k8s.rabbitmq.name}.rabbitmqUsername  | ${initialize.k8s.rabbitmq.rabbitmq.username}  | |
登录密码  | iot.hosting.${initialize.k8s.rabbitmq.name}.rabbitmqPassword  | ||
redis  | 服务地址  | iot.hosting.${initialize.k8s.redis.name}.redisUrl  | ${initialize.k8s.redis.name}-master  | 
登录密码  | iot.hosting.${initialize.k8s.redis.name}.redisPassword  | ||
mongodb  | 服务地址  | iot.hosting.${initialize.k8s.mongodb.name}.mongodbHost  | ${initialize.k8s.mongodb.name}  | 
数据库database  | iot.hosting.${initialize.k8s.mongodb.name}.mongodbDatabase  | ||
数据库用户  | iot.hosting.${initialize.k8s.mongodb.name}.mongodbUser  | ||
数据库密码  | iot.hosting.${initialize.k8s.mongodb.name}.mongodbPassword  | ||
mysql-ha  | 服务地址  | iot.hosting.${initialize.k8s.mysqlha.name}.mysqlHost  | ${initialize.k8s.mysqlha.name}  | 
数据库database  | iot.hosting.${initialize.k8s.mysqlha.name}.mysqlDatabase  | ||
数据库密码  | iot.hosting.${initialize.k8s.mysqlha.name}.mysqlPassword  | ||
数据库用户  | iot.hosting.${initialize.k8s.mysqlha.name}.mysqlUser  | ||
数据库url  | iot.hosting.${initialize.k8s.mysqlha.name}.mysqlUrl  | jdbc:mysql://${initialize.k8s.mysqlha.name}:3306/${initialize.k8s.mysqlha.mysqlha.mysqlDatabase}  | |
pgsql  | 数据库url  | iot.hosting.${initialize.k8s.postgresql.name}.pgsqlUrl  | jdbc:postgresql://${initialize.k8s.postgresql.name}:5432/${initialize.k8s.postgresql.postgresDatabase}  | 
数据库用户  | iot.hosting.${initialize.k8s.postgresql.name}.pgsqlUser  | ||
数据库密码  | iot.hosting.${initialize.k8s.postgresql.name}.pgsqlPassword  | ||
consul  | 服务地址  | iot.hosting.consul.host  | ${initialize.k8s.consul.name}-server.${inputs.namespace}.svc.cluster.local  | 
服务端口  | iot.hosting.consul.port  | 8500  | |
是否可用  | iot.hosting.consul.enabled  | true  | |
是否可发现  | iot.hosting.consul.discovery.register  | true  | |
zookeeper  | 服务地址  | iot.hosting.${initialize.k8s.zookeeper.name}.zookeeperHost  | ${initialize.k8s.zookeeper.name}  | 
influxdb  | 服务地址  | iot.hosting.${initialize.k8s.influxdb.name}.influxdbHost  | http://${initialize.k8s.influxdb.name}:8086  | 
数据库database  | iot.hosting.${initialize.k8s.influxdb.name}.influxdbDatabase  | ||
数据库用户  | iot.hosting.${initialize.k8s.influxdb.name}.influxdbUser  | ||
数据库密码  | iot.hosting.${initialize.k8s.influxdb.name}.influxdbPassword  | ||
RDS-Mysql  | 数据库用户  | iot.hosting.rds.${initialize.rds.mysql.name}.mysqlUser  | |
数据库密码  | iot.hosting.rds.${initialize.rds.mysql.name}.mysqlPassword  | ||
数据库地址  | iot.hosting.rds.${initialize.rds.mysql.name}.mysqlUrl  | jdbc:mysql://${initialize.dBInstanceId}.mysql.rds.aliyuncs.com:3306/${initialize.dBName}  | |
RDS-Sqlserver  | 数据库用户  | iot.hosting.rds.${initialize.rds.mssql.name}.mssqlUser  | |
数据库密码  | iot.hosting.rds.${initialize.rds.mssql.name}.mssqlPassword  | ||
数据库地址  | iot.hosting.rds.${initialize.rds.mssql.name}.mssqlUrl  | jdbc:sqlserver://${initialize.dBInstanceId}.sqlserver.rds.aliyuncs.com:${outputs.port};DatabaseName=${initialize.dBName}  | 
参数说明
initialize.k8s.中间件类型.name:指在应用配置中相应中间件的服务名称
initialize.k8s.中间件类型.xxxx:指在应用配置中相应中间件的某个配置项(例如mysqlDatabase即为配置的数据库database名称)
initialize.dBInstanceId:指在部署过程中平台生产的数据库实例ID
initialize.dBName:指在部署过程中平台生产的db名称
inputs.namespace:指在部署过程中平台生产的命名空间
initialize.rds.mssql.name/initialize.rds.mssql.name:指在应用配置中对应RDS中间件的数据库名称