当前位置: 首页 > news >正文

网站布局结构主要分为江苏城乡建设局网站

网站布局结构主要分为,江苏城乡建设局网站,wordpress标签文章,欧美网站设计风格简介#xff1a; 项目最初使用 Arthas 主要有两个目的#xff1a; 1. 通过 arthas 解决实现测试环境、性能测试环境以及生产环境性能问题分析工具的问题。 2. 通过使用 jad、mc、redefine 功能组合实现生产环境部分节点代码热更新的能力。 作者 | sparrow 来源 | 阿里巴巴云原…简介 项目最初使用 Arthas 主要有两个目的 1. 通过 arthas 解决实现测试环境、性能测试环境以及生产环境性能问题分析工具的问题。 2. 通过使用 jad、mc、redefine 功能组合实现生产环境部分节点代码热更新的能力。 作者 | sparrow 来源 | 阿里巴巴云原生公众号 本文来自 Arthas 2021 年 3 月征文投稿4 月有奖征文参与方式可见文末。 项目最初使用 Arthas 主要有两个目的 通过 arthas 解决实现测试环境、性能测试环境以及生产环境性能问题分析工具的问题。通过使用 jad、mc、redefine 功能组合实现生产环境部分节点代码热更新的能力。 技术选型相关 因为公司还未能建立起较为统一的生产微服务配置以及状态管理的能力各自系统的研发运维较为独立。现在项目使用了 Spring Cloud 以及 Eureka 的框架结构和 SBA 的基础支撑能力较为匹配同时SBA 已经可以提供服务感知日志级别配置管理以及基于 actuator 的 JVM、Spring 容器的众多管理插件可以满足基础使用的需求。 在调研期间Arthas 整体版本为 3.4.5提供了基于 Webconsole 的 Tunner Server 模式通过前面链接文章已经实践与SBA已经可以实现集成。因为项目本身没有历史包袱在实际集成的过程中采用了 SBA 2.0 版本以提供更多的管理功能和图形界面能力。其他优点 web console 界面嵌入 SBA 整体密码登录和网页权限管理实现登陆 SBA 后才可以使用相关 arthas web console 的功能。基于SBA 客户端依赖的 jolokia-core 开放目标服务进程的 jmx 管理通过实现 jmx 接口复用 SBA 的相关操作界面减少前端界面开发能力的要求。 整体结构 几个关键点使用 JVM 内置 Arthas Spring Boot 插件参考工商银行的模式建立完善的客户端下载以及修改脚本实现远程控制。内置方案工作开发量小只需要集成相关的开源组件即可实现相关的远程使用的模式并兼顾安全。工银的方案大而全适合整体架构规划后配置专有研发团队之城。内置方案同时包含通过 JMX 的启停操作基于 3.4.5 的 Spring Boot 插件无法获得相关句柄暂时无法实现默认不启动。通过远程 JMX 开通后JVM 新增相关线程 8 个新增虚拟机内存 30MB 左右和本文参考的 SBA1.0 方案相同需要考虑在线开启前 JVM 内存是否可以支持。 实现效果 SBA 2.0 最大的方便就是提供了配置化链接外部网页的能力同时如果网页实现在当前 JVM 进程可以实现 Spring-Security 的本地权限管理在生产环境下只有在登录 SBA 后才能使用相关集成的 arthas 功能。 登录界面外嵌连接位置JMX 的使用跳转 arthas web console改造方案 参考原文 -SpringBoot Admin 集成 Arthas 实践中实现的几个步骤。 1. 整体工程结构 整体工程修改自 SBA 开源项目的 example 工程具体使用 custom-ui 的工程链接为[_[spring-boot-admin-sample-custom-ui]_](https://github.com/codecentric/spring-boot-admin/tree/master/spring-boot-admin-samples/spring-boot-admin-sample-custom-ui)__红色框的部分是 arthas web console 的全部静态文件通过 Maven Resource 的指定配置打入指定目录实现 SBA 启动时的自定义加载。maven resource 配置--下 resourcedirectorystatic/directorytargetPath${project.build.directory}/classes/META-INF/spring-boot-admin-server-ui/extensions/arthas/targetPathfilteringfalse/filtering/resource 最终构建的 jar 中 META-INFO 中包含相关的文件即可在 SBA 自带的 tomcat 启动后加载到相关的静态资源最后的 url 和自定义实现的 arthas console 配置的外部 URL 对应即可。 2. 外部链接配置 SBA 2.0 开始已经使用 vue 全家桶了扩展集成均比较方便。其中官方文档给出了外嵌连接的配置方式[_[Linking / Embedding External Pages]_](https://codecentric.github.io/spring-boot-admin/2.3.1/#customizing-external-views)_。_ 参考 sba example 工程的 application.yml 配置即可 # tag::customization-external-views[]spring:boot:admin:ui:external-views:- label: Arthas Consoleurl: http://21.129.49.153:8080/order: 1900# end::customization-external-views[] 3. 对应 Spring MVC controller 实现 参考引用原实现的 SBA 集成部分该部分主要修改实现如下功能 实现 tunnel server 已经加载实例列表的刷新并展示到前段 AgentID 框供选择点击链接。实现自定义 IP 地址的刷新解决生产环境双生产 IP 和运维段 IP 不一致的问题。 4. Arthas Spring Boot 插件修改和配置 参考引用原实现的 SBA 集成中插件修改以及客户端配置 application.yml。 对原版 Spring boot 插件修改主要在于原有插件是通过 Spring的ConditionalOnMissingBean 实现自动加载。 修改主要是通过修改这部分实现通过配置文件默认不启动然后使用时通过远程启动相关 agent 线程。 5. 基于 Spring Actuator 的 JMX 实现 SBA client 在 maven 引入中会默认引入 jolokia-core.jar如果没有因为 SBA client 依赖可以自行引入该包可以实现通过 actuator 开放基于 http 的 jmx 操作能力和 SBA 控制台的相关功能无缝配合。 application.yml 中开放 management 相关配置根据自身环境情况也可以开在客户端侧开启 Spring security 认证SBA 也可以很好的支持通过服务发现实现密码保护 actuator 端点的访问。 #放开managementmanagement:endpoints:web:exposure:# 这里用* 代表暴露所有端点只是为了观察效果实际中按照需进行端点暴露include: *exclude: envendpoint:health:# 详细信息显示给所有用户。show-details: ALWAYShealth:status:http-mapping:# 自定义健康检查返回状态码对应的 http 状态码FATAL: 503 JMX 实现参考原文中 EnvironmentChangeListener 的实现思路基于 Spring 的 JMX 注解实现即可。 ComponentManagedResource(objectName com.ArthasAgentManageMbean:nameArthasMbean, description Arthas远程管理Mbean)public class ArthasMbeanImpl {Autowiredprivate MapString, String arthasConfigMap;Autowiredprivate ArthasProperties arthasProperties;Autowiredprivate ApplicationContext applicationContext;/*** 初始化** return*/private ArthasAgent arthasAgentInit() {arthasConfigMap StringUtils.removeDashKey(arthasConfigMap);// 给配置全加上前缀MapString, String mapWithPrefix new HashMapString, String(arthasConfigMap.size());for (Map.EntryString, String entry : arthasConfigMap.entrySet()) {mapWithPrefix.put(arthas. entry.getKey(), entry.getValue());}final ArthasAgent arthasAgent new ArthasAgent(mapWithPrefix, arthasProperties.getHome(),arthasProperties.isSlientInit(), null);arthasAgent.init();return arthasAgent;}ManagedOperation(description 获取配置Arthas Tunnel Server地址)public String getArthasTunnelServerUrl() {return arthasProperties.getTunnelServer();}ManagedOperation(description 设置Arthas Tunnel Server地址重新attach后生效)ManagedOperationParameter(name tunnelServer, description example:ws://127.0.0.1:7777/ws)public Boolean setArthasTunnelServerUrl(String tunnelServer) {if (tunnelServer null || tunnelServer.trim().equals() || tunnelServer.indexOf(ws://) 0) {return false;}arthasProperties.setTunnelServer(tunnelServer);return true;}ManagedOperation(description 获取AgentID)public String getAgentId() {return arthasProperties.getAgentId();}ManagedOperation(description 获取应用名称)public String getAppName() {return arthasProperties.getAppName();}ManagedOperation(description 获取ArthasConfigMap)public HashMapString, String getArthasConfigMap() {return (HashMap) arthasConfigMap;}ManagedOperation(description 返回是否已经加载Arthas agent)public Boolean isArthasAttched() {DefaultListableBeanFactory defaultListableBeanFactory (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();String bean arthasAgent;if (defaultListableBeanFactory.containsBean(bean)) {return true;}return false;}ManagedOperation(description 启动Arthas agent)public Boolean startArthasAgent() {DefaultListableBeanFactory defaultListableBeanFactory (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();String bean arthasAgent;if (defaultListableBeanFactory.containsBean(bean)) {((ArthasAgent) defaultListableBeanFactory.getBean(bean)).init();return true;}defaultListableBeanFactory.registerSingleton(bean, arthasAgentInit());return true;}ManagedOperation(description 关闭Arthas agent暂未实现)public Boolean stopArthasAgent() {// TODO 无法获取自定义tmp文件夹加载的classLoader因此无法获取到com.taobao.arthas.core.server.ArthasBootstrap类并调用destroy方法DefaultListableBeanFactory defaultListableBeanFactory (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();String bean arthasAgent;if (defaultListableBeanFactory.containsBean(bean)) {defaultListableBeanFactory.destroySingleton(bean);return true;} else {return false;}}} 实际使用 管理工程投产后多次在生产环境用于问题排查和代码热修复。性能问题主要用于性能流控组件以及灰度发布相关配置参数的在线验证和 debug。 代码热加载相关初期通过 jadmc 的方式进行操作后续发现 jad 在部分代码上因环境配置以及 jvm 问题产生反编译代码不一致的情况后续通过 maven 打包部署应用程序 source 压缩包的方式解决直接使用和应用 jar 同版本构建的 source 进行修改更加可靠。整体方案在管理较为严格的生产环境提供了有效的性能分析以及热修复的能力。 遗留问题 现有官方提供的 com.taobao.arthas.agent.attach.ArthasAgent 中启动 arthas agent 的客户端使用的 arthasClassLoader 和 bootstrapClass 均为方法内的临时变量外部无法获取相关句柄实现通过 bootstrapClass 关闭 arthas agent 的功能临时解决方案为通过 JMX 启动后在 web console 连接使用后使用 stop 命令实现目标进程中 arthas agent 的关闭。 现有字节码加载工具可以很好的实现内部类私有类的在线热部署替换同时经测试可以兼容 SkyWalk8.x 版本的 javaagent 插件但是在测试环境因为配置有 jacoco 覆盖度采集插件与 Arthas 字节码产生了不兼容的情况在部分环境使用时需要先关闭对应的 agent 后才能正常使用 arthas 的相关功能。 欢迎登陆 start.aliyun.com 知行动手实验室体验 Arthas 57 个动手实验 Arthas 实验预览 原文链接 本文伟阿里云原创内容未经允许不得转载。
http://wiki.neutronadmin.com/news/234737/

