第六十六章 新一代分布式链路追踪Skywalking实战
第1集 新一代分布式链路追踪Skywalking介绍
简介:新一代分布式链路追踪Skywalking介绍
-
抛两个常见的问题
- 微服务调用链路出现了问题怎么快速排查?
- 微服务调用链路耗时长怎么定位是哪个服务
-
skywalking是什么
- skywalkings是一款国产的开源框架,在2015年开源使用,在2017年的时候加入了Apache孵化器
- skywalking是分布式应用程序的性能监控工具,专门是为了微服务(spring cloud)、云原生架构与容器架构(docker/k8s)而设计的
- 是一款APM工具,它具有分布式追踪、性能指标分析、应用和服务依赖分析等功能
- 官网:http://skywalking.apache.org/
- 下载:http://skywalking.apache.org/downloads/
- Github:https://github.com/apache/skywalking
- 官方文档:https://skywalking.apache.org/docs/main/v8.5.0/readme/
- 中文文档:https://skyapm.github.io/document-cn-translation-of-skywalking/
-
对比区别
- Zipkin是由Twitter开源的链路分析分析工具,在springcloud sleuth得到了广泛的使用,具有轻量,部署简单的特点
- Pinpoint是由韩国人开发的链路追踪应用监控分析工具,基于字节码方式注入。具有支持多种插件,UI功能强大,接入端没有代码侵入
- Skywalking是由国人开发的链路追踪应用监控分析工具,基于字节码方式注入。具有支持多种插件,UI功能强大,接入端没有代码侵入,现已加入Apache孵化器
- CAT是大众点评开源的链路追踪分析工具,具有对应用监控的分析、日志的采集、监控报警一系列的监控平台
项目 Cat Zipkin Skywalking 链路追踪可视化 是 是 是 聚合报表 优 良好 中等 服务的依赖图 良好 良好 优 埋点方式 入侵式 入侵式 非入侵式,字节码增强 VM监控指标 有 没有 有 存储机制 mysql、本地文件 内存、es、mysql、等 H2、es、mysql、TIDB等 支持语言 java/.net 丰富 丰富 社区支持 国内 国外主流 apache支持 知名使用者 美团、携程 京东、阿里定制不开源 华为、小米 APM 是 否 是 开发基础 eBay cal Google Dapper Google Dapper 支持webflux 不支持 支持 支持 github下载量 12.3k 12.2k 11.8k
第2集 Apache Skywalking整体架构组件介绍
简介:Apache Skywalking整体架构组件介绍
-
skywalking整体架构
- 可以分为:上、下、左、右四个部分
- 上部分(skywalking-agent):这一部分负责从应用程序中收集链路信息,然后把链路信息发送给skywalking OAP处理器
- 下部分(skywalking OAp):负责接收从skywalking-agent发送过来的Tracing数据信息,然后把数据信息给Analysis Core进行分析,把分析到的数据存储到外部的存储器当中,最后面把数据信息给Query Core提供查询数据的功能
- 左部分(Skywalking UI):负责给用户查看链路等信息
-
部署组件介绍
- ElasticSearch7.X
- Skywalking-OAP-Server
- Skywalking UI
- Skywalking-Agent(项目引入)
第3集 Rancher2.X部署ElasticSearch7.x
简介:Rancher2.X部署ElasticSearch7.x
-
Elasticsearch
- Elasticsearch是⼀个开源,是⼀个基于Apache Lucene库构建的Restful搜索引擎. Elasticsearch是在Solr之后⼏年推出的。
- 它提供了⼀个分布式,多租户能⼒的全⽂搜索引擎,具有HTTP Web界⾯(REST)和API
- Elasticsearch的官⽅客户端库提供Java,Groovy,PHP,Ruby,Perl,Python,.NET和Javascript。
- 官网:https://www.elastic.co/cn/elasticsearch/
-
应⽤场景
- 维基百科、Stack Overflow、GitHub
- 电商⽹站、⽇志数据分析、商品价格监控⽹站、BI系统、站内搜索
- ES专题课程:可以看小滴课堂《玩转ElasticSearch全链路实战》
-
部署
- 在rancher主界面->资源->映射配置
elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
# 这条配置表示开启xpack认证机制
xpack.security.enabled: true
导入yaml(本章本集资料)
配置主机调度
- 并到主机下的mydata给es文件夹添加777权限
chmod 777 -R /mydata/es
配置账号密码
- 命令行进入
bin/elasticsearch-setup-passwords interactive
按回车输入y,回车一直输入密码elastic即可
-
其他方式:docker容器化部署
#创建目录 mkdir -p /mydata/es/config mkdir -p /mydata/es/data echo "http.host: 0.0.0.0" >> /mydata/es/config/elasticsearch.yml #宿主机权限不够 chmod 777 -R /mydata/es #启动运行 docker run -d --name xdclass_es7 -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xmx128m" \ -v /mydata/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /mydata/es/data:/usr/share/elasticsearch/data \ -v /mydata/es/plugins:/usr/share/elasticsearch/plugins elasticsearch:7.6.2 参数说明 -e "discovery.type=single-node" 设置为单节点 -e ES_JAVA_OPTS="-Xms128m -Xmx128m" 设置ES的初始内存和最大内存,否则过大启动不了ES
-
问题 访问不了
- 宿主机权限不够 chmod 777 -R /mydata/es
- 网络安全组没开端口或者防火墙没开端口
- http是9200,tcp是9300端口
-
访问验证
http://120.24.7.58:9200/_cat/nodes?v=true&pretty
第4集 Rancher2.X部署Skywalking-OAP-Server+UI
简介:Rancher2.X部署Skywalking-OAP-Server+UI
- 部署Skywalking-OAP-Server
镜像:apache/skywalking-oap-server:8.5.0-es7
端口:12800:12800 11800:11800
环境变量:
TZ=Asia/Shanghai
SW_ES_PASSWORD=elastic
SW_ES_USER=elastic
SW_STORAGE=elasticsearch7
SW_STORAGE_ES_CLUSTER_NODES=120.76.231.139:9200
- 部署Skywalking-UI
镜像:apache/skywalking-ui:8.5.0
端口:8080:8000 (左边是容器端口,右边是宿主机端口)
环境变量(oap是上面定义的容器服务名称)
SW_OAP_ADDRESS=oap:12800
TZ=Asia/Shanghai
- 访问 http://IP:+8000/
- 查看ElasticSearch全部索引:http://120.24.7.58:9200/_cat/indices?v
第六十七章 短链平台整合SkyWalking链路追踪实战
第1集 AlibabaCloud微服务整合SkyWalkingAgent实战
简介:AlibabaCloud微服务整合SkyWalkingAgent实战
- skywalking-agent的安装和使用
- 下载skywalking
- 地址:https://skywalking.apache.org/downloads/
- 下载skywalking
- skywalking-agen目录文件的介绍
- logs:skywalking agent的相关运行日志
- bootstrap-plugins:插件包
- optional-plugins:插件包
- optional-reporter-plugins:插件包
- activations:插件包
- skywalking-agent.jar:agent代理的jar包(主要是这个!)
项目中添加agent
- 复制skywalking-apm的agent文件到项目当中
- 注意坑来啦
- .gitignore 默认不提交*.jar 相关文件,注意.gitignore是隐藏文件,配置电脑显示隐藏文件
- 删除掉 *.jar ,才可以成功把jar提交上去
第2集 微服务打包SkyWalkingAgent镜像部署发布实战
简介:微服务打包SkyWalkingAgent镜像部署发布实战
- 微服务Dockerfile配置
FROM adoptopenjdk/openjdk11:jre11u-nightly
COPY target/dcloud-account.jar dcloud-account.jar
COPY agent /usr/local/agent
ENV SW_AGENT_NAME "dcloud-account"
ENTRYPOINT ["java","-javaagent:/usr/local/agent/skywalking-agent.jar","-jar","/dcloud-account.jar"]
-
提交代码->jenkins构建->Rancher发布升级
-
Rancher部署微服务新增环境变量
- SW_AGENT_COLLECTOR_BACKEND_SERVICES = 112.74.107.230:11800
- 注意:同个Rancher命名空间下,ip可以使用【容器服务名称】进行替代
-
多个微服务都改下配置Dockerfile,并提交代码->jenkins构建->Rancher发布升级
-
埋了一个坑,大家尝试自己解决,解决不了的话看下集
第3集 微服务访问-SkyWalkingUI数据查看和避坑
简介:微服务访问-SkyWalkingUI数据查看和避坑
-
链路测试
- 访问Account微服务,有服务出现,但是没数据
- 注意:网络安全组开发相关链路端口
- Rancher环境变量
SW_AGENT_COLLECTOR_BACKEND_SERVICES=112.74.107.230:11800
-
分析链路
- 网关->业务微服务->skywalking oap-> elasticsearch
-
避坑解决问题
- ElasticSearch内存不够
which is larger than the limit of...
-
Rancher升级ES,调整堆内存 为1g,有条件可以更多,8g、16g都行
-
访问微服务接口-》查看SkywalingUI数据
第4集 DevOps链路优化-镜像构建推送加速-阿里云VPC专有网络
简介:DevOps链路优化-镜像构建发布加速-阿里云VPC专有网络
- DevOps链路
-
阿里云网络
-
云服务器ECS的网络类型分为经典网络和专有网络VPC两种
-
专有网络
- (Virtual Private Cloud,简称VPC)一个隔离的网络环境,专有网络之间逻辑上彻底隔离,可以自定义专有网络的拓扑和IP地址,安全性相对是比较高的,推送阿里云镜像可以加速
-
第六十八章 短链平台整合Nacos配置中心和域名配置
第1集 账号服务整合Nacos配置中心开发和配置
简介:账号整合Nacos配置中心开发和配置
- common项目引入配中心(已经加入)
<!--配置中心, 留坑,后续用的时候再讲,解决方式,看springboot官方文档版本更新说明-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 常规按照上面的配置即可成功使用配置中心,但是新版的话不行,需要加入下面配置
<!--坑:spring-cloud-dependencies 2020.0.0 默认不在加载bootstrap配置文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
-
配置文件优先级讲解
- 不能使用原先的application.properties, 需要使用 bootstrap.properties作为配置文件
- 配置读取优先级 bootstrap.properties > application.properties
-
配置实操
- 服务迁移配置 增加bootstrap.properties
spring.application.name=dcloud-account-service spring.cloud.nacos.config.server-addr=120.25.217.15:8848 spring.cloud.nacos.config.file-extension=properties spring.cloud.nacos.config.enabled=true spring.cloud.nacos.config.username=nacos spring.cloud.nacos.config.password=nacos spring.cloud.nacos.config.namespace=public spring.cloud.nacos.config.config-long-poll-timeout=600000 spring.profiles.active=dev
-
dataId组成,在 Nacos Spring Cloud 中,dataId 的完整 格式如下
${prefix}-${spring.profiles.active}.${file- extension} prefix 默认为 spring.application.name 的值 spring.profiles.active 即为当前环境对应的 profile 当 spring.profiles.active 为空时,对应的连接符 - 也 将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension} file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配 置。目前只支持 properties 和 yaml 类型。
-
Nacos日志打印Bug,配置文件新增
logging.level.com.alibaba.nacos.client.config.impl=WARN logging.level.root=INFO
-
注意
部分同学如果出现 config dta not exist 建议重启nacos 除开上述问题,如果还是拉取不到配置(保持和课程版本,文件名一样先) 重新构建下项目 mvn clean package -U 然后重启IDEA
- 配置文件
server.port=8001
spring.application.name=dcloud-account-service
#----------服务注册和发现--------------
spring.cloud.nacos.discovery.server-addr=120.24.7.58:8848
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
#用于rpc调用token验证
rpc.token=xdclass.net168
#-------redis连接配置-------
spring.redis.client-type=jedis
spring.redis.host=120.24.7.58
spring.redis.password=xdclass.net
spring.redis.port=6379
spring.redis.jedis.pool.max-active=100
spring.redis.jedis.pool.max-idle=100
spring.redis.jedis.pool.min-idle=100
spring.redis.jedis.pool.max-wait=60000
#-------分库分表数据源配置-------
spring.shardingsphere.datasource.names=ds0
spring.shardingsphere.datasource.ds0.connectionTimeoutMilliseconds=30000
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.idleTimeoutMilliseconds=60000
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://120.79.150.146:3306/dcloud_account?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
spring.shardingsphere.datasource.ds0.maintenanceIntervalMilliseconds=30000
spring.shardingsphere.datasource.ds0.maxLifetimeMilliseconds=1800000
spring.shardingsphere.datasource.ds0.maxPoolSize=50
spring.shardingsphere.datasource.ds0.minPoolSize=50
spring.shardingsphere.datasource.ds0.password=xdclass.net168
spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.props.sql.show=true
# 指定traffic表的数据分布情况,配置数据节点,行表达式标识符使用 ${...} 或 $->{...},但前者与 Spring 本身的文件占位符冲突,所以在 Spring 环境中建议使用 $->{...}
spring.shardingsphere.sharding.tables.traffic.actual-data-nodes=ds0.traffic_$->{0..1}
#水平分表策略+行表达式分片
spring.shardingsphere.sharding.tables.traffic.table-strategy.inline.algorithm-expression=traffic_$->{ account_no % 2 }
spring.shardingsphere.sharding.tables.traffic.table-strategy.inline.sharding-column=account_no
#id生成策略
spring.shardingsphere.sharding.tables.traffic.key-generator.column=id
spring.shardingsphere.sharding.tables.traffic.key-generator.props.worker.id=${workId}
spring.shardingsphere.sharding.tables.traffic.key-generator.type=SNOWFLAKE
#----------sms短信配置--------------
sms.app-code=6999d4df3e7d48028470bbe517169a8d
sms.template-id=M72CB42894
#----------阿里云OSS配置--------------
aliyun.oss.endpoint=oss-cn-guangzhou.aliyuncs.com
aliyun.oss.access-key-id=LTAI5tHVGvYw7twoVFyruB1H
aliyun.oss.access-key-secret=r4d0EudzSvPfVMb9Zp0TfmsE32RXmN
aliyun.oss.bucketname=dcloud-link
##----------rabbit配置--------------
spring.rabbitmq.host=112.74.107.230
spring.rabbitmq.port=5672
#需要手工创建虚拟主机
spring.rabbitmq.virtual-host=dev
spring.rabbitmq.username=admin
spring.rabbitmq.password=password
#消息确认方式,manual(手动ack) 和auto(自动ack); 消息消费重试到达指定次数进到异常交换机和异常队列,需要改为自动ack确认消息
spring.rabbitmq.listener.simple.acknowledge-mode=auto
#开启重试,消费者代码不能添加try catch捕获不往外抛异常
spring.rabbitmq.listener.simple.retry.enabled=true
#最大重试次数
spring.rabbitmq.listener.simple.retry.max-attempts=4
# 重试消息的时间间隔,5秒
spring.rabbitmq.listener.simple.retry.initial-interval=5000
#----------xxl-job配置--------------
logging.config=classpath:logback.xml
#调度中心部署地址,多个配置逗号分隔 "http://address01,http://address02"
xxl.job.admin.addresses=http://112.74.107.230:8080/xxl-job-admin
#执行器token,非空时启用 xxl-job, access token
xxl.job.accessToken=class.net
# 执行器app名称,和控制台那边配置一样的名称,不然注册不上去
xxl.job.executor.appname=traffic-app-executor
# [选填]执行器注册:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。
#从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
#[选填]执行器IP :默认为空表示自动获取IP(即springboot容器的ip和端口,可以自动获取,也可以指定),多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务",
xxl.job.executor.ip=
# [选填]执行器端口号:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
#执行器日志文件存储路径,需要对该路径拥有读写权限;为空则使用默认路径
xxl.job.executor.logpath=./data/logs/xxl-job/executor
#执行器日志保存天数
xxl.job.executor.logretentiondays=30
logging.level.com.alibaba.nacos.client.config.impl=WARN
logging.level.root=INFO
第2集 短链平台整合Nacos配置中心开发和配置
简介:短链平台整合Nacos配置中心开发和配置
-
多个服务迁移配置中心实战
-
网关注意事项
- pom文件
<!--添加nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--配置中心,需要需要使用配置中心,则开启-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--坑:spring-cloud-dependencies 2020.0.0 默认不在加载bootstrap配置文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
-
bootstrap.yml
spring: application: name: dcloud-gateway cloud: nacos: config: config-long-poll-timeout: 600000 enabled: true file-extension: yaml namespace: public password: nacos server-addr: 120.24.7.58:8848 username: nacos profiles: active: dev
dcloud-gateway-dev.yaml
server:
port: 8888
#应用名称
spring:
application:
name: dcloud-gateway
#服务注册发现
cloud:
nacos:
discovery:
server-addr: 120.24.7.58:8848
username: nacos
password: nacos
gateway:
routes: #数组形式
- id: dcloud-link-api-service #数据服务 路由唯一标识
uri: lb://dcloud-link-service #从nocas进行转发
order: 1 #优先级,数字越小优先级越高
predicates: #断言 配置哪个路径才转发,前端访问路径统一加上XXX-server,网关判断转发对应的服务,如果是回调业务记得修改
- Path=/* #匹配一个路径,用于短链解析
- id: dcloud-link-service #数据服务 路由唯一标识
uri: lb://dcloud-link-service #从nocas进行转发
order: 2 #优先级,数字越小优先级越高
predicates: #断言 配置哪个路径才转发,前端访问路径统一加上XXX-server,网关判断转发对应的服务,如果是回调业务记得修改
- Path=/link-server/**
filters: #过滤器,请求在传递过程中通过过滤器修改
- StripPrefix=1 #去掉第一层前缀,转发给后续的路径
- id: dcloud-data-service #数据服务 路由唯一标识
uri: lb://dcloud-data-service #从nocas进行转发
order: 3 #优先级,数字越小优先级越高
predicates: #断言 配置哪个路径才转发,前端访问路径统一加上XXX-server,网关判断转发对应的服务,如果是回调业务记得修改
- Path=/data-server/**
filters: #过滤器,请求在传递过程中通过过滤器修改
- StripPrefix=1 #去掉第一层前缀,转发给后续的路径
- id: dcloud-account-service #用户服务 路由唯一标识
uri: lb://dcloud-account-service #从nocas进行转发
order: 4 #优先级,数字越小优先级越高
predicates: #断言 配置哪个路径才转发,前端访问路径统一加上XXX-server,网关判断转发对应的服务,如果是回调业务记得修改
- Path=/account-server/**
filters: #过滤器,请求在传递过程中通过过滤器修改
- StripPrefix=1 #去掉第一层前缀,转发给后续的路径
- id: dcloud-shop-service #用户服务 路由唯一标识
uri: lb://dcloud-shop-service #从nocas进行转发
order: 5 #优先级,数字越小优先级越高
predicates: #断言 配置哪个路径才转发,前端访问路径统一加上XXX-server,网关判断转发对应的服务,如果是回调业务记得修改
- Path=/shop-server/**
filters: #过滤器,请求在传递过程中通过过滤器修改
- StripPrefix=1 #去掉第一层前缀,转发给后续的路径
#开启网关拉取nacos的服务
discovery:
locator:
enabled: true
#设置日志级别,ERROR/WARN/INFO/DEBUG,默认是INFO以上才显示
logging:
level:
root: INFO
#nacos日志问题
com.alibaba.nacos.client.config.impl: WARN
第3集 短链平台域名解析配置实战
简介:短链平台域名解析配置实战
-
一个http请求基本流程
-
客户端通过发起域名资源请求 -> DNS解析获得IP -> 寻找服务器获得资源
-
域名和ip的关系,DNS作用
- DNS:Domain Name Server 域名服务器 域名虽然便于人们记忆,但网络中的计算机之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS 就是进行域名解析的服务器
-
什么是cname和a记录
- a记录
- 用户可以在此设置域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器(也叫ip指向域名配置)
- cname
- 别名指向,可以为一个主机设置别名。比如设置open1024.com,用来指向一个主机 xdclass.net 那么以后就可以用open1024.com来代替访问 xdclass.net 了
- http://www.baidu.net --> baidu.net
- a记录
-
购买域名,备案
- 阿里云 备案地址:https://beian.aliyun.com/
- 配置域名解析到服务器
- 备注:后端项目一般部署Linux服务器,前端静态资源可以部署Linux也可以部署在CDN上
-
阿里云服务器一
- 公网:112.74.107.230
- 私网:172.31.101.8
-
阿里云服务器二
- 公网:120.24.7.58
- 私网:172.31.101.9
-
第六十九章 Flink实时计算服务部署阿里云服务器实战
第1集 Flink实时计算服务本地修改和打包实战
简介:Flink实时计算服务本地修改和打包实战
-
修改代码
-
Task Solt 是指taskmanager的并发执行能力,parallelism是指taskmanager实际使用的并发能力
taskmanager.numberOfTaskSlots:4 假如每一个taskmanager中的分配4个TaskSlot,那有3个taskmanager一共有12个TaskSlot
-
并行度和solt的疑惑
-
Task Slots 是具备的并发能力,大于 Parallelism并行度(实际用的)
-
数据流里面算子的最大并行度就是Parallelism, 2-2-2-3-1 这样的并行度,最大就是3(同个任务job里面)
-
parallelism并行度调整,WebUI的里面的参数优先级 小于 代码API指定的并行度,常规代码里面不指定
- 代码中取消 env.setParallelism(1);
- 短链服务-埋点数据 随机ip和referer取消,重新打包推送和更新
-
-
修改配置文件
- kafka
- clickhouse
-
-
打包
- 打包插件
- maven-jar-plugin,默认的打包插件,用来打普通的jar包,需建立lib目录里来存放需要的依赖包
- maven-shade-plugin (推荐) 将依赖的jar包打包到当前jar包,成为fat JAR包,也可以防止类冲突 隔离
- maven-assembly-plugin,大数据项目用的比较多,支持自定义的打包结构,比如sql/shell等
- 测试插件
- maven-surefire-plugin, 用于mvn 生命周期的测试阶段的插件,通过参数设置在junit下控制测试
- 打包插件
-
构建
- mvn install
- target目录下的jar包
第2集 Rancher部署Flink Job-TaskManager实战
简介:Rancher部署Flink Job-TaskManager实战
-
部署有多种方式
-
我们这边采用相对方便的Rancher部署,通过yml导入
- 第一个 flink-jobmanager-deployment.yaml
- 第二个 flink-jobmanager-service.yaml (不显示服务)
- 第三个 taskmanager-deployment.yaml
- 2个节点
- 每个TaskManager有6个TaskSolt
-
注意
-
3个yml文件,在本章本集的资料里面
-
固定主机运行,不然如果资源不够则容易造成整个Rancher K8s集群出问题
-
Flink节点耗内存和CPU、带宽(加载慢)等资源,阿里云ECS部署单独的机器,否则容易宕机
- 原因一:节点所在机器宕机,导致失联
- 原因二:宕机的节点对应内存设置太小,GC严重导致心跳超时,导致失联
TimeoutException: Heartbeat of TaskManager with id 10.42.1.74:37727-f1bafb timed out.
-
按量付费方式选择【 4核16G内存】并安装好Docker,添加到Rancher的主机上
-
网络安全组开放端口 web ui端口 8081
-
第3集 通过WebUI提交运行Flink实时计算任务
简介:通过WebUI提交运行Flink实时计算任务
- 访问WebUI
- 上传jar包
- 选择main入口类APP
- 提交任务查看情况
第4集 Nginx-网关Gateway的区别和微服务获取用户ip
简介:Nginx-网关gateway的区别和微服务获取用户ip
-
问题
- 容器部署微服务,内部如何获取用户访问来源IP呢?
- 答案:通过Nginx反向代理透传过去
-
面试官:为啥有了gateway,还需要nginx呢?
前端请求到gateway,gateway在转发到相应的业务微服务,为什么不可以直接从nginx转发到相应的业务中心,还要加多一层
-
答案
-
nginx和Spring Cloud Gateway在功能上是有一些重叠的地方,但是各司其职互相配合会更强大
-
Spring Cloud Gateway层
- 可以认为是业务网关,针对SpringCloud体系专门推出,但是如果有其他服务不是用Cloud开发的怎么办?
- 有部分复杂业务逻辑nginx解决不了,可以用gateway用java语言开发
- 容器部署微服务的ip地址一直在换,需要结合注册中心来使用,所以gateway更灵活
-
Nginx
-
关注的是协议和路由的转发,聚合入口方便配置管理
-
在性能、容错机制上比Gateway强,多语言多环境下兼容性更好
-
日志统计、协议路由转发、业务数据缓存前置、资源压缩等也是比较强大
-
配置HTTPS证书更灵活、Openresty+Lua开发各个强大的功能模块
-
-
第5集 阿里云ECS服务器-源码安装部署Nginx和配置代理
简介:阿里云ECS服务器-源码安装部署Nginx实战
-
有条件的可以新买一台ECS进行安装Nginx(按量付费,不用Rancher部署)
- 这边就用Jenkins的那台机器安装
- 注意
- Rancher下的机器是不能安装的哈,gateway网关占用了80端口
- 底层是 kube-prox进行端口转发,所以需要新的机器
- 后续也会用到Nginx作为流量入口捕获的机器
-
下载压缩包 并上传
- http://nginx.org/en/download.html
-
安装依赖
- yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
-
创建一个文件夹,上传本地提供的nginx包
-
本章本集资料里面
-
tar -zxvf nginx-1.18.0.tar.gz
//执行命令 ./configure make make install
-
-
默认安装路径
- /usr/local/nginx
-
访问配置
cd /usr/local/nginx/sbin #启动 ./nginx #重新加载配置文件 ./nginx -s reload
-
防火墙开放端口,阿里云网络安全组配置80端口
-
配置网关代理
- nginx和gateway不在同个阿里云账号,改为公网ip转发
- 实际企业中肯定是同个内网转发的哈,改ip即可
upstream gateway { server 112.74.107.230:80; } server { listen 80; server_name localhost; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://gateway/; } }
-
重新配置域名解析 到 nginx所在ip
- g1.fit
- api.link.open1024.com
第6集 Flink实时计算-请求链路验证实战
简介:Flink实时计算数据请求链路验证实战
-
访问短链
- http://g1.fit/026m8O3a
-
ClickHouse数据验证
-
建表语句
CREATE TABLE default.visit_stats ( `code` String, `referer` String, `is_new` UInt64, `account_no` UInt64, `province` String, `city` String, `ip` String, `browser_name` String, `os` String, `device_type` String, `pv` UInt64, `uv` UInt64, `start_time` DateTime, `end_time` DateTime, `ts` UInt64 ) ENGINE = ReplacingMergeTree(ts) PARTITION BY toYYYYMMDD(start_time) ORDER BY (start_time, end_time, code, province, city, referer, is_new, ip, browser_name, os, device_type) SETTINGS index_granularity = 8192 }
-
重新配置域名解析 到 nginx所在ip
- g1.fit
- api.link.open1024.com
第6集 Flink实时计算-请求链路验证实战
简介:Flink实时计算数据请求链路验证实战
-
访问短链
- http://g1.fit/026m8O3a
-
ClickHouse数据验证
-
建表语句
CREATE TABLE default.visit_stats ( `code` String, `referer` String, `is_new` UInt64, `account_no` UInt64, `province` String, `city` String, `ip` String, `browser_name` String, `os` String, `device_type` String, `pv` UInt64, `uv` UInt64, `start_time` DateTime, `end_time` DateTime, `ts` UInt64 ) ENGINE = ReplacingMergeTree(ts) PARTITION BY toYYYYMMDD(start_time) ORDER BY (start_time, end_time, code, province, city, referer, is_new, ip, browser_name, os, device_type) SETTINGS index_granularity = 8192
有需要源码的去咸鱼!