全部产品
云市场

中间件

更新时间:2019-09-02 09:27:50

概念说明

应用开始托管前,需要先梳理整个应用系统,将应用分成一个或者多个“自研节点”和标准中间件。顾名思义,自研节点是指ISV自行开发的应用模块,通常是一个开发工程产出的执行体。
本产品文档所提及的中间件,是指可独立运行的系统组件,如MySQL、Redis、MongoDB数据库等。区别于系统所使用的技术框架,又与之有关。比如使用Dubbo作为开发框架,Dubbo本身不是本文所说的中间件,但是与Dubbo搭配使用的ZooKeeper,就是这里所谓的“中间件”。
目前,平台提供的中间件相关的节点分成三类:

  • 阿里云节点:这些中间件,并不在这个方案中实际消耗云资源进行部署,而是同步打通了阿里云相关中间件产品。
  • 三方节点:这些中间件来自于标准的开源中间件镜像,平台本身并不修改或者保证该中间件本身的能力。
  • 初始化节点:这些节点只运行一次,他们并不是真正意义上的中间件,而仅仅完成中间件的一些初始化业务,平台层面会保证这些节点在应用部署运行的整个生命周期只会被成功执行一次。

部署与访问

对中间件节点的访问,一般情况下,直接使用该节点对服务名称作为地址即可;对中间件的部署,是平台支持情况,分成两种:

平台已支持

直接在可视化编排界面进行拖拽和配置即可,如下图。左侧即为支持的节点。
屏幕快照 2019-04-17 上午10.42.48.png

平台未支持:

平台支持对中间件尚在不停的完善中,如果发现有不支持的中间件,可以联系相应的商务渠道进行沟通。当然,如果满足如下条件,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
kafaka kafaka地址 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中间件的数据库名称