中间件

更新时间:

概念说明

应用开始托管前,需要先梳理整个应用系统,将应用分成一个或者多个“自研节点”和标准中间件。顾名思义,自研节点是指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

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中间件的数据库名称