12 和大黄

尚未进行身份认证

暂无相关简介

等级
TA的排名 2k+

Undo Log & Redo Log

一 Undo LogUndo Log是为了实现事务的原子性。Undo Log的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方(这个存储数据备份的地方称为Undo Log)。然后进行数据的修改。如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。除了可以保证事务的原子性,Undo Log也可以用来...

2019-08-23 15:27:26

guava LoadingCache学习

guava LoadingCache学习简介使用Guava Cache可以保证只让一个线程去加载数据(比如从数据库中),而其他线程则等待这个线程的返回结果。这样就能避免大量用户请求穿透缓存。但是也有一个很致命的缺陷:如果缓存过期,恰好有多个线程读取同一个key的值,那么guava只允许一个线程去加载数据,其余线程阻塞。这虽然可以防止大量请求穿透缓存,但是效率低下。使用refreshAfter...

2019-05-31 18:33:25

Cloud Native和微服务

一、Cloud Native介绍Cloud Native是Matt Stine提出的一个概念,它是一个思想的集合,包括DevOps、持续交付(Continuous Delivery)、微服务(MicroServices)、敏捷基础设施(Agile Infrastructure)、康威定律(Conways Law)等,以及根据商业能力对公司进行重组。 可以说,Cloud Native即包含技...

2018-03-09 16:42:27

Actor模型

1、背景处理并发问题就是如何保证共享数据的一致性和正确性,为什么会有保持共享数据正确性这个问题呢?其实无论是使用数据库锁还是多线程,这里有一个共同思路,就是将数据喂给线程,数据是被动的,自身不复杂,没有自身业务逻辑要求。适合大数据处理或互联网网站应用等等。但是如果数据自身要求有严格的一致性,也就是事务机制,数据就不能被动被加工,要让数据自己有行为能力保护实现自己的一致性。要让数据自己有行为维护自己...

2018-03-09 10:45:53

Serverless和FaaS

如同许多新的概念一样,Serverless目前还没有一个普遍公认的权威的定义。最新的一个定义是这样描述的:“无服务器架构是基于互联网的系统,其中应用开发不使用常规的服务进程。相反,它们仅依赖于第三方服务(例如AWS Lambda服务),客户端逻辑和服务托管远程过程调用的组合。”最开始,“无服务器”架构试图帮助开发者摆脱运行后端应用程序所需的服务器设备的设置和管理工作。这项技术的目标并不是为了实现真...

2018-03-06 20:16:06

Spring Cloud Bus

Spring Cloud Bus提供了批量刷新配置的机制,它使用轻量级的消息代理(例如RabbitMQ、Kafka等)连接分布式系统的节点,这样就可以通过Spring Cloud Bus广播配置的变化或者其他的管理指令。使用Spring Cloud Bus后的架构如图9-2所示。根据此图我们可以看出利用Spring Cloud Bus做配置更新的步骤:1、提交代码触发post给客户端A发送bus/...

2018-03-06 20:03:46

背压

