镜像清理脚本
12345678910111213141516171819202122232425262728293031323334#!/usr/bin/env bash#删除过期镜像,保留最新${retain}个版本(需要确保版本号确实是越新的越大)retain=1cdate=$(date '+%Y-%m-%d_%H:%M:%S')# 镜像中的关键字keyword="docker.io"# 先删除异常停止的docker容器docker rm -f $(docker ps -a | grep Exited | awk '{print $1}')# 先删除名称或标签为none的镜像docker rmi -f $(docker images | grep '<none>' | awk '{print $3}')for service in $(docker images | grep "${keyword&...
探究Dubbo服务注册发现的原理
先来看看看看springboot整合dubbo的常规用法 下面是三个服务的调用链路 项目结构 服务提供者(例如pay-service)需要提供接口服务(@Service) 服务消费者(例如user-service)需要指定服务接口(@Reference),接口多实现可能需要配合version属性 这样就完成了基本的上游对下游服务的调用 探究下底层实现知道dubbo是基于netty实现的,所以它实现这种rpc调用的特点较其他(如feign-http)更适用高并发以及短链接的项目,接下来用netty的代码简单复现下基本的dubbo应用 1这里改一下,dubbo不仅仅只有netty的实现,还支持rmi协议,http协议等等 配合dubbo的服务注册发现链路图 简单捋顺下思路,看看我们需要哪几样东西 一个共享容器,用来存储服务地址(ip,port等),当服务存在多个,还需要负载均衡,以及服务信息修改后的通知功能 为了确定唯一的服务接口信息,需要包含接口名(像dubbo一样,多实现可能需要再加一个version),方法名,方法参数类型列表,方法值列表 ...
探究Dubbo服务注册发现的原理(二)
在上一篇我提到了dubbo的rpc是基于netty实现的,而且也按照它的原理简单的写了些代码,大致的梳理了一个整体的链路.而这一篇,我打算在上一篇的基础上,把整体的代码运用到正式项目中,看看该怎样实现1这里改一下,dubbo不仅仅只有netty的实现,还支持rmi协议,http协议等等 整体的项目结构如下 服务层链路就是简单的调用消费端接口,然后消费端再去服务端发送远端请求 然后接口层还是按照dubbo的服务最佳实践提到的,分离维护 先来看下消费者的代码(pom就是一个web和我手写的rpc) 12345678910@RestControllerpublic class ConsumerController { @Autowired ApplicationContext applicationContext; @GetMapping("/{name}") public String test(@PathVariable String name){ PayServic...
ELK常用架构及使用场景
ELK 常用架构及使用场景(摘自创始人) 最简单架构在这种架构中,只有一个 Logstash、Elasticsearch 和 Kibana 实例。Logstash 通过输入插件从多种数据源(比如日志文件、标准输入 Stdin 等)获取数据,再经过滤插件加工数据,然后经 Elasticsearch 输出插件输出到 Elasticsearch,通过 Kibana 展示 Logstash 作为日志搜集器这种架构是对上面架构的扩展,把一个 Logstash 数据搜集节点扩展到多个,分布于多台机器,将解析好的数据发送到 Elasticsearch server 进行存储,最后在 Kibana 查询、生成日志报表等。详见图 2。这种结构因为需要在各个服务器上部署 Logstash,而它比较消耗 CPU 和内存资源,所以比较适合计算资源丰富的服务器,否则容易造成服务器性能下降,甚至可能导致无法正常工作。 Beats 作为日志搜集器这种架构引入 Beats 作为日志搜集器。目前 Beats 包括四种: Packetbeat(搜集网络流量数据); Topbeat(搜集系统、进程和文...
Elastic APM
Elastic Application Performance Management(APM) 是基于 Elastic Stack 构建的应用性能监控系统 背景目前我们日志系统已经投入生产使用, 对于日常开发有了一个方便排查问题的途径但是, 有些难题不是浮于表面的, 下一步需要做的, 便是找出这些埋于底层的性能及效率的问题.这便是Application Performance Management(APM)出现的目的 目标 收集有关请求的响应时间,数据库查询 外部 HTTP 请求等的详细性能信息 对应用程序的请求期间发生的其他缓慢操作的跟踪 自动收集未处理的错误和异常,错误主要基于堆栈跟踪进行分组,因此可以识别出现的新错误,并密切关注特定错误发生的次数。 价值 依靠apm, 过滤出不合格的接口, 根据具体情况加以改进, 最终实现一个可以满足三高的理想状态我们可以对接口的所有信息进行追溯, 现在我们已经有了trace-id, 可以反向拿"不合格的接口"的trace-id去找日志里找原因 APM serverAPM Server 是用 Go 编写的...
Filebeat多实例部署(守护进程方式[systemd])
安装好filebeat1站内搜索: 记录日志系统的安装-部署-配置-使用文档(1) 复制两个子文件夹下来12cp -r /etc/filebeat{,1}cp -r /etc/filebeat{,2} 修改各自的filebeat.yml1234...(省略inputs之类的)logging.files: # 这里修改文件夹路径 path: /var/log/filebeat1/2 这里主要是查看下机器systemd的path 我这里是/usr/lib/systemd/system 添加两份配置文件 vi /usr/lib/systemd/system/filebeat1.service 1234567891011121314151617[Unit]Description=Filebeat sends log files to Logstash or directly to Elasticsearch.Documentation=https://www.elastic.co/b...
Kibana-dashboard结合Filebeat的使用
利用Filebeat-Moudule监听/传输数据到es并通过Kibana的面板显示 要记得将modules功能打开 filebeat安装完默认会在/etc/filebeat/modules.d下放着许多模块的yml,需要哪个,就执行filebeat modules enable xxx filebeat.yml 1234567891011121314151617181920212223filebeat.config: modules: enabled: true path: modules.d/*.yml reload.enabled: true reload.period: 10s# ------------------------------ kibana Output -------------------------------output.elasticsearch: hosts: ["10.0.2.15:9200"] username: "elastic&quo...
MAT的使用
MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。 软件地址使用说明1、环境安装好jdk,配置好环境变量JAVA_HOME 运行内存分析器的最低Java版本是 1.8.0 最新版本MAT已经要求17以上 注: 确保你的hprof文件没放在c盘或是桌面,因为mat软件默认会在解析的同时生成一堆文件再hprof文件的相对路径下 2、使用 Memory Analyzer Tools 获取堆存储1、启动进程仅需单击两次。在菜单中,选择“file --> Acquire Heap Dump...” 或者有直接生成好的dump文件,则直接Open Heap Dump ,打开即可; 2、选择Acquire Heap Dump后。您可以看到正在运行的Java进程;选择你所需...
RESTful风格的接口命名规范
REST 描述了 HTTP 层里客户端和服务器端的数据交互规则;客户端通过向服务器端发送 HTTP(s)请求,接收服务器的响应,完成一次 HTTP 交互。这个交互过程中,REST 架构约定两个重要方面就是HTTP请求的所采用方法,以及请求的链接。 因此,REST 规范可以简单粗暴抽象成以下两个规则: 请求 API 的 URL 表示用来定位资源; 请求的 METHOD 表示对这个资源进行的操作; 以下将以这两个规则为基础,描述如何构造一个符合 REST 规范的请求。 一、API的urlURL 用来定位资源,跟要进行的操作区分开,这就意味着URL不该有任何动词。 1.1 下面示例中的 get、create、search 等动词,都不应该出现在 REST 架构的后端接口路径中。比如:/api/getUser/api/createApp/api/searchResult/api/deleteAllUsers 1.2 当我们需要对单个用户进行操作时,根据操作的方式不同可能需要下面的这些接口:/api/getUser (用来获取某个用户的信息,还需要以参数方式传入用户 id 信息)/...
SuppressWarnings注解value值记录
关键字 用途 all to suppress all warnings (抑制所有警告) boxing to suppress warnings relative to boxing/unboxing operations (抑制装箱、拆箱操作时候的警告) cast to suppress warnings relative to cast operations (抑制映射相关的警告) dep-ann to suppress warnings relative to deprecated annotation (抑制启用注释的警告) deprecation to suppress warnings relative to deprecation (抑制过期方法警告) fallthrough to suppress warnings relative to missing breaks in switch statements (抑制确在switch中缺失breaks的警告) finally to suppress warnings r...
