vlambda博客
学习文章列表

低代码应用在腾讯TSF实现服务治理的解决方案


语:本文介绍了西门子企业应用开发平台Mendix应用在腾讯云微服务平台(简称TSF)实现服务治理的实践。该方案仅用于非生产环境的Mendix应用服务治理,如果需要生产环境的最佳方案,可联系咨询腾讯云TSF团队和西门子Mendix团队。


作者 | 彭杉(Mendix产品总监),肖雨浓(腾讯云中间件总经理),姜彪(Mendix技术经理),韩欣(腾讯微服务平台负责人),刘阎(腾讯云中间件产品经理)


01
业务场景



当企业有大型应用需要拆分成多个微服务的需求时,Mendix在不依赖任何云平台,如Mendix Cloud、Openshift、K8S等情况下,无法满足服务治理所有的功能,对于Private Cloud环境的运行更是如此。即便是在开源的上如K8S、Openshift、Mesos、Rancher、Docker-swarm容器平台等也不具备较强的服务治理能力。对于代码侵入式较高的服务治理框架,SpringCloud、Dubbo等对于Mendix应用的开发难度较高(对于Mendix应用目前可以通过javaAction方式自定义代码,对于Springcloud,自定义代码的权限远远不够),固不适用;而对于专业的无代码侵入式Service Mesh服务治理框架,如Istio,Linkerd、Nginmesh、Maistra等却需要有专业的团队去维护, 时间成本,运维成本都大大增加项目预算,因此在Private Cloud环境下需要一套快速实现服务治理的一套解决方案。


拥有可以用低代码的方式创建一个基于微服务集群的大型企业级应用,帮助企业快速应用最新的互联网技术,加速企业创新更好的支持敏捷快速迭代开发,提升整体IT管理能力。

02
  应用范围



使用腾讯云微服务平台TSF来实现Mendix应用之间的服务治理。


如服务路由、服务限流、服务鉴权规则。用户可以通过配置、权重标签的形式进行细粒度的流量控制,实现灰度发布、就近路由、流量限制、访问权限控制等功能 。


TSF产品链接:
https://cloud.tencent.com/document/product/649


03
  TSF服务治理能力



Mesh 微服务平台(Tencent Service Mesh Framework,简称 TSF Mesh),基于 Service Mesh 的理念,为应用提供服务自动注册与发现、服务路由、鉴权、限流、熔断等服务治理能力,且应用无需对源代码进行侵入式改造,即可与该服务框架进行集成。了解TSF Mesh更多信息点击此处请查看

通过腾讯云的TSF微服务平台,提供Mendix开发的微服务之间治理的解决方案。
  • 服务 线上管理 ,实现 服务可视化全生命周期管理。
  • 业务自定义标签,应用于用户自定义服务鉴权与服务路由规则。
  • API列表与调试,方便用户API接口信息查看及远程调试。
  •  服务统计,提供服务运营监控数据,用于快速定位服务异常,发现系统瓶颈。
  • 服务鉴权,防止服务非法调用。
  • 服务限流 ,保护自身服务,防止流量击穿导致系统异常。
  • 服务路由,灰度发布,金丝雀发布,蓝绿发布。
  • 服务熔断,当下游的服务因为某种原因导致服务不可用或响应过慢时,上游服务为了保证自己整体服务的可用性,不再 继续调用目标服务,直接返回。 当下游服务恢复后,上游服务会恢复调用。
  • 日志告警,快速发现系统异 常。
  • 实时日志,检测服务启动日志。
  • 日志检索,快速发现系统异常。
  • 服务依赖拓扑,展示应用服务全景图,用于快速定位服务异常,发现系统瓶颈。
  • 调用链查询及详情,以接口维度 快速定位服务异常,发现系统瓶颈。 弹性伸缩,保障服务高可用,减少人工操作,节约系统资源。
  • 全链路灰度发布。
  • 分布式事务,跨多个库数据一致性保障。
  • 微服务网关,全局服务的鉴权,服务路由,服务管理。

04
准备工作



