从CPU聊到Java内存模型
当谈到并发编程时,Java 内存模型(Java Memory Model,简称 JMM)是一个关键概念。它定义了线程如何与主内存交互以及如何在自己的工作内存中存储数据。理解和遵守 Java 内存模型对于编写正确且高效的多线程程序至关重要。
注意:Java 内存模型并不是 JVM 内存模型。JVM 内存模型指的是 JVM 内存是如何划分的,比如我们平常所说的堆、栈、方法区等。而 Java 内存模型定义了 Java 语言如何与内存进行交互,具体地说是 Java 语言运行时的变量,如何与我们的硬件内存进行交互。
从 CPU 说起缓存一致性在计算机中 CPU 负责计算,内存负责存储,每次运算 CPU 需要从内存中获取数据。但是 CUP 的运算速度远远大于内存的速度,这样会出现每次计算时 CPU 等待内存的情况。
为了弥补 CPU 和内存之间存在的速度差异,因此引入了 CPU 高速缓存,CPU 高速缓存介于 CPU 和内存之间。每次运算先从内存读取到 CPU 高速缓存中,CPU 再从 CPU 高速缓存中读取。
下面是我现在的使用的电脑,有三级缓存。
随着技术的发展,出现了多核 CPU,进一步提升 ...
SkyWalking,分布式链路追踪
随着业务的发展,软件架构也越来越复杂,为了适应海量用户高并发请求,系统中的组件也逐渐的变为分布式,单体服务变为微服务、缓存变为分布式缓存、组件通信变为分布式消息。
系统进行交互时,一个请求往往需要调用多个服务,当需要排查问题时,搞清楚服务之间的调用关系,服务与服务的调用顺序就变得重要起来。
什么是分布式链路追踪分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
链路追踪最早可以追溯到谷歌的 Dapper 系统,但是 Dapper 链路追踪系统并没有开源,不过谷歌发表了一篇论文:《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,讲述了分布式链路追踪的理论和 Dapper 的设计思想,特别是微服务架构中链路追踪的概念、数据表示、埋点、传递、收集、存储与展示等技术细节。
Dapper 中有几个关键的技术点来表示链路的信息:Trace、Span、Annotations。
TraceTrace 表 ...
什么是DAPP
DAPP(分布式应用),区块链新物种,去中心化 App简单来说,DAPP 和普通的 App 原理一样,除了他们是完全去中心化的,由类似以太坊网络本身自己的节点来运作的 DAPP,不依赖于任何中心化的服务器,DAPP 是去中心化的,可以完全自动地运行。
1、DAPP(分布式应用)是什么DAPP 是 Decentralized Application 的缩写,中文叫分布式应用/去中心化应用,通常来说,不同的 DAPP 会采用不同的底层区块链开发平台和共识机制,或者自行发布代币(也可以使用基于相同区块链平台的通用代币)。
符合以下 3 个条件的应用可以认为是一个 DAPP(分布式应用):
运行在分布式网络上;
参与者信息被安全存储,隐私得到很好的保护;
通过网络节点去中心化操作。
2、DAPP 的四个特征DAPP 不同的底层区块链开发平台就好比手机的 IOS 系统和 Android 系统,是各 DAPP 的底层生态环境,DAPP 就是底层区块链平台生态上衍生的各种分布式应用,也是区块链世界中的基础服务提供方,DAPP 于区块链,就好比 APP 之于 IOS 和 Android。
一个真 ...
分布式事务框架Seata
分布式事务基础
<<分布式事务基础理论>>
<<分布式事务解决方案>>
Seata 一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
Seata 全局框架Seata 的设计思路是将一个分布式事务理解成一个全局事务下面挂了多个分支事务,而一个分支事务是一个满足 ACID 的本地事务,因此我们可以操作分布式事务像操作本地事务一样。
在 Seata 内部定义了三个模块来处理全局事务和分支事务:
Transaction Coordinator(TC) - 事务协调者: 维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。
Transaction Manager (TM)- 事务管理器: 控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。
Resource Manager (RM) - 资源管理器: 控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动 ...
分布式事务基础
事务是数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。事务有四个特性,习惯上被称为 ACID 特性:
Atomicity(原子性)
Consistency(一致性)
Isolation(隔离性)
Durability(持久性)
本地事物在系统发展初期,单体应用对应一个数据库,整个服务操作只涉及一个数据库资源,通过数据库自带的事务很容易实现 ACID,这类基于单个服务单一数据库资源访问的事务,被称为本地事务(Local Transaction)。
分布式事务随着互联网的发展,微服务架构大规模的普及,软件系统由原来的单体应用转变为分布式应用。分布式系统一般由多个独立的子系统组成,多个子系统通过网络通信互相协作配合完成各个功能。
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。比如在一个电商系统中,一条订单的生成涉及库存、订单、支付等不同的服务,不同的服务之间要么全成功、要么全失败,保证事务的 ACID 特性。
本质上来说,分布式事务就是为了保证不同数据库的数据一致性。
在分布式系统中数据一致性又可以划分出 ...
智能合约
接触区块链的,经常会听到智能合约这个词,那什么是智能合约?今天就来了解了解。
比特币引领区块链,以太坊复活智能合约1994 年,计算机科学家和密码学家 Nick Szabo 首次提出“智能合约”概念,它早于区块链概念的诞生,几乎与互联网同龄。
Szabo 描述了什么是“以数字形式指定的一系列承诺,包括各方履行这些承诺的协议”。虽然有它的好处,但智能合约的想法一直未取得进展——一个重要原因是因为缺乏能够支持可编程合约的数字系统和技术。
直到 2008 年,第一个加密货币比特币出现,同时引入了现代区块链技术。区块链最初是以比特币的底层技术出现的,但是智能合约在 2008 年依然无法融入比特币区块链网络。五年后,以太坊创始人 Vitalik Buterin 发布了白皮书《以太坊:下一代智能合约和去中心化应用平台》, 作为首个支持“图灵完备”智能合约的区块链网络,以太坊掀开了以智能合约为代表的区块链 2.0 时代的序章。从此,涌现出了各种不同形式的智能合约,其中以太坊智能合约使用最广。
智能合约是什么
智能合约是一种特殊协议,旨在提供、验证及执行合约。
智能合约的英文是 Smart Co ...
编译器对代码做了哪些工作
知乎上有一种说法是「编译器、图形学、操作系统是程序员的三大浪漫」。
计算机很笨,它只认识 0 和 1,也只会运行最简单的机器指令,而我们平时写的代码大多都属于高级语言。高级语言编写的指令要想在计算机上执行,需要将高级语言转换成计算机识别的机器语言。编译器就是将高级语言转换成机器语言的一款软件。
一个完整的编译器将源码编译成目标机器指令主要包含以下几个步骤。
词法分析词法分析从左到右扫描源程序的字符,识别出每个单词,并组成词素(源代码中的一个字符串,比如一个变量名,一个运算符,都会被识别为一个词素。)。对于每个词素,词法分析会把它解析成一个词法单元。这个词法单元被称为 Token。Token 的形式一般为
1〈token-name, attribute-value〉
token-name: 单词的类别
程序中的单词大体可以分成五类:
attribute-value: 指向符号表中关于这个词法单元的条目。符号表条目的信息会被语义分析和代码生成步骤使用
什么是符号表?
编译器的重要功能之一是记录源程序中使用的变量的名字,并收集和每个名字的各种属性有关的信息。这些属性可以提供 ...
Java8中的Stream流
定义什么是Stream流,Java doc中是这样写的
A sequence of elements supporting sequential and parallel aggregate operations
翻译一下就是一个支持顺序和并行聚合操作的元素序列。可以把它理解成一个迭代器,但是只能遍历一次,就像是流水一样,要处理的元素在流中传输,并且可以在流中设置多个处理节点,元素在经过每个节点后会被节点的逻辑所处理。比如可以进行过滤、排序、转换等操作。
Stream流的使用可以分为三个步骤:
数据源,创建流
中间操作,可以有多个,生成一个新的流
终端操作,只能有一个,放在最后,代表流中止。
Stream流有几个特点:1、Stream流一般不会改变数据源,只会生成一个新的数据流。2、Stream流不会存储数据,只会根据设置的操作节点处理数据。3、Stream流是延迟执行的,只有在调用终端操作后才会进行流转。
看一下Stream的结构
使用数据源生成流
如果是集合的话,可以直接使用stream()创建流。
如果是数组的话,可以使用Arrays.stream()或Stream.of ...
区块链的灵魂-共识机制
区块链是去中心化、分布式的,每个人都可以自由的参与进来,共同处理区块链中的数据。所谓绝对的自由必然带来绝对的混乱,作为一个巨大的分布式计算网络,必然有一个绕不开的问题–拜占庭将军问题
拜占庭将军问题拜占庭将军问题(Byzantine failures),是由计算机科学史上的传奇人物莱斯利·兰伯特(Leslie Lamport)提出的。
拜占庭帝国派出10个将军去攻击敌人,这支敌人可以同时抵御5支拜占庭军队的同时袭击。而这10个拜占庭将军在分开的状态下包围了敌人,并且只能依靠通信兵骑马相互通信来协商进攻意向及进攻时间。但是这些将军们不能确定他们的通信兵中是否有叛徒,叛徒可能擅自改变进攻意向及进攻时间。在这种情况下怎样才能保证同时有多于5支军队攻击,来赢得胜利?
放到区块链中,拜占庭将军问题主要针对点对点通信中的分布式系统一致性问题。可以简单的概括为为 在整个网络中的任意节点都无法信任与之通信的对方时,如何能创造出共识基础来进行安全信息的交互而无需担心数据被篡改。
区块链四大核心技术之一的共识机制就是为了解决这个问题。
什么是共识机制?共识,对特定事务具有相同的认识或态度。 共识在我们的 ...
认识区块链和web3.0
2017-2018年期间,伴随着比特币的又一轮牛市,第一次认识和了解了区块链。2019年,高层大佬们集体学习区块链,也跟着重新关注起了区块链。也是因为区块链,去年第一次接触到了Web3.0,给我的第一印象是这东西太过超前了,如果真的能落地,那真的又是一场技术革命了,从那以后陆陆续续的关注着。今年下半年换了份工作,发现公司做区块链的大牛也在关注Web3.0,也跟着学习长进了不少。这篇文章主要介绍一些区块链和Web3.0的基本知识,可以对区块链和Web3.0有个大概的了解。
区块链
2008年,全球金融危机,全世界掀起了反思传统金融制度的思潮,一个叫中本聪的人在P2P foundation网站上发布了比特币白皮书《比特币:一种点对点的电子现金系统》。
在书里提出了一种无须可信第三方的电子支付系统——比特币,通过整合非对称加密技术、工作量证明机制(Proof of Work,简称PoW)、点对点技术(Peer-to-Peer,简称P2P)等来保障个人对资产的所有权和匿名性,彻底颠覆了对于货币需要依赖中心化机构发行的传统认知。
区块链和比特币由此诞生,那区块链到底是什么呢?。可以把区块链理解 ...