隐藏性能杀手之 '伪共享'

随着CPU工艺的发展,目前的高端CPU已经存在几十核心百多个线程,并为CPU设计出了一二三级缓存。CPU的核心有了这些缓存就可以加快数据的处理,从而减少访问内存的频率,这样CPU的计算性能可以进一步得到提高。 CPU的缓存结构以及内存硬盘: 众所周知CPU去访问一次内存所需要的开销是非常之大的,想要获取一次磁盘上的数据更是需要等待较长的时间,虽然目前已经有很多解决方案如 mmap 技术来缓解这样的情况,但总体来说CPU的计算性能是整个计算机结构中的天花板,其他硬件从数据传输速度层面对比起来就显得拖后腿,那么我们来看一下具体CPU访问每个硬件的延迟: 存储器 存储介质 介质成本(美元) 随机访问延迟 L1 cache SRAM 7 1ns L2 cache SRAM 7 4ns Memory DRAM 0.015 100ns Disk SSD(NAND) 0.0004 150us Disk HHD 0.00004 10ms 可以得出外部存储设备容量越大成本越小,存储数据更多,但访问速度更慢,访问速度越快的设备造价更高,
6 min read

分布式事务之 Seata

前言   在企业应用程序开发中,随着分布式框架发展,我们生产环境会有会很多数据库的实例,特别是在微服务领域中,我们会设计每个业务Service模块都会对应一个自身业务模块的DB存储节点。然后再对这个DB存储节点做高可用部署。 事务问题   那么我们在编写Service中的业务逻辑时,肯定会遇到一个业务操作会远程调用到其他不同的业务模块,那么对应的产生数据就会落盘到不同的存储节点中,为了保障多个数据库实例之间的事物ACID特性,就遇到了分布式事务的问题。 分布式事务 1、如果整个业务调用链路均成功,那么整个调用链路对应的数据库做事物提交。 2、如果调用链路中抛出了异常,那么整个调用链路对应的数据库做回滚操作。 Seata 在Seata分布式事务解决方案中,一般有以下这些角色: RM (Resource Manager) 管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。 TC (Transaction Coordinator) - 事务协调者 TM (Transaction Manager) - 事务管理器,AP上
7 min read

Fiddler 安装并抓取HTTPS请求

