🧱 后端开发与架构
未读log MDC 的使用 MDC 介绍MDC(Mapped Diagnostic Context, 映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能. 某些应用程序采用多线程的方式来处理多个用户的请求.在一个用户的使用过程中, 可能有多个不同的线程来进行处理. 典型的例子是 Web 应用服务器. 当用户访问某个页面时, 应用服务器可能会创建一个新的线程来处理该请求,也可能从线程池中复用已有的线程. 在一个用户的会话存续期间, 可能有多个线程处理过该用户的请求. 这使得比较难以区分不同用户所对应的日志.当需要追踪某个用户在系统中的相关日志记录时, 就会变得很麻烦. 一种解决的办法是采用自定义的日志格式, 把用户的信息采用某种方式编码在日志记录中. 这种方式的问题在于要求在每个使用日志记录器的类中,都可以访问到用户相关的信息. 这样才可能在记录日志时使用. 这样的条件通常是比较难以满足的. MDC 的作用是解决这个问题. MDC 可以看成是一个与当前线程绑定的哈希表, 可以往其中添加键值对. MDC 中包含的内容可以被同一线程中执行的 ...
🧩 开发框架与中间件
未读看到群里有朋友出现了下面的错误, 我也出现了 1com.alibaba.dubbo.rpc.RpcException: Forbid consumer 192.168.1.89 access service com.alibaba.dubbo.monitor.MonitorService from registry zkserver:2181 use dubbo version 2.5.3, Please check registry access list (whitelist/blacklist). 在出现上面的错误时, 都会打印下面一段信息 1INFO [com.alibaba.dubbo.monitor.dubbo.DubboMonitor] - [DUBBO] Send statistics to monitor zookeeper://zkserver:2181/com.alibaba.dubbo.monitor.MonitorService?dubbo=2.5.3&interface=com.alibaba.dubbo.monitor.Monitor ...
🔥 效能提升
未读前提条件群里面有一篇 zheng- 环境搭建及系统部署文档 20170213(三版).docx, 里面详细讲解了各个依赖软件的安装和配置,所以这里不会再讲依赖的搭建过程.假设你已经将所有的依赖环境搭建完毕. 我的环境 名称 版本 系统 MacOS 10.12.6 IDE Intellij IDEA 2017.2.3 JDK 1.8 Maven 3.3.9 Dubbo 2.5.3 Zookeepe 3.4.10 Nginx 1.12.1 ActiveMQ 5.15.0 MySQL 5.7.16 Redis 3.2.3 Dubbo-admin Dubbo-monitor 用到的工具 IDEA LICEcap –> gif 制作 MWeb –> Markdown 编辑器 iTerm –> 替代 Terminal 的工具 环境搭建我记得去年还是前年, 用 Intellij IDEA 的人已经超过了 Eclipse, 如果你还在用 Eclipse, 我想安利你马上转到 IDEA 来, 不是一般的好用, 我已 ...
🧱 后端开发与架构
未读View project onGitHub 概述当代的互联网的服务,通常都是用复杂的、大规模分布式集群来实现的。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具。 Dapper–Google 生产环境下的分布式跟踪系统,应运而生。那么我们就来介绍一个大规模集群的跟踪系统,它是如何满足一个低损耗、应用透明的、大范围部署这三个需求的。当然Dapper 设计之初,参考了一些其他分布式系统的理念,尤其是 Magpie 和 X-Trace,但是我们之所以能成功应用在生产环境上,还需要一些画龙点睛之笔,例如采样率的使用以及把代码植入限制在一小部分公共库的改造上。 自从 Dapper 发展成为一流的监控系统之后,给其他应用的开发者和运维团队帮了大忙,所以我们今天才发表这篇论文,来汇报一下这两年来,Dapper是怎么构建和部署的。Dapper 最初只是作为一个自给自足的监控工具起步的,但最终进化成一个监控平台,这个监控平台促生出 ...
🛠️ 开发工具与插件
未读相对于 Hello World 版的插件, 我们可以学习一个 API 的用法. 在接下来的博文中将创建一个翻译插件, 相对于 Hello World 版的插件,我们可以学习一个 API 的用法. 在写之前, 先补充一下上一篇博文中存在的问题. 使用 Gradle 开发 Intellij IDEA Plugin 的问题当我们使用 Intellij 自带的 Intellij Platform Plugin 创建插件项目后, 我们可以通过 Intellij 以图形化界面创建 Action, Module Component 等,就像这样: OK 之后, 就会自动创建一个 GenerateActionByGui 继承 AnAction 的类, 并且在 plugin.xml 中自动写入插件的配置: 12345<actions> <action id="plugin.demo" class="com.code.demo.GenerateActionByGui" text="demo" descripti ...
🛠️ 开发工具与插件
未读IDEA Plugin 开发记录 hello world 篇. 为什么没有 Intellij 插件开发入门, 因为网上已经有很多入门的教程了, 随便一搜, 大部分都是 Hello World 入门教程, 这里再写就没有意义了,接下来的几篇都将围绕自己开发的几个插件, 将用到的没有用到的都写出来, 一是做一个记录, 二是希望能帮助那些想开发自己的插件的老铁. 前期主要是为插件开发做准备, 搜索了很多 Intellij 插件开发的博文, 如果搜到的不满意, 可以尝试以 “Android Stutio 插件开发” 关键字进行搜索, 毕竟Android Stutio 是根据 Intellij IDEA 进行二次开发的. 这里现将看到的有价值的博文地址分享一些, 谢谢他们的分享. 街头客 - 简书一共 9 篇插件开发的博文, 非常好. 使用 Gradle 开发 Intellij 插件官方使用 Intellij 的 Intellij Platform Plugin 来创建插件项目, 用惯了 Maven, 没用项目管理工具, 感觉一下子回到了解放前, 这里不用 Maven 而用Gradle, ...
🧩 开发框架与中间件
未读基于 Zookeeper 实现的一个配置中心 现在架构存在的问题 配置分散比如修改日志配置需要修改 xxx-api, xxx-webgis, …, xxx-server. 只有 dev, test, pro本地开发时需要修改 dubbo.server.version, 提交时忘记改回来造成服务调用出错. 配置类太多, 且有重复的配置类, 不好管理 非开发环境下应用配置在 war 包中,关键配置明文显示 修改配置后, 需要重新打包部署 关键配置随时可修改, 一不小心就会造成生产事故 **为了统一管理配置 **.现将配置从 pom 中迁入到 xxx-common-config, 使用 maven filter 实现根据不同环境从 ${env}.yyyyy.properties 获取配置替换 application.properties配置 (@占位符替换)使用 <context:property-placeholder/> 配合 @Value("${}") 实现自动注入配置到配置类.新增 local 环境用于本地开发 但是仍 ...
🧩 开发框架与中间件
未读Redis 的几种集成方式 缓存服务组件 依赖于: jedis spring-data-redis spring-session-data-redis redis 集群使用的是 ShardedJedisPool, redis 3.x 后自带集群负载 jar 中重要的类 JedisConnectionFactory用于获取 jedis 实例, 从而操作 redis ShardedJedisPool用于连接 redis 集群 cache 重要的类 RedisDataSource使用 JedisConnectionFactory 从 ShardedJedisPool 连接池中获取 jedis RedisClientTemplate依赖 RedisDataSource 操作 redis 的具体模板方法 RedisCacheServiceImpl对 RedisClientTemplate 再次封装 JedisPool(非切片链接池) 和 ShardedJedisPool(切片链接池) 有什么区别JedisPool 连一台 Redis, ShardedJedisPool ...
🧩 开发框架与中间件
未读RESTEasy RESTEasy 是 JBoss 的一个开源项目,提供各种框架帮助你构建 RESTful Web Services 和 RESTful Java 应用程序。它是 JAX-RS 规范的一个完整实现并通过 JCP 认证。作为一个 JBOSS 的项目,它当然能和 JBOSS 应用服务器很好地集成在一起。但是,它也能在任何运行 JDK5 或以上版本的 Servlet 容器中运行。RESTEasy 还提供一个 RESTEasy JAX-RS 客户端调用框架。能够很方便与 EJB、Seam、Guice、Spring 和 Spring MVC 集成使用。支持在客户端与服务器端自动实现 GZIP 解压缩。 RESTEasy 项目是 JAX-RS 的一个实现,集成的一些亮点: 不需要配置文件,只要把 JARs 文件放到类路径里面,添加 @Path 标注就可以了。 完全的把 RESTEeasy 配置作为 Seam 组件来看待。 HTTP 请求由 Seam 来提供,不需要一个额外的 Servlet。 Resources 和 providers 可以作为 Seam com ...
🧱 后端开发与架构
未读logback 使用,自定义输出格式说到 log4j,基本人人都知道,但是 logback,估计用的人不多,其实这两个都是 sl4j 的实现,而且是一个作者写的。 logback 比 log4j 更加好用,而且效率更高。 如何配置 logback。 12345<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.3</version></dependency> 配置文件:logback.xml 123456789101112131415161718192021222324252627282930313233343536373839<?xml version="1.0" encoding="UTF-8" ?><configuration scan="tr ...
🧩 开发框架与中间件
未读1. 介绍scan命令的作用和keys *的作用类似,主要用于查找 redis 中的键,但是在正式的生产环境中一般不会直接使用keys *这个命令,因为他会返回所有的键,如果键的数量很多会导致查询时间很长,进而导致服务器阻塞,所以需要 scan 来进行更细致的查找 scan总共有这几种命令:scan、sscan、hscan、zscan,分别用于迭代数据库中的:数据库中所有键、集合键、哈希键、有序集合键,命令具体结构如下: 1234scan cursor [MATCH pattern] [COUNT count] [TYPE type]sscan key cursor [MATCH pattern] [COUNT count]hscan key cursor [MATCH pattern] [COUNT count]zscan key cursor [MATCH pattern] [COUNT count] 2. scanscan cursor [MATCH pattern] [COUNT count] [TYPE type],cursor 表示游标,指查询开始的位置,coun ...
🧱 后端开发与架构
未读每天一个 Linux 命令scp 加密的方式在本地主机和远程主机之间复制文件 用于在 Linux 下进行远程拷贝文件的命令, 和它类似的命令有 cp, 不过 cp 只是在本机进行拷贝不能跨服务器, 而且 scp 传输是加密的. 可能会稍微影响一下速度.当你服务器硬盘变为只读 read only system 时, 用 scp 可以帮你把文件移出来. 另外, scp 还非常不占资源, 不会提高多少系统负荷, 在这一点上, rsync就远远不及它了. 虽然 rsync 比 scp 会快一点, 但当小文件众多的情况下, rsync 会导致硬盘 I/O 非常高, 而 scp 基本不影响系统正常使用. 12345678910111213-1: 使用 ssh 协议版本 1;-2: 使用 ssh 协议版本 2;-4: 使用 ipv4;-6: 使用 ipv6;-B: 以批处理模式运行;-C: 使用压缩;-F: 指定 ssh 配置文件;-l: 指定宽带限制;-o: 指定使用的 ssh 选项;-P: 指定远程主机的端口号;-p: 保留文件的最后修改时间, 最后访问时间和权限模式;-q: ...
🧱 后端开发与架构
未读每天一个 Linux 命令less 命令 less 命令 的作用与 more 十分相似, 都可以用来浏览文字档案的内容, 不同的是 less 命令允许用户向前或向后浏览文件, 而 more 命令只能向前浏览. 用less 命令显示文件时, 用 PageUp 键向上翻页, 用 PageDown 键向下翻页. 要退出 less 程序, 应按 Q 键. 12345678-e: 文件内容显示完毕后, 自动退出;-f: 强制显示文件;-g: 不加亮显示搜索到的所有关键词, 仅显示当前显示的关键字, 以提高显示速度;-l: 搜索时忽略大小写的差异;-N: 每一行行首显示行号;-s: 将连续多个空行压缩成一行显示;-S: 在单行显示较长的内容, 而不换行显示;-x< 数字 >: 将 TAB 字符显示为指定个数的空格字符. 抽象工厂模式练习Sunny 软件公司欲推出一款新的手机游戏软件, 该软件能够支持 Symbian、Android 和 Windows Mobile 等多个智能手机操作系统平台, 针对不同的手机操作系统,该游戏软件提供了不同的游戏操作控制 (OperationC ...
🧱 后端开发与架构
未读每天一个 Linux 命令more 命令 more 命令是一个基于 vi 编辑器文本过滤器, 它以全屏幕的方式按页显示文本文件的内容, 支持 vi 中的关键字定位操作. 123456按 空格 键: 显示文本的下一屏内容.按 回车 键: 只显示文本的下一行内容./: 接着输入一个模式, 可以在文本中寻找下一个相匹配的模式.按 h 键: 显示帮助屏, 该屏上有相关的帮助信息.按 b 键: 显示上一屏内容.按 q 键: 退出 rnore 命令 1234567-< 数字 >: 指定每屏显示的行数;-d: 显示“[press space to continue,'q' to quit.]”和“[Press 'h' for instructions]”;-c: 不进行滚屏操作. 每次刷新这个屏幕;-s: 将多个空行压缩成一行显示;-u: 禁止下划线;+< 数字 >: 从指定数字的行开始显示. 1234# 显示文件 file 的内容, 但在显示之前先清屏, 并且在屏幕的最下方显示完核的百分比.more -dc file# 显 ...