为了顺利完成本次实践,您需要提前做好 下TSF的相关 备工作
  • 登录腾讯云控制台,注册并实名认证后,登录腾讯云账号:
    https://cloud.tencent.com。
  • 确认腾讯云账户余额大于100元。
  • 若使用主账号进行登录,则默认已有所有资源的访问权限;若使用子账号进行登录,则需要提前授予相关权限,可前往下面链接查看如何使用CAM策略进行授权:
    https://cloud.tencent.com/document/product/598/10600。
  •  一台可以访问公网的机器(可在腾讯云CVM页面进行购买),用于上传Mendix应用镜像。
  •  容器服务TKE。

05
Mendix镜像构建



1. 通过Mendix Studio Pro 开发的多个微服务

如ilink.mpk、native.mpk项目包,两者相互调用彼此提供的服务。

传统的Rest API调用:http://ip:port


低代码应用在腾讯TSF实现服务治理的解决方案


改造后的Rest API调用, http://service-name/,使用服务名字实现服务之间的相互调用。


低代码应用在腾讯TSF实现服务治理的解决方案

 2. 构建镜像

(1)下载相关的脚本文件


git clone https://github.com/mendix/docker-mendix-buildpack.git


(2)文件目录结构


├── Dockerfile

├── Dockerfile.rootfs.bionic

├── Dockerfile.rootfs.trusty

├── LICENSE

├── Makefile

├── README.md

├── scripts

│ ├── cleanupjdk

│ ├── compilation

│ ├── git

│ ├── startup

│ └── vcap_application.json

└── tests

    ├── docker-compose-azuresql.yml

    ├── docker-compose-k8s.yml

    ├── docker-compose-mysql.yml

    ├── docker-compose-postgres.yml

    ├── docker-compose-sqlserver.yml

    ├── stop.sh

└── test-generic.sh


(3)将开发好的MPK包放到与docker-mendix-buildpack同级目录

低代码应用在腾讯TSF实现服务治理的解决方案

ilink.mpk和native.mpk为Mendix所开发的两个微服务。docker-mendix-buildpack-ilink和docker-mendix-buildpack-native是这两个app镜像构建,容器部署相关的脚本,主要文件包括Dockerfile、Makefile、startup启动文件。


(4)Makefile文件修改

修改前:
低代码应用在腾讯TSF实现服务治理的解决方案
修改后:  
低代码应用在腾讯TSF实现服务治理的解决方案
(5)创建nativeService.tar.gz文件,内容如下:
文件目录:
├── apis

│ └── native.yaml

├── logs

└── spec.yaml


##Spec.yaml文件主要是定义服务及健康检查相关的内容:
apiVersion: v1
kind: Application
spec:
  services:
    - name: native
      ports:
        - targetPort: 8080
          protocol: http
      healthCheck:
        path: /
##native.yaml主要定义相关的api,不做强求,内容如下:

openapi: 3.0.0
info:
  version: "1.0.0"
  title: native service
paths:
  /api/v6/user/create:
    get:
      responses:
        '200':
           description: OK
        '401':
           description: Unauthorized
        '402':
           description: Forbidden
        '403':
           description: Not Found
  /api/v6/user/account/query:
    get:
      responses:
        '200':
           description: OK
        '401':
           description: Unauthorized
        '402':
           description: Forbidden
        '403':
           description: Not Found
  /health:
    get:
      responses:
        '200':
           description: OK
        '401':
           description: Unauthorized
        '402':
           description: Forbidden
        '403':
           description: Not Found


nativeService.tar.gz文件所处的位置如下所示:

低代码应用在腾讯TSF实现服务治理的解决方案
(6)同理创建ilinkService.tar.gz文件,内容如下

文件目录:

├── apis

│ └── native.yaml

├── logs

└── spec.yaml


##Spec.yaml文件主要是定义服务及健康检查相关的内容:
apiVersion: v1
kind: Application
spec:
  services:
    - name: ilink
      ports:
        - targetPort: 8080
          protocol: http
      healthCheck:
        path: /

(7)修改Dockerfile文件

修改后的内容如下:

低代码应用在腾讯TSF实现服务治理的解决方案
低代码应用在腾讯TSF实现服务治理的解决方案

