• [问题求助] 【智慧园区产品】【华为园区Cube业务容器之间是如何工作的】
    是否有材料说明华为园区Cube业务容器之间是如何工作的。例如下图是园区Cube运维平台的组网示意图。如下图中,各容器的功能是什么。namespacepod功能定位abcai-artwork-7c596584c9-5lgqlabcai-artwork-7c596584c9-9tpgcabcai-sketch-5647bd4fb6-4ngggabcai-sketch-5647bd4fb6-vd986abcauthcenter-5487f69db-jgt6mabcauthcenter-5487f69db-z2f4nabcbaasui-7557687c75-9srtzabcbaasui-7557687c75-mrkzsabcbastudio-7d84b5f646-fv8dwabcbastudio-7d84b5f646-qlgc9abcbingo-57b7c4dc87-7r4cwabcbingo-57b7c4dc87-qdc6zabccardbuilder-776f5fc67c-hcv7cabccardbuilder-776f5fc67c-n2n4pabccasserver-6d64c9654-2kmd4abccdappengines10169340-6b4549d796-p24cwabccompileengine-c45659776-hcb2gabccompileengine-c45659776-shjv5abcdmax-84689586b7-7m55sabcdmax-84689586b7-bwkclabcelasticsearch-0abcelasticsearch-1abcelasticsearch-2abcetcd-0abcetcd-1abcetcd-2abceventservice-86dd4594ff-jdmk5abceventservice-86dd4594ff-mnxq6abcflume-b8b5df9b8-jndc6abcflume-b8b5df9b8-rdm2wabciotgateway-0abciotgateway-1abciotgateway-2abckafka-0abckafka-1abckafka-2abcmagnogallery-78cd4dbd67-pjtlnabcmagnogallery-78cd4dbd67-qkkqkabcmagnorender-57bff94b54-7wh8gabcmagnorender-57bff94b54-wcxk4abcmagnostudio-78555445d5-752hbabcmagnostudio-78555445d5-ffbh8abcmanager-6c99d85674-fqdm9abcmanager-6c99d85674-vh8c5abcminio-5cff4b4bc6-rkkkwabcminio-5cff4b4bc6-xq9cxabcnasc-6d555b794b-hd4n5abcnasc-6d555b794b-trkrxabcnascgateway-fd474bffd-2tv4habcnascgateway-fd474bffd-qdggsabcnginxingresscontroller-86bb755968-qk9dwabcnginxingresscontroller-86bb755968-qrq6babcredis-0abcredis-1abcredis-2abcredis-3abcredis-4abcredisadapter-0abcredisadapter-1abcservicebroker-56fbc95b7c-7vl5xabcservicebroker-56fbc95b7c-wk9z6abctaskcenter-77f5d874dd-bs5hhabctaskcenter-77f5d874dd-d84jvabcwebsocket-7ddd66f96d-tjnhlabczookeeper-0abczookeeper-1abczookeeper-2booteragentbooteragent-deployment-56ddb5654-jpx8lbooteragentbooteragent-nsq-7f6847fc94-hpmvwcampusnativebatchfileprocess-deployment-6d6b56fcc8-4psqgcampusnativebatchfileprocess-deployment-6d6b56fcc8-tgwk5campusnativedatatool-deployment-dd474944b-smvwdcampusnativepytest-deployment-8878f69b9-9n7m5campusnativesecurityvoice-deployment-5cb799d874-bm5wfcampusnativetemplate-deployment-79b8f79f68-s7gcfcampusnativetemplate-deployment-79b8f79f68-x9qtzcdnativecdnatives10169340-854469659c-glt2tcdopscdopss10169375-68476dbc57-xr5c8cert-managercert-manager-cainjector-new-694b6b9f4b-gq4flcert-managercert-manager-cainjector-new-694b6b9f4b-qzn2vcert-managercert-manager-new-67c5788d68-gql8pcert-managercert-manager-new-67c5788d68-xqzbjcert-managercert-manager-webhook-new-5cddbbddbf-gszx7cert-managercert-manager-webhook-new-5cddbbddbf-kfwtfcpaas-systemapollo-8599c57669-k6js2cpaas-systemapollo-8599c57669-vk85ncpaas-systemarchon-67b8f79ff5-cfdvmcpaas-systemarchon-67b8f79ff5-tl5qzcpaas-systemauth-controller2-59b4bbd8d5-bjcjvcpaas-systemauth-controller2-59b4bbd8d5-c4hk8cpaas-systembase-operator-69bf779bbf-nnldncpaas-systembase-operator-69bf779bbf-t5t5zcpaas-systemcaptain-chartmuseum-7b6b47bcdb-cv6crcpaas-systemcaptain-controller-manager-5876f86ff7-7z5ghcpaas-systemcaptain-controller-manager-5876f86ff7-khmtrcpaas-systemcluster-transformer-7ff8c7484-22b5mcpaas-systemcluster-transformer-7ff8c7484-chflzcpaas-systemcourier-7b8b85c556-g69wvcpaas-systemcourier-7b8b85c556-pgmkjcpaas-systemcpaas-elasticsearch-5b49969c7c-ds5rncpaas-systemcpaas-elasticsearch-5b49969c7c-fnzw4cpaas-systemcpaas-elasticsearch-5b49969c7c-ltcjlcpaas-systemcpaas-kafka-75947c6884-frdmhcpaas-systemcpaas-kafka-75947c6884-gnw4pcpaas-systemcpaas-kafka-75947c6884-hw2pncpaas-systemcpaas-zookeeper-5bd745575c-dnjbkcpaas-systemcpaas-zookeeper-5bd745575c-dx7qhcpaas-systemcpaas-zookeeper-5bd745575c-f22xkcpaas-systemcreate-cert-issuer-r4fx9cpaas-systemdex-5d8fc5fdd6-8lz5vcpaas-systemdex-5d8fc5fdd6-sn5h8cpaas-systemerebus-7646cc55f-2frm2cpaas-systemerebus-7646cc55f-r6n66cpaas-systemglobal-alb2-5f6986bf9f-9s7mtcpaas-systemglobal-alb2-5f6986bf9f-bsvw7cpaas-systemglobal-alb2-5f6986bf9f-ph22mcpaas-systemicarus-5c5f598c85-jxhhlcpaas-systemicarus-5c5f598c85-sx6mrcpaas-systemjuno-56cfcfd899-5pjnkcpaas-systemjuno-56cfcfd899-r2bw6cpaas-systemkubectl-566876c965-h9m79cpaas-systemkubectl-566876c965-q6z82cpaas-systemkubernetes-event-exporter-67f74f7cd5-qk9dkcpaas-systemkubernetes-event-exporter-67f74f7cd5-s7mj7cpaas-systemlanaya-b96c4f4fd-8kzm2cpaas-systemlanaya-b96c4f4fd-pdpfscpaas-systemmars-6867756c74-7clmmcpaas-systemmars-6867756c74-98rtgcpaas-systemmeepo-5bcb5f8d54-w25ftcpaas-systemmeepo-5bcb5f8d54-zd6swcpaas-systemmetis-8456b84894-2t2l2cpaas-systemmetis-8456b84894-rp5c9cpaas-systemmorgans-857bc6cccd-tkvqqcpaas-systemmorgans-857bc6cccd-w5xgxcpaas-systemnaga-uploader-sgkmmcpaas-systemnevermore-48pjhcpaas-systemnevermore-5jfn6cpaas-systemnevermore-6p9xvcpaas-systemnevermore-78qdxcpaas-systemnevermore-7b5kccpaas-systemnevermore-8822fcpaas-systemnevermore-8fckwcpaas-systemnevermore-9qlvgcpaas-systemnevermore-9tkrqcpaas-systemnevermore-ccpp7cpaas-systemnevermore-cm828cpaas-systemnevermore-dwppscpaas-systemnevermore-f2c27cpaas-systemnevermore-f6wx8cpaas-systemnevermore-glh7ccpaas-systemnevermore-kxpwgcpaas-systemnevermore-ltpxpcpaas-systemnevermore-m4pv6cpaas-systemnevermore-mgfkwcpaas-systemnevermore-ngs6pcpaas-systemnevermore-qqcm2cpaas-systemnevermore-qt8xmcpaas-systemnevermore-qvq68cpaas-systemnevermore-rd5xncpaas-systemnevermore-t6twncpaas-systemnevermore-tz9dfcpaas-systemnevermore-vcgk8cpaas-systemnevermore-vhwr2cpaas-systemnevermore-xldmqcpaas-systemoci-chart-registry-56d77cbd5b-2rcmscpaas-systemoci-chart-registry-56d77cbd5b-v6d62cpaas-systemplatform-docs-865bcbff74-flzfmcpaas-systemplatform-docs-865bcbff74-hcm4vcpaas-systemreloader-5c76c77d5-9pxrwcpaas-systemreloader-5c76c77d5-jmnftcpaas-systemsentry-7f4ffbd569-wnw4ncpaas-systemtke-business-api-6c95854bff-kmct4cpaas-systemtke-business-api-6c95854bff-rgcqkcpaas-systemtke-business-controller-565bf5bfbb-d6bsmcpaas-systemtke-business-controller-565bf5bfbb-m6nckcpaas-systemtke-platform-api-85cff6cfb4-kt5l7cpaas-systemtke-platform-api-85cff6cfb4-vxsvrcpaas-systemtke-platform-controller-7fc88b9c99-95jxrcpaas-systemtke-platform-controller-7fc88b9c99-jn4t8cpaas-systemunderlord-6b5c5b98c6-4rd6scpaas-systemunderlord-6b5c5b98c6-zlc89deploydeploy-agent-7ddd475bfb-gc6t7foundationbasefoundationbase-deployment-55f4fb47f8-52c9fgissupermapisuperserver-deployment-778c56cc8c-knbdjiotgwapp-68b877dd9c-d4dlwiotgwapp2-89b647f4b-ttdrtiotiotapp-586ddd64cb-twz65iotiotdb-64d8469b86-p6fz4kube-systemcalico-kube-controllers-cd95797b7-h98dqkube-systemcalico-node-2g555kube-systemcalico-node-47n59kube-systemcalico-node-6v8gmkube-systemcalico-node-8cwhfkube-systemcalico-node-99cdpkube-systemcalico-node-bb9x5kube-systemcalico-node-bj4bbkube-systemcalico-node-bxmgnkube-systemcalico-node-cf4fkkube-systemcalico-node-cl4rwkube-systemcalico-node-dqnh4kube-systemcalico-node-fv7pgkube-systemcalico-node-g4x8jkube-systemcalico-node-hn7kvkube-systemcalico-node-krmz4kube-systemcalico-node-l8kf2kube-systemcalico-node-lmbnxkube-systemcalico-node-m7ggvkube-systemcalico-node-nfq5lkube-systemcalico-node-qwvjhkube-systemcalico-node-s69sqkube-systemcalico-node-sbld8kube-systemcalico-node-vnjnnkube-systemcalico-node-w7g78kube-systemcalico-node-wdj5nkube-systemcalico-node-whs57kube-systemcalico-node-x6575kube-systemcalico-node-xdfmmkube-systemcalico-node-xnf6nkube-systemcoredns-d557d9859-27c5ckube-systemcoredns-d557d9859-rdr2nkube-systemetcd-10.169.3.34kube-systemetcd-10.169.3.35kube-systemetcd-10.169.3.36kube-systemkeepalived-10.169.3.34kube-systemkeepalived-10.169.3.35kube-systemkeepalived-10.169.3.36kube-systemkube-apiserver-10.169.3.34kube-systemkube-apiserver-10.169.3.35kube-systemkube-apiserver-10.169.3.36kube-systemkube-controller-manager-10.169.3.34kube-systemkube-controller-manager-10.169.3.35kube-systemkube-controller-manager-10.169.3.36kube-systemkube-proxy-2b8n9kube-systemkube-proxy-4css5kube-systemkube-proxy-4s72vkube-systemkube-proxy-4vk7tkube-systemkube-proxy-72v6zkube-systemkube-proxy-7d4kgkube-systemkube-proxy-8ppmwkube-systemkube-proxy-cmwjgkube-systemkube-proxy-dsvwqkube-systemkube-proxy-dvw5gkube-systemkube-proxy-dxbqbkube-systemkube-proxy-h9fwckube-systemkube-proxy-hf4lgkube-systemkube-proxy-hj6rhkube-systemkube-proxy-jvkkfkube-systemkube-proxy-l2hdskube-systemkube-proxy-lpj27kube-systemkube-proxy-m9q2ckube-systemkube-proxy-n4w29kube-systemkube-proxy-qpkc7kube-systemkube-proxy-rlqxbkube-systemkube-proxy-rn597kube-systemkube-proxy-rq6hdkube-systemkube-proxy-tdlf8kube-systemkube-proxy-tsxcxkube-systemkube-proxy-x6mzjkube-systemkube-proxy-zhks5kube-systemkube-proxy-zl97qkube-systemkube-proxy-zrpljkube-systemkube-scheduler-10.169.3.34kube-systemkube-scheduler-10.169.3.35kube-systemkube-scheduler-10.169.3.36kube-systemraven-867fc9d4cf-678mzkube-systemraven-867fc9d4cf-7qhpvkube-systemregistry-10.169.3.34kube-systemregistry-10.169.3.35kube-systemregistry-10.169.3.36opsgrafana-67944b5874-8vbfcopsops-arangodb-0opsops-client-56db55698-jqj6zopsops-elasticsearch-0opsops-etcd-0opsops-kibana-54b78b4c5-m8pkfopsops-logstash-855c8448c5-h4zv6opsops-redis-0opsops-server-55c9866fd4-5r9f9opsops-watcher-76fb5ff4fc-9xlbmopszabbixproxy-5dd9546c87-bl89hopszabbixproxytls-dfd84b985-b9dg7opszabbixserver-74bb95c578-gp74popszabbixweb-6bf5849c4b-rlzs7romaroma-adapter-8df9fb44d-dqxm2romaroma-adapter-8df9fb44d-pfvzjromaroma-apigw-8496bd859-6rqz2romaroma-apigw-8496bd859-jkqdzromaroma-elasticsearch-0romaroma-elasticsearch-1romaroma-elasticsearch-2romaroma-eureka-f9ddc46d-8rmd9romaroma-eureka-f9ddc46d-prnfcromaroma-fdireader-0romaroma-fdireader-1romaroma-fdiwriter-0romaroma-fdiwriter-1romaroma-gaussinitialdata-7c8c8768db-nr9hzromaroma-kafka-0romaroma-kafka-1romaroma-kafka-2romaroma-kibana-bcd8d45d9-4k2pqromaroma-kibana-bcd8d45d9-mfqppromaroma-lb-6597dcdb75-w9fqmromaroma-livedata-8d6fcdc4-bqrfxromaroma-livedata-8d6fcdc4-sgb6hromaroma-logstash-7bc79d48c6-ql5nkromaroma-logstash-7bc79d48c6-rg5mqromaroma-mqbroker-0romaroma-mqbroker-1romaroma-mqbroker-2romaroma-mqbroker-3romaroma-mqnameserver-0romaroma-mqnameserver-1romaroma-nginx-58d67fdc47-phgcmromaroma-nginx-58d67fdc47-zfqbbromaroma-portals-764c9dd78-9c2b9romaroma-portals-764c9dd78-pc7ghromaroma-quartz-0romaroma-quartz-1romaroma-redis-0romaroma-redis-1romaroma-redis-2romaroma-umpconnector-7d9cf799c9-2qww4romaroma-umpconnector-7d9cf799c9-97fslromaroma-umphttpserver-7d8c7769f6-cg9m4romaroma-umphttpserver-7d8c7769f6-vcrr2romaroma-umpnameserver-0romaroma-umpnameserver-1romaroma-zookeeper-0romaroma-zookeeper-1romaroma-zookeeper-2
  • [技术干货] 智慧园区统一部署场景描述和制作镜像步骤
    假设现有一个基于nodejs开发的Hello World原生服务应用,如图1,且无需和AppCube平台进行API集成。图1 Hello World满足统一安装的规范后,可以使用园区的自动化部署工具安装到数字平台中。大致流程如下:基于安全的基础镜像制作原生服务应用的镜像。上传镜像到镜像仓库。制作基于Helm规范的Chart包。使用自动化部署工具部署原生服务。前提条件准备一台安装了docker的Linux主机。联系园区运营获取安全的Euler操作系统基础镜像,例如“HiCampus_DockerImageBase_EulerOS2.0SP5-x86_64_20210630.tar.xz”操作步骤使用root用户登录安装了docker的Linux环境。将获取Euler操作系统基础镜像上传到Linux服务器指定的目录中(例如/home/helloworld)。导入基础镜像并设置tag。# xz -d HiCampus_DockerImageBase_EulerOS2.0SP5-x86_64_20210630.tar.xz# docker import -m "hicampus euler_x86" HiCampus_DockerImageBase_EulerOS2.0SP5-x86_64_20210630.tar euleros:21.1.0下载nodejs的二进制包,并上传到Linux服务器指定的目录中(例如/hom/helloworld)。从官网上https://nodejs.org/download/release/v12.0.0/下载。例如“node-v12.0.0-linux-x64.tar.gz”。创建helloworld应用程序文件。# vi /home/helloworld/server.jsvar http = require('http'); http.createServer(function (request, response) { // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 发送响应数据 "Hello World" response.end('Hello World\n'); }).listen(8888); // 终端打印如下信息 console.log('Server running at http://127.0.0.1:8888/');创建dockerfile文件。# vi /home/helloworld/Dockerfile# 使用欧拉安全的基础镜像 FROM euleros:21.1.0 # 创建用户和目录 RUN groupadd -g 9008 -r hello \ && useradd -u 9008 -m -d /home/hello hello -g hello \ && mkdir /home/hello/node \ && chown -R 9008:9008 /home/hello # 安装配置nodejs的二进制包 ADD node-v12.0.0-linux-x64.tar.gz /home/hello/node ENV NODE_HOME=/home/hello/node/node-v12.0.0-linux-x64 ENV PATH=$NODE_HOME/bin:$PATH # 拷贝应用所需的资源文件 COPY --chown=9008:9008 server.js /home/hello # 切换指定用户运行命令 USER hello WORKDIR /home/hello # 容器应用暴露的端口 EXPOSE 8888 # 容器中启动应用命令 CMD [ "node", "server.js" ]Dockerfile的文件详细说明请参考docker官网的资料:https://docs.docker.com/engine/reference/builder/。如何写出可读性更好的Dockerfile可参考华为云上的资料:如何编写高效的Dockerfile。使用dockerfile制作原生服务镜像。# docker build -t helloworld:0.1.0 ./其中:helloworld为原生服务镜像名称。0.1.0为原生服务镜像的tag。导出镜像文件。# docker save helloworld:0.1.0 | gzip > helloworld.tar.gz生成的helloworld.tar.gz即为镜像文件。
  • [技术干货] 智慧园区统一运维部署组网和规范要求
    智慧园区沃土数字平台以容器管理平台(Kubernetes)为基础提供统一部署能力。智慧园区沃土数字平台组件与伙伴原生服务运行在同一套容器管理平台中,以namespace隔离部署。智慧园区沃土数字平台组件安装完成后,在集群内部已安装好cdnative用于伙伴应用容器的部署。伙伴的原生服务可通过K8S service(ClusterIP、NodePort等)与园区核心服务以及其他系统互访。容器制作规范使用统一的基础镜像,对于园区伙伴来说就是基于园区提供的安全基础镜像构建新的原生服务镜像。最小原则。为了减少镜像的体积和编译时间,应避免安装额外的或者不需要的包。单个镜像大小建议不要超过1G。一个原则:每个容器只运行一个进程。尽量使用合并指令来减少镜像层。Dockerfile中的指令会生成新的镜像层,一个镜像最多127层。不要在Dockerfile中单独修改文件的权限。使用Dockerfile对镜像进行版本管理。安全要求容器镜像扫描无漏洞(使用二进制分析或哈希验证的漏洞扫描工具)。容器镜像中业务使用非root用户运行,也不存在未使用的用户。禁止在Dockerfile中使用ADD指令操作不可信文件(如不可信的远程URL中的文件)。Dockerfile中不存储任何敏感信息(如内置账号、密钥等)。容器镜像发布前通过安全扫描(无病毒和恶意软件)。原生服务镜像需要提供必要的端口列表,非必要开放的端口必须关闭。不开放非必要的API,禁止任何后门或可能会被认为是后门访问的行为。支持API级权限管理,可配置化实现针对特定应用的可开放API。应用部署包制作规范部署包使用helm chart格式归档发布Web、接口类应用采用deployment部署,支持至少2个副本并优先根据反亲和性要求调度到不同的k8s集群工作节点。中间件类应用采用statefulset部署,优先根据反亲和性要求调度到不同的k8s集群工作节点。配置文件使用configmap、secret资源挂载。Deployment和statefulset类型的应用需要为pod定义健康检查探针。对于业务启动时长较长的应用需要为pod定义就绪检查探针,避免业务流量被转发到未就绪的实例。持久化数据必须使用PV和PVC资源对象挂载到容器。容器网络使用规范原则上优先使用ClusterIP类型的服务来暴露访问url,只有在需要把服务暴露给外部系统访问时采需要使用NodePort类型的服务。使用NodePort类型的服务时,优先采用自动方式分配端口避免集群内端口冲突。若需要使用固定端口,需要在应用部署文件中定义变量来设置此固定端口。引入ingress服务时需限定ingress的作用域为当前namespace,避免与其他namespace产生冲突。
  • [技术干货] 智慧园区统一部署介绍
    伙伴应用满足一定的规范和要求后,可以基于园区的统一安装工具部署自己原生的应用。统一部署的概述如下图所示,园区统一部署是园区基线版本提供的一个核心服务,和统一运维同属于园区核心服务层。园区统一部署提供了2个部分的功能特性:支持园区解决方案端到端的自动部署提供对外开放的部署工具给伙伴部署自己的原生服务原生服务概念和优势原生服务是符合园区数字平台规范,基于通用编程语言(Java、C++、Python等)开发的,可对外可提供服务的业务软件系统,原生服务的设计初衷是期望将大量已有业务系统和服务,特别是广大生态合作伙伴在各类业务中的服务,使用简单规范的集成方式接入园区数字平台,共同为用户提供丰富多彩的业务。其主要优势如下:基于同一规范可以部署到不同的组网形态(HC,Cube等)。可复用原有业务系统的能力。原有业务可以继续使用。原生服务和园区数字平台上服务相互开放,数据打通,协同共赢。通过这种联合在一起的更方便开发更加丰富的业务应用。如果基于园区开发平台进行开发,容易实现一致的客户体验。为客户提供统接口调用方式。
  • [技术干货] 智慧园区高性能编码规范之数据建模优化
    对象结构创建构建表模型的过程中,需要为表中字段适当建立索引。基于表模型来建立索引,应当遵循以下两个原则:常用的查询条件字段创建索引,创建索引时,区分度大的字段放在前面。不要对所有字段建立索引,太多的索引会导致增删改的操作变慢,且维护成本高。关于建立索引的详细原则以及范例,详细说明请参见索引添加规则。索引添加规则当建立表模型时,字段取值是唯一(Unique)的,并且也勾选了“是否唯一”选项,平台自动添加索引。如果新建字段时候,勾选了“是否唯一”,那么平台自动为此字段添加了索引。当字段类型为Lookup及MasterDetail时,平台自动添加索引。当字段的取值区分度不大时,不建议添加索引。如SingleSelect类型、CheckBox类型不应该建立索引。举例:Status字段取值为Active、Inactive、Deleted,添加索引对查询性能影响不大,但是对增删改有影响,致使增删改的操作耗时多。对于TextArea类型的字段,平台暂不支持建立索引。当字段为多语言字段时,字段值存储的是多语言ID,若业务根据多语言ID查询,可添加索引以提高查询性能,若业务根据多语言的值查询,则无需添加索引。当字段的取值既不是唯一,又无法确认重复度时,根据业务实际使用场景添加。若业务使用该字段进行查询的频率较高时,可建立索引以提高查询性能,若使用频率较低时,可不建立索引。
  • [技术干货] 智慧园区开发过程中涉及到的AppCube平台的相关参数与限制
    了解AppCube平台的相关参数与限制,在业务开发过程中,在限制规则内进行开发,以免触发未知的异常。平台对接的ES(Elasticsearch),查询条件中能带的value个数≤1024个。平台对接的ES,返回数据量≤5000条。平台1.2.12.2版本后,默认≤5000条。平台1.2.12.2版本前,默认≤3000条。平台对接的ES,查询条件中的From ≤ 10000平台1.2.12.2版本后,默认≤10000平台1.2.12.2版本前,默认≤3000单条SQL查询,关联表的数量最好不超过6个,推荐4个。超过限制会导致执行过慢,甚至报错。单条SQL查询,返回的数据量限制为10000条;不传limit时,会默认限制为5000条。单条SQL执行时间60秒后会报超时的错误。当大批量数据操作时要分批操作。定时任务中,脚本执行10min后超时。restful API中,单个API访问数据库的限制如下,其它详细约束请参见AppCube平台的规格说明。表1 单个API访问数据库的限制license限制免费租户企业版租户脚本最大运行时长60s180s脚本任务最大运行时长180s600s每个节点允许并行运行的脚本的最大数目11000每次请求执行数据库查询最大次数1001000每次请求数据库查询最大记录数50000200000每次请求执行数据库DML操作最大次数1501000每次请求数据库DML操作最大记录数10000100000每次请求执行查询elasticsearch最大次数201000每次请求elasticsearch查询最大记录数50000200000每次请求最大外部请求数101000每次请求最大发送邮件数101000每次请求最大发送事件数501000
  • [技术干货] 智慧园区查询公共系统参数接口
    查询系统参数(getSysParameters)查询系统参数。该接口主要用于公共查询系统参数,只可查询非加密系统参数值。注意事项无。基本信息接口名称getSysParameters接口路径/service/Common/0.1.0/getSysParameters接口协议HTTPS接口方法POST请求参数请求参数如表1所示。表1 请求参数说明参数名称类型必选(M)/可选(O)参数位置参数含义access-tokenStringMCookie | Header授权TOKEN。localeStringOHeader当前界面语言。如zh_CN、en_US。默认为zh_CN。parameterNamesStringMBody系统参数名称。表示要查询的系统参数名称。请求样例 { "parameterNames": "roma_app_prefix" }响应参数响应参数如表2所示。表2 响应参数说明参数名称类型必选(M)/可选(O)位置参数含义resCodeStringMBody接口的返回码。resMsgStringOBody接口的返回消息。resultOutputs[]OBody接口的响应参数。表3 Outputs参数说明参数名称类型必选(M)/可选(O)位置参数含义parametersStringMBody/result/Outputs系统参数结果。{“系统参数名”:“系统参数值”}响应样例{ "resCode": "0", "resMsg": "成功", "result": [ { "parameters": { "roma_app_prefix": "test_default__" } } ] }
  • [技术干货] 智慧园区数字平台如何获取接口所需access-token值
    调用资产前需要先调用该接口,获取access-token值。注意事项无。基本信息接口名称token接口路径/baas/auth/v1.0/oauth2/token接口协议HTTPS接口方法POST请求参数请求参数如表1所示。表1 请求参数说明参数名称类型必选(M)/可选(O)参数位置参数含义Content-TypeStringMHeadersHTTP协议中设定的一个参数,用于标识返回的内容用什么格式去解析。取值为:“application/x-www-form-urlencoded”,表示urlencode格式。说明:当前使用的是OAuth 2.0的客户端鉴权模式获取用户access_token,由于不需要access-token认证,所以Header中只需要设置“Content-Type”为“application/x-www-form-urlencoded”即可,即需要将Body中的请求消息体参数以www-form-urlencoded格式传入。grant_typeStringMBody类型。取值:client_credentialsclient_idStringMBody客户端id,可在OAuth查看,参考创建OAuth。例如:08b357*****7af28d1client_secretStringMBody客户端密钥,可在OAuth查看,参考创建OAuth。例如:3c4e95*****4a5blocaleStringOBody语言。例如:en_US创建OAuthclient_id和client_secret获取方式如下:创建权限配置信息。管理员账号登录AppCube平台。依次选择“管理 > 用户管理 > 权限配置”,单击“新建”,新建权限配置。填写权限配置名称,如“test”,单击“保存”,创建完毕。自定义编辑步骤1创建的权限配置信息。单击选择步骤1创建的权限配置名称,进入权限配置详情页面。单击右上角编辑按钮,勾选需要调用的API对应的业务权限凭证,如图1所示信息。图1 权限配置详情创建用户。获取AppCube鉴权信息之前,先要创建用户,为用户配置OAuth权限。依次选择“管理 > 用户管理 > 用户”,进入用户列表页面。单击“新建”,输入用户信息,选择用户权限为步骤1创建的权限配置名称,如下图所示。单击“保存”,用户创建完成。获取AppCube的鉴权信息。依次选择“管理 > 系统管理 > OAuth”菜单。单击“新建”,输入名称,选择上个步骤创建的用户,并单击“保存”。系统会自动生成客户端ID和客户端密钥。每个OAuth都有特定的用途,因此需要为AppCube鉴权信息单独新建一个OAuth。单击,下载excel文件,从中获取client_id和client_secret。响应样例{ "access_token": "0000000000***********jbd0qVnm6qhfGBnaEwbMU=", "expires_in": 3600, "token_type": "Bearer" }
  • [技术干货] 智慧园区应用工程构建规范
    应用工程指使用AppCube平台开发的App和BO,应用工程规范包括App、BO的命名规范、目录结构规范,工程配置规范和工程服务规范。App是一个可复用的独立业务应用。例如,智慧园区解决方案中的综合安防应用。App的交付件包括:接口Interface:对外暴露的接口服务,Restful API接口可以直接被前台或第三方系统调用。事件Event:对外暴露、共外部订阅的事件。菜单Menu:面向租户业务使用人员,提供配置操作能力。BO是一个可复用的领域服务,是最小粒度的复用单元。例如,为了使业务应用开发人员高效地实现与物联设备的交互,对物联设备进行业务抽象,封装为设备BO。BO是资产封装的规范,可以基于平台元数据能力实现,也可以用其他方式实现。BO是有边界的。BO与BO之间不能共享数据。BO对外开放数据视图、接口服务、配置机制、事件等来进行交互,内部实现对外闭源不可见。BO的数据视图以聚合根的形式开放供外部查询。BO可以同时开放多个聚合根。BO与BO之间允许有接口调用的引用关系,但设计时应尽量避免BO与BO之间的直接交互,并完全禁止双向依赖。BO中可以包含UI内容如Layout、Widget,但仅作为参考实现。BO应尽量利用配置能力来适配不同的业务场景。配置无法满足时才考虑对BO做Addon扩展。扩展不能影响BO的向前兼容性。BO被打包在App或Addon中,租户通过安装App或Addon来获取BO。本文中字符数均以英文字符作为计数单位,一个汉字算3个字符。开发态的名称定义使用英文,展现给租户使用的配置参数显示则使用中文。BO的交付件包括:接口Interface:BO对外暴露的接口服务,一类是可以直接被前台或第三方系统调用的Restful API接口,一类是只能在开发平台上通过编排来调用的SDK API。事件Event:对外暴露、共外部订阅的事件。配置Configuration:面向开发人员或IT管理人员的,提供的配置能力。其中,配置菜单是BO提供的配置界面,选项列表是BO内部使用的字典项,系统参数是BO内部需要读取的控制参数。
  • [问题求助] 【春风动力智慧园区项目】【下载功能】下载速度过慢
    【操作步骤&问题现象】1、问题现象:因项目使用海康摄像头,需使用海康提供的播放插件,目前是将海康插件上传到OBS后,在视频预览界面进行下载插件。由于ABC脚本上传限制为5M,请教运维人员后将上传限制由5M提升至80M,但出现了下载过慢的问题,下载也存在会中断的情况。2、问题咨询:是否有相关配置会影响下载速度?【截图信息】
  • [问题求助] 【连云港化工智慧园区拓展项目】【Roma连接数据源失败】roma连接本地mysql失败,是否是要开通白名单
    【功能模块】Roma连接数据源【操作步骤&问题现象】1、roma连接本地mysql,失败原因只显示20秒,请先复制到文本文件中,本机的Na 可以连本机的仓库,但是ROMA是外网的,是不是连接不了?【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 智慧园区设备通过IoT网关和平台接入园区预集成设备
    园区基线预集成的设备IO包含:基线设备IO、连接实验室认证扩展IO。当对应设备接入园区时无需开发任何代码,可直接接入使用。基线设备IO:随基线版本一起安装,订购园区基线后默认安装好,如表1所示。连接实验室认证扩展IO:IO扩展包随基线版本发布,但默认不安装,项目可根据需要选装,如表2所示。扩展IO详情见连接实验室认证扩展IO。基线设备IO这部分设备IO随基线版本一起安装,订购园区基线后默认安装好。表1 基线设备IO条数分类设备IO“统一设备服务”端对应的设备规格1保安系统设备门禁设备IOAccessControl2泄露电缆设备IOLeakyCable3人行闸机设备IOTurnstile4消防系统设备消防烟感设备IOSmokeDetector5消防温感设备IOTemperatureSensor6消防手报设备IOManualFireAlarmActivation7声光报警设备IOAcoustoOpticAlarm8消防栓按钮设备IOFireHydrantButton9可燃气体探测器设备IOCombustibleGasDetector10能耗系统设备水表设备IOWaterMeter11电表设备IOElectricMeter12燃气表设备IOGasMeter13资产管理设备新基点IoT射频识别标签设备IORFID14新基点IoT射频识别读卡器设备IORFIDReader15环境监测设备户外环境监测设备IOOutdoorEnvSensor16室内环境监测设备IOIndoorEnvSensor17建筑BA设备空调机组设备IOAirHandleUnit18新风机组设备IOPreCoolingAirHandlingUnit19送风机设备IOSupplyAirFan20排风机设备IOExhaustAirFan21冷机设备IOChiller22冷冻水泵设备IOChillerWaterPump23冷却水泵设备IOCoolDownWaterPump24冷却塔设备IOCoolingTower25冷源补水箱设备IOColdSourceSupplyTank26冷源补水泵设备IOColdSourceSupplyPump27冷冻水总管设备IOChilledWaterMainPipe28冷却水总管设备IOCoolDownWaterMainPipe29管道设备IOMainPipe30膨胀水箱设备IOExpansionTank31蓄冷罐设备IOColdStorageTank32电热锅炉设备IOElectricBoiler33锅炉热水泵设备IOBoilerHotWaterPump34供热水泵设备IOHeatingWaterPump35排水泵设备IODrainagePump36生活水泵设备IODomesticWaterPump37集水井设备IOSumpPit38生活水箱设备IODomesticWaterTank39减压阀设备IOPressureReliefValve40室内照明控制器设备室内照明控制器设备IOIndoorLightingController41厕位检测设备厕位检测设备IOToiletPositionDetector42工位检测设备工位检测设备IOWorkStationDetector43升降电梯设备升降电梯设备IOElevator44电梯群控器设备电梯群控器设备IOElevatorClusterController连接实验室认证扩展IO这部分设备IO扩展包随基线版本发布,但默认不安装,项目可根据需要选装。表2 连接实验室认证扩展IO条数分类设备IO“统一设备服务”端对应的设备规格1电气火灾监测系统设备故障电弧探测器设备ArcFaultDetectionDevice2电气火灾检测系统探测器设备ElectrFireMonitorSysDetector3消防电源监控系统设备FirePowerMonitorSys4照明系统路灯设备StreetLight5室外景观照明设备OutdoorLandscapeLighting6室内多回路照明控制器设备IndoorMultLoopLightingController7环境空间监测系统震动传感器设备Vibrating8GPS定位器设备GPSLocator9智能手环设备SmartBand10垃圾桶设备Trashcans11擦手纸余量检测设备TissuePaper12厕纸余量检测设备ToiletPaper13客流统计设备PassengerFlow14多媒体点评器设备Evaluator15洗手液余量检测设备SoapDispenser16井盖检测器设备ManholeCoverDetector17路灯显示屏设备StreetLightDisplayScreen18激光探测器设备LaserDetector19应急指示灯设备EmergencyLamp20水文监测系统水位水质监测设备WaterQualityMonitoring21水文监测设备HydrologicalTelemetery22能耗管理系统能耗管理系统设备EnergyConsumption23智能水表设备SmartWaterMeter24热量表设备HeatMeter25冷量表设备CoolCapacityMeter26火灾自动报警系统报警主机设备AlarmHost27入侵报警系统电子围栏设备ElectronicFence28门磁探测器设备ElecLockDetector29报警主机防区设备AlarmHostDefenceArea30环境空间告警系统管线甲烷气体探测器设备PipelineCH4Detector31管线硫化氢气体探测器设备PipelineH2SDetector32管线温湿度探测器设备PipelineTempAndHumidityDetector33管线压力探测器设备PipelinePressureDetector34管线氧气气体探测器设备PipelineO2Detector35紧急按钮设备EmergencyButton36温湿度监测设备TemperatureHumidity37管道流量监测设备PipelineTrafficMonitoring38液压检测设备HydraulicPressureDetector39水浸检测设备WaterImmersion40液位检测设备LiquidLevelDetector41CH探测器设备CH4Detector42红外探测器设备InfraredDetector43一氧化碳探测器设备CODetector44氨气探测器设备AmmoniaDetector45空气质量探测器设备AirAualityDetector46地埋侧循环泵设备BuriedSideCirculatingPump47定压水泵设备ConstantPressurePump48水处理仪设备WaterTreatmentInstrument49地源热泵机组设备GroundSourceHeatPumpUnit50锅炉补水箱设备BoilerSupplyTank51二次水循环泵设备SecondaryCirculationPump52消防监测系统消防栓监测设备HydrantDetector53消防管道监测设备FireControlPipeDetector54BA400V进线设备InLine400V5510kV进线设备InLine10kV56400V出线设备OutLine400V57电力变压器温控器设备TransformerTempController58交流电通断检测器设备ACDetector59空气断路器设备AirCircuitBreaker60电箱温度传感器设备TempDetector61母联设备BusTieSwitch62电容器设备Capacitance6335kV出线设备Capacitance64主变压器设备MainTransformer6510kV出线设备OutLine10kV66站变设备StationTransformer67110kV分段设备Subsection110kV68直流屏设备DirectCurrentPanel69110kV进线间隔设备IncomingLineInterval110kV70双电源转换开关DualPowerSwitch71TV监控设备TVMonitoringDevice72母线保护设备BusbarProtection73光伏发电设备PhotovoltaicGenerator74柴油发电设备DieselGenerator75电动天窗电动天窗设备PowerSunroof76电梯及扶梯扶梯设备Escalator
  • [技术干货] 智慧园区设备通过IoT网关和平台接入园区集成架构
    图1 设备通过IoT接入南向设备接入的整个业务流程可以分为2部分:数据上报和指令下发,各模块的处理流程如下。数据上报IoT平台能力:南向设备通过IoT网关和IoT平台,将原始数据上报到ROMA MQS的原始topic中。基线预置能力:IoT Adapter IO依据消息类型将消息拆分,并根据设备类型和消息类型转发给对应设备IO的中间层topic。例如人行闸机上报的消息,会转发给“人行闸机设备IO”;门禁上报的消息会转发给“门禁设备IO”。设备IO能力:设备IO将消息转换成标准格式,并发送到“设备标准消息MQS Topic”。基线预置能力:统一设备服务消费标准topic中的消息,转换成事件供业务应用做逻辑判断。指令下发基线预置能力:统一设备服务提供标准化的设备模型和控制命令,无论是对哪种设备下发指令,业务应用都只需调用标准化的指令接口即可。基线预置能力:统一设备服务根据业务侧下发的指令,在设备的标准模型中查询到该设备的指令服务后回调ROMA侧的“设备标准IoT接口”。基线预置能力:ROMA侧的“设备标准IoT接口”依据指令中的“channel”和“deviceType”参数,将指令路由到设备IO。“channel”参数用于多IoT平台的场景,确定指令要下发给哪个IoT平台,例如新基点IoT平台的channel值为“basepoint.connectionmax.iot”。“deviceType”参数确定指令路由到哪个设备IO,deviceType的值来自统一设备服务中定义的标准模型。例如人行闸机的指令会路由到“人行闸机设备IO”,门禁的指令会路由到“门禁设备IO”。设备IO能力:设备IO将业务侧下发的指令转换为实际物理设备可以执行的指令,并回调南向IoT平台的指令下发接口。IoT平台能力:南向IoT平台向实际物理设备下发指令,控制设备的运行。在整个业务流程中,每种类型的设备,都需要有一个对应的设备IO,用于标准化实际设备上报的消息,以及转换业务下发给设备的指令,消息上报和指令下发通过IoT平台来实现。针对园区常见的一部分设备,基线已经预集成了对应的设备IO,无需开发任何代码,可直接接入使用,详细清单参见基线已集成设备。对于不在基线预置内的设备,只需开发对应的设备IO即可,其它部分不需要开发,整个上行/下行流程和业务侧都无需变动,开发流程详见基线未集成设备接入指导。
  • [技术干货] 智慧园区业务侧批量操作接口出入参规范(上)
    批量导出接口业务对象的数据很多场景下需要导出到外部,例如在界面导出成文件,导出到数据平台做分析,或导出到第三方系统使用。因此需要提供REST形式的数据导出接口。导出接口的命名举例:deviceDataExportForBatchURL格式举例:/service/Device/0.1.0/deviceDataExportForBatch导出接口的入参字段:导出接口的本质是按条件查询接口,但和数据视图的查询接口不同,导出接口通常入参与时间段相关,其查询结果应为平铺的字段列表而非嵌套的对象结构。导出接口的入参字段建议包含以下:表1 导出接口的入参字段序号名称类型必选(M)/可选(O)描述1countFlagIntegerM1:返回总数totalNumber。其它:返回title,data。2startIntegerO导出开始数,0开始。countFlag为1时,可不传。countFlag不为1时,必传。3limitIntegerO导出数。countFlag为1时,可不传。countFlag不为1时,必传。4xxxAnyO回调服务自定义参数。入参样例:{ "channel": "string", "countFlag": "string", "defId": "string", "deviceIds": [ "string" ], "deviceName": "string", "exportAllFlag": "string", "externalCode": "string", "gatewayId": "string", "limit": 0, "spaceInPath": "string", "start": 0, "status": "string" }导出接口的出参字段建议为:表2 导出接口的出参字段序号名称类型必选(M)/可选(O)描述1totalNumberIntegerO导出的总数,countFlag为1时返回。2titleString[]O导出文件标题列表,例如:["title1", "title2", "title3"]countFlag不为1时返回。3resultRecord[]O导出的数据列表。一条数据对应一行导出数据,字段名为对应标题,字段值为导出值,例如:[{"title1": "val1"}, {"title2": "val2"}, {"title3": "val3"}]countFlag不为1时返回。出参示例:{ "result": [ {} ], "title": [ "string" ], "totalNumber": 0 }一个应用通常会包含多个业务对象,例如人员BO包含了人员实例、人员群组、通行授权等业务对象。不同的业务对象应提供不同的批量导出接口,不同的业务对象关系也应提供不同的批量导出接口,因为批量导出的结果集为平铺的多字段数据记录集,不适合同时承载有关联关系的多个业务对象。
  • [技术干货] 智慧园区业务权限凭证配置规范
    在创建FUNCTION类型的权限资源时,只能选择已有的业务权限凭证。AppCube平台的业务权限凭证,由开发者在应用开发的“配置> 业务权限凭证”页面创建,删除同样如此,权限BO仅关联已有业务权限凭证。在应用开发的“配置> 业务权限凭证”页面创建凭证,APP/BO编译打包时,可以将凭证以及API关联的凭证数据一起打包出来。配置规范业务权限凭证配置的粒度应符合实际业务使用场景,使实际业务中既能灵活配置权限,又不产生越权的问题。如果一个权限中需要调用多个接口,其权限资源应配置上多个接口对应的业务权限凭证(即创建多个FUNCTION类型的权限资源),然后分别给这些接口配置业务权限凭证。通常一个接口对应一个业务权限凭证。命名规范凭证名称的命名规范如下:模块名称(APP/BO名称)[必选]_特性[必选]_操作[非必选],大驼峰格式。例如:SystemManagement_CommonSystemManagement_Operator_Create凭证分类(目录)原则:以APP/BO为模块进行分类,命名与APP/BO一致。目录必选。定义业务权限凭证时目录名称可直接输入。区分使用者权限如:SystemManagement_Common配给匿名用户;SystemManagement_Operator_Update配给系统管理员区分读写权限如:SystemManagement_Operator_QueryAll只读;SystemManagement_Operator_Create可写区分单个/批量权限如:SystemManagement_Operator_Delete单个删除;SystemManagement_Operator_BatchDelete批量删除区分同一操作结果不同权限如:SystemManagement_Operator_QueryAll查询全部信息;SystemManagement_Operator_QueryBasic查询基本信息区分可操作对象不同权限如:SystemManagement_Operator_QueryBasic查询返回多个结果;SystemManagement_Operator_QueryCurrent查询仅返回当前对象结果