云服务器内容精选

  • 合理配置日志文件 查看错误日志是定位问题的重要手段,需要合理规划日志输出,并且尽可能降低对系统性能的影响。规划日志文件有如下建议: 使用log4j2或者logback输出日志。 将日志输出到文件,不要依赖于容器的stdout。 打开metrics日志,将metrics日志输出到独立的文件,比如“metrics.log”, 而将业务日志输出到另外的文件,比如“servicecomb.log”。metrics参数配置如下: servicecomb: metrics: window_time: 60000 invocation: latencyDistribution: 0,1,10,100,1000 Consumer.invocation.slow: enabled: true msTime: 3000 Provider.invocation.slow: enabled: true msTime: 3000 publisher.defaultLog: enabled: true endpoints.client.detail.enabled: true 打开access log, 将access log输出到独立的日志文件。 格式化打印业务日志,日志里面包含trace id,可以独立开发一个Handler,配置在Provider Handler的最前面,Handler在接收到请求后打印一条日志,处理完成了打印一条日志,对于问题界定,使用 AOM 快速检索相关日志等非常有帮助。 父主题: 托管Java Chassis应用
  • 合理配置线程池参数 线程池是微服务的主要业务处理单元,合理的规划线程池不仅可以最大限度提升系统性能,还能防止异常情况导致系统无法给正常用户提供服务。线程池优化和业务自身的性能有很大关系,不同的场景参数设置不同,需要具体分析。下面分两种场景介绍。开始之前需要对业务的性能做一些基本的摸底,对常见的接口进行测试,查看时延。 业务性能很好的情况。 即非并发场景,接口的平均时延小于10ms。 业务性能很好的时候,为了让业务系统具备更好的可预测性,防止JVM垃圾回收、网络波动、突发流量等对系统的稳定性造成冲击,需要能够快速丢弃请求,并配合重试等措施,以保障波动情况下系统性能可预测,同时不会出现偶然的业务失败,影响体验。 连接数和超时设置 # 服务端verticle实例数,保持默认值即可。建议配置为8~10。servicecomb.rest.server.verticle-count: 10# 最大连接数限制。默认值为 Integer.MAX_VALUE。可以结合实际情况估算最大值,使系统具备更好的韧性。servicecomb.rest.server.connection-limit: 20000# 连接闲置时间。默认值60秒,一般不需要修改servicecomb.rest.server.connection.idleTimeoutInSeconds: 60# 客户端verticle实例数,保持默认值即可。建议配置为8~10。servicecomb.rest.client.verticle-count: 0# 一个客户端与服务器建立的最大连接数为 verticle-count * maxPoolSize,不要超过线程数。# 这里是 10*50=500. 实例非常多的场景,要减小单个实例的连接数。servicecomb.rest.client.connection.maxPoolSize: 50# 连接闲置时间。默认值30 秒,一般不需要修改,要小于服务端的连接闲置时间。servicecomb.rest.client.connection.idleTimeoutInSeconds 业务线程池配置 # 线程池组数,建议 2~4servicecomb.executor.default.group: 2# 建议 50~200servicecomb.executor.default.thread-per-group: 100# 线程池排队队列大小,默认值为Integer.MAX_VALUE。高性能场景不要使用默认值,以快速丢弃请求servicecomb.executor.default.maxQueueSize-per-group: 10000# 队列最大等待时间,如果超过,理解丢弃请求的处理并返回。默认值为0。# 高性能场景配置小的排队超时时间,快速丢弃请求servicecomb.rest.server.requestWaitInPoolTimeout: 100# 设置比较短的超时时间,快速丢弃请求, 但是不建议这个值小于1秒,可能导致很多问题。servicecomb.request.timeout=5000 业务性能不那么好的情况。 即非并发场景,接口的平均时延大于100ms。时延高通常是由于业务代码存在IO、资源等等待,CPU利用率上不去导致的。如果是由于计算复杂导致的,调优会变得复杂。 当业务性能不太好的时候,下面几个参数值需要调大,否则业务会大量阻塞。业务性能不好,通过调大参数能够保证系统的吞吐量,应对突发流量来临时带来的业务失败。不过这个是以牺牲用户体验为代价的。 # 服务端连接闲置时间。servicecomb.rest.server.connection.idleTimeoutInSeconds: 120000# 客户端连接闲置时间。servicecomb.rest.client.connection.idleTimeoutInSeconds: 90000# 线程池组数。servicecomb.executor.default.group: 4# 线程池大小。servicecomb.executor.default.thread-per-group: 200# 线程池排队队列大小,性能不好的情况下需要排队servicecomb.executor.default.maxQueueSize-per-group: 100000# 配置较大的超时时间servicecomb.rest.server.requestWaitInPoolTimeout: 10000servicecomb.request.timeout=30000 父主题: 托管Java Chassis应用
  • 方案概述 本文描述如何将HSF、Dubbo框架改造为Spring Cloud框架并接入ServiceComb引擎的操作。 应用场景 很多微服务框架只是提供了如何解决微服务运维问题的功能模块和工具,但并没有帮用户解决那些问题,用户自行解决这些问题的成本通常非常高,出于现有框架的使用成本和问题,以及对未来业务的发展是否需要选择更加合适的技术考虑,可将微服务框架进行迁移。 方案架构 将HSF、Dubbo框架改造为Spring Cloud框架。 微服务框架HSF、Dubbo提供的主要功能是RPC框架,以及在RPC框架之上,提供相关的服务治理能力,包括注册发现、动态配置和限流熔断等。Spring Cloud提供REST框架,并在REST框架基础之上提供服务治理能力。因此实现微服务开发框架迁移主要是将RPC框架修改为REST框架,其操作主要包括两部分: 将服务端的接口定义由RPC修改为REST。 将客户端的调用方式由RPC修改为REST风格(包括RestTemplate,Feign等)。 服务端的接口定义相对比较集中,客户端的使用则比较难于排查。为了尽可能减少客户端代码的排查和修改,采用Feign来实现客户端代码的替换。 将Spring Cloud+Nacos、Spring Cloud+Eureka接入到ServiceComb引擎。 将Nacos、Eureka相关的依赖替换为ServiceComb引擎相关依赖。 增加ServiceComb引擎相关配置。 Nacos、Eureka一些使用习惯的调整,比如如何规划服务配置和逻辑隔离等。 下图以Eureka为例演示整个改造接入过程:
  • 实施步骤 先将HSF或Dubbo框架改造为Spring Cloud框架。其基本操作步骤为: 修改POM和项目结构。 服务端RPC接口修改为REST接口。 客户端定义Feign引用。 删除HSF或Dubbo配置并增加Spring Cloud配置。 修改启动类。 您可以使用migrator工具一键将HSF、Dubbo等框架改造为Spring Cloud。 将HSF框架改造为Spring Cloud框架详细操作指导请参考HSF迁移Spring Cloud。 将Dubbo框架改造为Spring Cloud框架详细操作指导请参考Dubbo迁移Spring Cloud。 将Spring Cloud+Nacos、Spring Cloud+Eureka接入到ServiceComb引擎。 修改pom文件将Nacos相关的依赖替换为ServiceComb引擎相关依赖。 修改bootstrap.yml文件增加ServiceComb引擎相关配置。 调整Nacos或Eureka的使用习惯。 您可以使用migrator工具一键将Spring Cloud+Nacos、Spring Cloud+Eureka接入到ServiceComb引擎。 将Spring Cloud+Eureka接入到ServiceComb引擎的详细操作指导请参考Eureka+Spring Cloud迁移 CS E。 将Spring Cloud+Nacos接入到ServiceComb引擎的详细操作指导请参考Nacos+Spring Cloud迁移CSE。
  • 升级到Java Chassis的最新版本 持续升级版本,可以更好的使用CSE的新功能和新特性,及时修复已知的质量和安全问题,降低维护成本。 持续升级版本也会带来一些兼容性问题。一个比较好的策略是将持续升级纳入版本计划,安排足够的时间进行,而不是以问题驱动。 持续升级还需要构建自动化测试能力,以减少版本升级的验证时间和控制版本升级的风险,及早发现问题。持续的构建自动化能力和升级版本,是被证明有效的构建高质量软件的最佳实践。 父主题: 托管Java Chassis应用
  • 前提条件 已创建云容器引擎(CCE),创建CCE请参考创建CCE集群。 CCE集群版本需要大于等于1.15。 已安装kubectl命令,安装kubectl命令请参考通过kubectl连接集群相关操作。 已创建未开启安全认证的ServiceComb引擎实例,详情请参考创建ServiceComb引擎。 本地编译构建打包机器环境已安装了Java JDK、Maven,并且能够访问Maven中央库。 Sermant Agent开源版本要求1.0.6及以上。
  • 设置服务路由策略 配置项:servicecomb.routeRule,配置内容: providerA: | - precedence: 2 match: headers: id: exact: '1' caseInsensitive: false route: - weight: 0 tags: group: base - weight: 100 tags: group: gray - precedence: 1 route: - weight: 100 tags: group: base - weight: 0 tags: group: grayproviderB: | - precedence: 2 match: headers: id: exact: '1' caseInsensitive: false route: - weight: 0 tags: group: base - weight: 100 tags: group: gray - precedence: 1 route: - weight: 100 tags: group: base - weight: 0 tags: group: gray 服务路由策略设置说明: 请求头的id参数值精确匹配为1时,consumer的所有请求流量都是从providerA-gray流向providerB-gray。 请求头的id参数值为其他任意值,consumer的所有请求流量都是从providerA流向providerB。
  • Sermant Agent监听配置范围 Sermant Agent使用CSE作为配置中心时,监听的范围有以下三个: app=default&environment=&service={服务名} app=default&environment= public=default app对应为“应用”值; environment对应为“环境”; service对应为“微服务名称”; public为公共配置。 一般设置为app=default&environment=作为通用路由设置。
  • 约束限制 Nacos对Eureka的兼容,主要是兼容Eureka服务端侧的API,将服务侧注册的客户端实例信息进行保存与刷新,因此如果您仅使用Eureka作为注册中心,那么Nacos的诸多特性如命名空间和配置管理是不能使用的。 使用Eureka作为客户端,仅能在Nacos的“服务管理”中进行查阅,Eureka服务均使用Nacos的默认属性进行展示,即: 默认命名空间:public。 默认分组名称:DEFAULT_GROUP。 在Nacos中在“服务管理”页面创建服务的“保护阈值”设置的值属于Nacos的特性,无法作用于Eureka服务。
  • 概述 CSE提供Sermant Agent,支持Spring Cloud应用无需任何修改接入ServiceComb引擎,当前已支持应用注册发现、配置、优雅上下线、标签路由等功能。 此功能目前处于公测阶段,当前仅在华东-上海一支持。 Sermant Agent是基于Sermant开源社区构建的、用于CSE微服务治理场景的Agent。 Sermant Agent基于Java Agent技术实现,应用通过Sermant Agent可实现无代理、非侵入方式接入CSE。 父主题: 通过Sermant Agent托管Spring Cloud应用
  • 配置管理 Spring Boot Nacos Config Zookeeper Config 1.5.0.RELEASE - 2.6.2 1.5.0.RELEASE+ 1.2.0.RELEASE+ Nacos Config为maven依赖的spring-cloud-starter-alibaba-nacos-config。 Zookeeper Config为maven依赖的spring-cloud-starter-zookeeper-config。 配置管理能力需配合注解@RefreshScope、@Value、@ConfigurationProperties使用。
  • 标签路由 标签路由版本支持: Spring Cloud Spring Boot Spring Cloud Openfeign RestTemplate Spring Cloud Loadbalancer Spring Cloud Netflix Ribbon Spring Cloud Gateway Spring Cloud Netflix Zuul Edgware.SR2+ 1.5.x 1.4.7.RELEASE 4.3.6.RELEASE - 1.4.7.RELEASE - 1.4.7.RELEASE Finchley.x 2.0.x 2.0.x 5.0.x - 2.0.x - 2.0.x Greenwich.x 2.1.x 2.1.x 5.1.x - 2.1.x - 2.1.x Hoxton.x 2.2.x、2.3.x 2.2.x 5.2.x 2.2.5.RELEASE+ 2.2.x 2.2.x 2.2.x 2020.0.x 2.4.x、2.5.x 3.0.x 5.3.x 3.0.x - 3.0.x - 2021.0.0 2.6.x 3.1.x 5.3.x 3.1.x - 3.1.x -
  • 操作步骤 在GRPC获取路径下载生产者端geeter_server和消费端greeter_client的代码。 在本地go环境构建出二进制软件包grpc-provider和 grpc-consumer,执行命令如下。 GOOS=linux go build -o grpc-provider main.go GOOS=linux go build -o grpc-consumer main.go 登录Linux弹性云服务器。 请参考Linux弹性云服务器登录方式概述选择相应方式登录弹性云服务器。 将构建好的软件包上传到ECS上合适的路径下,如根目录“/”。 执行如下命令对grpc-provider和grpc-consumer赋予可执行权限。 chmod +x grpc-provider chmod +x grpc-consumer 执行命令启动生产者。 ./grpc-provider 此时gRpc的生产者端已经被启动了,监听端口是50051。 参考创建服务创建来源类型为“固定IP”的服务。其中“服务地址”为ECS的IP地址,端口为grpc-provider的监听端口,即50051。 参考创建路由在应用网关中创建如下路由。 “路由名称”为“unit-consumer-route”。 “ 域名 ”为“*”的路由, 在路由规则中,添加如下路由规则: “服务地址”的匹配类型选择“前缀匹配”,服务地址输入“/”。 “请求方法”选择选择“POST”、“GET”、“DELETE”和“PUT”。 添加目标服务,“目标服务”为7中创建的服务;“分组”分别选择“ou1”或者“ou2”;“权重”为100。 执行命令使用consumer端进行访问。 ./grpc-consumer {网关IP}:50051 其中网关IP是网关的私网IP,访问成功则有以下结果。
  • 虚机部署的应用通过Sermant Agent接入到ServiceComb引擎 安装Sermant Agent。 登录Linux弹性云服务器。 请参考Linux弹性云服务器登录方式概述选择相应方式登录弹性云服务器。 下载并安装Sermant Agent。 参考如下命令通过shell脚本方式下载并安装Java Agent。 wget -O- https://cse-bucket-cn-east-3.obs.cn-east-3.myhuaweicloud.com/javaagent/install.sh | sh 安装成功后,脚本将输出安装目录。目录为当前用户主目录。 启动应用。 在应用的启动参数上添加如下参数,添加启动参数后,待应用启动完成。 -javaagent:${HOME}/java-agent/java-agent.jar=appName=default-Ddynamic_config_serverAddress={CSE_CONFIG_CENTER_ENDPOINTS}-Dregister.service.address={CSE_REGISTRY_ENDPOINTS} 表1 启动参数说明 参数项 说明 appName agent服务名称,默认default,无需修改。 dynamic_config_serverAddress ServiceComb引擎配置中心地址,多个地址使用逗号隔开。 register.service.address ServiceComb引擎服务注册发现地址。 若需配置APP名称(默认default)、版本(默认1.0.0),请分别使用环境变量-Dservice_meta_application=yourAppName、-Dservice_meta_version=yourVersion进行设置。 ServiceComb引擎服务注册发现地址与ServiceComb引擎配置中心地址需替换为实际地址,可参考如下方式获取: ServiceComb引擎服务注册发现地址:获取ServiceComb引擎服务注册发现地址。 ServiceComb引擎配置中心地址:获取ServiceComb引擎配置中心地址。 验证应用接入ServiceComb引擎。 参考查看微服务列表查看您的应用是否已接入ServiceComb引擎。
  • 前置条件 已创建云容器引擎(CCE),创建CCE请参考创建CCE集群。 CCE集群版本需要大于等于1.15。 应用的基础镜像中,需要安装JDK ( 版本为1.8及以上版本 )。 已安装kubectl命令,安装kubectl命令请参考通过kubectl连接集群中相关操作。 已创建ServiceComb引擎实例,详情请参考创建ServiceComb引擎。 CCE集群与ServiceComb引擎处于相同的VPC网络下。 给Sermant Injector预留200m左右的cpu资源和300Mi左右的memory资源。 Sermant Injector版本要求1.0.11及以上,Sermant Agent镜像版本要求1.0.9及以上。