(8)修改script目录下的startup文件

在末尾添加内容:
os.system('mkdir -p /opt/tsf/app_config/apis')
os.system('cp /opt/app/nativeService/spec.yaml /opt/tsf/app_config/')
os.system('cp -r /opt/app/nativeService/apis /opt/tsf/app_config/')
低代码应用在腾讯TSF实现服务治理的解决方案

(9)镜像构建

##make get-sample 相当于解压文件到build文件夹
##make build-image 构建镜像并指定相应的镜像的tag
低代码应用在腾讯TSF实现服务治理的解决方案
需要关注dockerfile修改的文件内容
低代码应用在腾讯TSF实现服务治理的解决方案

当出现以下内容则构建成功

低代码应用在腾讯TSF实现服务治理的解决方案

3. 腾讯云镜像仓库功能存储构建的镜像

使用说明: 
https://cloud.tencent.com/document/product/457/9118

 

低代码应用在腾讯TSF实现服务治理的解决方案
低代码应用在腾讯TSF实现服务治理的解决方案


将本地构建的镜像包上传到镜像仓库:
低代码应用在腾讯TSF实现服务治理的解决方案


06
腾讯微服务平台



1. 创建2台微服务云服务器

(1)具体的创建过程请参考:https://cloud.tencent.com/document/product/213/2936

低代码应用在腾讯TSF实现服务治理的解决方案
(2)设置安全组
低代码应用在腾讯TSF实现服务治理的解决方案

(3)添加相应的安全规则

低代码应用在腾讯TSF实现服务治理的解决方案


参考:

https://cloud.tencent.com/document/product/213/12452
2. 登陆微服务平台

(1)打开控制面板,搜索TSF

低代码应用在腾讯TSF实现服务治理的解决方案

(2)进入腾讯微服务平台TSF

低代码应用在腾讯TSF实现服务治理的解决方案
3. 新建集群
(1)新建集群, 容器集 是利用了腾讯云的容器服务TKE平台。


低代码应用在腾讯TSF实现服务治理的解决方案

(2)导入云主机,以下是已经绑定过的,选择之间创建好的2台云服务器即可。

低代码应用在腾讯TSF实现服务治理的解决方案

(3)集群信息如下图所示,包括两台云主机:

低代码应用在腾讯TSF实现服务治理的解决方案


4. 新建应用

低代码应用在腾讯TSF实现服务治理的解决方案
低代码应用在腾讯TSF实现服务治理的解决方案

同理

低代码应用在腾讯TSF实现服务治理的解决方案

5. 新建日志配置项
低代码应用在腾讯TSF实现服务治理的解决方案
6. 配置

(1)编辑配置信息。

低代码应用在腾讯TSF实现服务治理的解决方案

(2)添加发布规则

低代码应用在腾讯TSF实现服务治理的解决方案

7. 新建部署组
低代码应用在腾讯TSF实现服务治理的解决方案

(1)新建部署,编辑相关信息:

低代码应用在腾讯TSF实现服务治理的解决方案
低代码应用在腾讯TSF实现服务治理的解决方案
(2)在保存下一步之前需要检测是否有足够的资源。 同理创建另外一个mendix-ilink。 创建完成,如下图所示:
低代码应用在腾讯TSF实现服务治理的解决方案

8. 创建后端数据库服务

(1)打开容器服务平台

低代码应用在腾讯TSF实现服务治理的解决方案

(2)可以看到刚才在微服务平台创建好的集群,点击集群id

低代码应用在腾讯TSF实现服务治理的解决方案
(3)新建Deployment
低代码应用在腾讯TSF实现服务治理的解决方案
MYSQL_USER=mendix
MYSQL_PASSWORD=mendix
MYSQL_DATABASE=mendix
MYSQL_ROOT_PASSWORD=root


低代码应用在腾讯TSF实现服务治理的解决方案
低代码应用在腾讯TSF实现服务治理的解决方案
低代码应用在腾讯TSF实现服务治理的解决方案
(4)创建好的mysql数据库服务
低代码应用在腾讯TSF实现服务治理的解决方案

(5)Pod管理