众所周知 Fiddler 是一个非常实用的抓包工具(主要是对于Http请求)而且有很多的扩展功能可以去官网下载,我们在开发中,难免需要抓包工具来查看接口数据 或者 测试接口的安全性, 如未签名而进行值的修改,下面将介绍它的安装以及配置 证书 来抓取Https加密信息。 Fiddler 官方网址: Fiddler | Web Debugging Proxy and Troubleshooting SolutionsExplore the Fiddler family of web debugging proxy tools and troubleshooting solutions. Easily debug, mock, capture, and modify web and network traffic.Telerik.com [https://www.telerik.com/fiddler]
3 min read

IDEA 常用插件以及开发工具

1、静态代码质量管理工具部署平台 Code Quality and Code Security | SonarQube [https://www.sonarqube.org/] 2、代码质量检查插件 FindBugs 可以直接以插件安装在IDEA IDE中 FindBugs™ - Find Bugs in Java Programs (sourceforge.net) [https://findbugs.sourceforge.net/] 3、翻译插件(英语不好者必备) Translation 可以在代码开发试图中直接翻译 4、代码编码格式约束插件 CheckStyle-IDEA 通过检查对代码编码格式,命名约定,Javadoc,类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范 5、Java Meven 包冲突检测工具 Maven Helper 可以检测整个项目pom.
2 min read

Zookeeper 可视化UI工具

推荐几款常用的 Zookeeper UI 工具,以帮助我们提高工作效率。 1、Zookeeper Assistant (收费) ZooKeeper Assistant - ZooKeeper可视化管理与监控工具适用于Windows的ZooKeeper管理GUIZooKeeper Assistant1402752916qq.com [http://www.redisant.cn/za] 对于收费来说,个人感觉是没必要的,ZK的功能并不复杂,主要就是Znode节点信息的CRUD,不过看得出来他们的UI界面是用心做了的,对于这点就值得点赞。 2、PrettyZoo (开源免费) 这款本人也在使用,免费,UI又比较耐看。 github地址:vran-dev/PrettyZoo: 😉 Pretty nice Zookeeper GUI, Support Win / Mac / Linux Platform (github.com) [https://github.com/vran-dev/
2 min read

Zookeeper 集群搭建

部署环境 操作系统 Debian 11.5.0 运行环境 OpenJDK-1.8.0_332 64-Bit Server VM Zookeeper版本:3.8.0 官方介绍 Zookeeper官方文档地址(下载的zip压缩包中\docs目录也自带文档):ZooKeeper: Because Coordinating Distributed Systems is a Zoo (apache.org) ZooKeeper 是一种用于分布式应用程序的分布式开源协调服务。它公开了一组简单的基元,分布式应用程序可以基于这些基元来实现更高级别的同步、配置维护以及组和命名服务。它被设计为易于编程,并使用根据文件系统熟悉的目录树结构设置样式的数据模型。它以 Java 运行,并具有 Java 和 C 的绑定。 ZooKeeper 的实施非常重视高性能、高可用性、
11 min read

JUC复习篇(二)锁的认识

锁的基本概念: 通过锁机制,能够保证在多线程环境中,在同一时间空间中,只能有一个线程进入临界区代码,从而保证临界区中操作数据的一致性。 公平锁: 防止某个线程出现饿死现象,也就是防止某个线程分配不到CPU时间片导致指令一直无法执行。保证公平需要额外维护线程状态,更多的线程上下文切换,开销更大,吞吐量有所下降。ReentrantLock 可用设置初始化参数设置为公平锁,Synchronized默认是非公平锁并且不能变为公平锁。 非公平锁: 直接进行计算资源抢夺,容易出现线程饿死现象。但吞吐量更高,线程切换不那么频繁,谁先抢到CPU时间片即可执行。 可重入锁: 又称为递归锁,可以再次获取已经获取到的锁对象,可以一定程度的避免死锁现象。ReentrantLock和Synchronized都是可重入锁。 不可重入锁: 线程在运行中获取到锁之后,在同步代码块种再次获取这把锁将会导致死锁,不可重入锁只允许在同步代码块中被获取一次。 互斥锁: 当一个线程占用资源时,其他线程会被挂起,不会占用CPU资源,锁被释放时,CPU去调度挂起的线程,适合不会被高频操作的资源,否则频繁调度线程的效率会较
8 min read

JUC复习篇(一)线程基础

前言 Java JUC章节的知识点繁多,为了更好的整理我掌握的知识点,故此通过书写博客的方式,其中从底层原理开始梳理,从而总结出自己对并发编程的理解。 什么是并发编程 原因还得从目前的计算机发展历史说起,根据摩尔定律,计算机CPU算力随着时间越来越高,但摩尔定律很快达到物理极限,单核心CPU算力遇到瓶颈,而人们为了追求更高的算力,使用了多核心CPU架构设计,多核心与超线程技术使得CPU算力大幅度提高。原理相当于有多个人同时执行不同的指令,整体效率当然比一个人执行得更高。(注意是整体效率更高,不意味着使用多线程就一定比单线程应用执行指令效率更高) 为了更好的运用多核心CPU的计算资源(压榨CPU),于是产生了多线程开发。虽然使用多线程在某些场景下确实提高了程序整体效率,但多线程也并不是银弹,使用多线程开发随之而来的也有诸多问题,例如:线程安全问题、锁机制、死锁、线程上下文切换带来的开销等问题。 那么说了这么多线程的描述,到底什么是线程呢? 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程
12 min read

关于Serverless架构

Serverless(无服务器架构)成为新的热点,无服务器云函数可以让用户无需关心服务器的部署运营,只需开发最核心的业务逻辑,即可实现上线运营,具备分布容灾能力,可以依据负载自动扩缩容,并按照实际调用次数与时长计费。 Serverless的优点是可以快速,低成本,无运维即可达到业务高可用上线。但也面临着与云厂商强行进行绑定,对于未来是否可以业务迁移到其他云厂商,目前看来还是有一定的成本,在函数FC中,我们会集成入 OSS,RDS,NAS等云厂商的服务,想要直接迁移其他云厂商的还是得去修改部分代码。 Serverless的每个函数都是沙箱环境,可以运行不同的语言,让每个语言发挥自己最擅长的领域,目前阿里云的函数计算服务 FC 每月可以 100w 次函数免费调用执行。这对于部分小微企业来说,是非常不错的选择,毕竟前期自己部署机房或低成本的云服务器都有着一定的开支,而Serverless在前期的按调用次数收费可以节约很大部分的上线部署成本。 但目前 Serverless 有一个冷启动得过程,导致在事件通知或HTTP第一次调用时,延迟将会根据容器启动时间而增加。不过也可以购买预备资源解决
3 min read

Java 逻辑引擎的构思

在工作中多年之后,深知设计模式的重要性,设计模式的合理使用可以让我们复杂的业务逻辑实现得更加的灵活,更好的支持多态性,易扩展,易维护等好处。 那么可不可以设计一款专门为后端java开发人员量身定制一款本身就具备了设计模式的UI逻辑引擎。开发人员只需要进行逻辑组件的组合,然后再双击组件书写SQL或JAVA代码,把组件的成员变量进行传递,并最终入库。 原理类似于目前的kettle工具。 如果有这样的逻辑引擎我们java开发势必能够大幅度减少工作量。 其中的灵感来至于我在工作中使用的,工厂模式,代理模式,策略模式,装饰模式与SPI构思思想组合而成的。 通过UI组件生成的配置文件,告诉代理策略类,调用其中对应组件逻辑单元.class文件。在系统启动时加载所有的逻辑策略,确保spring bean都可以正常加载入内存。 后续执行全部通过代理策略类进行逻辑处理。组装每一个单独的bean,从而完成一个复杂的业务逻辑。 这样的的实现也符合单一职责原则与开闭原则。 可能在目前市场上对应的项目就是低代码平台或者零代码平台了吧。
2 min read

随心笔记

技术无止境 创新不停驻