中間件
概念說明
應(yīng)用開始托管前,需要先梳理整個應(yīng)用系統(tǒng),將應(yīng)用分成一個或者多個“自研節(jié)點”和標準中間件。顧名思義,自研節(jié)點
是指ISV自行開發(fā)的應(yīng)用模塊,通常是一個開發(fā)工程產(chǎn)出的執(zhí)行體。本產(chǎn)品文檔所提及的中間件
,是指可獨立運行的系統(tǒng)組件,如MySQL、Redis、MongoDB數(shù)據(jù)庫等。區(qū)別于系統(tǒng)所使用的技術(shù)框架,又與之有關(guān)。比如使用Dubbo作為開發(fā)框架,Dubbo本身不是本文所說的中間件
,但是與Dubbo搭配使用的ZooKeeper,就是這里所謂的“中間件”。目前,平臺提供的中間件相關(guān)的節(jié)點分成三類:
阿里云節(jié)點:這些中間件,并不在這個方案中實際消耗云資源進行部署,而是同步打通了阿里云相關(guān)中間件產(chǎn)品。
三方節(jié)點:這些中間件來自于標準的開源中間件鏡像,平臺本身并不修改或者保證該中間件本身的能力。
初始化節(jié)點:這些節(jié)點只運行一次,他們并不是真正意義上的中間件,而僅僅完成中間件的一些初始化業(yè)務(wù),平臺層面會保證這些節(jié)點在應(yīng)用部署運行的整個生命周期只會被成功執(zhí)行一次。
部署與訪問
對中間件節(jié)點的訪問,一般情況下,直接使用該節(jié)點對服務(wù)名稱
作為地址即可;對中間件的部署,是平臺支持情況,分成兩種:
平臺已支持
直接在可視化編排界面進行拖拽和配置即可,如下圖。左側(cè)即為支持的節(jié)點。
平臺未支持:
平臺支持對中間件尚在不停的完善中,如果發(fā)現(xiàn)有不支持的中間件,可以聯(lián)系相應(yīng)的商務(wù)渠道進行溝通。當然,如果滿足如下條件,ISV可以自行將中間件達成鏡像包,作為自研節(jié)點供系統(tǒng)使用:
應(yīng)用中,對該中間件的使用,并不涉及到持久化,或者數(shù)據(jù)允許丟失,或者可以指定明確的持久化路徑。
應(yīng)用中,對該中間件的使用,僅需要單節(jié)點使用,不使用集群或者高可用能力。
中間件通訊方式
操作系統(tǒng) | 中間件類型 | 中間件名稱 | 訪問節(jié)點方式 |
Linux | 阿里云中間件 | RDS for mysql | 環(huán)境變量中獲取:iot.hosting.rds.${rds.mysql.name}.mysqlUrl其中,name是指服務(wù)名稱 |
RDS for SQL Server | 環(huán)境變量中獲取:iot.hosting.rds.${rds.mssql.name}.mssqlUrl其中,name是指服務(wù)名稱 | ||
三方中間件 | Kafka | 使用服務(wù)名稱 | |
ZooKeeper | 使用服務(wù)名稱 | ||
InfluxDB | 使用服務(wù)名稱 | ||
MongoDB | 使用服務(wù)名稱 | ||
MySQL | 使用服務(wù)名稱 | ||
PostgreSQL | 使用服務(wù)名稱 | ||
RabbitMQ | 使用服務(wù)名稱 | ||
SQL Server | 使用服務(wù)名稱 | ||
MySQL-HA | 使用服務(wù)名稱 | ||
Redis | 使用服務(wù)名稱-master | ||
Consul | 使用服務(wù)名稱 | ||
ElasticSearch | 使用服務(wù)名稱 | ||
Windows | 三方中間件 | MySQL-HA | 使用服務(wù)名稱 |
Redis | 使用服務(wù)名稱-master | ||
SQL Server | 使用服務(wù)名稱 | ||
RabbitMQ | 使用服務(wù)名稱 |
中間件環(huán)境變量說明
節(jié)點分類 | 環(huán)境變量字段 | 環(huán)境變量key | 環(huán)境變量value |
自研節(jié)點 | 應(yīng)用appkey | iot.hosting.appKey | |
應(yīng)用appsecret | iot.hosting.appSecret | ||
mysql | 數(shù)據(jù)庫用戶名 | iot.hosting.${initialize.k8s.mysql.name}.mysqlUser | |
數(shù)據(jù)庫密碼 | iot.hosting.${initialize.k8s.mysql.name}.mysqlPassword | ||
數(shù)據(jù)庫database | iot.hosting.${initialize.k8s.mysql.name}.mysqlDatabase | ||
數(shù)據(jù)庫地址 | iot.hosting.${initialize.k8s.mysql.name}.mysqlUrl | jdbc:mysql://${initialize.k8s.mysql.name}:3306/${initialize.k8s.mysql.mysqlDatabase} | |
sqlserver | 數(shù)據(jù)庫用戶名 | iot.hosting.${initialize.k8s.mssql.name}.mssqlUser | |
數(shù)據(jù)庫密碼 | iot.hosting.${initialize.k8s.mssql.name}.mssqlPassword | ||
數(shù)據(jù)庫database | iot.hosting.${initialize.k8s.mssql.name}.mssqlDatabase | ||
數(shù)據(jù)庫地址 | 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 | 服務(wù)地址 | 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 | 服務(wù)地址 | iot.hosting.${initialize.k8s.redis.name}.redisUrl | ${initialize.k8s.redis.name}-master |
登錄密碼 | iot.hosting.${initialize.k8s.redis.name}.redisPassword | ||
mongodb | 服務(wù)地址 | iot.hosting.${initialize.k8s.mongodb.name}.mongodbHost | ${initialize.k8s.mongodb.name} |
數(shù)據(jù)庫database | iot.hosting.${initialize.k8s.mongodb.name}.mongodbDatabase | ||
數(shù)據(jù)庫用戶 | iot.hosting.${initialize.k8s.mongodb.name}.mongodbUser | ||
數(shù)據(jù)庫密碼 | iot.hosting.${initialize.k8s.mongodb.name}.mongodbPassword | ||
mysql-ha | 服務(wù)地址 | iot.hosting.${initialize.k8s.mysqlha.name}.mysqlHost | ${initialize.k8s.mysqlha.name} |
數(shù)據(jù)庫database | iot.hosting.${initialize.k8s.mysqlha.name}.mysqlDatabase | ||
數(shù)據(jù)庫密碼 | iot.hosting.${initialize.k8s.mysqlha.name}.mysqlPassword | ||
數(shù)據(jù)庫用戶 | iot.hosting.${initialize.k8s.mysqlha.name}.mysqlUser | ||
數(shù)據(jù)庫url | iot.hosting.${initialize.k8s.mysqlha.name}.mysqlUrl | jdbc:mysql://${initialize.k8s.mysqlha.name}:3306/${initialize.k8s.mysqlha.mysqlha.mysqlDatabase} | |
pgsql | 數(shù)據(jù)庫url | iot.hosting.${initialize.k8s.postgresql.name}.pgsqlUrl | jdbc:postgresql://${initialize.k8s.postgresql.name}:5432/${initialize.k8s.postgresql.postgresDatabase} |
數(shù)據(jù)庫用戶 | iot.hosting.${initialize.k8s.postgresql.name}.pgsqlUser | ||
數(shù)據(jù)庫密碼 | iot.hosting.${initialize.k8s.postgresql.name}.pgsqlPassword | ||
consul | 服務(wù)地址 | iot.hosting.consul.host | ${initialize.k8s.consul.name}-server.${inputs.namespace}.svc.cluster.local |
服務(wù)端口 | iot.hosting.consul.port | 8500 | |
是否可用 | iot.hosting.consul.enabled | true | |
是否可發(fā)現(xiàn) | iot.hosting.consul.discovery.register | true | |
zookeeper | 服務(wù)地址 | iot.hosting.${initialize.k8s.zookeeper.name}.zookeeperHost | ${initialize.k8s.zookeeper.name} |
influxdb | 服務(wù)地址 | iot.hosting.${initialize.k8s.influxdb.name}.influxdbHost | http://${initialize.k8s.influxdb.name}:8086 |
數(shù)據(jù)庫database | iot.hosting.${initialize.k8s.influxdb.name}.influxdbDatabase | ||
數(shù)據(jù)庫用戶 | iot.hosting.${initialize.k8s.influxdb.name}.influxdbUser | ||
數(shù)據(jù)庫密碼 | iot.hosting.${initialize.k8s.influxdb.name}.influxdbPassword | ||
RDS-Mysql | 數(shù)據(jù)庫用戶 | iot.hosting.rds.${initialize.rds.mysql.name}.mysqlUser | |
數(shù)據(jù)庫密碼 | iot.hosting.rds.${initialize.rds.mysql.name}.mysqlPassword | ||
數(shù)據(jù)庫地址 | iot.hosting.rds.${initialize.rds.mysql.name}.mysqlUrl | jdbc:mysql://${initialize.dBInstanceId}.mysql.rds.aliyuncs.com:3306/${initialize.dBName} | |
RDS-Sqlserver | 數(shù)據(jù)庫用戶 | iot.hosting.rds.${initialize.rds.mssql.name}.mssqlUser | |
數(shù)據(jù)庫密碼 | iot.hosting.rds.${initialize.rds.mssql.name}.mssqlPassword | ||
數(shù)據(jù)庫地址 | iot.hosting.rds.${initialize.rds.mssql.name}.mssqlUrl | jdbc:sqlserver://${initialize.dBInstanceId}.sqlserver.rds.aliyuncs.com:${outputs.port};DatabaseName=${initialize.dBName} |
參數(shù)說明
initialize.k8s.中間件類型.name:指在應(yīng)用配置中相應(yīng)中間件的服務(wù)名稱
initialize.k8s.中間件類型.xxxx:指在應(yīng)用配置中相應(yīng)中間件的某個配置項(例如mysqlDatabase即為配置的數(shù)據(jù)庫database名稱)
initialize.dBInstanceId:指在部署過程中平臺生產(chǎn)的數(shù)據(jù)庫實例ID
initialize.dBName:指在部署過程中平臺生產(chǎn)的db名稱
inputs.namespace:指在部署過程中平臺生產(chǎn)的命名空間
initialize.rds.mssql.name/initialize.rds.mssql.name:指在應(yīng)用配置中對應(yīng)RDS中間件的數(shù)據(jù)庫名稱