低代码应用在腾讯TSF实现服务治理的解决方案

(6)为mysql再创建一个数据库实例

低代码应用在腾讯TSF实现服务治理的解决方案
低代码应用在腾讯TSF实现服务治理的解决方案
低代码应用在腾讯TSF实现服务治理的解决方案


create  database  mxIlink;
GRANT ALL ON *.* TO 'mendix'@'%';
flush privileges ;

9. 为微服务应用添加环境变量

(1)编辑yaml文件

低代码应用在腾讯TSF实现服务治理的解决方案

为其中一个添加内容:

低代码应用在腾讯TSF实现服务治理的解决方案


- name: ADMIN_PASSWORD
   value: Password1!
 - name: DATABASE_URL
    value: mysql://mendix:mendix@ilink-mysql:3306/mendix
##另外一个添加内容:
- name: ADMIN_PASSWORD
   value: Password1!
 - name: DATABASE_URL
    value: mysql://mendix:mendix@ilink-mysql:3306/mxIlink
##两者数据库实例不同即可

(2)当pod的数量和期望一致时,则应用部署完成

低代码应用在腾讯TSF实现服务治理的解决方案

07
服务验证



由于之前我们设置主机端口的形式访问应用,两个应用的端口对外分别为 30080、30089,通过任一台云服务器即可访问。
将新建的Task通过Rest 形式POST到另外一个微服务,GET会从另外一个微服务获取发送的数据,如下所示:
低代码应用在腾讯TSF实现服务治理的解决方案


另外一个微服务平台接收到的Task数据

低代码应用在腾讯TSF实现服务治理的解决方案

在构建镜像的时候提到了Rest API,传统的方式是ip+port,现在可以直接使用service-name的方式调用。传统方式:

低代码应用在腾讯TSF实现服务治理的解决方案

现在的方式:

低代码应用在腾讯TSF实现服务治理的解决方案

同理相互调用。TSF提供服务注册、服务发现等服务治理相关的功能。

低代码应用在腾讯TSF实现服务治理的解决方案

08
微服务服务治理




1. 服务治理查询

低代码应用在腾讯TSF实现服务治理的解决方案

目前我们部署的服务都是一个实例,可通过容器服务平台进行弹性伸缩。

低代码应用在腾讯TSF实现服务治理的解决方案

2. 服务依赖拓扑
低代码应用在腾讯TSF实现服务治理的解决方案


两个服务之间相互调用相关的依赖关系如上图所示。 用概览图如下图所示:
低代码应用在腾讯TSF实现服务治理的解决方案
低代码应用在腾讯TSF实现服务治理的解决方案
低代码应用在腾讯TSF实现服务治理的解决方案
3. 
调用链查询
低代码应用在腾讯TSF实现服务治理的解决方案

TraceId追踪

低代码应用在腾讯TSF实现服务治理的解决方案
低代码应用在腾讯TSF实现服务治理的解决方案

4. 服务监控
低代码应用在腾讯TSF实现服务治理的解决方案

服务健康状况:

低代码应用在腾讯TSF实现服务治理的解决方案

 延时状态码统计:

低代码应用在腾讯TSF实现服务治理的解决方案
5. 日志服务


由于之前已经创建了日志配置项,因此可以通过TSF的日志服务可以对日志进行检索。

低代码应用在腾讯TSF实现服务治理的解决方案


通过通过多种查询方式如基本查询、Lucene语法、正则表达式。如下所示:

低代码应用在腾讯TSF实现服务治理的解决方案
低代码应用在腾讯TSF实现服务治理的解决方案


请扫描下方二维码查看更多信息:

1. Mesh 微服务平台:

低代码应用在腾讯TSF实现服务治理的解决方案


2. Mendix官网:

低代码应用在腾讯TSF实现服务治理的解决方案



低代码应用在腾讯TSF实现服务治理的解决方案






低代码应用在腾讯TSF实现服务治理的解决方案

了解更多微服务、API网关、消息队列的相关信息


低代码应用在腾讯TSF实现服务治理的解决方案

戳原文,了解更多腾讯云微服务平台TSF的相关信息

点亮在看,你最好看