背压是指在异步场景中,被观察者发送事件速度远快于观察者的处理速度的情况下,一种告诉上游的被观察者降低发送速度的策略。简而言之,背压是流速控制的一种策略。需要强调两点:背压策略的一个前提是异步环境,也就是说,被观察者和观察者处在不同的线程环境中。背压(Backpressure)并不是一个像flatMap一样可以在程序中直接使用的操作符,他只是一种控制事件流速的策略。响应式拉取(reactive pu...

2018-03-05 17:43:21

微服务框架选型之争

选项其实很多,这里挑选一些讨论火热、或者主流的来对比,仅供参阅。主流微服务框架:SpringCloud、Dubbo新锐微服务框架:Istio1、框架背景对比(1)Spring Cloud,来源于 Spring Source ,具有 Spring 社区的强大背书外,还有 Netflix 强大的后盾与技术输出。Netflix 作为一家成功实践微服务架构的互联网公司,在几年前就把几乎整个微服务框架栈开源...

2018-02-28 18:01:07

Istio

一、微服务的“痛点”但微服务化易弄,服务治理难搞!微服务化没有统一标准,多数是进行业务领域垂直切分,业务按一定的粒度划分职责,并形成清晰、职责单一的服务接口,这样每一块规划为一个微服务。微服务之间的通信方案相对成熟,开源领域选择较多的有RPC或RESTful API方案,比如:gRPC、apache thrift等。这些方案多偏重于数据如何打包、传输与解包,对服务治理的内容涉及甚少。微服务治理是头...

2018-02-28 17:37:47

Linux daemontools的使用

1、安装mac:curl -o daemontools-0.76.tar.gz http://cr.yp.to/daemontools/daemontools-0.76.tar.gzcentos:wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gztar xvzf daemontools-0.76.tar.gz

2018-01-12 12:53:40

阿里云ecs部署Java环境

1、安装JDK8在终端执行下载命令:wget http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz# 直接下载只下载到download-fail-1505220.html的html文件。因为Oracle要求在下

2018-01-12 10:27:03

git 多帐号配置

背景: 学习git的时候, 大家刚开始使用之前都配置了一个全局的用户名和邮箱。git config --global user.name "test"git config --global user.email "test@xx.com"这个配置,git保存在~/.gitconfig中。 有时候我们需要在一个机器上使用多个git帐号,比如在工作中,都会有一个工作的Git帐号,另外有一个自己使用

2018-01-02 13:32:35

Java8 Optional总结

1、构造方式Optional 的三种构造方式: Optional.of(obj),  Optional.ofNullable(obj) 和 Optional.empty()1.1、Optional.of(obj)它要求传入的 obj 不能是 null 值的, 否则 NullPointerException.使用场景:1. 当我们非常非常的明确将要传给 Optional.of

2017-12-14 17:52:07

@Import注解

@Import注解就是之前xml配置中的import标签,可以用于依赖第三方包中bean的配置和加载在4.2之前只支持导入配置类在4.2,@Import注解支持导入普通的java类,并将其声明成一个beanpublic class DemoService { public void doSomething(){ System.out.println("ok"

2017-07-11 19:34:47

item2使用Solarized主题

Solarized 是目前最完整的 Terminal/Editor/IDE 配色项目,几乎覆盖所有主流操作系统(Mac OS X, Linux, Windows)、编辑器和 IDE(Vim, Emacs, Xcode, TextMate, NetBeans, Visual Studio 等),终端(iTerm2, Terminal.app, Putty 等)。类似的项目还有 Tomorrow Th

2017-07-07 23:45:55

log4j2异步Logger

1 异步Logger的意义之前的日志框架基本都实现了AsyncAppender,被证明对性能的提升作用非常明显。在log4j2日志框架中,增加了对Logger的异步实现。那么这一步的解耦,意义何在呢?如图,按我目前的理解:异步Logger是让业务逻辑把日志信息放入Disruptor队列后可以直接返回(无需等待“挂载的各个Appender”都取走数据)优点:更高吞吐、

2017-05-26 19:52:20

Java:int a=0;a=a++;问:a=?

注意一点就可以了:右侧运算符操作,会将操作数据压入栈中

2017-05-08 10:24:16

缓存计数器

电商场景里的缓存计数器:秒杀和超卖  我们在秒杀和防超卖场景里的实现逻辑类似于淘宝这篇博客[注3]所提及的”分布式缓存计数器“,所以我就直接照搬过来了:    分布式缓存的另一个应用场景是缓存计数器。    对于多服务器的系统,分布式缓存提供了统一的存储和原子操作,便于集群环境下的使用。库存计数器是分布式缓存的一个典型应用场景, 对于集群中的每一台机器,库存都应该是一个统一的值,因

2017-03-11 21:46:57

ConcurrentHashMap复合操作问题

ConcurrentHashMap通常只被看做并发效率更高的Map,用来替换其他线程安全的Map容器,比如Hashtable和Collections.synchronizedMap。实际上,线程安全的容器,特别是Map,应用场景没有想象中的多,很多情况下一个业务会涉及容器的多个操作,即复合操作,并发执行时,线程安全的容器只能保证自身的数据不被破坏,但无法保证业务的行为是否正确。举个例子:统

2017-03-11 21:39:48

关于缓存问题的解决方案

一、缓存穿透我们在项目中使用缓存通常都是APP先检查缓存中是否存在,如果存在直接返回缓存内容,如果不存在就直接查询数据库然后再缓存查询结果返回。这个时候如果我们查询的某一个数据在缓存中一直不存在,就会造成每一次请求都查询DB,这样缓存就失去了意义,在流量大时,可能DB就挂掉了。这个问题其实经常遇到,只是没有引起足够的重视,在我想来,如果碰到这样的问题可以在封装的缓存SET和GET部分增加个

2017-03-11 21:21:31

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。