06 2019 档案
摘要:我们继续来讲分布式,回到我们的创业游戏。 我们的业务规模上来了,客户也越来越忠诚了。很多客户都通过我们的订票服务,来方便自己的行程。 那对这些老客户,我们的宗旨是:要不断超越客户的期待。 所以,我们要建立我们的客户数据库。 我们要记录下每个客户的偏好的航空公司,偏爱的酒店。下次服务,才能直接更好地服
阅读全文
摘要:今天我们继续谈谈JVM架构。 今天主要讲讲JVM运行时, 先来一个图: 上篇文章,我们知道,JVM运行时,简单来说就是把class文件翻译成操作系统相关的机器码(或汇编语言),然后通过调用操作系统函数来完成程序运行的一个组件。 从详细方面来说,它又分为以下几个部分: 1.class文件加载系统(类加
阅读全文
摘要:今天开了一个专题。谈谈我们java程序员每天面对的java虚拟机(jvm)。 本质上来说,jvm分两部分:编译器(compiler)和运行时(runtime)。 所谓的编译器,简单来说,他就是个翻译机,就像人类世界中的英语翻译,打个比方,英语翻译,他主要的工作是把中文翻译成英文。 而编译器,它主要的
阅读全文
摘要:这里有个很形象的比喻: 一个团队一定会有一个老大和普通成员。对于 raft 算法,共识过程就是:只要老大还没挂,老大说什么,我们(团队普通成员)就做什么,坚决执行。那什么时候重新老大呢?只有当老大挂了才重选老大,不然生是老大的人,死是老大的鬼。 对于 pbft 算法,共识过程就是:老大向我发送命令时
阅读全文
摘要:今天,我们来谈谈认知。 也是我的一些感悟。 首先,我们来说,什么是富人?有钱?有车?有房? NO,这些都太表面了。给个结论好了: 富人:财务自由、时间自由、身心灵自由的人 所谓,富人,就是自由的人,想不做什么就不做什么的人。 有同学说,我现在上班,就是想不做什么就不做什么。 幼稚! 老板叫你加班,你
阅读全文
摘要:上篇文章,我们用客服公司的例子来简单介绍什么是分布式系统。 今天,我们继续我们的创业游戏。(本系列,打算类似于打怪升级的游戏模式来讲解一些深奥的内容,喜欢严肃古板的同学,可以选择离开 )。 由于我们的业务越来越好,有些客户也越来越喜欢我们的客户小姐姐,哦,不对,越来喜欢我们的服务。有些客户就问了,你
阅读全文
摘要:今天我们来谈谈分布式系统。 什么叫分布式? 简单来说,就是多台主机联合起来组成一个“超级计算机”为外界提供服务的系统,就叫分布式系统。 打个比方。 我们来这次拿客服小姐姐,来做个比喻吧。 假设我们成立一个客服中心,为客户提供订机票的业务。 开始我们资本少,只招了一个客户小姐姐。 然后,我们联系好航空
阅读全文
摘要:上次讲到事件驱动模式,今天我们来好好分析下netty的事件模式的几个类型。 先从NIO讲起, JAVA NIO方面Selector给Reactor模式提供了基础,Netty结合Selector和Reactor模式设计了高效的线程模型。 这里有个题外话,reactor英文的含义是什么?我们可以稍微了解
阅读全文
摘要:1. JSON Web Token是什么 JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。 2. 什么时候你应该用JSON Web Tokens 下
阅读全文
摘要:聊聊分布式事务,再说说解决方案 前言 最近很久没有写博客了,一方面是因为公司事情最近比较忙,另外一方面是因为在进行 CAP 的下一阶段的开发工作,不过目前已经告一段落了。 接下来还是开始我们今天的话题,说说分布式事务,或者说是我眼中的分布式事务,因为每个人可能对其的理解都不一样。 分布式事务是企业集
阅读全文
摘要:今天开始写一些高并发实战系列。 本系列主要讲两大主流框架: Netty和Quasar(java纤程库) 先介绍netty吧,netty是业界比较成熟的高性能异步NIO框架。 简单来说,它就是对NIO2的封装,但提供了更好用,bug更少的API。 为什么netty能提供高性能?核心要点有以下两点: 1
阅读全文
摘要:原文:https://zhuanlan.zhihu.com/p/26757689 引言 不知道是不是我自己本身就有那么一丝丝的密集恐惧,把这么一大堆看起来很相似很相关的概念放在一起,看起来是有点麻,捋一捋感觉舒服多了。 相关概念 任务、作业(Job,Task,Schedule) 在进程的概念出现之前
阅读全文
摘要:Java线程与Linux内核线程的映射关系 Java线程与Linux内核线程的映射关系Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程。 Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现
阅读全文
摘要:原文:https://www.cnblogs.com/zhaoyl/p/3620204.html 首先从OS设计原理上阐明三种线程:内核线程、轻量级进程、用户线程 内核线程 内核线程就是内核的分身,一个分身可以处理一件特定事情。这在处理异步事件如异步IO时特别有用。内核线程的使用是廉价的,唯一使用的
阅读全文
摘要:上节提到的:伪共享,今天我们来说说。 那什么是伪共享呢? 这得从CPU的缓存结构说起。以下如图,CPU一般来说是有三级缓存,1 级,2级,3级,越上面的,越靠近CPU的,速度越快,成本也越高。也就是说速度方面:1级>2级>3级。 图1 图2 如上图2我们来看看不同级别的缓存的时延: 到CPU的延迟C
阅读全文
摘要:今天,我们来学习另一个重要的概念。 CPU内存指令重排序(Memory Reordering) 什么叫重排序? 重排序的背景 我们知道现代CPU的主频越来越高,与cache的交互次数也越来越多。当CPU的计算速度远远超过访问cache时,会产生cache wait,过多的cache wait就会造成
阅读全文
摘要:继续讲CAS算法,上篇文章我们知道,CAS算法底层实现,是通过CPU的原子指令来实现。 那么这里又有一个情景: 话说,有一个线程one从内存位置V中取出A,这时候另一个线程two也从内存中取出A,并且two进行了一些操作变成了B,然后two又将V位置的数据变成A,这时候线程one进行CAS操作发现内
阅读全文
摘要:上篇文章,我们主要讲了解决多线程之间共享数据的核心问题和解决方案,也讲了锁的简单分类。 那么,这把锁,我们应该怎么去实现呢?如果你是java语言设计者,你又会怎么去设计这个线程锁呢? 直觉告诉我们,我们可以设计一个对象或属性,用来代表锁。比如,你把共享数据区当成抽屉,那这个抽屉就可设计出有锁,有钥匙
阅读全文
摘要:在java高并发编程,有几个很重要的内容: 1.CAS算法 2.CPU重排序 3.缓存行伪共享 我们先来说说高并发世界中的主要关键问题是什么? 是数据共享。 因为多线程之间要共享数据,就会遇到各种问题。如下图: 如果两个线程同时写入,那怎么保证数据的一致性?是线程1先写,还是线程2先写,这是个问题。
阅读全文
摘要:分布式系统理论之租约机制学习 一,租约机制介绍 在分布式系统中,往往会有一个中心服务器节点。该节点负责存储、维护系统中的元数据。如果系统中的各种操作都依赖于中心服务器上的元数据,那么中心服务器很容易成为性能瓶颈及存在单点故障。而通过租约机制,可以将中心服务器的“权力”下放给其他机器,就可以减轻中心服
阅读全文
摘要:总结一下spring cloud 的结构: 1、请求统一通过API网关(Zuul)来访问内部服务. 2、网关接收到请求后,从注册中心(Eureka)获取可用服务 3、由Ribbon进行均衡负载后,分发到后端具体实例 4、微服务之间通过Feign进行通信处理业务 5、Hystrix负责处理服务超时熔断
阅读全文
摘要:之前主导过一家大型国际化银行的国际清算数据平台的架构,这里回忆一下的当时的架构设计与复盘: 这个清算数据平台的主要业务功能: 按业务主要分为:Marge Reform,Razor,Murex,Opics几个部分,用来处理上游Assassin的银行基金清算数据,主要实现mapping,filter,v
阅读全文