相关文章:

  • 网站推广存在的问题网站攻击一般有那些
  • wordpress网站载入慢竹制品网站怎么做
  • 电子商务网站推广的主要方式国家企业信用平台官网
  • 网站建设意见反馈表公司网站链接怎么弄
  • 做个网站应该怎么做那个网站可以查询美做空基金
  • 天津企业网站建设个人网站做什么好
  • 网站的底部导航怎么做免费网站模板素材
  • 托管竞价账户哪家好昆明市网络优化案例
  • 网站建设毕业答辩ppt模板下载wordpress 获取有图片的文章
  • 做网站怎样盈利服务器网站维护
  • 因网站建设关闭的公告精品课程网站开发的创新点
  • 移动互联网 商业模式北京百度关键词优化
  • 网站如何启用gzip压缩wordpress页面原文件
  • 如何建设高等数学课程网站企业管理咨询公司简介
  • 郴州市宜章网站建设织梦网站 联系方式修改
  • 手机网站制作哪家好对网站开发流程的了解
  • 上不了国外网站怎么做外贸数字重庆公司
  • 个人博客网站取名济南教育论坛网站建设
  • 山东网站建设哪家公司好最新手机发布会
  • 网站建设前端切图廊坊高端品牌网站建设
  • 沈阳做网站哪家公司好手机电脑网站
  • 免费网站代理访问wordpress内容打不开
  • 社区做图网站有哪些内容幼儿保育专业建设规划
  • 汽车网址永州seo快速排名
  • 网站安全建设方案需求分析福州网站建设
  • 手机网站设计公司可去亿企邦wordpress卡蜜主题
  • 零成本游戏网站开发o2o网站建设基本流程
  • 建设电影网站视频素材怎么修改wordpress模板文件路径
  • 项目经理接到网站开发怎么开展1元2元店5元店进货渠道大全
  • 深圳住房网站app石化建设分会网站