架构设计及概念
架构定义系统拆分
按逻辑拆分:模块
按物理拆分:组件
4R架构定义
Rank:顶层架构
Role:角色组成
Relation:角色关系
Rule:运作规则
架构分类按业务划分
业务架构图
按领域划分
客户端架构图
前端架构图
后端架构图
面向复杂度的架构分析本质架构设计是为了降低软件系统的复杂度。
架构设计三原则合适原则合适优于业界领先。
简单原则简单优于复杂。
演进原则演化优于一步到位。
ProcessOn模板免费下载
前言使用js脚本免费获取自己想要的模板。
获取目标数据访问自己想要使用的模板页,通过F12得到def数据并复制。
模拟数据思维导图复制数据将上述【获取目标数据】的def值复制下来填充到以下模板中。
12let newO = '复制的def值'o = JSON.parse(newO);
新建空白思维导图在自己的工作空间新建一个空白的思维导图
填充数据
在自己绘制的思维导图页面打开F12进入调试模式,刷新页面。使用Ctrl + P命令搜索 mind.js。
格式化数据,通过Ctrl + F搜索关键字 getNewDef,找到赋值行打上DEBUG。
刷新页面,节点会停留在DEBUG的行。此时将【复制数据】中的代码粘贴到console中并执行。
F8继续执行原脚本,此时,可以发现绘图区域已是想要的模板了。
导出模板。
流程图
将上述【获取目标数据】的def值复制下来填充到以下代码模板中。
1Designer.open('复制的def值')
在自己新建的流程图绘图页面打开F12,在console中执行上述脚本。
下载模板。
关于服务监控的思考
目前开源的组件如Skywalking、Zipkin只能做到横向监控,没法针对某一时间段方法纵向监控和告警。基于这种痛点和对一些组件的了解,自己写了一套可满足自己业务需求的服务监控组件,结合了Grafana、Loki、Promtail、Elasticsearch、Kafka等,可实现服务接口级监控、监控告警、告警日志在线查看等特性。
基础组件
Grafana:Grafana 搭建
Loki:轻量级日志采集Loki搭建
Elasticsearch:介绍及使用文档
消息中间件:kafka
服务监控组件(未开源):service-profiler
设计思想
Client收集服务调用信息后生成数据快照(Snapshot),通过Kafka定时上报到Server端。Client通过Promtail采集错误日志上报到Loki服务器。
Server端统计聚合Client端上报的信息后落库ES。Loki服务端接收到Client端上报的日志后存储至磁盘并生成索引。
通过Grafana整合统计信息和错误日志,通过丰富的仪表盘实时展示相关指标与分析结果。
当相关指标超过自定义阈值时,通过通知平台告警到相关研发 ...
异步编程之ExecutorCompletionService
ExecutorCompletionService是JDK1. 6中新增的异步类,可获取异步执行的结果。有着相同功能的ExcutorService中Future.get方法是阻塞的直到返回结果,也就是顺序执行get方法,即使后续任务先执行完成也会阻塞在前面的任务的get方法。而ExecutorCompletionService执行结果无序且线程池中先执行完成的任务会先执行后续的逻辑,不会发生阻塞。
异步任务获取结果方式多线程异步任务获取结果最常见的方式莫过于重写Callable接口,然后通过future.get()获取结果。但这种方法弊端很明显,get方法会产生阻塞,导致任务耗时增加。当前有三种方法可以实现异步任务获取结果:
重写Callable,通过future.get获取结果。
CompletableFuture异步通过join方法获取结果。
通过ExecutorCompletionService获取结果。
Callable123456789101112131415161718192021222324252627282930313233343536373839404142434 ...
异步编程之CompletableFuture
在Java8中新增了CompletableFuture类,该类实现了Future和CompletionStage接口。提供了强大的Future扩展功能,简化了异步编程的复杂性,提供了函数式编程的能力。可通过异步回调方式处理结果,还可以对任务进行组合处理。
概览
创建异步任务CompletableFuture提供了四个静态方法来创建一个异步操作。
123456// 无返回值public static CompletableFuture<Void> runAsync(Runnable runnable)public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor)// 有返回值public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier)public static <U> CompletableFuture<U> s ...
Java混淆工具-ProGuard
Java代码是非常容易反编译,比如使用Java Decompiler很轻松可以反编译出源代码。所以为了很好的保护Java源代码,可以使用ProGuard进行Java编译后的class文件进行优化和混淆。
ProGuard原理ProGuard能够通过移除无用代码,使用简短无意义的名称来重命名类,字段和方法。从而能够达到压缩、优化和混淆代码的目的。最终会获取一个较小的编译文件,并且这个通过ProGuard处理的编译文件更难于进行逆向工程。
压缩(Shrink)在压缩处理中,用于检测和删除没有使用的类,字段,方法和属性。
优化(Optimize)在优化处理中,对字节码进行优化,并且移除无用指令。
混淆(Obfuscate)在混淆处理中,使用a、b、c等无意义的名称,对类,字段和方法进行重命名。
预检(Preveirfy)在预检中,主要是在Java平台上对处理后的代码进行预检。
使用方式ProGuard命令行1java -jar proguard.jar @config.pro -verbose
一般情况下把参数写在 config.pro中
12345678-injars ...
Docker常用命令总结
图示命令
docker服务
COMMAND
DESC
docker info
系统级别docker信息。包含镜像和容器数量等。
docker version
查看docker版本信息
docker -v
查看docker简要信息
systemctl enable docker
设置开机自启
systemctl start docker
启动docker
systemctl stop docker
关闭docker
service docker restart
重启docker服务
service docker stop
停止docker服务
docker镜像docker官方镜像地址:https://hub.docker.com
COMMAND
DESC
docker search <镜像名称>
搜索docker镜像
docker pull <镜像名称>
拉取镜像
docker images
列出所有镜像信息
docker images -qa
列出所有镜像ID
docker rmi &l ...
离线安装docker与docker-compose
在线安装docker官方详细教程:https://docs.docker.com/engine/install/centos/
在线安装docker-compose官方详细教程:https://docs.docker.com/compose/install/#install-compose
安装docker下载安装包官方离线安装包下载地址:https://download.docker.com/linux/static/stable/x86_64/
目前最新版本为:docker-18.06.3-ce.tgz
脚本准备docker.service
作用:安装和卸载docker脚本需要用到此脚本
123456789101112131415161718192021222324252627282930313233[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants ...